IGNITE-2371: Schema and table name parsing fixed.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d9314b36 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d9314b36 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d9314b36 Branch: refs/heads/ignite-1786 Commit: d9314b3696400b48e5d5ae8fcd74586b11ddcaac Parents: 0b8487f Author: isapego <[email protected]> Authored: Wed Jan 13 12:35:38 2016 +0300 Committer: isapego <[email protected]> Committed: Wed Jan 13 12:35:38 2016 +0300 ---------------------------------------------------------------------- .../processors/odbc/GridOdbcColumnMeta.java | 2 +- .../processors/odbc/GridOdbcCommandHandler.java | 38 ++++++++++++++++++-- .../src/query/column_metadata_query.cpp | 1 + .../odbc/odbc-driver/src/query/data_query.cpp | 1 + 4 files changed, 38 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/d9314b36/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcColumnMeta.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcColumnMeta.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcColumnMeta.java index 18df24b..0668366 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcColumnMeta.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcColumnMeta.java @@ -61,7 +61,7 @@ public class GridOdbcColumnMeta { try { this.dataType = Class.forName(info.fieldTypeName()); } - catch (Exception ignoreed) { + catch (Exception ignored) { this.dataType = Object.class; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d9314b36/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcCommandHandler.java index 644b0aa..4287319 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/GridOdbcCommandHandler.java @@ -143,6 +143,18 @@ public class GridOdbcCommandHandler { } /** + * Remove quotation marks at the beginning and end of the string if present. + * @param str Input string. + * @return String without leading and trailing quotation marks. + */ + private String RemoveQuotationMarksIfNeeded(String str) { + if (str.startsWith("\"") && str.endsWith("\"")) + return str.substring(1, str.length() - 1); + + return str; + } + + /** * @param req Execute query request. * @param qryCurs Queries cursors. * @return Response. @@ -245,10 +257,28 @@ public class GridOdbcCommandHandler { try { List<GridOdbcColumnMeta> meta = new ArrayList<>(); - Collection<GridQueryTypeDescriptor> tablesMeta = ctx.query().types(req.cacheName()); + String cacheName; + String tableName; + + if (req.tableName().contains(".")) + { + // Parsing two-part table name. + String[] parts = req.tableName().split("\\."); + + cacheName = RemoveQuotationMarksIfNeeded(parts[0]); + + tableName = parts[1]; + } + else { + cacheName = RemoveQuotationMarksIfNeeded(req.cacheName()); + + tableName = req.tableName(); + } + + Collection<GridQueryTypeDescriptor> tablesMeta = ctx.query().types(cacheName); for (GridQueryTypeDescriptor table : tablesMeta) { - if (!matches(table.name(), req.tableName())) + if (!matches(table.name(), tableName)) continue; for (Map.Entry<String, Class<?>> field : table.fields().entrySet()) { @@ -279,7 +309,9 @@ public class GridOdbcCommandHandler { try { List<GridOdbcTableMeta> meta = new ArrayList<>(); - Collection<GridQueryTypeDescriptor> tablesMeta = ctx.query().types(req.schema()); + String realSchema = RemoveQuotationMarksIfNeeded(req.schema()); + + Collection<GridQueryTypeDescriptor> tablesMeta = ctx.query().types(realSchema); for (GridQueryTypeDescriptor table : tablesMeta) { if (!matches(table.name(), req.table())) http://git-wip-us.apache.org/repos/asf/ignite/blob/d9314b36/modules/platforms/cpp/odbc/odbc-driver/src/query/column_metadata_query.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/query/column_metadata_query.cpp b/modules/platforms/cpp/odbc/odbc-driver/src/query/column_metadata_query.cpp index 458679a..a624fb5 100644 --- a/modules/platforms/cpp/odbc/odbc-driver/src/query/column_metadata_query.cpp +++ b/modules/platforms/cpp/odbc/odbc-driver/src/query/column_metadata_query.cpp @@ -290,6 +290,7 @@ namespace ignite LOG_MSG("[%d] TableName: %s\n", i, meta[i].GetTableName().c_str()); LOG_MSG("[%d] ColumnName: %s\n", i, meta[i].GetColumnName().c_str()); LOG_MSG("[%d] ColumnTypeName: %s\n", i, meta[i].GetColumnTypeName().c_str()); + LOG_MSG("[%d] ColumnType: %d\n", i, meta[i].GetDataType()); LOG_MSG("\n"); } http://git-wip-us.apache.org/repos/asf/ignite/blob/d9314b36/modules/platforms/cpp/odbc/odbc-driver/src/query/data_query.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/query/data_query.cpp b/modules/platforms/cpp/odbc/odbc-driver/src/query/data_query.cpp index ac3ed49..187ed65 100644 --- a/modules/platforms/cpp/odbc/odbc-driver/src/query/data_query.cpp +++ b/modules/platforms/cpp/odbc/odbc-driver/src/query/data_query.cpp @@ -180,6 +180,7 @@ namespace ignite LOG_MSG("[%d] TypeName: %s\n", i, rsp.GetMeta()[i].GetTableName().c_str()); LOG_MSG("[%d] ColumnName: %s\n", i, rsp.GetMeta()[i].GetColumnName().c_str()); LOG_MSG("[%d] ColumnTypeName: %s\n", i, rsp.GetMeta()[i].GetColumnTypeName().c_str()); + LOG_MSG("[%d] ColumnType: %d\n", i, rsp.GetMeta()[i].GetDataType()); LOG_MSG("\n"); }
