asdi 0.2.5

Another Simplistic Datalog Implementation (in Rust)
Documentation
@startuml

!include options.plantuml

interface asdi::ProgramCore
hide "asdi::ProgramCore" members

interface asdi::edb::Attribute
hide "asdi::edb::Attribute" members

interface asdi::edb::Constant
hide "asdi::edb::Constant" members

interface asdi::edb::PredicateRef
hide "asdi::edb::PredicateRef" members

enum asdi::idb::ComparisonOperator
hide "asdi::idb::ComparisonOperator" members

interface asdi::idb::query::Row
hide "asdi::idb::query::Row" members

interface asdi::idb::query::View
hide "asdi::idb::query::View" members

namespace asdi::idb::query::relational {
    interface FactOps
    interface RelationalOps

    class RelationSource
    class SetOperation
    class Selection
    class Projection
    class Join
    class RelationSink

    class Criteria
    enum CriteriaValue {
        Value : asdi::edb::Constant
        Index : usize
    }

    enum SetOperator {
        Union
        Intersection
        Different
        CartesianProduct
    }

    enum RelationalOp {
        Relation : RelationSource
        SetOperation : SetOperation
        Selection : Selection
        Projection : Projection
        Join : Join
        Sink : RelationSink
    }

    RelationSource o-> asdi::edb::PredicateRef

    SetOperation *-> RelationalOp
    SetOperation *-> RelationalOp
    SetOperation *-down-> SetOperator

    CriteriaValue o-down-> asdi::edb::Constant
    Criteria *-> CriteriaValue
    Criteria *-down-> asdi::idb::ComparisonOperator

    Join *-> RelationalOp
    Join *-> RelationalOp
    Join *-> "*" Criteria

    Projection *-> RelationalOp
    Projection *-down-> "attributes *" asdi::edb::Attribute

    Selection *-> RelationalOp
    Selection *-> Criteria

    FactOps ..> Projection
    FactOps ..> Selection
    FactOps .up.> asdi::idb::query::Row

    RelationalOps ..> Criteria
    RelationalOps ..> Projection
    RelationalOps ..> Selection
    RelationalOps .up.> asdi::idb::query::View

    RelationSink *-> RelationalOp
    RelationSink o-> asdi::edb::PredicateRef

    class relational << module >> {
        program_to_graphviz(): String
    }

    relational .down.> asdi::ProgramCore
}

@enduml