Repository navigation
0.12.2
Breaking Changes
- Computed the generated
__pk_hashprimary key column with the collision-freehash_keyinstead ofhash_columns. This affects stream tables without a primary key, which are keyed on a hash of all columns, and tables with nullable primary key columns. Rows that are already stored keep their old keys: a stream table stores a row a second time if it is processed again, for example after restoring an older checkpoint or resetting Kafka offsets, and a table with nullable primary key columns stores a new row on the first update of an existing one while the old row stays (#2513) - Resolved the Flink conflict behavior of every
STREAMtable sink toON CONFLICT DO DEDUPLICATEinstead ofDO NOTHING, which removes theWatermarkTimestampAssignerandSinkMaterializeroperators in front of these sinks. Rows with the same key in one JDBC write batch are now reduced to the last one before PostgreSQL applies its conflict action (stillDO NOTHINGby default), and Iceberg upsert sinks keep the last row instead of the first (#2512, #2514)
Important
Upgrade running jobs with stop-with-savepoint, and restore the new plan from that savepoint once with execution.state-recovery.ignore-unclaimed-state: true (job.allowNonRestoredState: true with the Flink Kubernetes Operator), since it no longer has the sink materializer operators. Rows still held in the materializer state are not written. Rebuild tables with nullable primary key columns by emptying them and processing their input again from the start. See Upgrading from a Savepoint and the Upgrade Notes.
Features
- Negotiated the MCP protocol version with the client: the server now replies with the requested version if it supports it (
2024-11-05,2025-03-26,2025-06-18or2025-11-25) and with2025-11-25otherwise, instead of always replying2024-11-05, which clients built on the MCP Java SDK2.1.0reject (#2507) - Taught the agent how to upgrade a running pipeline from a savepoint, the upgrade notes for the
hash_keychange, and how PostgreSQL resolves conflicts ofSTREAMtables (#2512, #2513, #2514) - Taught the agent how
text_searchbehaves in PostgreSQL compared to Flink, and to pass the same columns to every search on a table so the generated GIN index serves it (#2508)
Fixes
- Wrote every row of a
STREAMtable to the database. Before, a row with the same timestamp as an earlier row of its source, for example the second row of a single batch mutation, could wait in Flink's sink materializer for a newer record, which never arrives on a quiet source. The materializer also kept state for every key without a TTL (#2512, #2514) - Stopped dropping distinct rows that
hash_columnsgave the same__pk_hashkey, such as(1, 23, 'x')and(12, 3, 'x'), orNULL,0and'', and stopped storing a replayed row with anARRAYorBYTEScolumn a second time (#2513) - Kept the records written to a mutation topic before
PARTITIONED BYwas added to its table. The Flink source of a mutation table no longer decodes the Kafka message key, so records without a key are no longer silently dropped, also when the topic is read again from the earliest offset. The server still keys and partitions mutation records as before, and upsert mutation tables with a primary key are unchanged (#2509) - Matched the null default of PostgreSQL
text_searchqueries to the generated GIN index (''instead of' '), so searches use the index instead of scanning the whole table. Deployed indexes are used after the next deploy without a rebuild (#2508) - Gave users
docker run ... datasqrl/cmd:latestcommands from thecore-agentimage instead of its container-only/opt/agent/cmd.shwrapper (#2503)
Documentation
- Documented upgrading a pipeline from a savepoint when the new plan removes stateful operators (#2512), the upgrade notes for the
hash_keychange (#2513), and how PostgreSQL resolves conflicts ofSTREAMtables and how to override it withsink.on-conflict.action(#2514) - Documented how
PARTITIONED BYkeys mutation records in Kafka (#2509) and the MCP transport endpoint with its supported protocol versions (#2507)
Maintenance
- Updated Flink SQL Runner to
0.12.2, which adds thehash_keyfunction and deprecateshash_columns(see its release notes) - Updated the MCP Java SDK from
2.0.1to2.1.0(#2507) - Updated Pi from
1.3.0to1.4.0in the agent image. Some providers now default to a different model, for example GitHub Copilot and NVIDIA, while the Anthropic default is unchanged (#2504)
Full Changelog: 0.12.1...0.12.2