v1.5.23
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 ofselect * limit 1), with proper native CQL → Sling type mapping, keyspace/table/view introspection,truncate/add column/drop columnsupport, CQL-safeDROP TABLEgeneration,NetworkTopologyStrategyfor keyspace creation, andjsonmapped totext. -
Upsert-by-insert for key-value stores:
incrementalandbackfillmodes with a primary key now work with direct writes for ScyllaDB, MongoDB, and Azure Table, whereINSERTis 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:
DropTablenow 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
MERGEtemplate now uses casted field variants (set_fields_casted,src_insert_fields_casted), sincesrcis 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 the1/0 → 'true'/'false'conversion. Previously integer columns were incorrectly rendered astrue/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.tablefirst, so a 2-part stream definition still matches when the table renders with a database qualifier. -
Command/SSH hook output bypassing log sinks:
commandhook output (both local and SSH) is now routed throughenv.Printlninstead of writing straight toos.Stdout/os.Stderr, so it is properly captured by log sinks. Partial trailing lines are flushed at the end.