diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 67eeb5a5a..e7b2d83d4 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -2,19 +2,44 @@ ## [Unreleased] -### BREAKING CHANGES in 3.4.1 +### BREAKING CHANGES in 3.4.1 — Metadata JDBC Spec Compliance -1. **`getTables()`: Percent sign (`%`) in catalog argument is now treated as a literal character, not a wildcard.** Previously returned all tables; now returns zero rows unless a catalog named "%" exists. JDBC spec: catalog is an exact-match parameter, not a pattern. Migration: Pass `null` to search all catalogs. +This release unifies metadata behavior across Thrift and SQL Exec API backends +using SQL SHOW commands for all metadata operations on SQL warehouses. Several +non-spec-compliant behaviors have been corrected. Review the changes below before +upgrading. These changes do not affect metadata on All-Purpose Clusters. -2. **`getColumnTypeName()`: DECIMAL columns now return `"DECIMAL"` without precision/scale** (e.g., `"DECIMAL"` not `"DECIMAL(10,2)"`). Use `getPrecision()` and `getScale()` for numeric constraints. JDBC spec: `getColumnTypeName()` returns the base type name only. +* **`getTables`/`getColumns`/`getSchemas`: Catalog parameter is now treated as + an exact-match identifier per JDBC spec.** Passing `%` or wildcard patterns as + catalog previously returned results across all catalogs. + Use `null` to search all catalogs. -3. **For DBSQL warehouses, metadata operations are now powered by SHOW SQL commands.** SQL Exec API mode already was powered by SHOW commands, now the same is true for Thrift server mode as well. To revert to native Thrift metadata RPCs, set `UseQueryForMetadata` to `0`. +* **`getTables` with empty types array: Now returns zero rows per JDBC spec.** + Use `null` to return all types. -4. **Native geospatial type support (`GEOMETRY` and `GEOGRAPHY`) is now enabled by default.** `getObject()` now returns `IGeometry`/`IGeography` instances instead of EWKT strings. Set `EnableGeoSpatialSupport=0` to restore the previous behavior. +* **`getSchemas`: Now includes `information_schema` in results.** Excludes + `global_temp` schema (previously returned by Thrift for all catalogs). + +* **`getPrimaryKeys`/`getImportedKeys`/`getCrossReference` with non-existent + catalog, schema, or table: Now returns empty `ResultSet` instead of throwing + `SQLException`.** + +* **`getImportedKeys` `UPDATE_RULE`/`DELETE_RULE`: Now returns `3` (`NO_ACTION`) + instead of `0` (`CASCADE`) for Thrift, and `3` instead of `null` for SEA.** + This reflects that Unity Catalog foreign keys are informational and non-enforced. + +* **Native geospatial type support (`GEOMETRY` and `GEOGRAPHY`) is now enabled + by default.** `getObject()` now returns `IGeometry`/`IGeography` instances + instead of EWKT strings. Set `EnableGeoSpatialSupport=0` to restore the + previous behavior. ### Added +- Metadata operations now use SQL SHOW commands for both Thrift and SEA backends, + ensuring consistent behavior for SQL warehouses regardless of underlying + protocol. To revert to native Thrift metadata RPCs, set `UseQueryForMetadata=0`. ### Updated +- `getColumnTypeName()` for DECIMAL columns now preserves precision/scale suffix (e.g., `"DECIMAL(10,2)"`) consistently across both Thrift and SEA backends. - `EnableGeoSpatialSupport` no longer requires `EnableComplexDatatypeSupport=1`. Geospatial types (GEOMETRY, GEOGRAPHY) can now be enabled independently of complex type support (ARRAY, MAP, STRUCT). - Arrow schema deserialization failures (Thrift metadata path) now surface a dedicated driver error code `ARROW_SCHEMA_PARSING_ERROR` (vendor code `22000`) and a proper SQLSTATE `22000` (Data Exception) on the thrown `SQLException`, instead of the generic `RESULT_SET_ERROR` (1004) and the enum name as SQLSTATE. The exception message is unchanged. - When a Statement is re-executed, the previous server-side operation is now explicitly closed before starting the new execution, preventing orphaned server-side operations when Statements are reused.