Repository: incubator-trafodion Updated Branches: refs/heads/master 8b1df54ba -> 2f9af4d66
[TRAFODION-206][TRAFODION-2018] Merge support for new catalog APIs, PROCEDURES and PROCEDURECOLUMNS Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/2f9af4d6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/2f9af4d6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/2f9af4d6 Branch: refs/heads/master Commit: 2f9af4d665f76a230da6f96e835b0ea7c7583f2f Parents: 8b1df54 Author: Dave Birdsall <dbirds...@apache.org> Authored: Mon Jul 11 19:13:51 2016 +0000 Committer: Dave Birdsall <dbirds...@apache.org> Committed: Mon Jul 11 19:13:51 2016 +0000 ---------------------------------------------------------------------- core/conn/jdbcT4/pom.xml | 6 + .../trafodion/jdbc/t4/T4DatabaseMetaData.java | 6 +- .../odbc/src/odbc/nsksrvrcore/srvrothers.cpp | 110 ++++++++++++++++++- core/conn/trafci/.gitignore | 1 + 4 files changed, 119 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2f9af4d6/core/conn/jdbcT4/pom.xml ---------------------------------------------------------------------- diff --git a/core/conn/jdbcT4/pom.xml b/core/conn/jdbcT4/pom.xml index bada198..a1b5f89 100644 --- a/core/conn/jdbcT4/pom.xml +++ b/core/conn/jdbcT4/pom.xml @@ -40,6 +40,12 @@ <version>4.11</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>1.7.21</version> + <scope>test</scope> + </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2f9af4d6/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/T4DatabaseMetaData.java ---------------------------------------------------------------------- diff --git a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/T4DatabaseMetaData.java b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/T4DatabaseMetaData.java index 4a12447..5457eb1 100644 --- a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/T4DatabaseMetaData.java +++ b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/T4DatabaseMetaData.java @@ -3094,7 +3094,7 @@ public class T4DatabaseMetaData extends TrafT4Handle implements java.sql.Databas } getSQLCatalogsInfo(connection_.getServerHandle(), // Server Handle - SQL_API_SQLPROCEDURES, // catalogAPI + SQL_API_SQLPROCEDURES_JDBC, // catalogAPI catalogNm, // catalog schemaNm, // schema procedureNamePattern, // table name @@ -3237,7 +3237,7 @@ public class T4DatabaseMetaData extends TrafT4Handle implements java.sql.Databas } getSQLCatalogsInfo(connection_.getServerHandle(), // Server Handle - SQL_API_SQLPROCEDURECOLUMNS, // catalogAPI + SQL_API_SQLPROCEDURECOLUMNS_JDBC, // catalogAPI catalogNm, // catalog schemaNm, // schema procedureNamePattern, // table name @@ -5826,6 +5826,8 @@ public class T4DatabaseMetaData extends TrafT4Handle implements java.sql.Databas private static final short SQL_API_SQLCOLUMNS_JDBC = (short) (SQL_API_SQLCOLUMNS + SQL_API_JDBC); private static final short SQL_API_SQLSPECIALCOLUMNS_JDBC = (short) (SQL_API_SQLSPECIALCOLUMNS + SQL_API_JDBC); private static final short SQL_API_SQLGETTYPEINFO_JDBC = (short) (SQL_API_SQLGETTYPEINFO + SQL_API_JDBC); + private static final short SQL_API_SQLPROCEDURES_JDBC = (short) (SQL_API_SQLPROCEDURES + SQL_API_JDBC); + private static final short SQL_API_SQLPROCEDURECOLUMNS_JDBC = (short) (SQL_API_SQLPROCEDURECOLUMNS + SQL_API_JDBC); // values of NULLABLE field in descriptor private static final long SQL_NO_NULLS = 0; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2f9af4d6/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp ---------------------------------------------------------------------- diff --git a/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp b/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp index 3458251..9f399b2 100644 --- a/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp +++ b/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp @@ -145,6 +145,8 @@ SMD_QUERY_TABLE tranQueryTable[] = { #define SQL_API_SQLGETTYPEINFO_JDBC SQL_API_SQLGETTYPEINFO + SQL_API_JDBC #define SQL_API_SQLCOLUMNS_JDBC SQL_API_SQLCOLUMNS + SQL_API_JDBC #define SQL_API_SQLSPECIALCOLUMNS_JDBC SQL_API_SQLSPECIALCOLUMNS + SQL_API_JDBC +#define SQL_API_SQLPROCEDURES_JDBC SQL_API_SQLPROCEDURES + SQL_API_JDBC +#define SQL_API_SQLPROCEDURECOLUMNS_JDBC SQL_API_SQLPROCEDURECOLUMNS + SQL_API_JDBC // The value represents SQL version, MXCS module major version and MXCS module minor version. #define MODULE_RELEASE_VERSION 200 #define MODULE_MAJOR_VERSION 400 @@ -4601,6 +4603,7 @@ odbc_SQLSvc_GetSQLCatalogs_sme_( } case SQL_API_SQLPROCEDURES : + case SQL_API_SQLPROCEDURES_JDBC: // strcpy((char *)catStmtLabel, "SQL_PROCEDURES_ANSI_Q4"); if (!checkIfWildCard(catalogNm, expCatalogNm) && !metadataId) @@ -4625,7 +4628,9 @@ odbc_SQLSvc_GetSQLCatalogs_sme_( inputParam[3] = expTableNm; inputParam[4] = NULL; - snprintf(CatalogQuery,sizeof(CatalogQuery), + if( APIType == SQL_API_SQLPROCEDURES ) + { + snprintf(CatalogQuery,sizeof(CatalogQuery), "select " "cast('%s' as varchar(128) ) PROCEDURE_CAT, " "cast(trim(SCHEMA_NAME) as varchar(128) ) PROCEDURE_SCHEM, " @@ -4642,11 +4647,112 @@ odbc_SQLSvc_GetSQLCatalogs_sme_( "where (SCHEMA_NAME = '%s' " "or trim(SCHEMA_NAME) LIKE '%s' ESCAPE '\\') " "and (OBJECT_NAME = '%s' " - "or trim(OBJECT_NAME) LIKE '%s' ESCAPE '\') " + "or trim(OBJECT_NAME) LIKE '%s' ESCAPE '\\') " "and OBJECT_TYPE = 'UR' " "FOR READ UNCOMMITTED ACCESS ORDER BY 4, 1, 2, 3 ;", tableParam[0], inputParam[0], inputParam[1], inputParam[2], inputParam[3]); + } + else + { + snprintf(CatalogQuery,sizeof(CatalogQuery), +"select " +"obj.CATALOG_NAME PROCEDURE_CAT, obj.SCHEMA_NAME PROCEDURE_SCHEMA," +"obj.OBJECT_NAME PROCEDURE_NAME, cast(NULL as varchar(10)) R1,cast(NULL as varchar(10)) R2," +"cast(NULL as varchar(10)) R3, cast(NULL as varchar(10)) REMARKS," +"cast(case when routines.UDR_TYPE = 'P' then 1" +" when routines.UDR_TYPE = 'F' or routines.UDR_TYPE = 'T'" +" then 2 else 0 end as smallint) PROCEDURE_TYPE," +"obj.OBJECT_NAME SPECIFIC_NAME " +"from " +"TRAFODION.\"_MD_\".OBJECTS obj " +"left join TRAFODION.\"_MD_\".ROUTINES routines on obj.OBJECT_UID = routines.UDR_UID " +"where (obj.SCHEMA_NAME = '%s' " +"or trim(obj.SCHEMA_NAME) LIKE '%s' ESCAPE '\\') " +"and (obj.OBJECT_NAME = '%s' " +"or trim(obj.OBJECT_NAME) LIKE '%s' ESCAPE '\\') " +"and obj.OBJECT_TYPE = 'UR' " +"FOR READ UNCOMMITTED ACCESS ORDER BY 4, 1, 2, 3 ;", + inputParam[0], inputParam[1], + inputParam[2], inputParam[3]); + } + break; + case SQL_API_SQLPROCEDURECOLUMNS: + case SQL_API_SQLPROCEDURECOLUMNS_JDBC: + if (!checkIfWildCard(catalogNm, expCatalogNm) && !metadataId) + { + exception_->exception_nr = odbc_SQLSvc_GetSQLCatalogs_ParamError_exn_; + exception_->u.ParamError.ParamDesc = SQLSVC_EXCEPTION_WILDCARD_NOT_SUPPORTED; + goto MapException; + } + if (strcmp(catalogNm,"") == 0) + strcpy(tableName1,SEABASE_MD_CATALOG); + else + strcpy(tableName1,catalogNm); + tableParam[0] = tableName1; + tableParam[1] = NULL; + convertWildcardNoEsc(metadataId, TRUE, schemaNm, schemaNmNoEsc); + convertWildcard(metadataId, TRUE, schemaNm, expSchemaNm); + convertWildcardNoEsc(metadataId, TRUE, tableNm, tableNmNoEsc); + convertWildcard(metadataId, TRUE, tableNm, expTableNm); + convertWildcardNoEsc(metadataId, TRUE, columnNm, columnNmNoEsc); + convertWildcard(metadataId, TRUE, columnNm, expColumnNm); + inputParam[0] = schemaNmNoEsc; + inputParam[1] = expSchemaNm; + inputParam[2] = tableNmNoEsc; + inputParam[3] = expTableNm; + inputParam[4] = columnNmNoEsc; + inputParam[5] = expColumnNm; + inputParam[6] = NULL; + if( APIType == SQL_API_SQLPROCEDURECOLUMNS ) + { + snprintf(CatalogQuery,sizeof(CatalogQuery), +"select obj.CATALOG_NAME PROCEDURE_CAT, obj.SCHEMA_NAME PROCEDURE_SCHEM," +"obj.OBJECT_NAME PROCEDURE_NAME, cols.COLUMN_NAME COLUMN_NAME," +"cast((case when cols.DIRECTION='I' then 1 when cols.DIRECTION='N' " +"then 2 when cols.DIRECTION='O' then 3 else 0 end) as smallint) COLUMN_TYPE," +"cols.FS_DATA_TYPE DATA_TYPE, cols.SQL_DATA_TYPE TYPE_NAME," +"cols.COLUMN_PRECISION \"PRECISION\", cols.COLUMN_SIZE LENGTH, cols.COLUMN_SCALE SCALE," +"cast(1 as smallint) RADIX, cols.NULLABLE NULLABLE, cast(NULL as varchar(10)) REMARKS," +"cols.DEFAULT_VALUE COLUMN_DEF, cols.FS_DATA_TYPE SQL_DATA_TYPE, cast(0 as smallint) SQL_DATETIME_SUB," +"cols.COLUMN_SIZE CHAR_OCTET_LENGTH, cols.COLUMN_NUMBER ORDINAL_POSITION," +"cols.NULLABLE IS_NULLABLE" +" from TRAFODION.\"_MD_\".OBJECTS obj" +" left join TRAFODION.\"_MD_\".COLUMNS cols on obj.OBJECT_UID=cols.OBJECT_UID" +" where" +" (obj.SCHEMA_NAME = '%s' or trim(obj.SCHEMA_NAME) LIKE '%s' ESCAPE '\\') " +" and (obj.OBJECT_NAME = '%s' or trim(obj.OBJECT_NAME) LIKE '%s' ESCAPE '\\')" +" and (cols.COLUMN_NAME = '%s' or trim(cols.COLUMN_NAME) LIKE '%s' ESCAPE '\\')" +" order by PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME, ORDINAL_POSITION" +" FOR READ UNCOMMITTED ACCESS", + inputParam[0], inputParam[1], + inputParam[2], inputParam[3], + inputParam[4], inputParam[5]); + } + else + { + snprintf(CatalogQuery,sizeof(CatalogQuery), +"select obj.CATALOG_NAME PROCEDURE_CAT, obj.SCHEMA_NAME PROCEDURE_SCHEM," +"obj.OBJECT_NAME PROCEDURE_NAME, cols.COLUMN_NAME COLUMN_NAME," +"cast((case when cols.DIRECTION='I' then 1 when cols.DIRECTION='N' then 2 when cols.DIRECTION='O' then 3 else 0 end) as smallint) COLUMN_TYPE," +"cols.FS_DATA_TYPE DATA_TYPE, cols.SQL_DATA_TYPE TYPE_NAME," +"cols.COLUMN_PRECISION \"PRECISION\", cols.COLUMN_SIZE LENGTH, cols.COLUMN_SCALE SCALE," +"cast(1 as smallint) RADIX, cols.NULLABLE NULLABLE, cast(NULL as varchar(10)) REMARKS," +"cols.DEFAULT_VALUE COLUMN_DEF, cols.FS_DATA_TYPE SQL_DATA_TYPE, cast(0 as smallint) SQL_DATETIME_SUB," +"cols.COLUMN_SIZE CHAR_OCTET_LENGTH, cols.COLUMN_NUMBER ORDINAL_POSITION," +"cols.NULLABLE IS_NULLABLE, cols.COLUMN_NAME SPECIFIC_NAME" +" from TRAFODION.\"_MD_\".OBJECTS obj" +" left join TRAFODION.\"_MD_\".COLUMNS cols on obj.OBJECT_UID=cols.OBJECT_UID" +" where" +" (obj.SCHEMA_NAME = '%s' or trim(obj.SCHEMA_NAME) LIKE '%s' ESCAPE '\\') " +" and (obj.OBJECT_NAME = '%s' or trim(obj.OBJECT_NAME) LIKE '%s' ESCAPE '\\')" +" and (cols.COLUMN_NAME = '%s' or trim(cols.COLUMN_NAME) LIKE '%s' ESCAPE '\\')" +" order by PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME, ORDINAL_POSITION" +" FOR READ UNCOMMITTED ACCESS", + inputParam[0], inputParam[1], + inputParam[2], inputParam[3], + inputParam[4], inputParam[5]); + } break; case SQL_API_SQLCOLUMNS : case SQL_API_SQLCOLUMNS_JDBC : http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2f9af4d6/core/conn/trafci/.gitignore ---------------------------------------------------------------------- diff --git a/core/conn/trafci/.gitignore b/core/conn/trafci/.gitignore index cdd0d09..df8f375 100644 --- a/core/conn/trafci/.gitignore +++ b/core/conn/trafci/.gitignore @@ -2,3 +2,4 @@ buildId temp/ utils/trafci.cmd utils/trafci.sh +/target/