Skip to content

Releases: genezhang/clickgraph

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]

Release v0.5.2

30 Nov 23:46

Choose a tag to compare

[0.5.2] - 2025-11-30

🚀 Features

  • Add docker-compose.dev.yaml for development
  • [breaking] Phase 1 - Fixed-length paths use inline JOINs instead of CTEs
  • Add cycle prevention for fixed-length paths
  • Restore PropertyValue and denormalized support from stash, integrate with anchor_table
  • Complete denormalized query support with alias remapping and WHERE clause filtering
  • Implement denormalized node-only queries with UNION ALL
  • Support RETURN DISTINCT for denormalized node-only queries
  • Support ORDER BY for denormalized UNION queries
  • Fix UNION ALL aggregation semantics for denormalized node queries
  • Variable-length paths for denormalized edge tables
  • Add schema-level filter field with SQL predicate parsing
  • Schema-level filters and OPTIONAL MATCH LEFT JOIN fix
  • Add VLP + UNWIND support with ARRAY JOIN generation
  • Implement coupled edge alias unification for denormalized patterns
  • Implement polymorphic edge query support
  • (polymorphic) Add VLP polymorphic edge filter support
  • (polymorphic) Add IN clause support for multiple relationship types in single-hop
  • Complete polymorphic edge support for wildcard relationship patterns
  • Add edge inline property filter tests and update documentation
  • Implement bidirectional pattern UNION ALL transformation

🐛 Bug Fixes

  • ORDER BY rewrite bug for chained JOIN CTEs
  • Zero-hop variable-length path support
  • Remove ChainedJoinGenerator CTE for fixed-length paths
  • Complete PropertyValue type conversions in plan_builder.rs
  • Revert table alias remapping in filter_tagging to preserve filter context
  • Eliminate duplicate WHERE filters by optimizing FilterIntoGraphRel
  • Correct JOIN order and FROM table selection for mixed property expressions
  • Ensure variable-length and shortest path queries use CTE path
  • Destination node properties now map to correct columns in denormalized edge tables
  • Multi-hop denormalized edge patterns and duplicate WHERE filters
  • Variable-length path schema resolution for denormalized edges
  • Add edge_id support to RelationshipDefinition for cycle prevention
  • Fixed-length VLP (*1, *2, *3) now generates inline JOINs
  • Fixed-length VLP (*2, *3) now works correctly
  • Denormalized schema VLP property alias resolution
  • VLP recursive CTE min_hops filtering and aggregation handling
  • OPTIONAL MATCH + VLP returns anchor when no path exists
  • RETURN r and graph functions (type, id, labels)
  • Support inline property filters with numeric literals
  • Push projections into Union branches for bidirectional patterns
  • Polymorphic multi-type JOIN filter now uses IN clause

💼 Other

  • Manual addition of denormalized fields (incomplete)

🚜 Refactor

  • Simplify ORDER BY logic for inline JOINs
  • Simplify GraphJoins FROM clause logic - use relationship table when no joins exist
  • Store anchor table in GraphJoins, eliminate redundant find_anchor_node() calls
  • Set is_denormalized flag directly in analyzer, remove redundant optimizer pass
  • Move helper functions from plan_builder.rs to plan_builder_helpers.rs
  • Rename co-located → coupled edges terminology
  • Consolidate schema loading with shared helpers
  • Consolidated VLP handling with VlpSchemaType

📚 Documentation

  • Prioritize Docker Hub image in getting-started guide
  • Update README with v0.5.1 Docker Hub release
  • Add v0.5.2 planning document
  • Update wiki Quick Start to use Docker Hub image with credentials
  • Add Zeek network log examples and denormalized edge table guide
  • Update STATUS.md with denormalized single-hop fix
  • Update denormalized blocker notes with current status
  • Update denormalized edge status to COMPLETE
  • Add graph algorithm support to denormalized edge docs
  • Add 0-hop pattern support to denormalized edge docs
  • (wiki) Update denormalized properties with all supported patterns
  • Add coupled edges documentation
  • (wiki) Add Coupled Edges section to denormalized properties
  • Add v0.5.2 TODO list for polymorphic edges and code consolidation
  • Mark schema loading consolidation complete in TODO
  • Update STATUS.md with polymorphic edge filter completion
  • Add Schema-Basics.md and wiki versioning workflow
  • Update documentation for v0.5.2 schema variations
  • Update KNOWN_ISSUES.md with v0.5.2 status
  • Update KNOWN_ISSUES.md with fixed-length VLP resolution
  • Update KNOWN_ISSUES with VLP fixes and *0 pattern limitation
  • Add Cypher Subgraph Extraction wiki with Nebula GET SUBGRAPH comparison
  • Update README with v0.5.2 features

🎨 Styling

  • Use UNION DISTINCT

🧪 Testing

  • Add comprehensive Docker image validation suite
  • Add comprehensive schema variation test suite (73 tests)

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]
  • Update CHANGELOG.md [skip ci]
  • Clean up root directory - remove temp files and organize Python tests
  • Release v0.5.2
  • Update CHANGELOG.md [skip ci]
  • Update Cargo.lock for v0.5.2

Release v0.5.1

21 Nov 07:30

Choose a tag to compare

[0.5.1] - 2025-11-20

🚀 Features

  • Add SQL Generation API (v0.5.1)
  • Implement RETURN DISTINCT for de-duplication
  • Add role-based connection pool for ClickHouse RBAC

🐛 Bug Fixes

  • Eliminate flaky cache LRU eviction test with millisecond timestamps
  • Replace docker_publish.yaml with docker-publish.yml
  • Add missing distinct field to all Projection initializations

📚 Documentation

  • Fix getting-started guide issues
  • Update STATUS.md with fixed flaky test achievement (423/423 passing)
  • Add /query/sql endpoint and RETURN DISTINCT documentation
  • Add /query/sql endpoint and RETURN DISTINCT to wiki

🧪 Testing

  • Add role-based connection pool integration tests

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]
  • Release v0.5.1
  • Update CHANGELOG.md [skip ci]

Release v0.5.0

19 Nov 06:27

Choose a tag to compare

[0.5.0] - 2025-11-18

Release Name: Enterprise Readiness
Test Status: 422/422 unit tests (100%), 236/400 integration tests (59% for implemented features)
Documentation: Complete wiki (19 pages), all APIs documented, zero broken links

🚀 Features

Roadmap Phase 2 Complete: Enterprise Readiness

  • Anonymous edge pattern support (untyped relationships)

    • Queries like MATCH (a)-[r]->(b) now automatically expand to UNION of all relationship types
    • Schema-based automatic expansion: [][:TYPE1|TYPE2|TYPE3]
    • Leverages existing multiple relationship type UNION logic
    • Example: MATCH (a)-[]->(b) generates CTE with UNION ALL across all relationship tables
    • Implementation: match_clause.rs lines 406-434 (Nov 18, 2025)
    • Enables more flexible graph queries without explicit relationship typing
  • Multi-tenant parameterized views with cache optimization

    • SQL generation with $paramName placeholders for efficient caching
    • Single cache entry shared across all tenants (99% memory reduction)
    • Runtime parameter substitution maintains tenant isolation
    • Cache hit rate improved to ~100% for multi-tenant workloads
    • 2x performance improvement on cache hits (18ms → 9ms)
    • Commits: 805db43 (cache optimization), fa215e3 (docs), 2d1cb04-a639049 (core feature)
  • Comprehensive multi-tenancy support

    • Schema configuration: view_parameters: [tenant_id, region, ...]
    • HTTP API: view_parameters field in query requests
    • Bolt protocol: Extract from RUN message metadata
    • Multi-parameter support: Unlimited parameters per view
    • Parameter merging: view_parameters + query parameters
    • Full documentation: docs/multi-tenancy.md with 5 patterns
  • SET ROLE RBAC support

    • ClickHouse native RBAC via SET ROLE 'viewer'
    • HTTP API: role field in requests
    • Bolt protocol: Role extraction from metadata
    • Column-level security: Combine with row-level (parameterized views)
    • Commit: 5d0f712
  • ReplacingMergeTree FINAL support (complete)

    • Engine detection: Identify ReplacingMergeTree tables (commit 8694728)
    • Schema configuration: use_final: bool fields (commit 2334633)
    • SQL generation: Correct FINAL placement (FROM table AS alias FINAL) (commits c4a6c95, 2ae16fd)
    • ViewTableRef pipeline: Propagates use_final through query execution
    • Schema loading integration: Auto-detect engines via to_graph_schema_with_client() (commit 97d67fd)
    • Auto-set use_final based on engine type with manual override support
  • Auto-schema discovery (complete) (commit 97d67fd)

    • Column auto-discovery via system.columns query
    • Identity property mappings: column_name → column_name by default
    • Selective column exclusion: exclude_columns: [_version, _internal]
    • Manual override system: property_mappings wins over auto-discovery
    • Automatic engine detection + FINAL support
    • 90% YAML reduction for wide tables (50 columns → 5 lines)
    • Backward compatible: Manual schemas still work
    • Example: schemas/examples/auto_discovery_demo.yaml
    • Tests: tests/integration/test_auto_discovery.py
    • Documentation: notes/auto-schema-discovery.md
  • HTTP Schema Loading API

    • Runtime schema registration: POST /schemas/load
    • List schemas: GET /schemas
    • Get schema details: GET /schemas/{name}
    • Full YAML content support with config_content parameter
    • Auto-discovery compatible
    • No server restart required

🐛 Bug Fixes

  • Anonymous node pattern support

    • Fixed MATCH ()-[r:FOLLOWS]->() pattern SQL generation (Nov 17, 2025)
    • Automatic label inference from relationship schema
    • Removed early-return skips for nodes without labels
    • JOIN creation now based on graph structure, not just SELECT references
    • Affected queries: ()-[r]->(), (a)-[r]->()
    • Fix locations: graph_join_inference.rs (lines 777-818, 1228), graph_context.rs (lines 87-127)
  • COUNT aggregation in OPTIONAL MATCH contexts (Nov 18, 2025)

    • Fixed anchor node selection to prioritize required nodes
    • Fixed recursive expression tagging for transformations
    • Added CASE expression support in projection tagging
    • Added CASE expression detection in GROUP BY
    • All aggregation tests passing (29/29)
  • Correct FINAL keyword syntax (commit 2ae16fd)

    • Fixed placement: FINAL must come AFTER table alias
    • Verified with actual ClickHouse instance
    • Updated all 13 ViewTableRef construction sites
    • Proper syntax: FROM table AS t FINAL (not FROM table FINAL AS t)

📚 Documentation

  • Complete Wiki Documentation (19 pages, 3 new reference pages)

    • Created API-Reference-HTTP.md (450+ lines) - Complete HTTP API reference
    • Created Cypher-Language-Reference.md (600+ lines) - Full Cypher syntax guide
    • Created Known-Limitations.md (500+ lines) - Limitations and workarounds
    • Updated Schema-Configuration-Advanced.md with working schema loading API
    • Fixed all broken reference links (0 broken links)
    • Cross-platform examples (curl, Python, PowerShell)
  • Bolt Protocol Documentation Updates

    • Updated all docs to reflect Bolt Protocol 5.8 is fully functional
    • Removed outdated "query execution pending" warnings
    • Added working examples with Neo4j drivers
    • Updated README.md, docs/api.md, wiki pages
    • Clarified production-ready status
  • Multi-Tenancy & RBAC

    • Complete guide: docs/multi-tenancy.md with 5 patterns
    • Example schemas: Simple + encrypted multi-tenancy
    • Technical notes: notes/parameterized-views.md
    • Migration guide for existing deployments
  • Auto-Discovery

    • Feature documentation: AUTO_DISCOVERY_STATUS.md
    • HTTP API usage examples
    • Schema configuration patterns

🧪 Testing

  • Unit Tests: 422/422 passing (100%)

    • Fixed 16 test failures from aggregation bugs
    • All test categories passing
    • Comprehensive coverage
  • Integration Tests: 236/400 passing (59%)

    • 59% = tests for implemented features
    • Fixed ClickHouse credential issues
    • Marked 9 aspirational tests as skipped
    • Real bug fixed: COUNT in OPTIONAL MATCH
  • E2E Tests

    • 11 test classes for multi-tenancy
    • ACME/GLOBEX tenant isolation validated
    • Cache behavior verified
    • Performance validated (<100ms)

🎯 Production Readiness

  • ✅ All core features complete and tested
  • ✅ Bolt Protocol 5.8 fully functional with all E2E tests passing (4/4)
  • ✅ E2E validation with multiple tenants
  • ✅ Cache optimization validated (2x performance)
  • ✅ Security patterns documented
  • ✅ Migration path for existing deployments
  • ✅ Professional documentation standards
  • ✅ Zero broken links in documentation

Release v0.4.0 - Query Cache, Bolt Protocol & Performance Baseline

15 Nov 20:11

Choose a tag to compare

[0.4.0] - 2025-11-15

🎉 ClickGraph v0.4.0: Foundation Complete

Phase 1 of the ClickGraph roadmap is complete! This release brings development-ready query caching, full Neo4j Bolt 5.8 protocol support, and a validated performance baseline.

✨ What's New

Query Performance 🚀

  • Query plan cache with LRU eviction (10-100x speedup)
  • Parameter support for efficient query reuse
  • Benchmark suite: 14 queries validated at 1K-10K user scale

Neo4j Compatibility 🔌

  • Full Bolt 5.8 protocol implementation
  • Works with Neo4j Python driver v6.0.2, Neo4j Browser
  • 25+ Neo4j function mappings (datetime, string, math)

Graph Features 📊

  • Undirected relationships: (a)-[r]-(b) patterns
  • Variable-length paths: *, *1..3, *..5
  • Shortest path algorithms
  • OPTIONAL MATCH (LEFT JOIN semantics)

Code Quality 🔧

  • Major refactoring: 22% size reduction in query planner
  • Improved test coverage: 406/407 Rust tests
  • Better error handling and documentation

📈 Performance

  • Scale 1 (1K users): 2077ms mean
  • Scale 10 (10K users): 2088ms mean
  • Only 0.5% overhead for 10x data growth

🔧 Installation

git clone https://github.com/genezhang/clickgraph.git
cd clickgraph
cargo build --release

📚 Documentation

🙏 Next Steps

Phase 2 (v0.5.0) will focus on enterprise readiness:

  • RBAC & row-level security
  • Multi-tenant support
  • Comprehensive documentation
  • Schema evolution tools

See ROADMAP.md for details.

🐛 Known Limitations

  • Anonymous node patterns have SQL generation issues (workaround: use named nodes)
  • 64% integration test pass rate (111 tests represent feature gaps)
  • Variable-length undirected paths use forward-only traversal

See KNOWN_ISSUES.md for complete list.


Full Changelog: CHANGELOG.md

Release v0.3.0

10 Nov 06:29

Choose a tag to compare

[0.3.0] - 2025-11-10

🚀 Features

  • Complete WITH clause with GROUP BY, HAVING, and CTE support
  • Enable per-request schema support for thread-safe multi-tenant architecture
  • Add schema-aware helper functions in render layer

🐛 Bug Fixes

  • Multi-hop graph query planning and join generation
  • Update path variable tests to match tuple() implementation
  • Improve anchor node selection to prefer LEFT nodes first
  • Prevent double schema prefix in CTE table names
  • Use correct node alias for FROM clause in GraphRel fallback
  • Prevent both LEFT and RIGHT nodes from being marked as anchor
  • Remove duplicate JOINs for path variable queries
  • Detect multiple relationship types in GraphJoins tree
  • Update JOINs to use UNION CTE for multiple relationship types
  • Correct release date in README (November 9, not 23)

💼 Other

  • Add schema to PlanCtx (Phases 1-3 complete)

🚜 Refactor

  • Remove BITMAP traversal code and fix relationship direction handling
  • Rename handle_edge_list_traversal to handle_graph_pattern
  • Remove redundant GLOBAL_GRAPH_SCHEMA

📚 Documentation

  • Prepare for next session and organize repository
  • Python integration test status report (36.4% passing)
  • Update STATUS and KNOWN_ISSUES for GLOBAL_GRAPH_SCHEMA removal
  • Clean up outdated KNOWN_ISSUES and update README

🧪 Testing

  • Add debugging utilities for anchor node and JOIN issues

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]
  • Disable automatic docker publish
  • Clean up test debris and remove deleted optimizer
  • Replace emoji characters with text equivalents in test files
  • Organize root directory for public repo
  • Bump version to 0.2.0
  • Bump version to 0.3.0

[0.2.0] - 2025-11-06

🚀 Features

  • Implement dual-key schema registration for startup-loaded schemas
  • Add COUNT(DISTINCT node) support and fix integration test infrastructure
  • Support edge-driven queries with anonymous node patterns

🐛 Bug Fixes

  • Simplify schema strategy - use only server's default schema
  • Remove ALL hardcoded property mappings - CRITICAL BUG FIX
  • Enhance column name helpers to support both prefixed and unprefixed names
  • Remove is_simple_relationship logic that skipped node joins
  • Configure Docker to use integration test schema
  • Only create node JOINs when nodes are referenced in query
  • Preserve table aliases in WHERE clause filters
  • Extract where_predicate from GraphRel during filter extraction
  • Remove direction-based logic from JOIN inference - both directions now work
  • GraphNode uses its own alias for PropertyAccessExp, not hardcoded 'u'
  • Complete OPTIONAL MATCH with clean SQL generation
  • Add user_id and product_id to schema property_mappings
  • Add schema prefix to JOIN tables in cte_extraction.rs
  • Handle fully qualified table names in table_to_id_column
  • Variable-length paths now generate recursive CTEs
  • Multiple relationship types now generate UNION CTEs
  • Correct edge list test assertions for direction semantics

💼 Other

  • Document property mapping bug investigation

🚜 Refactor

  • Remove /api/ prefix from routes for simplicity

📚 Documentation

  • Final Phase 1 summary with all 12 test suites
  • Add schema loading architecture documentation and API test
  • Update STATUS with integration test results
  • Create action plan for property mapping bug fix
  • Update STATUS and CHANGELOG with critical bug fix resolution
  • Document WHERE clause gap for simple MATCH queries
  • Add schema management endpoints and update API references
  • Update STATUS.md with WHERE clause alias fix
  • Update STATUS with WHERE predicate extraction fix
  • Update STATUS and CHANGELOG with schema fix
  • Update STATUS with complete session summary

🧪 Testing

  • Add comprehensive integration test framework
  • Add comprehensive relationship traversal tests
  • Add variable-length path and shortest path integration tests
  • Add OPTIONAL MATCH and aggregation integration tests
  • Complete Phase 1 integration test suite with CASE, paths, and multi-database
  • Add comprehensive error handling integration tests
  • Add basic performance regression tests
  • Initial integration test suite run - 272 tests collected
  • Fix schema/database naming separation in integration tests

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]

[0.1.0] - 2025-11-02

🚀 Features

  • (parser) Add shortest path function parsing
  • (planner) Add ShortestPathMode tracking to GraphRel
  • (planner) Detect and propagate shortest path mode
  • (sql) Implement shortest path SQL generation with depth filtering
  • Add WHERE clause filtering support for shortest path queries
  • Add path variable support to parser (Phase 2.1-2.2)
  • Track path variables in logical plan (Phase 2.3)
  • Pass path variable to SQL generator (Phase 2.4)
  • Phase 2.5 - Generate path object SQL for path variables
  • Phase 2.6 - Implement path functions (length, nodes, relationships)
  • WHERE clause filters for variable-length paths and shortestPath
  • Complete allShortestPaths implementation with WHERE filters
  • Implement alternate relationship types [:TYPE1|TYPE2] support
  • Implement multiple relationship types with UNION logic
  • Support multiple relationship types with labels vector
  • Complete Path Variables & Functions implementation
  • Complete Path Variables implementation with documentation
  • Add PageRank algorithm support with CALL statement
  • Complete Query Performance Metrics implementation
  • Complete CASE expressions implementation with full context support
  • Complete WHERE clause filtering pipeline for variable-length paths
  • Implement type-safe configuration management
  • Systematic error handling improvements - replace panic-prone unwrap() calls
  • Complete codebase health restructuring - eliminate runtime panics
  • Rebrand from Brahmand to ClickGraph
  • Update benchmark suite for ClickGraph rebrand and improved performance testing
  • Complete multiple relationship types feature with schema resolution
  • Complete WHERE clause filters with schema-driven resolution
  • Add per-table database support in multi-schema architecture
  • Complete schema-only architecture migration
  • Add medium benchmark (10K users, 50K follows) with performance metrics
  • Add large benchmark (5M users, 50M follows) - 90% success at massive scale!
  • Add Bolt protocol multi-database support
  • Add test convenience wrapper and update TESTING_GUIDE
  • Implement USE clause for multi-database selection in Cypher queries

🐛 Bug Fixes

  • (tests) Add exhaustive pattern matching for ShortestPath variants
  • (parser) Improve shortest path function parsing with case-insensitive matching
  • (parser) Consume leading whitespace in shortest path functions
  • (sql) Correct nested CTE structure for shortest path queries
  • (phase2) Phase 2.7 integration test fixes - path variables working end-to-end
  • WHERE clause handling for variable-length path queries
  • Enable stable background schema monitoring
  • Resolve critical TODO/FIXME items causing runtime panics
  • Root cause fix for duplicate JOIN generation in relationship queries
  • Three critical bug fixes for graph query execution
  • Consolidate benchmark results and add SUT information
  • Resolve path variable regressions after schema-only migration
  • Use last part of CTE name instead of second part

💼 Other

  • Prepare v0.1.0 release

🚜 Refactor

  • (sql) Wire shortest_path_mode through CTE generator
  • Extract CTE generation logic into dedicated module
  • Complete codebase health improvements - modular architecture
  • Standardize test organization with unit/integration/e2e structure
  • Extract common expression processing utilities
  • Organize benchmark suite into dedicated directory
  • Clean up and improve CTE handling for JOIN optimization
  • Remove GraphViewConfig and rename global variables
  • Complete migration from view-based to schema-only configuration
  • Organize project root directory structure

📚 Documentation

  • Add session recap and lessons learned
  • Add shortest path implementation session progress
  • Comprehensive shortest path implementation documentation
  • Add session completion summary
  • Update STATUS.md with Phase 2.7 completion - path variables fully working
  • Update STATUS.md to reflect current state of multiple relationship types
  • Add project documentation and cleanup summaries
  • Complete schema validation enhancement documentation
  • Update STATUS.md and CHANGELOG.md with completed features
  • Update NEXT_STEPS.md with recent completions and current priorities
  • Correct ViewScan relationship support - relationships DO use YAML schemas
  • Correct ViewScan relationship limitation in STATUS.md
  • Remove incorrect OPTIONAL MATCH limitation from STATUS.md and NEXT_STEPS.md
  • Document property mapping debug findings and render plan fixes
  • Update CHANGELOG with property mapping debug session
  • Update CHANGELOG with CASE expressions feature
  • Fix numbering inconsistencies and update WHERE clause filtering status
  • Update STATUS with type-safe configuration completion
  • Update STATUS.md with TODO/FIXME resolution completion
  • Clarify DDL parser TODOs are out-of-scope for read-only engine
  • Sync documentation with current project status
  • Update documentation with bug fixes and benchmark results
  • Update README with 100% benchmark success and recent bug fixes
  • Update STATUS.md with 100% benchmark success
  • Update STATUS and CHANGELOG with enterprise-scale validation
  • Add What's New section to README highlighting enterprise-scale validation
  • Complete benchmark documentation with all three scales
  • Add clear navigation to benchmark results
  • Tone down production-ready claims to development build
  • Add from_node/to_node fields to all relationship schema examples
  • Clarify node label terminology in comments and examples
  • Update STATUS.md with November 2nd achievements
  • Add multi-database support to README and API docs
  • Add PROJECT_STRUCTURE.md guide
  • Add comprehensive USE clause documentation

🧪 Testing

  • (parser) Add comprehensive shortest path pa...
Read more

Release v0.2.0

06 Nov 05:13

Choose a tag to compare

[0.2.0] - 2025-11-06

🚀 Features

  • Implement dual-key schema registration for startup-loaded schemas
  • Add COUNT(DISTINCT node) support and fix integration test infrastructure
  • Support edge-driven queries with anonymous node patterns

🐛 Bug Fixes

  • Simplify schema strategy - use only server's default schema
  • Remove ALL hardcoded property mappings - CRITICAL BUG FIX
  • Enhance column name helpers to support both prefixed and unprefixed names
  • Remove is_simple_relationship logic that skipped node joins
  • Configure Docker to use integration test schema
  • Only create node JOINs when nodes are referenced in query
  • Preserve table aliases in WHERE clause filters
  • Extract where_predicate from GraphRel during filter extraction
  • Remove direction-based logic from JOIN inference - both directions now work
  • GraphNode uses its own alias for PropertyAccessExp, not hardcoded 'u'
  • Complete OPTIONAL MATCH with clean SQL generation
  • Add user_id and product_id to schema property_mappings
  • Add schema prefix to JOIN tables in cte_extraction.rs
  • Handle fully qualified table names in table_to_id_column
  • Variable-length paths now generate recursive CTEs
  • Multiple relationship types now generate UNION CTEs
  • Correct edge list test assertions for direction semantics

💼 Other

  • Document property mapping bug investigation

🚜 Refactor

  • Remove /api/ prefix from routes for simplicity

📚 Documentation

  • Final Phase 1 summary with all 12 test suites
  • Add schema loading architecture documentation and API test
  • Update STATUS with integration test results
  • Create action plan for property mapping bug fix
  • Update STATUS and CHANGELOG with critical bug fix resolution
  • Document WHERE clause gap for simple MATCH queries
  • Add schema management endpoints and update API references
  • Update STATUS.md with WHERE clause alias fix
  • Update STATUS with WHERE predicate extraction fix
  • Update STATUS and CHANGELOG with schema fix
  • Update STATUS with complete session summary

🧪 Testing

  • Add comprehensive integration test framework
  • Add comprehensive relationship traversal tests
  • Add variable-length path and shortest path integration tests
  • Add OPTIONAL MATCH and aggregation integration tests
  • Complete Phase 1 integration test suite with CASE, paths, and multi-database
  • Add comprehensive error handling integration tests
  • Add basic performance regression tests
  • Initial integration test suite run - 272 tests collected
  • Fix schema/database naming separation in integration tests

⚙️ Miscellaneous Tasks

  • Update CHANGELOG.md [skip ci]

[0.1.0] - 2025-11-02

🚀 Features

  • (parser) Add shortest path function parsing
  • (planner) Add ShortestPathMode tracking to GraphRel
  • (planner) Detect and propagate shortest path mode
  • (sql) Implement shortest path SQL generation with depth filtering
  • Add WHERE clause filtering support for shortest path queries
  • Add path variable support to parser (Phase 2.1-2.2)
  • Track path variables in logical plan (Phase 2.3)
  • Pass path variable to SQL generator (Phase 2.4)
  • Phase 2.5 - Generate path object SQL for path variables
  • Phase 2.6 - Implement path functions (length, nodes, relationships)
  • WHERE clause filters for variable-length paths and shortestPath
  • Complete allShortestPaths implementation with WHERE filters
  • Implement alternate relationship types [:TYPE1|TYPE2] support
  • Implement multiple relationship types with UNION logic
  • Support multiple relationship types with labels vector
  • Complete Path Variables & Functions implementation
  • Complete Path Variables implementation with documentation
  • Add PageRank algorithm support with CALL statement
  • Complete Query Performance Metrics implementation
  • Complete CASE expressions implementation with full context support
  • Complete WHERE clause filtering pipeline for variable-length paths
  • Implement type-safe configuration management
  • Systematic error handling improvements - replace panic-prone unwrap() calls
  • Complete codebase health restructuring - eliminate runtime panics
  • Rebrand from Brahmand to ClickGraph
  • Update benchmark suite for ClickGraph rebrand and improved performance testing
  • Complete multiple relationship types feature with schema resolution
  • Complete WHERE clause filters with schema-driven resolution
  • Add per-table database support in multi-schema architecture
  • Complete schema-only architecture migration
  • Add medium benchmark (10K users, 50K follows) with performance metrics
  • Add large benchmark (5M users, 50M follows) - 90% success at massive scale!
  • Add Bolt protocol multi-database support
  • Add test convenience wrapper and update TESTING_GUIDE
  • Implement USE clause for multi-database selection in Cypher queries

🐛 Bug Fixes

  • (tests) Add exhaustive pattern matching for ShortestPath variants
  • (parser) Improve shortest path function parsing with case-insensitive matching
  • (parser) Consume leading whitespace in shortest path functions
  • (sql) Correct nested CTE structure for shortest path queries
  • (phase2) Phase 2.7 integration test fixes - path variables working end-to-end
  • WHERE clause handling for variable-length path queries
  • Enable stable background schema monitoring
  • Resolve critical TODO/FIXME items causing runtime panics
  • Root cause fix for duplicate JOIN generation in relationship queries
  • Three critical bug fixes for graph query execution
  • Consolidate benchmark results and add SUT information
  • Resolve path variable regressions after schema-only migration
  • Use last part of CTE name instead of second part

💼 Other

  • Prepare v0.1.0 release

🚜 Refactor

  • (sql) Wire shortest_path_mode through CTE generator
  • Extract CTE generation logic into dedicated module
  • Complete codebase health improvements - modular architecture
  • Standardize test organization with unit/integration/e2e structure
  • Extract common expression processing utilities
  • Organize benchmark suite into dedicated directory
  • Clean up and improve CTE handling for JOIN optimization
  • Remove GraphViewConfig and rename global variables
  • Complete migration from view-based to schema-only configuration
  • Organize project root directory structure

📚 Documentation

  • Add session recap and lessons learned
  • Add shortest path implementation session progress
  • Comprehensive shortest path implementation documentation
  • Add session completion summary
  • Update STATUS.md with Phase 2.7 completion - path variables fully working
  • Update STATUS.md to reflect current state of multiple relationship types
  • Add project documentation and cleanup summaries
  • Complete schema validation enhancement documentation
  • Update STATUS.md and CHANGELOG.md with completed features
  • Update NEXT_STEPS.md with recent completions and current priorities
  • Correct ViewScan relationship support - relationships DO use YAML schemas
  • Correct ViewScan relationship limitation in STATUS.md
  • Remove incorrect OPTIONAL MATCH limitation from STATUS.md and NEXT_STEPS.md
  • Document property mapping debug findings and render plan fixes
  • Update CHANGELOG with property mapping debug session
  • Update CHANGELOG with CASE expressions feature
  • Fix numbering inconsistencies and update WHERE clause filtering status
  • Update STATUS with type-safe configuration completion
  • Update STATUS.md with TODO/FIXME resolution completion
  • Clarify DDL parser TODOs are out-of-scope for read-only engine
  • Sync documentation with current project status
  • Update documentation with bug fixes and benchmark results
  • Update README with 100% benchmark success and recent bug fixes
  • Update STATUS.md with 100% benchmark success
  • Update STATUS and CHANGELOG with enterprise-scale validation
  • Add What's New section to README highlighting enterprise-scale validation
  • Complete benchmark documentation with all three scales
  • Add clear navigation to benchmark results
  • Tone down production-ready claims to development build
  • Add from_node/to_node fields to all relationship schema examples
  • Clarify node label terminology in comments and examples
  • Update STATUS.md with November 2nd achievements
  • Add multi-database support to README and API docs
  • Add PROJECT_STRUCTURE.md guide
  • Add comprehensive USE clause documentation

🧪 Testing

  • (parser) Add comprehensive shortest path parser tests
  • Add shortest path SQL generation test script
  • Add shortest path integration test files
  • Improve test infrastructure and schema configuration
  • Add end-to-end tests for USE clause functionality

⚙️ Miscellaneous Tasks

  • Update .gitignore to exclude temporary files
  • Disable CI on push to main (requires ClickHouse infrastructure)

[iewscan-complete] - 2025-10-19

🚀 Features

  • ✨ Added basic schema inferenc
  • ✨ support for multi node conditions
  • Support for multi node conditions
  • Query planner rewrite (#11)
  • Complete view-based graph infrastructure implementation
  • Comprehensive view optimization infrastructure
  • Complete ClickGraph production-ready implementation
  • Implement relationship traversal support with YAML view integration
  • Implement variable-length path traversal for Cypher queries
  • Complete end-to-end variable-length path execution
  • Add chained JOIN optimization for exact hop count queries
  • Add parser-level validation for variable-length paths
  • Make max_recursive_cte_evaluation_depth configurable with default of 100
  • Add OPTIONAL MATCH AST structures
  • Implement OPTIONAL MATCH parser
  • Implement OPTIONAL MATCH logical plan integration
  • Implement OPTIONAL MATCH with LEFT JOIN semantics
  • Implement view-based SQL translation with ViewScan for node queries
  • Add debug logging for full SQL queries
  • Add schema lookup for relationship types

🐛 Bug Fixes

  • 🐛 relation direction when same node types
  • 🐛 Property tagging to node name
  • 🐛 node name in return clause related issues
  • Count start issue (#6)
  • Schema integration bug - separate column names from node types
  • Rewrite GROUP BY and ORDE...
Read more

Release v0.1.0

02 Nov 19:43

Choose a tag to compare

⚠️ Alpha Release - Developer Preview

ClickGraph v0.1.0 is an alpha release for evaluation and testing purposes.

Recommended Use Cases:

  • ✅ Evaluation and testing
  • ✅ Development environments
  • ✅ Proof-of-concept projects
  • ✅ Non-critical workloads with thorough user testing

Not Recommended For:

  • ❌ Mission-critical production systems (without extensive testing)
  • ❌ Financial or healthcare applications
  • ❌ Large-scale production deployments without validation in your environment

What This Means:

  • Core functionality is solid and tested (318 unit tests, enterprise-scale benchmarks)
  • Integration test coverage is being expanded (see TEST_COVERAGE_PLAN.md)
  • We encourage users to test thoroughly in their environments before production use
  • Please report any issues you encounter!

Target: v0.2.0 will be marked as "beta" after integration tests, v0.3.0 for "production-ready" (see TEST_COVERAGE_PLAN.md)


ClickGraph v0.1.0 - First Official Release 🎉

Enterprise-scale graph analytics on ClickHouse with Neo4j compatibility.

Release Highlights

  • Successfully tested on 5 million users and 50 million relationships (90% success rate)
  • Full Neo4j Bolt protocol v4.4 support for seamless driver integration
  • USE clause syntax matching Neo4j 4.0+ conventions
  • 318/318 tests passing (100% success rate) - Production-ready quality
  • Windows native support - HTTP and Bolt protocols fully functional
  • Query performance monitoring with built-in metrics and HTTP headers

🚀 Major Features

1. USE Clause for Database Selection

Neo4j 4.0+ compatible database selection directly in Cypher queries.

USE social_network
MATCH (u:User)-[:FOLLOWS]->(friend)
RETURN u.name, collect(friend.name) AS friends
  • Three-way precedence: USE clause > session/request parameter > default schema
  • Case-insensitive (USE/use/Use)
  • Qualified names (USE neo4j.database)

2. Bolt Protocol Multi-Database Support

Full Neo4j 4.0+ compatibility via Bolt protocol.

from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687")
with driver.session(database="social_network") as session:
    result = session.run("MATCH (u:User) RETURN u.name")

3. Path Variables & Functions

Complete path capture and analysis.

MATCH p = (a:User)-[:FOLLOWS*1..3]->(b:User)
WHERE a.name = 'Alice'
RETURN length(p), nodes(p), relationships(p)

4. Query Performance Metrics

Built-in monitoring for production deployments.

curl -i http://localhost:8080/query
# Returns headers:
# X-Query-Total-Time: 45.23ms
# X-Query-Execution-Time: 35.66ms

5. CASE Expressions

Full conditional expression support.

MATCH (u:User)
RETURN CASE WHEN u.age > 30 THEN 'Senior' ELSE 'Junior' END

📊 Benchmark Results

Scale Dataset Success Rate Status
Large 5M users, 50M relationships 90% (9/10) ✅ Enterprise-scale validated
Medium 10K users, 50K relationships 100% (10/10) ✅ Production-ready
Small 1K users, 5K relationships 100% (10/10) ✅ Fully tested

⚠️ Breaking Changes

YAML Schema Field Rename:

  • from_column -> from_id
  • to_column -> to_id

See UPGRADING.md for migration instructions and automated scripts.

📦 Installation

Docker (Recommended):

git clone https://github.com/genezhang/clickgraph
cd clickgraph
docker-compose up -d

Native Build:

cargo build --release
export CLICKHOUSE_URL="http://localhost:8123"
cargo run --bin clickgraph

🔗 Platform Support

Platform HTTP Bolt Status
Linux (Docker/Native) Fully functional
macOS Fully functional
Windows (Native) Fixed in v0.1.0!
WSL 2 Fully functional

📚 Documentation

🎯 Known Limitations

  • Pattern comprehensions ([(a)-[]->(b) | b.name]) - Not yet implemented
  • Subqueries (CALL { ... }) - Not yet implemented
  • Write operations - Out of scope (read-only engine by design)

See KNOWN_ISSUES.md for details.

🧪 Testing

  • Unit Tests: 318/318 passing (100%)
  • End-to-End: Comprehensive validation
  • Benchmarks: 3-tier validation (small, medium, large)

🙏 Acknowledgments

ClickGraph is a fork of the Brahmand project with significant enhancements including Bolt protocol support, multi-database capabilities, path variables, performance monitoring, and Windows native support.


Full Changelog: https://github.com/genezhang/clickgraph/blob/main/CHANGELOG.md

Thank you for using ClickGraph! 🎉