Commit 80ab470c authored by Michael Angelo Rivera's avatar Michael Angelo Rivera
Browse files

perf(ontology): add code-edge relationship projections

parent 860efd29
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
19
20
+3 −1
Original line number Diff line number Diff line
-- SCHEMA_VERSION=19 [AUTOGENERATED — DO NOT EDIT MANUALLY]
-- SCHEMA_VERSION=20 [AUTOGENERATED — DO NOT EDIT MANUALLY]
-- Regenerate with: mise schema:generate:ddl

CREATE TABLE IF NOT EXISTS checkpoint (
@@ -869,6 +869,8 @@ CREATE TABLE IF NOT EXISTS gl_code_edge (
    INDEX idx_relationship relationship_kind TYPE set(50) GRANULARITY 2,
    PROJECTION by_source (SELECT * ORDER BY (source_id, relationship_kind, target_id, traversal_path, source_kind, target_kind)),
    PROJECTION by_target (SELECT * ORDER BY (target_id, relationship_kind, source_id, traversal_path, source_kind, target_kind)),
    PROJECTION by_rel_source_kind (SELECT * ORDER BY (relationship_kind, source_kind, source_id, target_id, traversal_path, target_kind)),
    PROJECTION by_rel_target_kind (SELECT * ORDER BY (relationship_kind, target_kind, target_id, source_id, traversal_path, source_kind)),
    PROJECTION agg_counts_by_source (
      SELECT relationship_kind, target_kind, source_id, traversal_path, count()
      GROUP BY relationship_kind, target_kind, source_id, traversal_path
+1 −1
Original line number Diff line number Diff line
-- SCHEMA_VERSION=19 [AUTOGENERATED — DO NOT EDIT MANUALLY]
-- SCHEMA_VERSION=20 [AUTOGENERATED — DO NOT EDIT MANUALLY]
-- Regenerate with: mise schema:generate:ddl:local

CREATE TABLE IF NOT EXISTS gl_definition (
+6 −0
Original line number Diff line number Diff line
@@ -88,6 +88,12 @@ settings:
          - type: reorder
            name: by_target
            order_by: [target_id, relationship_kind, source_id, traversal_path, source_kind, target_kind]
          - type: reorder
            name: by_rel_source_kind
            order_by: [relationship_kind, source_kind, source_id, target_id, traversal_path, target_kind]
          - type: reorder
            name: by_rel_target_kind
            order_by: [relationship_kind, target_kind, target_id, source_id, traversal_path, source_kind]
          # `count(target) GROUP BY source` — e.g. definitions per file via
          # DEFINES. Without this, the wildcard scan over vendored JS bundles
          # (`echarts.js` ≈ 13K defs, `pdf.worker.js` ≈ 12K defs) materializes
+43 −0
Original line number Diff line number Diff line
@@ -510,6 +510,49 @@ mod tests {
        }
    }

    #[test]
    fn code_edge_has_relationship_kind_reorder_projections() {
        let tables = generate_graph_tables(&ontology());
        let code_edge = tables
            .iter()
            .find(|table| table.name == "gl_code_edge")
            .expect("gl_code_edge table should be generated");

        let has_projection = |name: &str, expected: &[&str]| {
            code_edge.projections.iter().any(|projection| {
                matches!(
                    projection,
                    ProjectionDef::Reorder { name: projection_name, order_by }
                        if projection_name == name
                            && order_by.iter().map(String::as_str).eq(expected.iter().copied())
                )
            })
        };

        assert!(has_projection(
            "by_rel_source_kind",
            &[
                "relationship_kind",
                "source_kind",
                "source_id",
                "target_id",
                "traversal_path",
                "target_kind",
            ],
        ));
        assert!(has_projection(
            "by_rel_target_kind",
            &[
                "relationship_kind",
                "target_kind",
                "target_id",
                "source_id",
                "traversal_path",
                "source_kind",
            ],
        ));
    }

    #[test]
    fn every_table_has_system_columns() {
        for table in &generate_graph_tables(&ontology()) {