activecube-rs 0.1.17

A generic GraphQL-to-SQL OLAP query engine library
Documentation
use activecube_rs::*;

#[test]
fn test_cube_builder() {
    let cube = CubeBuilder::new("TestCube")
        .schema("test_db")
        .table("{chain}_events")
        .dimension(dim_group("Block", vec![
            dim("Number", "block_num", DimType::Int),
            dim("Time", "block_time", DimType::DateTime),
        ]))
        .dimension(dim("Amount", "amount", DimType::Float))
        .metrics(&["count", "sum", "avg"])
        .selector(selector("date", "block_time", DimType::DateTime))
        .default_filter("active", "true")
        .default_limit(50)
        .max_limit(5000)
        .build();

    assert_eq!(cube.name, "TestCube");
    assert_eq!(cube.schema, "test_db");
    assert_eq!(cube.table_for_chain("eth"), "eth_events");
    assert_eq!(cube.metrics.len(), 3);
    assert_eq!(cube.selectors.len(), 1);
    assert_eq!(cube.default_filters.len(), 1);
    assert_eq!(cube.default_limit, 50);
    assert_eq!(cube.max_limit, 5000);

    let flat = cube.flat_dimensions();
    assert_eq!(flat.len(), 3);
    assert_eq!(flat[0].0, "Block_Number");
    assert_eq!(flat[1].0, "Block_Time");
    assert_eq!(flat[2].0, "Amount");
}

#[test]
fn test_cube_builder_minimal() {
    let cube = CubeBuilder::new("Minimal")
        .schema("s")
        .table("t")
        .dimension(dim("Id", "id", DimType::Int))
        .build();

    assert_eq!(cube.name, "Minimal");
    assert!(cube.metrics.is_empty());
    assert!(cube.selectors.is_empty());
    assert!(cube.default_filters.is_empty());
    assert_eq!(cube.default_limit, 25);
    assert_eq!(cube.max_limit, 10000);
    assert!(cube.from_subquery.is_none());
}

#[test]
fn test_cube_builder_from_subquery() {
    let cube = CubeBuilder::new("UnionCube")
        .schema("dwd")
        .table("{chain}_trades")
        .dimension(dim("Amount", "amount", DimType::Float))
        .from_subquery("SELECT amount FROM `{schema}`.`{chain}_a` UNION ALL SELECT amount FROM `{schema}`.`{chain}_b`")
        .build();

    assert_eq!(cube.name, "UnionCube");
    assert!(cube.from_subquery.is_some());
    let sq = cube.from_subquery.unwrap();
    assert!(sq.contains("UNION ALL"));
    assert!(sq.contains("{schema}"));
    assert!(sq.contains("{chain}"));
}