akar-main 0.1.1

Akar - pure Rust embedded graph database for AI agent memory
Documentation
use akar_binder::Binder;
use akar_catalog::{Catalog, CatalogColumn};
use akar_common::types::LogicalTypeID;
use akar_parser::parse;
use akar_planner::QueryPlanner;
use std::sync::{Arc, Mutex};

fn main() {
    let mut catalog = Catalog::new();
    catalog.create_node_table(
        "User".into(),
        vec![
            CatalogColumn {
                name: "id".into(),
                logical_type: LogicalTypeID::Int64,
                is_primary_key: true,
                compression: akar_common::enums::CompressionType::Uncompressed,
                default_value: None,
            },
            CatalogColumn {
                name: "name".into(),
                logical_type: LogicalTypeID::String,
                is_primary_key: false,
                compression: akar_common::enums::CompressionType::Uncompressed,
                default_value: None,
            },
        ],
    );
    catalog.create_node_table(
        "Post".into(),
        vec![
            CatalogColumn {
                name: "id".into(),
                logical_type: LogicalTypeID::Int64,
                is_primary_key: true,
                compression: akar_common::enums::CompressionType::Uncompressed,
                default_value: None,
            },
            CatalogColumn {
                name: "content".into(),
                logical_type: LogicalTypeID::String,
                is_primary_key: false,
                compression: akar_common::enums::CompressionType::Uncompressed,
                default_value: None,
            },
        ],
    );
    catalog.create_rel_table(
        "Likes".into(),
        catalog.get_table_id("User").unwrap(),
        catalog.get_table_id("Post").unwrap(),
        vec![],
    );

    let query = "MATCH (u:User)-[:Likes]->(p:Post) WHERE u.id = 1 RETURN p.content";
    let statements = parse(query).unwrap();
    println!("AST:\n{:#?}", statements);
    let binder = Binder::new(Arc::new(Mutex::new(catalog)));
    let bound = binder.bind(statements.clone()).unwrap();
    let planner = QueryPlanner::new();
    let plan = planner.plan(bound).unwrap();
    println!("PLAN:\n{:#?}", plan);
}