Skip to content

Releases: genezhang/clickgraph

Release v0.6.7-dev

06 May 02:57
dfa5e82

Choose a tag to compare

[0.6.7-dev] - 2026-05-06

🚀 Features

  • (planner) Phase 1 — write LogicalPlan variants + builder + guard (#277)
  • (render) Phase 2 — WriteRenderPlan + write_to_sql + id_gen (#278)
  • (embedded) Phase 3 — executor wiring + ID generation + block-tracking DDL (#279)
  • (tck) Phase 4 — import write feature files + write-clause docs (#280)
  • (tck) Phase 5a — side-effect step + label-mutation skip tag (#281)
  • (planner) Phase 5b — anonymous-node CREATE routes to __Unlabeled (#282)
  • (tck) Phase 5c — lift Delete1 [3] + per-scenario triage notes (#283)
  • (embedded) Phase 5d — write+RETURN side-channel + accurate counters (#284)
  • (planner) Phase 5e — untyped-MATCH+write fan-out across node tables (#285)
  • (ffi) Expose Phase 5d write_counters side-channel through FFI + Python (#286)
  • Change default HTTP port from 8080 → 7475 (#310)

🐛 Bug Fixes

  • (tck) 402/402 passing — List indexing, type validation, step regex, DELETE detection (#273)
  • (deps) Bump rustls-webpki to 0.103.13 (RUSTSEC-2026-0098/0099/0104) (#274)
  • ShortestPath/allShortestPaths + COUNT regression + test-stack glue (#311)
  • (bolt) Neo4j Browser 5.x compatibility — handshake + bundled-query intercepts + SHOW stubs (#312)
  • (ci) Scope release build to shipped crates only (no chdb on Windows) (#314)
  • (release) Cfg-gate jemalloc allocator on non-MSVC targets (#315)

💼 Other

  • Prep v0.6.7-dev — version bump + CHANGELOG/STATUS refresh + audit dispositioning (#313)

🚜 Refactor

  • (analyzer) Drop dead pattern_resolver module (#287)
  • Drop dead helper fns flagged by clippy (#288)
  • Assorted clippy idiomatic-Rust fixes (#289)
  • Address remaining mechanical clippy warnings (#290)
  • Mechanical clippy warning cleanup (92→68) (#291)
  • Clean up unnecessary_unwrap and map_entry warnings (#292)
  • Triage 6 dead-code warnings (#293)
  • Bundled clippy fixes (&mut, FromStr, type aliases) (#294)
  • Unwrap redundant test mod blocks (module_inception) (#295)
  • Silence only_used_in_recursion on Pass-API helpers (#296)
  • Factor very-complex types into named aliases (#297)
  • Box CypherStatement::Query payload (large_enum_variant) (#298)
  • Retire 4 too_many_arguments warnings (dead + test-only) (#299)
  • Retire 4 too_many_arguments warnings in variable_length_cte (#300)
  • Retire 5 too_many_arguments warnings in render_plan + view_scan (#301)
  • Clear remaining too_many_arguments + doc-list warnings (#302)
  • Clear 9 clippy warnings in clickgraph-embedded (#305)
  • Clear per-crate clippy warnings (tool + embedded) (#306)
  • Delete orphan test dirs + 5 unused deprecated items (#309)

📚 Documentation

  • Design plan for embedded-mode Cypher writes (#275)
  • (embedded-writes) Lock Phase 0 decisions; switch SET to lightweight UPDATE (#276)
  • Refresh STATUS + CHANGELOG for v0.6.7-dev cycle (#303)
  • Fix all 113 rustdoc broken-link warnings (#304)

⚙️ Miscellaneous Tasks

  • Adding motivation.md (#272)
  • Lock in zero-warning state via -D warnings + fmt --all (#307)
  • Align clickgraph-client MSRV with workspace (1.70 → 1.85) (#308)

v0.6.6-dev

06 Apr 06:25
4d99386

Choose a tag to compare

What's New in v0.6.6-dev

  • cg CLI tool — Agent/script-oriented CLI (clickgraph-tool crate). Translate and execute Cypher without a running server: cg sql, cg validate, cg query, cg nl (NL→Cypher via LLM), cg schema show/validate/discover/diff. Config via ~/.config/cg/config.toml. Designed for agentic callers, CI pipelines, and scripting.
  • embedded feature now opt-inclickgraph-embedded compiles without chdb by default. New Database::new_remote(schema, RemoteConfig) constructor executes Cypher against external ClickHouse with no chdb dependency.
  • Agent skills — Three publishable skills for any agentic framework (Claude Code, LangChain, AutoGen, CrewAI, OpenAI function calling): /cypher, /graph-schema, /schema-discover. See skills/README.md.
  • openCypher TCK: 383/402 (95.3%), 0 failures — up from 379/402. The 19 skipped scenarios cover Cypher write clauses (CREATE, SET, DELETE, MERGE).
  • Type inference ANY fixWHERE n.p1 = 12 OR n.p2 = 13 across multi-label nodes now correctly retains all candidate types. IS NULL / IS NOT NULL accesses handled without incorrectly eliminating type candidates.
  • chdb resource capsSystemConfig gains max_memory_usage_bytes; both max_threads and max_memory_usage applied at session init. chdb-rust bumped to 1.3.1.

See CHANGELOG.md for full history.

Release v0.6.5-dev

21 Mar 23:10
b1d25f3

Choose a tag to compare

[0.6.5-dev] - 2026-03-21

🚀 Features

  • Embedded write support for agentic GraphRAG workflows (#236)
  • Property_types field for type-aware writable table DDL (#238)
  • Hybrid remote query + local storage for embedded mode (#240)
  • Kuzu API parity quick wins (#242)
  • COPY FROM import for CSV, Parquet, and auto-detected formats (#243)
  • Date, Timestamp, UUID Value types (#244)
  • Arrow, Pandas, Polars DataFrame output for Python (#245)

🐛 Bug Fixes

  • Release pipeline and Docker publish for protected branches (#235)

💼 Other

📚 Documentation

  • Add embedded write API to README What's New (#237)
  • Embedded mode tutorials and runnable examples (#246)

🧪 Testing

  • Hybrid remote query E2E tests + fix edge extraction (#241)

Release v0.6.4-dev

15 Mar 05:34
882e615

Choose a tag to compare

[0.6.4-dev] - 2026-03-14

🚀 Features

  • Denormalized & coupled schema support: Full query support for schemas where node properties are embedded in edge tables via from_node_properties/to_node_properties. Includes property mapping, ORDER BY resolution, UNION aggregate column rewriting, and id() on virtual nodes (PRs #224-#228).

  • OPTIONAL MATCH on denormalized schemas: New CTE + LEFT JOIN architecture for correct LEFT JOIN semantics when MATCH produces a UNION standalone node scan. Includes UnionDistribution skip for optional patterns, column reference rewriting, and join preservation through the optimizer (PRs #229-#230).

  • VLP on denormalized/polymorphic schemas: Fixed exact-length VLP cycle prevention for virtual nodes (no separate table), enabling *2, *3 patterns. Range VLP (*1..3), path variables, and shortestPath all work on denormalized schemas (PR #231).

  • Cross-schema pattern matrix tests: Comprehensive test suite covering 15 query patterns across 5 schema types (standard, FK-edge, denormalized, polymorphic, coupled). 151 tests passing, 0 xfails (PRs #226-#232).

🐛 Bug Fixes

  • Denormalized property mapping: get_properties_with_table_alias() resolves node properties through edge table's from_node_properties/to_node_properties with direction awareness (PR #225).
  • id(node) on denormalized nodes: SelectBuilder Case 5 now resolves through edge alias and mapped column instead of using the virtual node alias directly (PR #227).
  • UNION branch Column qualification: Bare Column("OriginCityName") expressions from denormalized ViewScans converted to PropertyAccessExp with correct alias in GraphNode handler (PR #228).
  • VLP cycle prevention: Moved extract_table_name calls inside non-denormalized branch — denormalized patterns use from_id/to_id directly (PR #231).
  • UnionDistribution: Skip distributing optional GraphRel over denormalized Union to preserve LEFT JOIN semantics (PR #229).
  • is_node_denormalized: Now handles Union of denormalized GraphNodes (PR #229).

🧹 Infrastructure

  • jemalloc memory allocator: Reduces memory fragmentation for long-running server workloads (PR #213).
  • Plan explosion guard: Prevents combinatorial blowup in multi-type VLP expansion (PR #212).
  • Test cleanup: ~103 stale xfail markers removed, 25 invalid test queries converted to skips (PRs #211, #218-#223, #227, #232).

[0.6.3-dev] - 2026-03-05

🚀 Features

  • APOC Export Procedures: Neo4j-compatible CALL apoc.export.{csv|json|parquet}.query(cypher, destination, config) for exporting query results. Supports local files, S3, GCS, Azure, and HTTP destinations. Works in HTTP server, Bolt protocol, and embedded mode.

    • Destination resolver: Maps URI schemes to ClickHouse INSERT INTO FUNCTION table functions (file(), s3(), url(), azureBlobStorage())
    • Parser fix: Standalone CALL with positional args now correctly parsed even when inner Cypher contains RETURN/UNION keywords
    • Config: Parquet compression codecs (snappy, gzip, lz4, zstd, brotli)
  • Embedded mode (PR #179): Run Cypher graph queries entirely in-process via chdb — no external ClickHouse server required. Supports Parquet, CSV, Iceberg, Delta Lake, and S3-compatible storage.

    • QueryExecutor trait: Abstracts SQL execution; RemoteClickHouseExecutor (existing) and ChdbExecutor (new) are the two backends. Default behaviour is unchanged.
    • clickgraph-embedded crate: Kuzu-compatible Rust library API — Database::new(schema, config), Connection::new(&db), conn.query(cypher), result.next()Row.
    • source: schema field: Optional per-node/relationship URI pointing to the data file. At startup, ClickGraph creates chdb VIEWs named after the schema table: field so existing SQL generation requires no changes.
    • URI schemes: file://, s3://, gs://, iceberg+s3://, iceberg+local://, delta+s3://, table_function:<raw>.
    • StorageCredentials: S3/GCS/Azure credentials applied as chdb SET commands at session init; falls back to environment variables and instance-profile credentials automatically.
    • Server embedded flag: --embedded CLI flag / CLICKGRAPH_EMBEDDED=true env var; HTTP and Bolt endpoints work as normal.
    • Tests: 9 source_resolver tests, 8 credential tests, 17 embedded unit tests, 10 e2e integration tests.
    • Docs: Embedded Mode wiki page

🚀 Features

  • LDBC SNB benchmark: 14/37 → 36/37 (97%) — 22 queries promoted from adapted to official Cypher. The only remaining gap is bi-16 (CALL subquery, a known language feature gap).

    • Official queries promoted: complex-3, complex-5, complex-7, complex-10, complex-12, complex-13, bi-3, bi-8, bi-14, and others
    • Adapted queries remaining: bi-17 (multi-VLP), complex-14 (weighted shortest path via cost(path))
  • GraphRAG structured output (format: "Graph") (PR #165): Query results returned as graph-structured JSON with nodes, edges, and properties — enables direct consumption by graph visualization and RAG pipelines.

  • ClickHouse cluster load balancing (CLICKHOUSE_CLUSTER env var) (PR #164): Distributes queries across ClickHouse cluster nodes for horizontal read scaling.

  • apoc.meta.schema() for MCP server compatibility (PR #163): Implements the Neo4j APOC procedure that MCP servers and graph tools use for schema introspection.

  • LLM-powered schema discovery (:discover command) (PR #146): Server formats a discovery prompt (POST /schemas/discover-prompt), client calls LLM (Anthropic or OpenAI-compatible) to generate YAML schema from ClickHouse table metadata. Replaced the GLiNER/gline-rs approach.

  • Weighted shortest path (cost(path) function) (PR #160): Supports Dijkstra-style weighted VLP traversal for queries like complex-14. WeightCteConfig carries weight info through the VLP pipeline; auto-creates bidirectional weight CTEs for undirected traversal.

  • List comprehension → arrayCount() optimization (PR #153): Parses [x IN list WHERE cond | expr] syntax, maps size(ListComprehension) to ClickHouse arrayCount() — avoids correlated subqueries that fail with UNION ALL ("Cannot clone Union plan step").

  • Pattern comprehension → pre-aggregated CTE approach (PR #159): Replaces correlated subqueries from size(PatternComprehension) with pre-aggregated CTEs + LEFT JOINs. Includes arrayConcat() for list concatenation (list1 + list2).

  • Official complex-7 — chained map access + NOT EXISTS (PR #152): Greedy chained property parsing (a.b.c), map literal node flattening (head(collect({key: node}))), split NOT EXISTS for undirected edges.

  • Official complex-3 — supertype inference + IN→OR expansion (PR #151): Supertype collapse (Post+Comment → Message), IN [col1, col2]OR expansion for ClickHouse compatibility, 5-WITH chain support.

  • Map property access (collect({score: x})[0].score → ClickHouse map subscript) (PR #147): Tracks map_keys through CTE pipeline, generates ArraySubscript for map property access with 0-based → 1-based index conversion.

  • UNWIND support (ARRAY JOIN) (PR #133): Translates Cypher UNWIND to ClickHouse ARRAY JOIN.

  • --log-level CLI flag for runtime log level configuration.

🐛 Bug Fixes

  • Undirected edge fixes: Removed has_nested_undirected_edge guard that prevented UNION split for mid-chain undirected edges (PR #147). Fixed BidirectionalUnion for multi-pattern MATCH with bound endpoints — collapses redundant Union to single Outgoing branch (PR #148).

  • VLP (variable-length path) fixes: Fixed path rewriting for reverse UNION branches (PR #135), composite ID support (PR #134, #136), *N..N exact-hop guard (PR #137), duplicate WITH RECURSIVE removal (PR #131), multi-VLP query support (PR #132), DISTINCT deduplication (PR #130), zero-lower-bound *0.. for single-type and multi-type VLPs (PR #142), CROSS JOIN removal for VLP CTEs in downstream queries (PR #145).

  • OPTIONAL MATCH fixes: INNER→LEFT JOIN conversion for CTE-backed JOINs in OPTIONAL MATCH context, spurious duplicate JOIN removal, orphan JOIN removal guards, collect(node) expansion to ID-only for has() compatibility (PR #143).

  • CTE/scope fixes: Bare variable resolution after WITH barrier (PR #120, #121), cte_references preservation in UNION branches (PR #122), composite alias augmentation (PR #128), buried WithClause preservation in DuplicateScansRemoving (PR #138).

  • shortestPath fixes: CASE path IS NULLifNull(minOrNull(hop_count), -1) rewriting, spurious non-VLP JOIN cleanup, endpoint inline filter preservation (PR #157).

  • Parser whitespace fix: MATCH/OPTIONAL MATCH now handle leading whitespace after $param syntax (PR #145).

  • Browser click-to-expand regressions: Fixed 5 bugs from scope resolution redesign — filter_tagging crash, VLP multi-type inference, type mismatch, polymorphic label extraction, pruned MATCH detection (PR #156).

  • Determinism fixes: HashSet→BTreeSet in anchor node selection, HashMap→BTreeMap in GraphSchema, sorted conversions in CTE extraction (PR #137, #139).

⚙️ Infrastructure

  • Integration test cleanup: 3,068 tests passing, 57 stale xfails removed (PR #169).
  • Scoping-only WITH collapse + benchmark infrastructure (PR #168): Optimizes scoping-only WITH clauses that don't need CTE materialization.
  • Schema-parameterized SQL generation tests: 76 tests across 6 schema variants (PR #162).
  • Browser interaction tests with full schema variant coverage (PR #161).
  • Version bump to v0.6.3-dev with README cleanup (PR #167).
  • Roadmap and guide updates (PR #166).

[0.6.2-dev] - 2026-02-20

⚙️ Architecture

  • Scope-aware variable resolution for CTE/UNION rendering (Feb 20, 2026, PR #120): Infrastructure for correct variable resolution acro...
Read more

Release v0.6.3-dev

02 Mar 07:08

Choose a tag to compare

What's New

📊 LDBC Social Network Benchmark: 97% Coverage

36 of 37 LDBC SNB queries now pass — up from 14/37 in v0.6.2-dev. 22 queries promoted from adapted workarounds to official Cypher syntax. The sole remaining gap is bi-16 (CALL subquery — a known language feature limitation).

🚀 New Features

  • GraphRAG structured output (format: "Graph") — query results as graph-structured JSON with nodes, edges, and properties for direct consumption by visualization tools and RAG pipelines
  • ClickHouse cluster load balancing (CLICKHOUSE_CLUSTER env var) — distributes queries across cluster nodes for horizontal read scaling
  • apoc.meta.schema() — Neo4j APOC compatibility for MCP servers and graph introspection tools
  • LLM-powered schema discovery (:discover command in clickgraph-client) — generates YAML graph schema from ClickHouse table metadata via Anthropic or OpenAI-compatible LLMs
  • Weighted shortest path (cost(path) function) — Dijkstra-style weighted traversal with bidirectional weight CTEs
  • List comprehension ([x IN list WHERE cond | expr]) → optimized to arrayCount(), avoiding correlated subqueries
  • Pattern comprehension → pre-aggregated CTE + LEFT JOIN approach, plus arrayConcat() for list concatenation
  • Chained map access (a.b.c), map literal node flattening, map property subscript access
  • Supertype inference (Post+Comment → Message) with IN [col]OR expansion for ClickHouse
  • UNWIND support via ClickHouse ARRAY JOIN
  • --log-level CLI flag for runtime log configuration

🐛 Bug Fixes (highlights)

  • Undirected edge UNION generation for mid-chain and multi-pattern MATCH
  • 10+ VLP fixes: reverse branch paths, composite IDs, *0.. zero-hop, CROSS JOIN removal, deduplication
  • OPTIONAL MATCH: INNER→LEFT conversion, orphan JOIN removal, collect()/IN compatibility
  • CTE scope: bare variable resolution, buried WithClause preservation, composite alias augmentation
  • shortestPath: CASE path IS NULL rewriting, endpoint filter preservation
  • Parser: leading whitespace after $param syntax
  • Browser click-to-expand: 5 regression fixes
  • Deterministic output: HashSet→BTreeSet/BTreeMap across anchor selection and schema iteration

⚙️ Infrastructure

  • Integration tests: 3,068 passing, 57 stale xfails removed
  • Scoping-only WITH collapse optimization
  • Schema-parameterized SQL generation tests (76 tests × 6 schemas)
  • Browser interaction test coverage

See CHANGELOG.md for full details.

v0.6.2-dev

19 Feb 07:22

Choose a tag to compare

What's New

🐛 Bug Fixes — Neo4j Browser click-to-expand (PR #116)

Five regression bugs from the scope resolution redesign (PR #115) that completely broke Neo4j Browser click-to-expand:

  • filter_tagging crash on Empty child plan after TypeInference pruning
  • VLP multi-type inference — empty UNION branches generated due to stale GraphNode state
  • VLP+WITH type mismatch — UInt64 vs String in JOIN condition
  • extract_node_labels not polymorphic — returned only primary label for multi-type nodes
  • is_return_only_query — misidentified pruned MATCH as pure RETURN → empty SQL
  • HTTP OPTIONS/GET probes on Bolt port downgraded from ERROR to DEBUG noise

⚙️ Infrastructure

  • Neo4j Browser demo: all 5 tables → MergeTree (data persists across restarts)
  • Demo data loading consolidated to init-db.sql single entrypoint
  • Demo clickgraph service → genezhang/clickgraph:v0.6.2-dev

🚀 Features (from earlier in this cycle)

  • Foundational variable scope resolution redesign (PR #115)
  • Schema/type inference consolidation
  • ORDER BY / HAVING / LIMIT / SKIP clause extraction fixes

See CHANGELOG.md for full details.

Release v0.6.1

12 Jan 22:46

Choose a tag to compare

[0.6.1] - 2026-01-12

🚀 Features

  • Integrate data_security schema, remove benchmark schemas from unified tests
  • Auto-load all test schemas at session start
  • Add PatternGraphMetadata POC for cleaner join inference evolution
  • Phase 1 - Use cached node references from PatternGraphMetadata
  • (graph_join_inference) Phase 2 - Simplified cross-branch detection using metadata
  • (graph_join_inference) Phase 4 - Add relationship uniqueness constraints
  • Complete fixed-length path inline JOIN optimization
  • Property pruning optimization with unified test infrastructure
  • Edge constraints for cross-node validation (8/8 tests passing)
  • Pattern Comprehensions and Multiple UNWIND support
  • Add multi-schema YAML support for loading multiple graph schemas
  • Add multi-schema database setup and test scripts
  • Add array subscript syntax support and complete multi-type VLP path functions
  • Make MAX_INFERRED_TYPES configurable via query parameter

🐛 Bug Fixes

  • Support anonymous nodes in graph patterns
  • Use node ID columns for VLP CTE generation
  • Optimize JOIN generation based on property usage, not node naming
  • Optimize JOIN generation based on property usage, not node naming
  • Permanently fix test infrastructure issues
  • Add filesystem and group membership test data to setup script
  • Add small-scale benchmark test data and cleanup obsolete scripts
  • Migrate from schema_name='default' to USE clause convention
  • Add missing matrix test schemas and USE clause support
  • Add USE clause to multi-hop pattern tests
  • Update social_polymorphic schema to use actual table names
  • Resolve ontime schema name conflict, add benchmark schemas back for matrix tests
  • Add flights to default db for ontime_benchmark - Copy flights to default database - Comprehensive matrix: +256 tests - Overall: +186 tests to 2947 - Session total: +1047 tests (+55 percent)
  • Restore ontime_flights schema name for pattern matrix tests - Revert ontime_denormalized back to ontime_flights - Remove ontime_benchmark from unified test loading - Update matrix conftest to use ontime_flights - Pattern schema matrix: 0/51 to 9/51 recovery - Overall: 2758 to 2958 (+200 tests) - Session: 1900 to 2958 (+1058 tests, +55.7 percent, 85.2 percent pass rate)
  • Add property_expressions schema to test loading - Fix database to default where tables actually exist - Replace CASE WHEN with if() for parsing compatibility - Add to load_test_schemas.py - Property expressions tests: 0/28 to 13/28 recovery - Overall: 2958 to 2976 (+18 tests) - Session: 1900 to 2976 (+1076 tests, +56.6 percent, 85.7 percent pass rate)
  • Add schema_name to role-based query tests - Role tests now use unified_test_schema - All 5 role-based tests now pass
  • Add missing property aliases to property_expressions schema
  • VLP cross-branch JOIN uses node alias instead of relationship alias
  • VLP transitivity check handles polymorphic relationships
  • All integration tests now passing or properly marked xfail
  • Add relationship labels to edge list test GraphRel structures
  • Update edge list test assertions for SingleTableScan optimization
  • Add proper GraphSchema to failing tests
  • Thread schema through single-hop query pipeline for edge constraints
  • (vlp) Fix denormalized VLP node ID selection (Dec 22 regression)
  • (vlp) Complete denormalized VLP with comprehensive fixes
  • VLP path functions in WITH clauses + CTE body rewriting
  • Remove escaped quotes and multi_schema loader entry from conftest
  • Load denormalized_flights_test schema with proper data
  • VLP WHERE clause alias resolution for denormalized schemas
  • Correct AUTHORED relationship schema in unified_test_multi_schema.yaml
  • Multi-type VLP architectural fix - FROM alias solves all mapping issues
  • Multi-type VLP JSON extraction - skip alias mapping for multi-type CTEs
  • FK-edge zero-length VLP edge tuple generation
  • Unify MAX_INFERRED_TYPES default to 5 for consistency
  • Parameterized views apply to both node and edge tables in VLP queries
  • Add anyLast() wrapping for CTE references in GROUP BY aggregations
  • Rewrite CTE column references in JOINs
  • VLP+WITH+MATCH pattern (ic9) - delegate to input.extract_joins() for CTE references
  • Add VLP endpoint detection in find_id_column_for_alias
  • Correct ontime_denormalized schema to use default database
  • Skip JOINs for fully denormalized VLP patterns
  • Map denormalized VLP endpoint aliases to CTE alias for rewriting
  • Consecutive MATCH with per-MATCH WHERE, comment support, scalar aggregate investigation
  • WITH expression scope - rewrite CASE expressions to use CTE columns

💼 Other

  • Comprehensive test failure categorization (507 failures)
  • V0.6.1 - WITH clause fixes, GraphRAG enhancements, LDBC progress
  • Update Cargo.lock for v0.6.1 release

🚜 Refactor

  • (graph_join_inference) Phase 3 - Break up infer_graph_join() god method
  • [breaking] Migrate all integration tests to multi-schema format
  • [breaking] Remove obsolete unified_test_schema and cleanup
  • Consolidate denormalized_flights schema references

📚 Documentation

  • Update README.md with v0.6.0 and accumulated features
  • Update KNOWN_ISSUES.md with v0.6.0 fixes
  • Archive wiki for v0.6.0 release
  • Add release notes for v0.6.0
  • Fix ClickHouse function prefix (ch./chagg. not clickhouse.)
  • Fix composite node ID example (use nodes not edges)
  • Update STATUS and investigation plan with anonymous node fix
  • Update STATUS with property usage optimization and current test status
  • Complete test infrastructure documentation
  • Update STATUS with schema loading fix
  • Update STATUS - ALL INTEGRATION TESTS PASSING! 🎉
  • Add comprehensive architecture analysis for Scan/ViewScan/GraphNode relationships
  • Update gap analysis - Gap #2 already implemented
  • Add schema testing requirements (VLP multi-schema mandate)
  • Add VLP denormalized property handling TODO
  • Add session findings and feature analysis
  • Clean up KNOWN_ISSUES.md and add path function limitation
  • Update CHANGELOG and test infrastructure for VLP fixes
  • Add multi-schema configuration documentation
  • Add multi-schema setup guide
  • Update TESTING.md for multi-schema architecture
  • Update STATUS.md - remove load_test_schemas.py reference
  • Add VS Code terminal freeze prevention to TESTING.md
  • Document VLP WHERE clause bug discovery
  • Update Cypher-Subgraph-Extraction.md with verified pattern support matrix
  • Document max_inferred_types feature and update default to 5
  • Update STATUS with LDBC progress and IC-9 CTE naming issue
  • Systematic documentation cleanup and reorganization
  • Streamline STATUS.md to focus on current state (2822 → 322 lines)
  • LDBC benchmark baseline testing and analysis
  • Update README test coverage to 3000+ tests and reorganize features
  • Archive wiki documentation for v0.6.1 release

🧪 Testing

  • Update test expectations for known limitations
  • Add error message verification for known limitations
  • (graph_join_inference) Add comprehensive unit tests for Phase 4 uniqueness constraints
  • Add comprehensive VLP cross-functional testing
  • Add comprehensive GraphRAG schema variation tests
  • Add zero-length VLP tests for [*0..] and [*0..N] patterns

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]
  • Add lineage test schema and cleanup temporary files
  • Move SCHEMA_THREADING_ARCHITECTURE.md to docs/development/
  • Ignore docs1 directory in gitignore
  • Clean up docs
  • More doc cleanup
  • More docs clean up, README
  • Remove unused Flight node from unified_test_schema.yaml
  • Update CHANGELOG.md [skip ci]

[0.6.0] - 2025-12-22

🚀 Features

  • (functions) Add 18 new Neo4j function mappings for v0.5.5
  • (functions) Add 30 more Neo4j function mappings for v0.5.5
  • (functions) Add ClickHouse function pass-through via ch:: prefix
  • (functions) Add ClickHouse aggregate function pass-through via ch. prefix
  • (functions) Add chagg. prefix for explicit aggregates, expand aggregate registry to ~150 functions
  • (benchmark) Add LDBC SNB Interactive v1 benchmark
  • (benchmark) Add ClickGraph schema matching datagen format
  • (benchmark) Add LDBC query test script
  • (ldbc) Achieve 100% LDBC BI benchmark (26/26 queries)
  • Implement chained WITH clause support with CTE generation
  • Support ORDER BY, SKIP, LIMIT after WITH clause
  • Implement size() on patterns with schema-aware ID lookup
  • Add composite node ID infrastructure for multi-column primary keys
  • Add CTE reference validation
  • CTE-aware variable resolution for WITH clauses
  • Fix CTE column filtering and JOIN condition rewriting for WITH clauses
  • CTE-aware variable resolution + WITH validation + documentation improvements
  • Add lambda expression support for ClickHouse passthrough functions
  • Add comprehensive LDBC benchmark suite with loading, query, and concurrency tests
  • Implement scope-based variable resolution in analyzer (Phase 1)
  • Remove dead CTE validation functions
  • Implement CTE column resolution across all join strategies
  • Remove obsolete JOIN rewriting code from renderer (Phase 3D-A)
  • Move CTE column resolution to analyzer (Phase 3D-B)
  • Pre-compute projected columns in analyzer (Phase 3E)
  • Add CTE schema registry for analyzer (Phase 3F)
  • Use pre-computed projected_columns in renderer (Phase 3E-B)
  • Implement cross-branch shared node JOIN detection
  • Allow disconnected comma patterns with WHERE clause predicates
  • Support multiple sequential MATCH clauses
  • Implement generic CTE JOIN generation using correlation predicates
  • Complete LDBC SNB schema and data loading infrastructure
  • Improve relationship validation error messages
  • Clarify node_id semantics as property names with auto-identity mappings
  • Complete composite node_id support (Phase 2)
  • Add polymorphic relationship resolution architecture
  • Complete polymorphic relationship resolution data flow
  • Fix polymorphic relationship resolution in CTE generation
  • Add Comment REPLY_OF Message schema definition
  • Add schema entity collection in VariableResolver for Projection scope
  • Add dedic...
Read more

Release v0.6.0

22 Dec 15:50

Choose a tag to compare

[0.6.0] - 2025-12-22

🚀 Features

  • (functions) Add 18 new Neo4j function mappings for v0.5.5
  • (functions) Add 30 more Neo4j function mappings for v0.5.5
  • (functions) Add ClickHouse function pass-through via ch:: prefix
  • (functions) Add ClickHouse aggregate function pass-through via ch. prefix
  • (functions) Add chagg. prefix for explicit aggregates, expand aggregate registry to ~150 functions
  • (benchmark) Add LDBC SNB Interactive v1 benchmark
  • (benchmark) Add ClickGraph schema matching datagen format
  • (benchmark) Add LDBC query test script
  • (ldbc) Achieve 100% LDBC BI benchmark (26/26 queries)
  • Implement chained WITH clause support with CTE generation
  • Support ORDER BY, SKIP, LIMIT after WITH clause
  • Implement size() on patterns with schema-aware ID lookup
  • Add composite node ID infrastructure for multi-column primary keys
  • Add CTE reference validation
  • CTE-aware variable resolution for WITH clauses
  • Fix CTE column filtering and JOIN condition rewriting for WITH clauses
  • CTE-aware variable resolution + WITH validation + documentation improvements
  • Add lambda expression support for ClickHouse passthrough functions
  • Add comprehensive LDBC benchmark suite with loading, query, and concurrency tests
  • Implement scope-based variable resolution in analyzer (Phase 1)
  • Remove dead CTE validation functions
  • Implement CTE column resolution across all join strategies
  • Remove obsolete JOIN rewriting code from renderer (Phase 3D-A)
  • Move CTE column resolution to analyzer (Phase 3D-B)
  • Pre-compute projected columns in analyzer (Phase 3E)
  • Add CTE schema registry for analyzer (Phase 3F)
  • Use pre-computed projected_columns in renderer (Phase 3E-B)
  • Implement cross-branch shared node JOIN detection
  • Allow disconnected comma patterns with WHERE clause predicates
  • Support multiple sequential MATCH clauses
  • Implement generic CTE JOIN generation using correlation predicates
  • Complete LDBC SNB schema and data loading infrastructure
  • Improve relationship validation error messages
  • Clarify node_id semantics as property names with auto-identity mappings
  • Complete composite node_id support (Phase 2)
  • Add polymorphic relationship resolution architecture
  • Complete polymorphic relationship resolution data flow
  • Fix polymorphic relationship resolution in CTE generation
  • Add Comment REPLY_OF Message schema definition
  • Add schema entity collection in VariableResolver for Projection scope
  • Add dedicated LabelInference analyzer pass
  • Enhance TypeInference to infer both node labels and edge types
  • Reduce MAX_INFERRED_TYPES from 20 to 5
  • (parser) Add clear error messages for unsupported pattern comprehensions
  • (parser) Add clear error messages for bidirectional relationship patterns
  • (parser) Convert temporal property accessors to function calls
  • (analyzer) Add UNWIND variable scope handling to variable_resolver
  • (analyzer) Add type inference for UNWIND elements from collect() expressions
  • Support path variables in comma-separated MATCH patterns
  • Add polymorphic relationship resolution with node types
  • Complete collect(node) + UNWIND tuple mapping & metadata preservation architecture
  • Make CLICKHOUSE_DATABASE optional with 'default' fallback
  • Add parser support for != (NotEqual) operator
  • Add unified test schema for streamlined testing
  • Add unified test data setup and fix matrix test schema issues
  • Complete multi-tenant parameterized view support
  • Add denormalized flights schema to unified test schema
  • Add VLP transitivity check to prevent invalid recursive patterns

🐛 Bug Fixes

  • (benchmark) Use Docker-based LDBC data generation
  • (benchmark) Align DDL with actual datagen output format
  • (benchmark) Add ClickHouse credentials support
  • (benchmark) Align DDL and schema with actual datagen output
  • (ldbc) Fix CTE pattern for WITH + table alias pass-through
  • (ldbc) Fix ic3 relationship name POST_IS_LOCATED_IN -> POST_LOCATED_IN
  • WITH+MATCH CTE generation for correct SQL context
  • Replace all silent defaults with explicit errors in render_expr.rs
  • Eliminate ViewScan silent defaults - require explicit relationship columns
  • Expand WITH TableAlias to all columns for aggregation queries
  • Track CTE schemas to build proper property_mapping for references
  • Remove CTE validation to enable nested WITH clauses
  • Prevent duplicate CTE generation in multi-level WITH queries
  • Three-level WITH nesting with correct CTE scope resolution
  • Add proper schemas to WITH/HAVING tests
  • Correct CTE naming convention to use all exported aliases
  • Coupled edge alias resolution for multiple edges in same table
  • Rewrite expressions in intermediate CTEs to fix 4-level WITH queries
  • Add GROUP BY and ORDER BY expression rewriting for final queries
  • Issue #6 - Fix Comma Pattern and NOT operator bugs
  • Resolve 3 critical LDBC query blocking issues
  • (ldbc) Inline property matching & semantic relationship expansion
  • (ldbc) Handle IS NULL checks on relationship wildcards (IS7)
  • (ldbc) Fix size() pattern comprehensions - handle internal variables correctly (BI8)
  • (ldbc) Rewrite path functions in WITH clause (IC1)
  • Strip database prefixes from CTE names for ClickHouse compatibility
  • Cartesian Product WITH clause missing JOIN ON
  • Operator precedence in expression parser
  • VLP endpoint JOINs with alias rewriting for chained patterns
  • Correct NOT operator precedence and remove hardcoded table fallbacks
  • Three critical shortestPath and query execution bugs
  • Extend VLP alias rewriting to WHERE clauses for IC1 support
  • Use correct CTE names for multi-variant relationship JOINs
  • Remove database prefix from CTE table names in cross-branch JOINs
  • Hoist trailing non-recursive CTEs to prevent nesting scope issues
  • VLP + WITH label corruption bug - use node labels in RelationshipSchema
  • Resolve compilation errors from AST and GraphRel changes
  • Add fallback to lookup table names from relationship schema
  • Complete RelationshipSchema refactoring - all 646 tests passing
  • Add database prefixes to base table JOINs
  • Use underscore convention for CTE column aliases
  • Thread node labels through relationship lookup pipeline for polymorphic relationships
  • Support filtered node views in relationship validation
  • Add JOIN dependency sorting to CTE generation path
  • Use existing TableCtx labels in multi-pattern MATCH label inference
  • TypeInference creates ViewScan for inferred node labels
  • QueryValidation respects parser normalization
  • Populate from_id/to_id columns during JOIN creation for correct NULL checks
  • (ldbc) Align BI queries with LDBC schema definitions
  • Prevent RefCell panic in populate_relationship_columns_from_plan
  • UNWIND after WITH now uses CTE as FROM table instead of system.one
  • Replace all panic!() with log::error!() - PREVENT SERVER CRASHES
  • Clean up unit tests - fix 21 compilation errors
  • Complete unit test cleanup - fix assertions and mark unimplemented features
  • Replace non-standard LIKE syntax with proper OpenCypher string predicates
  • Add != operator support to comparison expression parser
  • Preserve database prefix in ViewTableRef SQL generation
  • Relationship variable expansion + consolidate property helpers
  • Use relationship alias for denormalized edge FROM clause
  • Re-enable selective cross-branch JOIN for comma-separated patterns
  • Rel_type_index to prefer composite keys over simple keys
  • WITH...MATCH pattern using wrong table for FROM clause
  • Update test labels to match unified_test_schema
  • Test_multi_database.py - use schema_name instead of database for USE clause
  • Unify aggregation logic and fix multi-schema support
  • Multi-table label bug fixes and error handling improvements

💼 Other

  • Fix dependency vulnerabilities for v0.5.5
  • Partial fix for nested WITH clauses - add recursive handling
  • Multi-variant CTE column name resolution in JOIN conditions
  • SchemaInference using table names instead of node labels

🚜 Refactor

  • Fix compiler warnings and clean up unused variables
  • (functions) Change ch:: to ch. prefix for Neo4j ecosystem compatibility
  • Extract TableAlias expansion into helper functions
  • Replace wildcard expansion in build_with_aggregation_match_cte_plan with helper
  • Remove deprecated v1 graph pattern handler (1,568 lines)
  • Extract CTE hoisting helper function
  • Remove unused ProjectionKind::With enum variant
  • Remove 676 lines of dead WITH clause handling code
  • Remove 47 lines of dead GraphNode branch with empty property_mapping
  • Remove redundant variable resolution from renderer (Phase 3A)
  • Remove unused bidirectional and FK-edge functions
  • Remove dead code function find_cte_in_plan
  • Consolidate duplicate property extraction code (-23 lines)
  • Remove dead extract_ctes() function (-301 lines)
  • Separate graph labels from table names in RelationshipSchema
  • Remove redundant WithScopeSplitter analyzer pass
  • Remove old parsing-time label inference
  • Consolidate inference logic into TypeInference with polymorphic support
  • Replace hardcoded fallbacks with descriptive errors
  • Add strict validation for system.one usage in UNWIND
  • ELIMINATE ALL HARDCODED FALLBACKS - fail fast instead
  • Consolidate test data setup - use MergeTree, remove duplicates

📚 Documentation

  • Update wiki documentation for v0.5.4 release
  • Archive wiki for v0.5.4 release
  • Add UNWIND clause documentation to wiki
  • Update v0.5.4 wiki snapshot with UNWIND documentation
  • Update Known-Limitations with recently implemented features
  • Update v0.5.4 wiki snapshot with corrected feature status
  • Add 30 new functions to Cypher-Functions.md reference
  • Expand vector similarity section with RAG usage
  • Clarify scalar vs aggregate function categories in ch.* docs
  • Add lambda expression limitation to ch.* pass-through documentation
  • Split ClickHous...
Read more

Release v0.5.4

08 Dec 01:44

Choose a tag to compare

[0.5.4] - 2025-12-08

🚀 Features

  • Add native support for self-referencing FK pattern
  • Add relationship uniqueness enforcement for undirected patterns
  • (schema) Add fixed-endpoint polymorphic edge support
  • (union) Add UNION and UNION ALL query support
  • Multi-table label support and denormalized schema improvements
  • (pattern_schema) Add unified PatternSchemaContext abstraction - Phase 1
  • (graph_join_inference) Integrate PatternSchemaContext - Phase 2
  • (graph_join_inference) Add handle_graph_pattern_v2 - Phase 3
  • (pattern_schema) Add FkEdgeJoin strategy for FK-edge patterns
  • (graph_join) Wire up handle_graph_pattern_v2 with USE_PATTERN_SCHEMA_V2 env toggle

🐛 Bug Fixes

  • GROUP BY expansion and count(DISTINCT r) for denormalized schemas
  • Undirected multi-hop patterns generate correct SQL
  • Support fixed-endpoint polymorphic edges without type_column
  • Correct polymorphic filter condition in graph_join_inference
  • Normalize GraphRel left/right semantics for consistent JOIN generation
  • Recurse into nested GraphRels for VLP detection
  • (render_plan) Add WHERE filters for VLP chained pattern endpoints (Issue #5)
  • (parser) Reject binary operators (AND/OR/XOR) as variable names
  • Multi-hop anonymous patterns, OPTIONAL MATCH polymorphic, string operators
  • Aggregation and UNWIND bugs
  • Denormalized schema query pattern fixes (TODO-1, TODO-2, TODO-4)
  • Cross-table WITH correlation now generates proper JOINs (TODO-3)
  • WITH clause alias propagation through GraphJoins wrapper (TODO-8)
  • Multi-hop denormalized edge JOIN generation
  • Update schema files to match test data columns
  • (pattern_schema) Pass prev_edge_info for multi-hop detection in v2 path
  • (filter_tagging) Correct owning edge detection for multi-hop intermediate nodes
  • FK-edge JOIN direction bug - use join_side instead of fk_on_right
  • Add polymorphic label filter generation for edges

🚜 Refactor

  • Unify FK-edge pattern for self-ref and non-self-ref cases
  • Minor code cleanup in bidirectional_union and plan_builder_helpers
  • Make PatternSchemaContext (v2) the default join inference path
  • Reorganize benchmarks into individual directories
  • Replace NodeIdSchema.column with Identifier-based id field
  • Change YAML field id_column to node_id for consistency
  • Extract predicate analysis helpers to plan_builder_helpers.rs
  • Extract JOIN and filter helpers to plan_builder_helpers.rs

📚 Documentation

  • Update README for v0.5.3 release
  • Add fixed-endpoint polymorphic edge documentation
  • Add VLP+chained patterns docs and private security tests
  • Document Issue #5 (WHERE filter on VLP chained endpoints)
  • (readme) Minor wording improvements
  • Update PLANNING_v0.5.3 and CHANGELOG with bug fix status
  • Add unified schema abstraction proposal and test scripts
  • Add unified schema abstraction Phase 4 completion to STATUS
  • Update unified schema abstraction progress - Phase 4 fully complete
  • (benchmarks) Add ClickHouse env vars and fix paths in README
  • (benchmarks) Streamline README to be a concise index
  • Archive PLANNING_v0.5.3.md - all bugs resolved

🧪 Testing

  • Add multi-hop pattern integration tests
  • Fix Zeek integration tests - response format and skip cross-table tests
  • Add v1 vs v2 comparison test script
  • Add unit tests for predicate analysis helpers

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]
  • Make test files use CLICKGRAPH_URL env var for port flexibility
  • (benchmarks) Move social_network-specific files to subdirectory

Release v0.5.3

02 Dec 16:27

Choose a tag to compare

[0.5.3] - 2025-12-02

🚀 Features

  • Add regex match (=~) operator and fix collect() function
  • Add EXISTS subquery and WITH+MATCH chaining support
  • Add label() function for scalar label return

🐛 Bug Fixes

  • Remove unused schemas volume from docker-compose
  • Parser now rejects invalid syntax with unparsed input
  • Column alias for type(), id(), labels() graph introspection functions
  • Update release workflow to use clickgraph binary name
  • Update release workflow to use clickgraph-client binary name
  • Build entire workspace in release workflow

📚 Documentation

  • Archive wiki for v0.5.2 release
  • Fix schema documentation and shorten README
  • Fix Quick Start to include required GRAPH_CONFIG_PATH
  • Add 3 new known issues from ontime schema testing
  • Update KNOWN_ISSUES.md - WHERE AND now caught
  • Clean up KNOWN_ISSUES.md - remove resolved issues
  • Remove false known limitations - all verified working

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]
  • Release v0.5.3
  • Update CHANGELOG.md [skip ci]
  • Update Cargo.lock for v0.5.3
  • Update CHANGELOG.md [skip ci]
  • Update CHANGELOG.md [skip ci]
  • Update CHANGELOG.md [skip ci]