Skip to content

v3.1

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Nov 17:04
· 84 commits to main since this release
7209ea1

What's Changed

  • Build: default to ninja, mold and ccache by @rjb32 in #1201
  • Cypher: accept every query body in every { } by @rjb32 in #1213
  • TUR-339: MLIR: fuse a node IN a constant list of IDs into a const scan by @rjb32 in #1215
  • TUR-329: Cypher: implement the IS label test by @rjb32 in #1216
  • TUR-323: MLIR: convert map values an OPTIONAL CALL body returns before padding them by @rjb32 in #1218
  • CLAUDE.md: benchmark binaries one server at a time and check the host first by @rjb32 in #1226
  • Storage: introduce GraphPath, drop EntityList by @rjb32 in #1186
  • TUR-73: Cypher: test a grouping key read inside a container beside an aggregate by @rjb32 in #1228
  • TUR-340: Python: convert a node or an edge held in a list or a map by @rjb32 in #1229
  • TUR-336: MLIR: start a pattern from the node making the fewest rows by @rjb32 in #1219
  • Unify the value type for lists and maps by @sulaimansuhas in #1227
  • TUR-338: MLIR: hash join keys of different types by @rjb32 in #1230
  • TUR-338: MLIR: size a hash join by its smaller side by @rjb32 in #1231
  • Analyzer: type binary operators by rules over two types by @sulaimansuhas in #1220
  • Cypher: parse a parameter in an expression by @sulaimansuhas in #1222
  • Analyzer: type a parameter by the candidate types of its bind by @sulaimansuhas in #1223
  • Analyzer: share one ParameterDecl between the occurrences of a parameter by @sulaimansuhas in #1224
  • TUR-326: MLIR: read an unwound value back as the element it equals by @rjb32 in #1234
  • TUR-86: Cypher: answer null for list and map equality over a null at any depth by @sulaimansuhas in #1235
  • TUR-307: Cypher: implement conditional WHEN bodies in EXISTS, COUNT and COLLECT subqueries by @rjb32 in #1240
  • TUR-300: Cypher: implement allReduce by @rjb32 in #1237
  • TUR-304: MLIR: group the rows when every grouping key is constant by @rjb32 in #1236
  • TUR-304: MLIR: read an argument of a body run once per row as a constant by @rjb32 in #1238
  • MLIR: spell the tag of db.collect_subquery_yield behind a keyword by @rjb32 in #1243
  • TUR-304: MLIR: read the imports of a body run once per row as constants by @rjb32 in #1241
  • MLIR: describe a pending row by the ID it will commit as by @rjb32 in #1244
  • MLIR: estimate pattern walks from typed edge counts and degree products by @rjb32 in #1242
  • TUR-349: MLIR: hoist constants and handles in one run above the ops computed from them by @rjb32 in #1246
  • TUR-266: MLIR: move the size() and count() walk shortcuts from codegen to db passes by @rjb32 in #1211
  • TUR-265: Cypher: type group variables and variable-length relationships as lists by @rjb32 in #1210
  • TUR-243: Cypher: accept every keyword as a name by @rjb32 in #1212
  • TUR-243: Test: read keyword names on a supplier graph by @rjb32 in #1247
  • TUR-343: MLIR: read one unwound element back in the type it replaces by @rjb32 in #1248
  • TUR-331: MLIR: keep a sum of integer cells an integer by @rjb32 in #1249
  • QA: pin the queries probed over the per-row imports, walks, allReduce and the join estimates by @rjb32 in #1252
  • Cypher: answer elementId() as id() by @rjb32 in #1254
  • MLIR: read an entity out of a constant list by @rjb32 in #1255
  • MLIR: type db.broadcast_constant as the value it lays out by @rjb32 in #1256
  • MLIR: hoist an op a region reads ahead of the op holding the region by @rjb32 in #1257
  • MLIR: let a collect read every row before a LIMIT after it by @rjb32 in #1259
  • MLIR: bound a hash join's cut only by a limit its rows reach by @rjb32 in #1260
  • MLIR: build a walk's named path as a path value by @rjb32 in #1261
  • MLIR: erase the values computed per row that nothing reads, keeping the ones that may raise by @rjb32 in #1262
  • MLIR: select a path in a CASE and a coalesce by @rjb32 in #1263
  • MLIR: read a null laid out over rows as the nullable column an op needs by @rjb32 in #1264
  • MLIR: read a walk carried into a body run per row as the list of its relationships by @rjb32 in #1265
  • MLIR: carry the grouping keys into the bodies beside an aggregate by @rjb32 in #1266
  • Cypher: implement map projection by @rjb32 in #1267
  • MLIR: give every reader of a fused unwind but an output a stand-in of its type by @rjb32 in #1268
  • Cypher: look up a property on any atom by @rjb32 in #1253
  • MLIR: reduce every aggregate of a keyless projection that collects in one db.collect by @rjb32 in #1258
  • TUR-74: Test: enable the collect tests over maps by @rjb32 in #1275
  • TUR-361: Cypher: order by a key or property of a returned item beside an aggregate or after DISTINCT by @rjb32 in #1271
  • TUR-366: MLIR: read a LIMIT 0 over a hash join's cut as a budget of zero rows by @rjb32 in #1270
  • TUR-368: MLIR: carry only the deduplicated rows into a body in the ORDER BY of a DISTINCT by @rjb32 in #1277
  • TUR-346: Cypher: hold paths in lists and maps by @rjb32 in #1250
  • MLIR: write map values to a property through the cell path by @sulaimansuhas in #1272
  • MLIR: implement SET n += map by @sulaimansuhas in #1273
  • MLIR: implement SET n = map by @sulaimansuhas in #1274
  • TUR-352: Cypher: start a pattern from the node or relationship a value holds by @rjb32 in #1290
  • Add npm Release Step by @sulaimansuhas in #929
  • Delete properties of a node through set n = null by @sulaimansuhas in #1296
  • TUR-350: Cypher: implement function namespaces and coll.indexOf by @rjb32 in #1300
  • Quick Fixes For WASM client by @sulaimansuhas in #1310
  • Cypher: implement datetime of a map by @sulaimansuhas in #1314
  • TUR-332: Cypher: parse queries by recursive descent by @rjb32 in #1303
  • Wasm: test the npm client end to end and fix the gaps it found by @rjb32 in #1309
  • TUR-354: Cypher: type labels() as a list of strings by @rjb32 in #1278
  • TUR-355: Cypher: compute every value of a map written with a repeated key by @rjb32 in #1279
  • TUR-356: Cypher: count a range between bounds held in type-erased cells by @rjb32 in #1280
  • TUR-357: MLIR: keep an unread op that may raise by reporting the raise as an effect by @rjb32 in #1281
  • TUR-358: MLIR: compute a coalesce argument only over the rows the earlier ones left null by @rjb32 in #1282
  • TUR-359: Cypher: raise on indexing or slicing a type-erased cell that holds no list by @rjb32 in #1283
  • TUR-360: MLIR: keep a constant laid out over an op's rows out of that op's regions by @rjb32 in #1284
  • TUR-362: Cypher: reject an ORDER BY key mixing an aggregate with a dropped variable by @rjb32 in #1285
  • TUR-363: Cypher: reject an ORDER BY aggregate over a projection that does not aggregate by @rjb32 in #1286
  • TUR-353: Cypher: read components off a temporal cell and raise on a cell holding no keys by @rjb32 in #1287
  • Cypher: read a key of a map held by another map by @rjb32 in #1288
  • Cypher: read a key written as a literal string in brackets by @rjb32 in #1289
  • Cypher: parse a dotted chain as Neo4j does by @rjb32 in #1291
  • TUR-369: Cypher: read the components of a datetime or a duration in a map projection by @rjb32 in #1292
  • Cypher: read a repeated map key as Neo4j does by @rjb32 in #1293
  • MLIR: compute coalesce with a dedicated op by @rjb32 in #1294
  • MLIR: reuse a property read inside a CASE or a coalesce by @rjb32 in #1298
  • Cypher: index by a value held in a type-erased cell by @rjb32 in #1299
  • Cypher: name the type a row holds in its runtime type errors by @rjb32 in #1301
  • Cypher: iterate a value held in a type-erased cell as a list of one by @rjb32 in #1302
  • Cypher: raise on a string function or arithmetic over a cell holding the wrong type by @rjb32 in #1305
  • Cypher: sum and average durations by @rjb32 in #1306
  • Cypher: word a shared op's runtime type error to fit every construct that reaches it by @rjb32 in #1307
  • Cypher: create a property from a value held in a type-erased cell by @rjb32 in #1308
  • Cypher: test out-of-bounds list access by @rjb32 in #1311
  • TUR-362: Cypher: test a subquery naming a variable an aggregation dropped by @rjb32 in #1312
  • MLIR: follow a type-erased column through every op carrying it to decide whether a read of it may raise by @rjb32 in #1313
  • MLIR: place an op over list elements after the values its body reads from above by @rjb32 in #1315
  • MLIR: iterate the maps codegen emits from in insertion order by @rjb32 in #1316
  • Test: enable the TUR-351 tests and remove the disabled string index tests by @rjb32 in #1318
  • Server: remove the JSON protocol by @sulaimansuhas in #1317
  • TUR-62: Procedures: read gnn.graphSAGE's arguments per row by @rjb32 in #1319
  • TUR-328: Cypher: choose the bar after a label by a speculative parse by @rjb32 in #1321
  • TUR-422: Procedures: spell a null node or edge as an invalid ID by @rjb32 in #1320
  • TUR-423: Procedures: reject a gnn.graphSAGE seed that names no node by @rjb32 in #1325
  • TUR-407: Analyzer: reject a null or a cell beside an operand no value combines with by @sulaimansuhas in #1332
  • TUR-410: Query: raise on a duration sum past the range and average durations over a 128-bit total by @sulaimansuhas in #1341
  • TUR-414: Query: raise on a null count in duration() of a map by @sulaimansuhas in #1342
  • TUR-420: Query: create a property from a map entry typed per row in SET n = map and SET n += map by @sulaimansuhas in #1343
  • TUR-376: MLIR: test a CASE in a CALL body over a constant the body binds by @rjb32 in #1331
  • TUR-377: Cypher: read a property a SET creates as null in the SET's own value by @rjb32 in #1326
  • TUR-376: MLIR: find what an op reads from above without climbing out of it by @rjb32 in #1340
  • TUR-390: MLIR: reuse a property read into and out of a subquery body by @rjb32 in #1348
  • TUR-417: MLIR: read one property of a node or edge by name, not every property per row by @rjb32 in #1327
  • TUR-408: Cypher: split a string on every delimiter of a list by @rjb32 in #1328
  • TUR-406: Cypher: answer null for a list plus null by @rjb32 in #1330
  • TUR-423: Procedures: reject a gnn.graphSAGE seed that names no node by @rjb32 in #1349
  • Claude: run converge at xhigh by default by @rjb32 in #1351
  • TUR-424: MLIR: run a join filter before the hops of the pattern it joins by @rjb32 in #1355
  • Parameters: hold a Duration or a DateTime value and carry the map to the analyzer by @sulaimansuhas in #1322
  • Analyzer: type a parameter by the type of its value by @sulaimansuhas in #1323
  • MLIR: run a parameter in an expression as a typed argument of main by @sulaimansuhas in #1324
  • Shell: evaluate a :param value as a Cypher expression by @sulaimansuhas in #1344
  • Cypher: convert datetime and duration through the conversion rule table and share the calendar arithmetic by @sulaimansuhas in #1358
  • TUR-302: Storage: implement a point property type by @rjb32 in #1333
  • TUR-302: Cypher: read the components of a point by @rjb32 in #1334
  • TUR-302: Cypher: implement point.distance and point.withinBBox by @rjb32 in #1335
  • TUR-302: Import: name the type of a property in one spec by @rjb32 in #1336
  • TUR-302: Import: read points from JSONL by @rjb32 in #1337
  • TUR-302: Import: read points from GeoParquet by @rjb32 in #1338
  • TUR-302: Cypher: order points and take their min, max and average by @rjb32 in #1339
  • Test: enable the journey and npm tests parameters unblocked by @rjb32 in #1365
  • Regress: test every column type and encoding the Python and npm clients read by @rjb32 in #1359
  • Python: convert every column type and encoding the engine outputs by @rjb32 in #1360
  • Test: run a Doom-style game tick as one Cypher statement by @rjb32 in #1304
  • Lowering: forget erased ops and freed buckets in the maps lowering reads by @rjb32 in #1374
  • Python: give datetime and duration arrays their unit by @rjb32 in #1382
  • Storage: zero the padding of a point in the constructor body by @rjb32 in #1383
  • Build: find with std::ranges::find, since GCC 11 has no std::ranges::contains by @rjb32 in #1384
  • Build: link with GNU ld on ARM64 when mold is older than 2.32 by @rjb32 in #1385

Full Changelog: v3.0.2...v3.1