Skip to content

Commit 9ce5215

Browse files
committed
docs: Update README with v0.5.2 features
1 parent 49ea0b7 commit 9ce5215

1 file changed

Lines changed: 69 additions & 12 deletions

File tree

README.md

Lines changed: 69 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,79 @@
1111
> **Note: ClickGraph is development-ready for view-based graph analysis with full Neo4j Bolt Protocol 5.8 support. This is a read-only analytical query engine - write operations are not supported. Codebase has diverged from the upstream with DDL/writes feature removal and other structure/code refactoring to follow Rust idiomatic style.**
1212
1313
---
14-
## Work in Progress towards Next Release
1514

16-
> **Note: we are standardizing on using `Node` and `Edge` externally following ISO GQL terminology**
15+
## 🚀 What's New in v0.5.2 (November 30, 2025)
1716

18-
The next release will be big enhancements to the schema patterns, including
19-
- **Edge ID**: it can be a single column or a composite key with multiple columns for a unique edge instance. Default to (from_id, to_id).
20-
- **Property mapping to expression**: properties can be mapped to expressions represented in simple SQL expressions.
21-
- **Denormalized edge table**: nodes are part of the edge table with denormalized node property columns. Either from_node or to_node or both can be denormalized.
22-
- **Filter support**: a simple SQL predicate can be specified as a filter to a node or edge definition.
23-
- **Array support**: array columns and UNWIND clause to flatten an array value.
24-
- **Coupled edge table**: multiple links occuring in the same event and stored in a single row of an edge table, which is usually denormalized.
25-
- **Polymorphic edge table**: multiple edge types share the same edge table with a type column to indicate its edge type. The edge table also contains `from_label_column` and `to_label_column` to indicate the node labels that are standalone tables.
17+
### Schema Variations Release - Complete Support for All Edge Table Patterns! 🎉
2618

27-
The schema config loading is complete, and most of query support is also finished. Some loose-end work remains.
19+
**v0.5.2 delivers comprehensive support for advanced schema patterns including polymorphic edges, coupled edges, and denormalized tables.**
2820

29-
## 🚀 What's New in v0.5.1 (November 21, 2025)
21+
### Polymorphic Edge Tables ✨
22+
23+
**Single table containing multiple edge types with dynamic filtering:**
24+
```yaml
25+
edges:
26+
- polymorphic: true
27+
table: interactions
28+
type_column: interaction_type # FOLLOWS, LIKES, AUTHORED
29+
from_label_column: from_type # Source node type
30+
to_label_column: to_type # Target node type
31+
```
32+
33+
```cypher
34+
-- Multi-type filter generates IN clause
35+
MATCH (u:User)-[:FOLLOWS|LIKES]->(target)
36+
RETURN u.name, target.name
37+
```
38+
39+
**What Works:**
40+
-**Single-hop wildcard edges**: `(u:User)-[r]->(target)` with unlabeled targets
41+
-**Multi-hop CTE chaining**: `(u)-[r1]->(m)-[r2]->(t)` with proper JOINs
42+
-**Bidirectional edges**: `(u:User)<-[r]-(source)` using correct JOIN direction
43+
-**Composite edge IDs**: `[from_id, to_id, type, timestamp]` for uniqueness
44+
45+
### Coupled Edge Optimization ⚡
46+
47+
**Automatic JOIN elimination when edges share the same table:**
48+
```cypher
49+
-- Zeek DNS pattern: IP → Domain → ResolvedIP (all in dns_log table)
50+
MATCH (ip:IP)-[:REQUESTED]->(d:Domain)-[:RESOLVED_TO]->(rip:ResolvedIP)
51+
WHERE ip.ip = '192.168.4.76'
52+
RETURN ip.ip, d.name, rip.ips
53+
```
54+
Generates optimized SQL with NO self-join - single table scan!
55+
56+
### VLP + UNWIND Support 🔄
57+
58+
**Decompose paths with ARRAY JOIN:**
59+
```cypher
60+
MATCH p = (u:User)-[:FOLLOWS*1..3]->(f:User)
61+
UNWIND nodes(p) AS n
62+
RETURN n
63+
```
64+
65+
### OPTIONAL MATCH + VLP Fix 🐛
66+
67+
**Anchor nodes now preserved when no path exists:**
68+
```cypher
69+
MATCH (a:User) WHERE a.name = 'Eve'
70+
OPTIONAL MATCH (a)-[:FOLLOWS*1..3]->(b:User)
71+
RETURN a.name, COUNT(b) as reachable
72+
-- Eve (no followers) now correctly returns 1 row with reachable = 0
73+
```
74+
75+
### Test Coverage 🧪
76+
77+
- **534 library tests passing** (100%)
78+
- **73 schema variation tests** across 4 schema types:
79+
- Standard: 30 tests
80+
- Denormalized: 14 tests
81+
- Polymorphic: 24 tests
82+
- Coupled: 5 tests
83+
84+
---
85+
86+
## 📦 What's in v0.5.1 (November 21, 2025)
3087

3188
### Official Docker Hub Release! 🐳
3289

0 commit comments

Comments
 (0)