Repository navigation
What's Changed
- TUR-169: Support
MATCHseeded by a list index by @cyrusknopf in #1052 - Remove Unused Lambda Variable Causing MacOS Failure by @sulaimansuhas in #1054
- MLIR: fuse an UNWIND compared to a hop's start node into a const scan by @rjb32 in #1056
- Test: split the IR unit tests into one directory per feature by @rjb32 in #1057
- TUR-182: MLIR: fetch the nodes a column of IDs names instead of crossing whole node scans by @rjb32 in #1059
- Samples: add a UK public transport fetcher by @rjb32 in #1060
- TUR-178: Cypher: read CSV row fields inside OPTIONAL MATCH and subquery bodies by @rjb32 in #1062
- TUR-196, TUR-197: MLIR: fix MERGE across statements of a change and outside one by @rjb32 in #1063
- TUR-172: Cypher: group and dedup on a path variable by @rjb32 in #1065
- TUR-183: MLIR: walk pass chains with worklists instead of recursion by @rjb32 in #1064
- TUR-180: Net: render unmatched OPTIONAL MATCH entities as null by @rjb32 in #1066
- TUR-200: Shell: only hide the prompt when linenoise is editing a terminal by @rjb32 in #1067
- TUR-199: MLIR: read projected unwound node IDs through id() to keep the const scan by @rjb32 in #1068
- TUR-181: MLIR: re-root a pattern at the node an equality binds to a column by @rjb32 in #1061
- TUR-155: MLIR: filter hop predicates over many candidates at once by @rjb32 in #1071
- TUR-114: MLIR: return a merged entity out of a CALL subquery by @rjb32 in #1074
- TUR-194: Correctly parse
nullwhen loading JSONL by @cyrusknopf in #1072 - Fix Column Const Null Logical Row Count Domination In Turing Proto by @sulaimansuhas in #1073
- TUR-94: MLIR: test all() and none() over a walk's path on each hop by @rjb32 in #1070
- TUR-177 TUR-195: Propagate
LOAD JSONLerrors to client; fix loading sparse IDs by @cyrusknopf in #1078 - TUR-198: Fix spelling mistake in error message by @cyrusknopf in #1079
- TUR-65: implement WHEN ... THEN ... ELSE conditional queries by @rjb32 in #1075
- TUR-167: MLIR: check a disjunction of labels in one check_label_constraint by @rjb32 in #1069
- TUR-203: MLIR: group by an entity the same query wrote by @rjb32 in #1080
- Turing-106: Implement Static Map Accessors by @sulaimansuhas in #1053
- TUR-107: Add Dynamic Map Accessors by @sulaimansuhas in #1076
- TUR-202: MLIR: read a null entity an OPTIONAL CALL returned by @rjb32 in #1084
- TUR-170: MLIR: read the nodes of a shortest path by @rjb32 in #1083
- TUR-190: Vector: replace a reloaded vector by rebuilding the index by @rjb32 in #1085
- MLIR: return written entities out of WHEN and UNION subqueries, and MERGE from created nodes by @rjb32 in #1082
- Cypher: implement { WHEN ... } UNION { WHEN ... } by @rjb32 in #1086
- TUR-208: MLIR: evaluate EXISTS over a node the same query created by @rjb32 in #1088
- TUR-148: Enable list elements for
CASEby @cyrusknopf in #1081 - TUR-160: Cypher: implement abs and the common numeric and string functions by @rjb32 in #1090
- MLIR: classify constant columns with a worklist by @rjb32 in #1089
- Cypher: iterate a variable-length relationship in list comprehensions by @rjb32 in #1094
- TUR-215: MLIR: fetch a constant node inside the factor it belongs to by @rjb32 in #1095
- MLIR: walk long use-def chains with worklists by @rjb32 in #1091
- TUR-56: Improve type-safety of procedures by @cyrusknopf in #1015
- TUR-174: Cypher: implement reduce by @rjb32 in #1093
- TUR-163: Cypher: support relationships with both arrow heads by @rjb32 in #1096
- Claude: add stack-tickets and stack-merge commands by @rjb32 in #1097
- TUR-213: MLIR: carry projection aliases into CASE and list bodies by @rjb32 in #1102
- TUR-218: Cypher: concatenate a string cell plus a number by @rjb32 in #1103
- TUR-217: Cypher: order NaN after every number by @rjb32 in #1104
- TUR-189: MLIR: cost shortest path edges at their uncommitted weight by @rjb32 in #1098
- TUR-201: Cypher: iterate a quantified group variable in list comprehensions by @rjb32 in #1099
- TUR-127: MLIR: trim the carry sets of list comprehensions, predicates and reduce by @rjb32 in #1100
- TUR-126: MLIR: stop a list predicate at the element that decides it by @rjb32 in #1101
- CI: build only the top PR of a stack by @rjb32 in #1106
- Claude: drop stale string predicate, VLP and list property limits by @rjb32 in #1107
- TUR-212: Add overflow checks for modulo and divide by @cyrusknopf in #1113
- TUR-185: Change persistence logic for vector DB shards by @cyrusknopf in #1112
- TUR-229: Reads A Map In A List And A List In A Map by @sulaimansuhas in #1114
- TUR-228: MLIR: implement min() and max() over lists and mixed-type values by @rjb32 in #1116
- TUR-207: Cypher: test a null entity's label or edge type as null by @rjb32 in #1109
- TUR-171: MLIR: read a dropped CSV row in the WHERE of a WITH by @rjb32 in #1110
- TUR-179: Net: write JSON doubles at full precision by @rjb32 in #1111
- Test: render NaN the same on every platform in StringRowSink by @rjb32 in #1120
- TUR-230: Implement
substrby @cyrusknopf in #1121 - TUR-173: MLIR: place unwinds and filters in the factor they read by @rjb32 in #1119
- Test: count DISTINCT over a CASE per pathway by @rjb32 in #1127
- TUR-264: implement FOREACH by @rjb32 in #1126
- TUR-255: Cypher: parse AND/OR/XOR chains as one n-ary expression by @rjb32 in #1125
- TUR-225: Cypher: implement quantified path patterns with more than one hop by @rjb32 in #1118
- TUR-175: MLIR: implement keys() and properties() by @rjb32 in #1108
- TUR-231: Implement
splitby @cyrusknopf in #1122 - QA: 3 failing Cypher tests on v3 by @rjb32 in #1092
- TUR-271: System: name the graph in GRAPH_NOT_FOUND and say when it needs LOAD GRAPH by @rjb32 in #1128
- TUR-256: HTTP: answer an over-limit request with a JSON error naming the limit by @rjb32 in #1129
- TUR-246: HTTP: reject a commit or change parameter that does not parse by @rjb32 in #1130
- TUR-242: HTTP: read a change ID in decimal, as CHANGE NEW returns it by @rjb32 in #1132
- TUR-261: Cypher: implement stDev, stDevP, percentileCont and percentileDisc by @rjb32 in #1135
- TUR-268: MLIR: compute the nodes a variable-length walk can end on before walking it by @rjb32 in #1131
- CI: run macos26 on the self-hosted MacBook runner by @rjb32 in #1145
- CI: pin CMake 3.x on macOS and key the dependency cache on submodule commits by @rjb32 in #1147
- HTTP: split the URI with string_view so GCC 11 builds DBURIParser by @rjb32 in #1148
- Enable Passing Parameters For Node Labels by @sulaimansuhas in #1136
- Enable Parameterized Edge Types by @sulaimansuhas in #1137
- Add /pr-explain Skill by @sulaimansuhas in #1144
- Enable The Json Protocol To Send Parameters by @sulaimansuhas in #1150
- Enable Encoding And Decoding Of ParameterMap Through The Binary Protocol by @sulaimansuhas in #1151
- Send Encoded Param Maps From Clients To Servers by @sulaimansuhas in #1153
- Send Query Parameters Over Every Client by @sulaimansuhas in #1154
- HTTP: end a query pair at the query's end, not at npos, so GCC 11 builds DBURIParser by @rjb32 in #1156
- Python: drop the dead abi_tag and python_tag overrides that setuptools 84.2 rejects by @rjb32 in #1160
- Test: link test binaries without PIE and strip them outside debug builds by @rjb32 in #1158
- Link all the test libraries to a dynamic turing engine library by @sulaimansuhas in #1159
- CLAUDE.md: hold designs to the standard of the field and ask first by @rjb32 in #1163
- CI: share the dependency cache between the runners of a host by @rjb32 in #1164
- MLIR: unwind a range by counting it out instead of building its list by @rjb32 in #1161
- TUR-288: MLIR: compare a node or an edge to a negative integer as unequal instead of raising by @rjb32 in #1162
- MLIR: keep functions that raise on a row's value off rows the plan drops by @rjb32 in #1146
- TUR-294: MLIR: read keyless aggregate inputs over the rows ahead of every reduction by @rjb32 in #1165
- TUR-274: MLIR: free each chunk's lists, maps and strings instead of keeping them until the query ends by @rjb32 in #1133
- TUR-280: MLIR: compute a row-wise op over constants once unless it can raise by @rjb32 in #1166
- Deps: build Arrow's bundled dependencies from archives in external/arrow-thirdparty by @rjb32 in #1157
- Enable HNSW Index to use mmap rather than loading everything into memory. by @sulaimansuhas in #1149
- TUR-285: Cypher: answer null for a variable-length relationship list or node group in the OrNull conversions by @rjb32 in #1171
- TUR-283: Cypher: answer null for NOT over a constant boolean conversion that yields null by @rjb32 in #1172
- TUR-84: Cypher: compare integers and floats by their exact values by @rjb32 in #1174
- TUR-303: Cypher: return one row per path when the RETURN reads no pattern variable by @rjb32 in #1176
- TUR-221: MLIR: implement COLLECT subqueries by @rjb32 in #1175
- QA: probe v3 through the shell and EXPLAIN, not the mlir sample by @rjb32 in #1178
- TUR-236: Cypher: implement normalize and its four Unicode normal forms over utf8proc by @rjb32 in #1167
- Cypher: implement the IS NORMALIZED predicate and give null for a non-string in normalize by @rjb32 in #1169
- TUR-295: Cypher: implement NEXT by @rjb32 in #1168
- MLIR: test the passes under a projection of constants by @rjb32 in #1183
- TUR-118: Cypher: answer null for an ordering between types with no order by @rjb32 in #1181
- TUR-204: MLIR: scan edges with both ends bound to a label by @rjb32 in #1180
- TUR-313: Query: reject a MERGE key that is null at run time by @rjb32 in #1185
- TUR-279: MLIR: unwind a list built per row without building a whole chunk of lists by @rjb32 in #1184
- Skills: open the /pr-explain summary with the goal, the approach and where to look by @sulaimansuhas in #1190
- TUR-315: Cypher: accept every keyword as a map key or a property name by @sulaimansuhas in #1187
- TUR-316: MLIR: sort by a map by @sulaimansuhas in #1188
- TUR-317: MLIR: test a map for null and compare it against a scalar by @sulaimansuhas in #1189
- TUR-297: MLIR: carry only the columns an op over a list or a CASE reads by @rjb32 in #1191
- TUR-311: Query: check a simple CASE's equality tests with the binary equality's rule by @rjb32 in #1192
- TUR-286: Cypher: test char_length on a map cell by @rjb32 in #1194
- TUR-206: Query: type a property read off an expression and drop the lowering's schema fallback by @rjb32 in #1196
- TUR-319: MLIR: lay a RETURN of constants out over the rows in flight by @rjb32 in #1195
- TUR-322: MLIR: compute a constant that can raise over the rows in flight by @rjb32 in #1197
- TUR-270: CLI: fail the start when a listener cannot bind, and print why by @rjb32 in #1200
- TUR-93: Cypher: test toString of bound, unwound and stored temporals by @rjb32 in #1202
- Cypher: implement CASE and coalesce over every value type, and operators over !storage.any by @rjb32 in #1199
- TUR-318: Query: compare an integer and a float with = and <> by @rjb32 in #1203
- TUR-291: Query: concatenate and add list elements by the value each row holds by @rjb32 in #1204
- TUR-166: MLIR: read the label sets or edge types of a column once by @rjb32 in #1205
- TUR-224: Cypher: implement label expressions by @rjb32 in #1206
- macOS: memory-map HNSW indexes and keep the dependency cache when a later step fails by @rjb32 in #1208
Full Changelog: v3.0...v3.0.2