@@ -296,6 +296,27 @@ private void checkClosed() throws SQLServerException {
296296 "WHERE t.name = ? AND sch.name = ? AND ic.key_ordinal = 0 " +
297297 "ORDER BY NON_UNIQUE, TYPE, INDEX_NAME, ORDINAL_POSITION" ;
298298
299+ private static final String INDEX_INFO_QUERY_DW = "SELECT db_name() AS TABLE_CAT, " +
300+ "sch.name AS TABLE_SCHEM, " +
301+ "t.name AS TABLE_NAME, " +
302+ "CASE WHEN i.is_unique = 1 THEN 0 ELSE 1 END AS NON_UNIQUE, " +
303+ "t.name AS INDEX_QUALIFIER, " +
304+ "i.name AS INDEX_NAME, " +
305+ "i.type AS TYPE, " +
306+ "ic.key_ordinal AS ORDINAL_POSITION, " +
307+ "c.name AS COLUMN_NAME, " +
308+ "CASE WHEN ic.is_descending_key = 1 THEN 'D' ELSE 'A' END AS ASC_OR_DESC, " +
309+ "NULL AS CARDINALITY, " +
310+ "NULL AS PAGES, " +
311+ "NULL AS FILTER_CONDITION " +
312+ "FROM sys.indexes i " +
313+ "INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id " +
314+ "INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id " +
315+ "INNER JOIN sys.tables t ON i.object_id = t.object_id " +
316+ "INNER JOIN sys.schemas sch ON t.schema_id = sch.schema_id " +
317+ "WHERE t.name = ? " +
318+ "AND sch.name = ? " +
319+ "ORDER BY NON_UNIQUE, TYPE, INDEX_NAME, ORDINAL_POSITION" ;
299320
300321 // Use LinkedHashMap to force retrieve elements in order they were inserted
301322 /** getColumns columns */
@@ -1408,7 +1429,17 @@ private java.sql.ResultSet getIndexInfoAzureDW(String[] arguments, String table,
14081429 }
14091430 }
14101431 }
1411- throw e ;
1432+ // If sp_statistics fails (e.g., "PROCEDURE 'sp_statistics' is not supported" in Synapse serverless),
1433+ // fall back to sys.indexes query
1434+ if (loggerExternal .isLoggable (Level .FINER )) {
1435+ loggerExternal .finer ("sp_statistics failed, falling back to sys.indexes: " + e .getMessage ());
1436+ }
1437+
1438+ PreparedStatement fallbackPstmt = (SQLServerPreparedStatement ) this .connection .prepareStatement (INDEX_INFO_QUERY_DW );
1439+ fallbackPstmt .setString (1 , table );
1440+ fallbackPstmt .setString (2 , schema );
1441+ fallbackPstmt .closeOnCompletion ();
1442+ return fallbackPstmt .executeQuery ();
14121443 }
14131444 return userRs ;
14141445 }
0 commit comments