|
2 | 2 |
|
3 | 3 | ## [Unreleased] |
4 | 4 |
|
5 | | -### BREAKING CHANGES in 3.4.1 |
| 5 | +### BREAKING CHANGES in 3.4.1 — Metadata JDBC Spec Compliance |
6 | 6 |
|
7 | | -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. |
| 7 | +This release unifies metadata behavior across Thrift and SQL Exec API backends |
| 8 | +using SQL SHOW commands for all metadata operations on SQL warehouses. Several |
| 9 | +non-spec-compliant behaviors have been corrected. Review the changes below before |
| 10 | +upgrading. These changes do not affect metadata on All-Purpose Clusters. |
8 | 11 |
|
9 | | -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. |
| 12 | +* **`getTables`/`getColumns`/`getSchemas`: Catalog parameter is now treated as |
| 13 | + an exact-match identifier per JDBC spec.** Passing `%` or wildcard patterns as |
| 14 | + catalog previously returned results across all catalogs. |
| 15 | + Use `null` to search all catalogs. |
10 | 16 |
|
11 | | -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`. |
| 17 | +* **`getTables` with empty types array: Now returns zero rows per JDBC spec.** |
| 18 | + Use `null` to return all types. |
12 | 19 |
|
13 | | -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. |
| 20 | +* **`getSchemas`: Now includes `information_schema` in results.** Excludes |
| 21 | + `global_temp` schema (previously returned by Thrift for all catalogs). |
| 22 | + |
| 23 | +* **`getPrimaryKeys`/`getImportedKeys`/`getCrossReference` with non-existent |
| 24 | + catalog, schema, or table: Now returns empty `ResultSet` instead of throwing |
| 25 | + `SQLException`.** |
| 26 | + |
| 27 | +* **`getImportedKeys` `UPDATE_RULE`/`DELETE_RULE`: Now returns `3` (`NO_ACTION`) |
| 28 | + instead of `0` (`CASCADE`) for Thrift, and `3` instead of `null` for SEA.** |
| 29 | + This reflects that Unity Catalog foreign keys are informational and non-enforced. |
| 30 | + |
| 31 | +* **Native geospatial type support (`GEOMETRY` and `GEOGRAPHY`) is now enabled |
| 32 | + by default.** `getObject()` now returns `IGeometry`/`IGeography` instances |
| 33 | + instead of EWKT strings. Set `EnableGeoSpatialSupport=0` to restore the |
| 34 | + previous behavior. |
14 | 35 |
|
15 | 36 | ### Added |
| 37 | +- Metadata operations now use SQL SHOW commands for both Thrift and SEA backends, |
| 38 | + ensuring consistent behavior for SQL warehouses regardless of underlying |
| 39 | + protocol. To revert to native Thrift metadata RPCs, set `UseQueryForMetadata=0`. |
16 | 40 |
|
17 | 41 | ### Updated |
| 42 | +- `getColumnTypeName()` for DECIMAL columns now preserves precision/scale suffix (e.g., `"DECIMAL(10,2)"`) consistently across both Thrift and SEA backends. |
18 | 43 | - `EnableGeoSpatialSupport` no longer requires `EnableComplexDatatypeSupport=1`. Geospatial types (GEOMETRY, GEOGRAPHY) can now be enabled independently of complex type support (ARRAY, MAP, STRUCT). |
19 | 44 | - 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. |
20 | 45 | - 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. |
|
0 commit comments