Skip to content

Release 0.22.0

Latest

Choose a tag to compare

@adsharma adsharma released this 25 Oct 04:31
· 20 commits to main since this release
Immutable release. Only release title and notes can be modified.

What's Changed

  • fix(storage): refresh node group scan state after a checkpoint by @kory-io in #1094
  • fix(storage): validate disk array and overflow page indices by @kory-io in #1095
  • fix(aggregate): return [] instead of null for collect() on empty/all-null input by @adsharma in #1100
  • c_api: add lbug_value_create_blob function to C API by @Tyagiquamar in #1103
  • fix(binder): allow implicit cast STRING -> UUID (fixes #1102) by @adsharma in #1106
  • feat: minimal engine enablers for the GQL extension (incl. standalone-call rewrite batch fix) by @chiangchenghsin-hash in #1104
  • fix(storage): harden checkpoint crash recovery by @aikins01 in #1099
  • fix(storage): harden checkpoint crash recovery (fixes #1098) by @adsharma in #1107
  • fix(storage): detect stale pre-0.21 string hash indexes loudly (Fixes #1092) by @adsharma in #1108
  • fix(storage): don't zero CSR header and length-chunk buffers by @zahariash in #1114
  • fix(storage): bounds-check disk array updates in release builds by @kory-io in #1115
  • fix(csv): remove shadowed variable in dialect detection by @adsharma in #1124
  • Grouped aggregate over variable-length paths without materializing walks by @adsharma in #1080
  • fix(planner): range selectivity from observed column min/max by @adsharma in #1126
  • fix(posix): query F_GETLK before close and split lock error messages by @adsharma in #1131
  • fix(processor): keep the child's selection vector intact in hash join build by @zahariash in #1119
  • fix(opt): skip grouped reachable-count rewrite with rel predicate by @adsharma in #1133
  • fix(storage): clean stale spill file lazily after lock is held by @adsharma in #1132
  • fix(gds): emit single length-0 row when closed walks fail node predicate by @adsharma in #1134
  • fix(storage): drop unused selVector capture in ColumnStats::updateMinMax by @adsharma in #1138
  • fix(storage): keep rel scans on the CSR state they started with by @kory-io in #1116
  • fix(test): make vfs + checkpoint tests work on Windows by @adsharma in #1139
  • fix(planner): slim scalar-seeded chain for correlated PK equalities by @adsharma in #1125
  • fix(storage): pad uncompressed flush buffer to allocated page range on disk by @Tyagiquamar in #1091
  • fix(processor): don't re-materialize probe-side exprs as join payloads by @adsharma in #1137
  • fix(processor): do not compact flat join keys' selection vectors on null by @zahariash in #1141
  • fix(binder): allow aggregating a value derived from an earlier aggregate by @zahariash in #1118
  • fix(wal): tag WAL records with their owning catalog and route replay per owner by @aikins01 in #1113
  • fix(fs): resolve UTF-8 paths as Unicode on Windows by @es-alficody in #1144
  • fix(storage): version column min/max stats as STORAGE_VERSION_48 by @adsharma in #1150
  • fix(processor): null the current row when SET returns a NULL value (fixes #1136) by @Tyagiquamar in #1146
  • perf(wal): cache last owner catalog across replayed records by @aikins01 in #1147
  • feat(binder): fold arithmetic identities to expose index scans by @adsharma in #1151
  • feat(function): add list_has_any for list overlap checks by @mvanhorn in #1154
  • perf(transaction): resolve a node's local row with one local-table lookup by @aikins01 in #1155
  • fix(planner): resolve segfault in mapExpressionsScan when enable_plan_optimizer is false (fixes #1142) by @Tyagiquamar in #1148
  • chore(planner): add an explanatory comment by @adsharma in #1167
  • fix(main): reset useInternalCatalogEntry on exception paths (fixes #1162) by @adsharma in #1164
  • feat(function): add list_min and list_max for list extrema by @mvanhorn in #1157
  • fix(catalog): look up replayed macro drops in the macros set (fixes #1163) by @adsharma in #1165
  • fix(table): reset file-scan shared state on cached plan reuse (fixes #1161) by @adsharma in #1168
  • fix(prepared): rebind cached plans when catalog version changes (fixes #1158) by @adsharma in #1169
  • fix(wal): remove storage index holder when replaying DROP INDEX (fixes #1152) by @adsharma in #1166
  • fix(catalog): guard columnIDs against checkpoint vacuum race (fixes #1160) by @adsharma in #1170
  • perf(binder): leave large constant lists unfolded by @zahariash in #1189
  • fix(parquet): do not write field values for a NULL STRUCT by @zahariash in #1178
  • fix(arrow): keep child arrays aligned for NULL nested values by @zahariash in #1179
  • fix(storage): read ART primary-key indexes written by 0.17 by @zahariash in #1180
  • fix: read fields of a NULL STRUCT as NULL by @zahariash in #1181
  • Fix CSR is_sorted assertion on scan after failed checkpoint (#1140) by @Abhipsita-coder in #1183
  • fix(binder): keep folding lists written out in the query by @zahariash in #1191
  • fix(storage): index checkpoint columns by position after a dropped column by @zahariash in #1193
  • fix(storage): keep checkpointed relationships when a failed COMMIT rolls back by @zahariash in #1195
  • fix(wal): replay DROP_PROPERTY storage epoch bump on crash recovery by @adsharma in #1196
  • fix(parquet): fail loudly on INT128 and microsecond-precision INTERVAL export by @adsharma in #1200
  • fix(pk-index): probe legacy sub-index for stale non-ASCII STRING PKs by @adsharma in #1201
  • fix(partition): rebuild partitioned tables on crash WAL replay by @adsharma in #1203
  • fix(storage): route PK index slot writes through the shadow file (fixes #1159) by @adsharma in #1204
  • fix(optimizer): keep all operands and respect NULL under NOT in bool folding by @zahariash in #1206
  • fix(test): link registry-mutating test extension against lbug_shared on Windows by @adsharma in #1212
  • chore(submodules): update submodules to latest main by @adsharma in #1216
  • fix(txn): retain MVCC versions across checkpoint for open readers by @adsharma in #1209
  • fix(txn): retain pre-checkpoint CSR snapshots for parked readers by @adsharma in #1213
  • fix(txn): pin WAL retirement on the snapshot horizon; tolerate missing shadow on recovery by @adsharma in #1214
  • fix(core): clean up attached-database state on DETACH by @adsharma in #1229
  • fix(optimizer): cascade bool folding through NOT and nested ORs by @zahariash in #1219
  • fix(binder): give each random() and gen_random_uuid() call its own column by @zahariash in #1235
  • perf(function): compile a regexp pattern once while it stays the same by @zahariash in #1237
  • fix(binder): don't re-evaluate a WITH aggregate referenced inside a CASE by @zahariash in #1245
  • fix(processor): count(*) over a rel table ignores rels committed after the transaction began by @zahariash in #1198
  • chore(deps): bump extension submodule for SQLite CDC stack by @adsharma in #1231
  • fix(txn): close PR 1209 review leftovers (horizon gap, CSR scan pin, shadow marker) by @adsharma in #1230
  • docs(main): pin ClientContext::interrupt() as async-signal-safe by @zahariash in #1222
  • perf(processor): copy Intersect's right-hand lists into a buffer sized once by @zahariash in #1256
  • fix(function): ignore NULL list elements in list_contains/list_position by @zahariash in #1218
  • fix(binder): let ORDER BY name an aliased projection item by its expression after aggregation by @zahariash in #1243
  • fix(processor): rel count(*) miscounts or segfaults across another connection's checkpoint by @zahariash in #1250
  • fix(main): rebind cached plans after a checkpoint renumbers column IDs by @zahariash in #1259
  • perf(storage): reuse freed node-group-sized buffers across queries by @zahariash in #1254
  • perf(storage): sum rel degrees in one pass instead of building a hash map by @zahariash in #1239
  • docs: list the remaining make build options and how to build like a release by @zahariash in #1257
  • perf(processor): grow Intersect's right-hand buffer instead of trusting its size by @zahariash in #1260
  • fix(processor): subtract rel deletions that sit behind CSR gaps from count(*) by @zahariash in #1261
  • perf(storage): apply a sparse semi-mask before a node scan reads its columns by @zahariash in #1264
  • Fix issues 1223-1225: CREATE label requirement, GDS signature hint, typo by @adsharma in #1265
  • fix(storage): make DiskArray WriteIterator exception-safe during checkpoint by @adsharma in #1273
  • fix(sanitizers): resolve ASan + TSan nightly failures by @adsharma in #1271
  • fix(build): add /bigobj for MSVC to fix C1128 on checkpoint_test by @adsharma in #1269
  • perf(main): reuse the plan of a statement prepared without parameter values by @zahariash in #1233
  • perf(storage): decode only the CSR header span a rel scan's bound nodes need by @zahariash in #1268
  • perf(storage): decide the early semi-mask per batch by @zahariash in #1272
  • chore(storage): pin MemoryManager's buffer-reuse invariants by @zahariash in #1270
  • fix(build): pin OpenSSL to 3.x and fix httplib for OpenSSL 4 by @adsharma in #1275
  • chore(submodules): update to latest main by @adsharma in #1276
  • fix(ci): pin macOS precompiled-bin builds to OpenSSL 3 by @adsharma in #1277
  • fix(ci): pin macOS Java build to OpenSSL 3 by @adsharma in #1278
  • chore(submodules): sync extension to latest main by @adsharma in #1279
  • fix(ci): pin macOS Node.js build to OpenSSL 3 by @adsharma in #1281
  • fix(mapper): fall back from packed filtered count when a predicate input is computed by @itz-puneet in #1280
  • fix(planner): give a re-evaluated expression its own slot in the group by @zahariash in #1283
  • fix(storage): skip chunks on a cast column only when the cast keeps its stats by @zahariash in #1284
  • feat(planner): lookup join for inner equi-joins on node ID by @adsharma in #1285
  • fix(binder): keep a variable's name when an arithmetic identity returns it by @zahariash in #1288
  • fix(binder): give a new aggregate its own name when an earlier clause has it by @zahariash in #1289
  • fix(storage): read CSR length via Column in getDegreeForOffset by @adsharma in #1295
  • perf(processor): remove per-execute mallocs on prepared-statement fast path by @adsharma in #1286
  • perf(processor): zero factorized table blocks as tuples are claimed by @zahariash in #1300
  • fix(storage): make rel degree counts and count(*) match the scan by @zahariash in #1314
  • fix(types): format negative decimals with fewer digits than scale by @adsharma in #1315
  • perf(storage): filter on cheap scan predicates before reading strings and lists by @zahariash in #1322
  • fix(ci): retry Chocolatey installs and DuckDB release downloads by @zahariash in #1324
  • chore(extensions): Bump extension version to 0.22.0 and sync submodules by @adsharma in #1334
  • chore(extensions): bump extension for icebug 13.5 + GDS_PARALLEL_CORE_DECOMPOSITION by @adsharma in #1336
  • fix(ci): pin Linux builds to libarrow.so.2600 by @adsharma in #1339
  • perf(processor): run a one-thread task on the calling thread by @zahariash in #1297
  • perf(binder): count a node's primary key as its internal id by @zahariash in #1310
  • fix(ci): download arch-specific DuckDB macOS builds by @adsharma in #1344
  • chore(extensions): bump submodule to DuckDB 2.0.0 fixes by @adsharma in #1345
  • perf(parser): append sorted intervals without scanning the set by @zahariash in #1302
  • fix(graph): skip deleted rows in on-disk vertex scan chunks by @zahariash in #1320
  • fix(copy): rollback rel COPY without dropping committed rows by @Tyagiquamar in #1308
  • fix(processor): zero tuples handed out again after a shrinking resize by @zahariash in #1323
  • perf(storage): pause the early scan filter on dense in-memory batches by @zahariash in #1325
  • fix(ddl): DROP MACRO finds non-ASCII names and IF EXISTS returns on a missing macro by @zahariash in #1328
  • fix(c_api): cast mixed-width integers to the common type of a list or map by @zahariash in #1330
  • ci: build Linux tests once with -g1, save ccache only from finished runs by @zahariash in #1348
  • fix(storage): guard CSR index reads and skip unseen deletes in degree paths by @zahariash in #1331
  • fix(storage): copy a pinned CSR index before appending rels to it by @zahariash in #1333
  • fix(storage): lock a rel table's columns while checkpoint and ADD change them by @zahariash in #1338
  • fix(storage): stop multi-hop scans losing rels after a node with no rel node group by @zahariash in #1342
  • perf(storage): decode sparse CSR headers in clusters and bound the neighbour refill by @zahariash in #1294
  • chore(submodules): sync to origin/main by @adsharma in #1356
  • fix(storage): stop CHECKPOINT crashing when it keeps a long string for a reader by @zahariash in #1355
  • test(storage): pin how much of the CSR header a rel scan decodes by @zahariash in #1359
  • fix(parser): preserve negative sign in integer and double literal raw names by @Tyagiquamar in #1351
  • fix(export): preserve column default expressions in exported cypher schema by @Tyagiquamar in #1360
  • fix(copy): populate secondary indexes during node batch insert by @Tyagiquamar in #1350
  • fix(vector): give every string vector a memory manager and assert it by @zahariash in #1368
  • fix(optimizer): drop the rows where MATCH re-binds a node that OPTIONAL MATCH left NULL by @zahariash in #1362
  • fix(planner): cap a lookup join by its flat outer rows by @zahariash in #1370
  • perf(processor): keep Intersect's per-tuple scratch buffers on the operator by @zahariash in #1372
  • perf(optimizer): mask an Intersect's probe node scans with its build-side keys by @zahariash in #1373
  • fix(binder): map COPY FROM subquery columns by position by @Tyagiquamar in #1374
  • fix(function): route scalar list-slice through STRING implicit cast by @adsharma in #1384
  • fix(function): throw BinderException for non-path LENGTH() input by @adsharma in #1385
  • fix(storage): widen both zone-map bounds when a write exceeds both by @555aaditya in #1387

New Contributors

Full Changelog: v0.21.2...v0.22.0