@startuml
!include options.plantuml
interface asdi::AttributeName
hide "asdi::AttributeName" members
interface asdi::Collection<T>
hide "asdi::Collection" members
interface asdi::IndexedCollection<K,V>
hide "asdi::IndexedCollection" members
interface asdi::Labeled
hide "asdi::Labeled" members
interface asdi::MaybeAnonymous
hide "asdi::MaybeAnonymous" members
interface asdi::MaybeLabeled<T : AttributeName>
hide "asdi::MaybeLabeled" members
interface asdi::idb::query::Queryable
hide "asdi::idb::query::Queryable" members
class asdi::edb::io::FilePragma
hide "asdi::edb::io::FilePragma" members
namespace asdi::edb {
class Attribute<T: AttributeName>
class Fact
class Predicate
class Relation
class RelationSet
class Schema<T: AttributeName>
class Number <<opaque>>
class FunctionalDependency
class PredicateRef << (T,#ADD1B2) type >>
PredicateRef o-> Predicate
enum AttributeIndex<T: AttributeName> {
Label : T
Index : usize
}
enum AttributeKind {
Boolean
Integer
Float
String
}
enum Constant {
Boolean : bool
Number : Number
String : String
}
Attribute .down.|> asdi::MaybeAnonymous
Attribute ..|> asdi::MaybeLabeled
Attribute *--> asdi::AttributeName
Attribute *--> AttributeKind
Constant .up.> AttributeKind
Constant *-right> Number
Fact ..|> asdi::Collection
Fact ..|> asdi::IndexedCollection
Fact ..|> asdi::Labeled
Fact o-> PredicateRef
Fact *-up-> "*" Constant
' Fact ..|> asdi::idb::query::relational::FactOps
Predicate ..|> asdi::AttributeName
Relation ..|> asdi::Collection
Relation ..|> asdi::IndexedCollection
Relation ..|> asdi::Labeled
Relation .up.|> asdi::idb::query::Queryable
Relation o-> Predicate
Relation *-> Schema
Relation *-> "*" Fact
Relation *-up-> "?" asdi::edb::io::FilePragma
Relation *-up-> "*" FunctionalDependency
RelationSet ..|> asdi::Collection
RelationSet ..|> asdi::IndexedCollection
RelationSet .up.|> asdi::idb::query::Queryable
RelationSet *-> "*" Relation
Schema ..|> asdi::Collection
Schema ..|> asdi::IndexedCollection
Schema *-> "*" Attribute
Schema .up.> AttributeIndex
}
@enduml