Skip to content
This repository was archived by the owner on Jun 7, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 22 additions & 57 deletions core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5137,69 +5137,34 @@ odbc_SQLSvc_GetSQLCatalogs_sme_(

snprintf(CatalogQuery, sizeof(CatalogQuery),
"select "
"cast('%s' as varchar(128)) TABLE_CAT, "
"cast(trim(ob.SCHEMA_NAME) as varchar(128)) TABLE_SCHEM, "
"cast(trim(ob.OBJECT_NAME) as varchar(128)) TABLE_NAME, "
"cast(NULL as smallint) NON_UNIQUE, " // return NULL if TYPE is SQL_TABLE_STAT
"cast(NULL as varchar(128)) INDEX_QUALIFIER, " // return NULL if TYPE is SQL_TABLE_STAT
"cast(NULL as varchar(128)) INDEX_NAME, " // return NULL if TYPE is SQL_TABLE_STAT
"cast(0 as smallint) TYPE, " // TYPE is SQL_TABLE_STAT
"cast(NULL as smallint) ORDINAL_POSITION, " // return NULL if TYPE is SQL_TABLE_STAT
"cast(trim(co.COLUMN_NAME) as varchar(128)) COLUMN_NAME, "
"cast(NULL as char(1)) ASC_OR_DESC, " // return NULL if TYPE is SQL_TABLE_STAT
"cast(sb.rowcount as integer) CARDINALITY, " // number of rows
"cast(NULL as integer) PAGES, " // not support
"cast(NULL as varchar(128)) FILTER_CONDITION " // not support
"from "
"TRAFODION.\"_MD_\".OBJECTS ob, "
"TRAFODION.\"_MD_\".COLUMNS co, "
"TRAFODION.%s.sb_histograms sb "
"where "
"ob.OBJECT_UID = co.OBJECT_UID "
"and co.OBJECT_UID = sb.TABLE_UID "
"and co.COLUMN_NUMBER = sb.COLUMN_NUMBER "
"and sb.colcount = 1 "
"and (ob.SCHEMA_NAME = '%s' or trim(ob.SCHEMA_NAME) LIKE '%s' ESCAPE '\\') "
"and (ob.OBJECT_NAME = '%s' or trim(ob.OBJECT_NAME) LIKE '%s' ESCAPE '\\') "
"and (ob.OBJECT_TYPE in ('BT', 'VI')) "
"and (trim(co.COLUMN_CLASS) not in('S', 'M')) "
"union "
"select "
"cast('%s' as varchar(128)) TABLE_CAT, "
"cast(trim(ob_table.SCHEMA_NAME) as varchar(128)) TABLE_SCHEM, "
"cast(trim(ob_table.OBJECT_NAME) as varchar(128)) TABLE_NAME, "
"cast(trim(obj_tbl.CATALOG_NAME) as varchar(128)) TABLE_CAT, "
"cast(trim(obj_tbl.SCHEMA_NAME) as varchar(128)) TABLE_SCHEM, "
"cast(trim(obj_tbl.OBJECT_NAME) as varchar(128)) TABLE_NAME, "
"cast(case when idx.is_unique = 1 then 0 else 1 end as smallint) NON_UNIQUE, "
"cast(NULL as varchar(128)) INDEX_QUALIFIER, " // not support
"cast(trim(ob.OBJECT_NAME) as varchar(128)) INDEX_NAME, "
"cast(3 as smallint) TYPE, " // SQL_INDEX_OTHER
"cast(0 as smallint) ORDINAL_POSITION, "
"cast('' as varchar(128)) COLUMN_NAME, " // return an empty string if the expression cannot be determined.
"cast(NULL as char(1)) ASC_OR_DESC, " // not subsequent
"cast(NULL as integer) CARDINALITY, "
"cast(NULL as varchar(128)) INDEX_QUALIFIER, "
"cast(trim(obj_idx.OBJECT_NAME) as varchar(128)) INDEX_NAME, "
"cast(1 as smallint) TYPE, " // TYPE is tableIndexClustered
"cast(k.COLUMN_NUMBER as smallint) ORDINAL_POSITION, "
"cast(SUBSTR(trim(k.COLUMN_NAME) from 0 for CHAR_LENGTH (trim(k.COLUMN_NAME))) as varchar(128)) COLUMN_NAME, "
"cast(case WHEN K.ORDERING = 0 THEN 'A' ELSE 'D' END as char(1)) ASC_OR_DESC, "
"cast(0 as smallint) CARDINALITY, "
"cast(NULL as integer) PAGES, "
"cast(NULL as varchar(128)) FILTER_CONDITION "
"from "
"TRAFODION.\"_MD_\".OBJECTS ob, "
"TRAFODION.\"_MD_\".OBJECTS obj_idx, "
"TRAFODION.\"_MD_\".OBJECTS obj_tbl, "
"TRAFODION.\"_MD_\".INDEXES idx, "
"TRAFODION.\"_MD_\".OBJECTS ob_table, "
"TRAFODION.\"_MD_\".TABLES tb "
"where "
"idx.BASE_TABLE_UID=tb.TABLE_UID "
"and idx.INDEX_UID=ob.OBJECT_UID "
"and idx.BASE_TABLE_UID=ob_table.OBJECT_UID "
"and (ob_table.SCHEMA_NAME = '%s' or trim(ob_table.SCHEMA_NAME) LIKE '%s' ESCAPE '\\') "
"and (ob_table.OBJECT_NAME = '%s' or trim(ob_table.OBJECT_NAME) LIKE '%s' ESCAPE '\\') "
"and (ob_table.OBJECT_TYPE in ('BT', 'VI')) "
"TRAFODION.\"_MD_\".KEYS k "
"where idx.INDEX_UID = obj_idx.OBJECT_UID and idx.BASE_TABLE_UID = obj_tbl.OBJECT_UID and idx.index_uid = k.OBJECT_UID "
"and k.COLUMN_NAME like '%@' "
"and (obj_tbl.SCHEMA_NAME = '%s' or trim(obj_tbl.SCHEMA_NAME) LIKE '%s' ESCAPE '\\') "
"and (obj_tbl.OBJECT_NAME = '%s' or trim(obj_tbl.OBJECT_NAME) LIKE '%s' ESCAPE '\\') "
"and (obj_tbl.OBJECT_TYPE in ('BT', 'VI')) "
"%s "
"ORDER BY 1, 2, 3, 7, 9, 6 ;",
tableParam[0],
inputParam[0],
inputParam[0], inputParam[1],
inputParam[2], inputParam[3],
tableParam[0],
inputParam[0], inputParam[1],
inputParam[2], inputParam[3],
uniqueness == 1 ? "" : "and idx.is_unique=1"
"ORDER BY 1, 2, 3, 6, 8, 9 ;",
inputParam[0], inputParam[1],
inputParam[2], inputParam[3],
uniqueness == 1 ? "" : "and idx.is_unique=1"
);

break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,7 @@ public static void doTestSuiteSetup() throws Exception {
@Test
public void testGetNoneUniqueIndexInfo() {
IndexInfo[] expIndexInfo = {
new IndexInfo("TRAFODION", "SEABASE", INDEX_INFO_TEST_TABLE, false, (String)null, (String)null, (short)0, (short)0, "C1", 0, 3, (short)0, (String)null),
new IndexInfo("TRAFODION", "SEABASE", INDEX_INFO_TEST_TABLE, false, (String)null, (String)null, (short)0, (short)0, "C2", 0, 3, (short)0, (String)null),
new IndexInfo("TRAFODION", "SEABASE", INDEX_INFO_TEST_TABLE, true, (String)null, INDEX_C1_NAME, (short)3, (short)0, "", 0, 0, (short)0, (String)null)
new IndexInfo("TRAFODION", "SEABASE", INDEX_INFO_TEST_TABLE, true, (String)null, INDEX_C1_NAME, (short)1, (short)1, "C1", 0, 0, (short)0, (String)null),
};

try {
Expand All @@ -109,7 +107,7 @@ public void testGetNoneUniqueIndexInfo() {
compareInfoWithExp("testGetUniqueIndexInfo", rowNum + 1, indexInformation, expIndexInfo[rowNum]);
rowNum += 1;
}
assertEquals(rowNum, 3);
assertEquals(rowNum, 1);
} catch(Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
Expand Down Expand Up @@ -157,6 +155,7 @@ public IndexInfo(String dbCatalog, String dbSchema, String dbTableName, boolean
this.dbType = dbType;
this.dbOrdinalPosition = dbOrdinalPosition;
this.dbColumnName = dbColumnName;
this.dbAscOrDesc = dbAscOrdesc == 0 ? "A" : "D";
this.dbCardinality = dbCardinality;
this.dbPages = dbPages;
this.dbFilterCondition = dbFilterCondition;
Expand Down Expand Up @@ -190,8 +189,8 @@ private void compareInfoWithExp(String methondName, int rowNum, ResultSet rs, In
assertEquals(methondName + " rowNum " + Integer.toString(rowNum) + " dbAscOrDesc ", indexInfo.dbAscOrDesc, rs.getString("ASC_OR_DESC"));
assertEquals(methondName + " rowNum " + Integer.toString(rowNum) + " dbCardinality ", indexInfo.dbCardinality, rs.getInt("CARDINALITY"));
// When the type is not SQL_TABLE_STAT, dbCardinality will be NULL
if (indexInfo.dbType != DatabaseMetaData.tableIndexStatistic)
assertTrue(rs.wasNull());
// if (indexInfo.dbType != DatabaseMetaData.tableIndexStatistic)
// assertTrue(rs.wasNull());
assertEquals(methondName + " rowNum " + Integer.toString(rowNum) + " dbPages ", indexInfo.dbPages, rs.getInt("PAGES"));
// Since dbPages is not supported now, it always return NULL
// here check if it is real NULL
Expand Down