This is an automated email from the ASF dual-hosted git repository. isapego pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new 3abf762 IGNITE-13484: Fixed ODBC example for several nodes. Added affinity key. 3abf762 is described below commit 3abf76225475a0d77e55086ec9c82c120b1e9d42 Author: Igor Sapego <isap...@apache.org> AuthorDate: Fri Sep 25 13:28:17 2020 +0300 IGNITE-13484: Fixed ODBC example for several nodes. Added affinity key. This closes #8278 --- .../examples/odbc-example/config/example-odbc.xml | 19 ++++- .../cpp/examples/odbc-example/src/odbc_example.cpp | 98 ++++++++++++++-------- 2 files changed, 78 insertions(+), 39 deletions(-) diff --git a/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml b/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml index 4780f38..d170d6b 100644 --- a/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml +++ b/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml @@ -26,6 +26,16 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> + + <property name="cacheKeyConfiguration"> + <list> + <bean class="org.apache.ignite.cache.CacheKeyConfiguration"> + <property name="typeName" value="PersonKey"/> + <property name="affinityKeyFieldName" value="orgIdAff" /> + </bean> + </list> + </property> + <property name="cacheConfiguration"> <list> <bean class="org.apache.ignite.configuration.CacheConfiguration"> @@ -37,11 +47,13 @@ <property name="queryEntities"> <list> <bean class="org.apache.ignite.cache.QueryEntity"> - <property name="keyType" value="java.lang.Long"/> + <property name="keyType" value="PersonKey"/> <property name="valueType" value="Person"/> <property name="fields"> <map> + <entry key="id" value="java.lang.Long"/> + <entry key="orgIdAff" value="java.lang.Long"/> <entry key="orgId" value="java.lang.Long"/> <entry key="firstName" value="java.lang.String"/> <entry key="lastName" value="java.lang.String"/> @@ -51,7 +63,10 @@ </property> <property name="keyFields"> - <list></list> + <list> + <value>id</value> + <value>orgIdAff</value> + </list> </property> <property name="indexes"> diff --git a/modules/platforms/cpp/examples/odbc-example/src/odbc_example.cpp b/modules/platforms/cpp/examples/odbc-example/src/odbc_example.cpp index 76b5c18..3c70630 100644 --- a/modules/platforms/cpp/examples/odbc-example/src/odbc_example.cpp +++ b/modules/platforms/cpp/examples/odbc-example/src/odbc_example.cpp @@ -185,8 +185,8 @@ void PopulatePerson(SQLHDBC dbc) try { SQLCHAR query[] = - "INSERT INTO Person (_key, orgId, firstName, lastName, resume, salary) " - "VALUES (?, ?, ?, ?, ?, ?)"; + "INSERT INTO Person (id, orgIdAff, orgId, firstName, lastName, resume, salary) " + "VALUES (?, ?, ?, ?, ?, ?, ?)"; ret = SQLPrepare(stmt, query, static_cast<SQLSMALLINT>(sizeof(query))); @@ -195,7 +195,9 @@ void PopulatePerson(SQLHDBC dbc) // Binding columns. - int64_t key = 0; + int64_t keyId = 0; + int64_t keyOrgIdAff = 0; + int64_t orgId = 0; char firstName[1024] = { 0 }; SQLLEN firstNameLen = SQL_NTS; @@ -205,43 +207,49 @@ void PopulatePerson(SQLHDBC dbc) SQLLEN resumeLen = SQL_NTS; double salary = 0.0; - ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &key, 0, 0); + ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &keyId, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); - ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &orgId, 0, 0); + ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &keyOrgIdAff, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); - ret = SQLBindParameter(stmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, - sizeof(firstName), sizeof(firstName), firstName, 0, &firstNameLen); + ret = SQLBindParameter(stmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &orgId, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); ret = SQLBindParameter(stmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, - sizeof(lastName), sizeof(lastName), lastName, 0, &lastNameLen); + sizeof(firstName), sizeof(firstName), firstName, 0, &firstNameLen); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); ret = SQLBindParameter(stmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, + sizeof(lastName), sizeof(lastName), lastName, 0, &lastNameLen); + + if (!SQL_SUCCEEDED(ret)) + ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); + + ret = SQLBindParameter(stmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, sizeof(resume), sizeof(resume), resume, 0, &resumeLen); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); - ret = SQLBindParameter(stmt, 6, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &salary, 0, 0); + ret = SQLBindParameter(stmt, 7, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &salary, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); // Filling cache. + keyId = 1; + keyOrgIdAff = 1; - key = 1; - orgId = 1; + orgId = keyOrgIdAff; strncpy(firstName, "John", sizeof(firstName)); strncpy(lastName, "Doe", sizeof(lastName)); strncpy(resume, "Master Degree.", sizeof(resume)); @@ -257,8 +265,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 1; + ++keyId; + keyOrgIdAff = 1; + + orgId = keyOrgIdAff; strncpy(firstName, "Jane", sizeof(firstName)); strncpy(lastName, "Doe", sizeof(lastName)); strncpy(resume, "Bachelor Degree.", sizeof(resume)); @@ -275,8 +285,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 2; + ++keyId; + keyOrgIdAff = 2; + + orgId = keyOrgIdAff; strncpy(firstName, "John", sizeof(firstName)); strncpy(lastName, "Smith", sizeof(lastName)); strncpy(resume, "Bachelor Degree.", sizeof(resume)); @@ -292,8 +304,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 2; + ++keyId; + keyOrgIdAff = 2; + + orgId = keyOrgIdAff; strncpy(firstName, "Jane", sizeof(firstName)); strncpy(lastName, "Smith", sizeof(lastName)); strncpy(resume, "Master Degree.", sizeof(resume)); @@ -309,8 +323,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 2; + ++keyId; + keyOrgIdAff = 2; + + orgId = keyOrgIdAff; strncpy(firstName, "John", sizeof(firstName)); strncpy(lastName, "Roe", sizeof(lastName)); strncpy(resume, "Bachelor Degree.", sizeof(resume)); @@ -326,8 +342,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 2; + ++keyId; + keyOrgIdAff = 2; + + orgId = keyOrgIdAff; strncpy(firstName, "Jane", sizeof(firstName)); strncpy(lastName, "Roe", sizeof(lastName)); strncpy(resume, "Bachelor Degree.", sizeof(resume)); @@ -343,8 +361,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 1; + ++keyId; + keyOrgIdAff = 1; + + orgId = keyOrgIdAff; strncpy(firstName, "Richard", sizeof(firstName)); strncpy(lastName, "Miles", sizeof(lastName)); strncpy(resume, "Master Degree.", sizeof(resume)); @@ -360,8 +380,10 @@ void PopulatePerson(SQLHDBC dbc) if (ret != SQL_NO_DATA) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "No more data expected"); - ++key; - orgId = 2; + ++keyId; + keyOrgIdAff = 2; + + orgId = keyOrgIdAff; strncpy(firstName, "Mary", sizeof(firstName)); strncpy(lastName, "Major", sizeof(lastName)); strncpy(resume, "Bachelor Degree.", sizeof(resume)); @@ -435,10 +457,10 @@ void PopulateOrganization(SQLHDBC dbc) * Adjust salary for specified employee. * * @param dbc Database connection. - * @param key Person key. + * @param id Person id. * @param salary New salary. */ -void AdjustSalary(SQLHDBC dbc, int64_t key, double salary) +void AdjustSalary(SQLHDBC dbc, int64_t id, double salary) { SQLHSTMT stmt; @@ -450,14 +472,14 @@ void AdjustSalary(SQLHDBC dbc, int64_t key, double salary) try { - SQLCHAR query[] = "UPDATE Person SET salary=? WHERE _key=?"; + SQLCHAR query[] = "UPDATE Person SET salary=? WHERE id=?"; ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &salary, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); - ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &key, 0, 0); + ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &id, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); @@ -484,9 +506,9 @@ void AdjustSalary(SQLHDBC dbc, int64_t key, double salary) * Remove specified person. * * @param dbc Database connection. - * @param key Person key. + * @param id Person id. */ -void DeletePerson(SQLHDBC dbc, int64_t key) +void DeletePerson(SQLHDBC dbc, int64_t id) { SQLHSTMT stmt; @@ -498,9 +520,9 @@ void DeletePerson(SQLHDBC dbc, int64_t key) try { - SQLCHAR query[] = "DELETE FROM Person WHERE _key=?"; + SQLCHAR query[] = "DELETE FROM Person WHERE id=?"; - ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &key, 0, 0); + ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_BIGINT, 0, 0, &id, 0, 0); if (!SQL_SUCCEEDED(ret)) ThrowOdbcError(SQL_HANDLE_STMT, stmt, "Failed to bind parameter"); @@ -533,18 +555,20 @@ void QueryData(SQLHDBC dbc) std::cout << std::endl; std::cout << ">>> Getting list of persons:" << std::endl; - GetDataWithOdbc(dbc, "SELECT firstName, lastName, resume, salary FROM Person"); + GetDataWithOdbc(dbc, "SELECT firstName, lastName, resume, salary FROM Person ORDER BY id"); std::cout << std::endl; std::cout << ">>> Getting average salary by degree:" << std::endl; - GetDataWithOdbc(dbc, "SELECT resume, AVG(salary) FROM Person GROUP BY resume"); + GetDataWithOdbc(dbc, "SELECT resume, AVG(salary) FROM Person GROUP BY resume ORDER BY resume"); std::cout << std::endl; std::cout << ">>> Getting people with organizations:" << std::endl; - GetDataWithOdbc(dbc, "SELECT firstName, lastName, Organization.name FROM Person " - "INNER JOIN \"Organization\".Organization ON Person.orgId = Organization._KEY"); + GetDataWithOdbc(dbc, + "SELECT firstName, lastName, Organization.name FROM Person " + "INNER JOIN \"Organization\".Organization ON Person.orgId = Organization._KEY " + "ORDER BY Person.id"); } /**