@@ -275,14 +275,22 @@ private void checkClosed() throws SQLServerException {
275275 "); " +
276276 "INSERT INTO @temp_sp_statistics " +
277277 "EXEC sp_statistics ?, ?, ?, ?, ?, ?; " +
278- "SELECT TABLE_QUALIFIER AS TABLE_CAT, TABLE_OWNER AS TABLE_SCHEM, " +
279- "TABLE_NAME, NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, TYPE, " +
280- "ORDINAL_POSITION, COLUMN_NAME, ASC_OR_DESC, CARDINALITY, PAGES, FILTER_CONDITION " +
278+ "SELECT TABLE_QUALIFIER COLLATE DATABASE_DEFAULT AS TABLE_CAT, " +
279+ "TABLE_OWNER COLLATE DATABASE_DEFAULT AS TABLE_SCHEM, " +
280+ "TABLE_NAME COLLATE DATABASE_DEFAULT AS TABLE_NAME, NON_UNIQUE, " +
281+ "INDEX_QUALIFIER COLLATE DATABASE_DEFAULT AS INDEX_QUALIFIER, " +
282+ "INDEX_NAME COLLATE DATABASE_DEFAULT AS INDEX_NAME, TYPE, " +
283+ "ORDINAL_POSITION, COLUMN_NAME COLLATE DATABASE_DEFAULT AS COLUMN_NAME, ASC_OR_DESC, " +
284+ "CARDINALITY, PAGES, FILTER_CONDITION " +
281285 "FROM @temp_sp_statistics " +
282286 "UNION ALL " +
283- "SELECT db_name() AS TABLE_CAT, sch.name AS TABLE_SCHEM, t.name AS TABLE_NAME, " +
284- "CASE WHEN i.is_unique = 1 THEN 0 ELSE 1 END AS NON_UNIQUE, t.name AS INDEX_QUALIFIER, i.name AS INDEX_NAME, " +
285- "i.type AS TYPE, ic.key_ordinal AS ORDINAL_POSITION, c.name AS COLUMN_NAME, " +
287+ "SELECT db_name() AS TABLE_CAT, sch.name COLLATE DATABASE_DEFAULT AS TABLE_SCHEM, " +
288+ "t.name COLLATE DATABASE_DEFAULT AS TABLE_NAME, " +
289+ "CASE WHEN i.is_unique = 1 THEN 0 ELSE 1 END AS NON_UNIQUE, " +
290+ "t.name COLLATE DATABASE_DEFAULT AS INDEX_QUALIFIER, " +
291+ "i.name COLLATE DATABASE_DEFAULT AS INDEX_NAME, " +
292+ "i.type AS TYPE, ic.key_ordinal AS ORDINAL_POSITION, " +
293+ "c.name COLLATE DATABASE_DEFAULT AS COLUMN_NAME, " +
286294 "CASE WHEN ic.is_descending_key = 1 THEN 'D' ELSE 'A' END AS ASC_OR_DESC, " +
287295 "CASE WHEN i.index_id <= 1 THEN ps.row_count ELSE NULL END AS CARDINALITY, " +
288296 "CASE WHEN i.index_id <= 1 THEN ps.used_page_count ELSE NULL END AS PAGES, " +
@@ -294,7 +302,7 @@ private void checkClosed() throws SQLServerException {
294302 "INNER JOIN sys.schemas sch ON t.schema_id = sch.schema_id " +
295303 "LEFT JOIN sys.dm_db_partition_stats ps ON ps.object_id = i.object_id AND ps.index_id = i.index_id AND ps.index_id IN (0,1) " +
296304 "WHERE t.name = ? AND sch.name = ? AND ic.key_ordinal = 0 " +
297- "ORDER BY NON_UNIQUE, TYPE, INDEX_NAME, ORDINAL_POSITION" ;
305+ "ORDER BY NON_UNIQUE, TYPE, INDEX_NAME COLLATE DATABASE_DEFAULT , ORDINAL_POSITION" ;
298306
299307 private static final String INDEX_INFO_QUERY_DW = "SELECT db_name() AS TABLE_CAT, " +
300308 "sch.name AS TABLE_SCHEM, " +
@@ -1300,17 +1308,25 @@ public java.sql.ResultSet getIndexInfo(String cat, String schema, String table,
13001308 if (this .connection .isAzureDW ()) {
13011309 return getIndexInfoAzureDW (arguments , table , schema );
13021310 } else {
1303- PreparedStatement pstmt = (SQLServerPreparedStatement ) this .connection .prepareStatement (INDEX_INFO_COMBINED_QUERY );
1304- pstmt .setString (1 , arguments [0 ]); // table name for sp_statistics
1305- pstmt .setString (2 , arguments [1 ]); // schema name for sp_statistics
1306- pstmt .setString (3 , arguments [2 ]); // catalog for sp_statistics
1307- pstmt .setString (4 , arguments [3 ]); // index name pattern for sp_statistics
1308- pstmt .setString (5 , arguments [4 ]); // is_unique for sp_statistics
1309- pstmt .setString (6 , arguments [5 ]); // accuracy for sp_statistics
1310- pstmt .setString (7 , table ); // table name for columnstore query
1311- pstmt .setString (8 , schema ); // schema name for columnstore query
1312-
1313- return pstmt .executeQuery ();
1311+ try {
1312+ PreparedStatement pstmt = (SQLServerPreparedStatement ) this .connection .prepareStatement (INDEX_INFO_COMBINED_QUERY );
1313+ pstmt .setString (1 , arguments [0 ]); // table name for sp_statistics
1314+ pstmt .setString (2 , arguments [1 ]); // schema name for sp_statistics
1315+ pstmt .setString (3 , arguments [2 ]); // catalog for sp_statistics
1316+ pstmt .setString (4 , arguments [3 ]); // index name pattern for sp_statistics
1317+ pstmt .setString (5 , arguments [4 ]); // is_unique for sp_statistics
1318+ pstmt .setString (6 , arguments [5 ]); // accuracy for sp_statistics
1319+ pstmt .setString (7 , table ); // table name for columnstore query
1320+ pstmt .setString (8 , schema ); // schema name for columnstore query
1321+
1322+ return pstmt .executeQuery ();
1323+ } catch (SQLException e ) {
1324+ if (loggerExternal .isLoggable (Level .FINER )) {
1325+ loggerExternal .finer ("INDEX_INFO_COMBINED_QUERY failed, falling back to sp_statistics: " + e .getMessage ());
1326+ }
1327+ return getResultSetWithProvidedColumnNames (cat , CallableHandles .SP_STATISTICS , arguments ,
1328+ getIndexInfoColumnNames );
1329+ }
13141330 }
13151331 } finally {
13161332 if (null != orgCat ) {
0 commit comments