Repository navigation
feat(gfql): index DDL accepts the Cypher optional spellings - #2131
Conversation
CREATE GFQL INDEX [name] [IF NOT EXISTS] FOR <kind> [ON (col)] and DROP GFQL INDEX name [IF EXISTS] parse to the same ops as the existing forms; misplaced options stay malformed. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_012Me1E7ZdDuGqJGu3mMEzhp
|
Real-GPU receipt (dgx-spark, |
…-cypher-spellings # Conflicts: # CHANGELOG.md
…pelling; one grammar reference The docs correction described in the PR body was left uncommitted: the page said building and querying are two calls and that a seed list takes the scan path, while the same page documented the fused form. The paragraph and the bullet now state what gfql_explain reports at scale. The module docstring is the single statement of the grammar, `ON(col)` without a space parses as in Cypher, and the Cypher spellings are driven through one gfql() call on every engine with a route_engaged pin against the two-step form. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_012Me1E7ZdDuGqJGu3mMEzhp
Read-only review (parallel session) — Cypher DDL spellings, head 96880e5Nothing here touches the branch; findings only, fixes deferred. Note: the colleague reports a local merge of master plus the Evidence (parse-level probes on a detached worktree of the head,
Findings
Recommendation: mergeable after the pending push + green CI; suggestions are optional. 🤖 Generated with Claude Code |
|
You reviewed the pushed head, and you were right that it was not the whole change: the That commit carries the paragraph (building and querying are one call since #2132; Gates at this head: |
|
GPU receipt at the current head, clean first time. dgx-spark, GB10, That covers the cuDF arm of the fused one-call test added in this PR, which drives each new Cypher spelling through |
…-cypher-spellings # Conflicts: # CHANGELOG.md
…-cypher-spellings
Summary
Audit of the GFQL index DDL against current Cypher / GQL spellings (Neo4j Cypher manual; the GQL implementations that add index DDL use Neo4j's spelling; ISO/IEC 39075's own DDL list has no index statement; GSQL does it as
ALTER VERTEX ... ADD INDEX name ON (attr)inside a schema-change job). OurFOR <kind>target and the mandatoryGFQLtoken are deliberate and stay; three optional parts were spelled only our way:CREATE GFQL INDEX [name] IF NOT EXISTS FOR <kind>CREATE GFQL INDEX [name] FOR <kind>(a repeat CREATE was already a no-op)... ON (col)... ON colDROP GFQL INDEX name IF EXISTSDROP GFQL INDEX IF EXISTS nameBoth spellings parse to the same wire op. Misplaced options stay malformed:
IF EXISTSon CREATE,IF NOT EXISTSon DROP, the option twice, unbalanced parentheses, the option before the name.Docs: one sentence in
indexing.rstlists the optional parts.Docs: the
indexing.rstparagraph that said building and querying are two calls and that a seed list takes the scan path / is not accepted inGRAPH { }is corrected (fused DDL landed in cdac877, #2119;WHERE m.id IN [...]is index-served in the row form at scale and accepted in theGRAPH { }form on the scan path). This was the residual of #2130, closed as superseded.Test plan
graphistry/tests/compute/gfql/index/test_index_ddl_cypher_spellings.py(12): same-op pins for five spellings, option values land in the op, six malformed formsgraphistry/tests/compute/gfql/index: 1140 passed;docs/test_doc_examples.py -k indexing: passed;bin/lint.sh, mypy clean🤖 Generated with Claude Code
https://claude.ai/code/session_012Me1E7ZdDuGqJGu3mMEzhp