Skip to main content

lance_csr/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright The Lance Authors
3
4//! Lance Graph Query Engine
5//!
6//! This crate provides graph query capabilities for Lance datasets using Cypher syntax.
7//! It interprets Lance datasets as property graphs and translates Cypher queries into
8//! DataFusion SQL queries for execution.
9//!
10//! # Features
11//!
12//! - Cypher query parsing and AST representation
13//! - Graph pattern matching on columnar data
14//! - Property graph interpretation of Lance datasets
15//! - Translation to optimized SQL via DataFusion
16//! - Support for nodes, relationships, and properties
17//! - A CSR (compressed sparse row) adjacency index for multi-hop traversal
18//!
19//! # Example
20//!
21//! [`CypherEngine`] registers datasets once, optionally builds the CSR, and serves
22//! many queries. See [`engine`] for the full API and `examples/embedded_query.rs`
23//! for a runnable program.
24//!
25//! ```no_run
26//! use std::collections::HashMap;
27//! use lance_csr::{CypherEngine, EngineSource, GraphConfig, Result};
28//!
29//! # async fn example() -> Result<()> {
30//! let config = GraphConfig::builder()
31//!     .node_table("Person", "person_id")
32//!     .rel_table("KNOWS", "Person", "Person", "src_person_id", "dst_person_id")
33//!     .build()?;
34//! let sources = HashMap::from([
35//!     ("Person".to_string(), EngineSource::open_lance("person.lance", None, HashMap::new()).await?),
36//!     ("KNOWS".to_string(), EngineSource::open_lance("knows.lance", None, HashMap::new()).await?),
37//! ]);
38//! let engine = CypherEngine::new(config, sources, true).await?;
39//! let batch = engine
40//!     .execute("MATCH (p:Person) WHERE p.age > 30 RETURN p.name", HashMap::new())
41//!     .await?;
42//! # Ok(())
43//! # }
44//! ```
45
46mod apply;
47pub mod ast;
48pub mod case_insensitive;
49pub mod config;
50pub mod csr_expand;
51pub mod csr_index;
52mod csr_traversal;
53pub mod datafusion_planner;
54pub mod engine;
55pub mod error;
56pub mod key_statistics;
57pub mod lance_vector_search;
58pub mod logical_plan;
59pub mod parameter_substitution;
60pub mod parser;
61mod path_inventory;
62mod path_match;
63mod path_value;
64mod pattern_alternatives;
65mod pattern_order;
66pub mod query;
67pub mod semantic;
68pub mod shortest_path;
69pub mod spark_dialect;
70pub mod sql_query;
71
72/// Maximum allowed hops for variable-length relationship expansion (e.g., *1..N)
73pub const MAX_VARIABLE_LENGTH_HOPS: u32 = 20;
74
75pub use config::{GraphConfig, NodeMapping, RelationshipMapping};
76pub use csr_index::{CsrIndex, CsrIndexBuilder};
77pub use engine::{CypherEngine, EngineSource};
78pub use error::{GraphError, Result};
79pub use lance_csr_catalog::{DirNamespace, GraphSourceCatalog, InMemoryCatalog, SimpleTableSource};
80pub use lance_vector_search::VectorSearch;
81pub use query::{CypherQuery, ExecutionStrategy, SqlDialect};
82pub use sql_query::SqlQuery;