Skip to content

v1.5.23

Choose a tag to compare

@flarco flarco released this 03 Aug 16:51
· 41 commits to main since this release
d61152e

Sling v1.5.23 (2026-08-03T16:51:29Z)

New Features

  • Three-part object names (database.schema.table): Table names can now be qualified with a database/catalog for dialects that support it (Snowflake, Databricks, Trino, BigQuery, DuckDB/DuckLake/MotherDuck, Fabric, SQL Server, Azure, Azure DWH). The database qualifier now flows into metadata queries (columns, primary keys, indexes, DDL), Snowflake internal-stage creation, and temp tables, which inherit the target's database. Dialects that don't support it now reject 3-part names with a clear error instead of silently misbehaving.

  • Oracle read performance (prefetch_rows): New connection property to control the number of rows fetched per network round-trip, defaulting to 100 instead of go-ora's 25. Large table reads are significantly faster; lower it (e.g. 25) for tables with large BLOB/CLOB columns to reduce memory usage.

  • ScyllaDB improvements: Column metadata is now read from system_schema.columns (instead of select * limit 1), with proper native CQL → Sling type mapping, keyspace/table/view introspection, truncate/add column/drop column support, CQL-safe DROP TABLE generation, NetworkTopologyStrategy for keyspace creation, and json mapped to text.

  • Upsert-by-insert for key-value stores: incremental and backfill modes with a primary key now work with direct writes for ScyllaDB, MongoDB, and Azure Table, where INSERT is already an upsert-by-PK — no more falling back to a temp table or erroring out.

  • Go 1.26: Toolchain and dependencies bumped to Go 1.26.0.

Bug Fixes

  • ClickHouse pending mutations block table drops: DropTable now kills in-flight mutations referencing the table before dropping it, avoiding failures when a previous delete/update mutation is still running.

  • ClickHouse long loads fail with "bad connection" at commit: Large ClickHouse loads that held a single transaction open for the whole run would fail when the connection was reaped underneath mid-commit. Loads now commit on a wall-clock cadence (batch_max_duration, default 5 minutes for ClickHouse), and ClickHouse connections use a bounded max lifetime/idle time so the pool retires stale connections cleanly.

  • S3 transfers truncated on large/slow objects: Removed the client-wide 300s HTTP timeout, which capped the entire request including body reads. Connect/handshake/header phases remain bounded by transport timeouts; a whole-request deadline can still be opted into via HTTP_TIMEOUT.

  • SQL Server merge double-casting: The MERGE template now uses casted field variants (set_fields_casted, src_insert_fields_casted), since src is a derived table where the cast has already been applied — previously the cast was applied twice.

  • SQL Server integer-to-string cast: Integers targeting a string column are now cast with a plain cast(... as varchar); only actual boolean columns get the 1/0 → 'true'/'false' conversion. Previously integer columns were incorrectly rendered as true/false.

  • Nested format variables missing during pre-render: Nested maps (source.type, target.type, stream.table, …) are now built before target-object pre-rendering and refreshed afterwards, so JMESPath lookups resolve in all cases.

  • Wildcard streams not matching explicit stream config: Wildcard expansion now matches explicit stream entries on schema.table first, so a 2-part stream definition still matches when the table renders with a database qualifier.

  • Command/SSH hook output bypassing log sinks: command hook output (both local and SSH) is now routed through env.Println instead of writing straight to os.Stdout/os.Stderr, so it is properly captured by log sinks. Partial trailing lines are flushed at the end.