tensorlogic_adapters/database/
mod.rs1use serde::{Deserialize, Serialize};
15
16use crate::{AdapterError, SymbolTable};
17
18mod memory;
19mod sql;
20
21#[cfg(feature = "sqlite")]
22mod sqlite_backend;
23
24#[cfg(feature = "postgres")]
25mod postgres_backend;
26
27pub use memory::MemoryDatabase;
28pub use sql::{DatabaseStats, SchemaDatabaseSQL};
29
30#[cfg(feature = "sqlite")]
31pub use sqlite_backend::SQLiteDatabase;
32
33#[cfg(feature = "postgres")]
34pub use postgres_backend::PostgreSQLDatabase;
35
36pub trait SchemaDatabase {
40 fn store_schema(&mut self, name: &str, table: &SymbolTable) -> Result<SchemaId, AdapterError>;
44
45 fn load_schema(&self, id: SchemaId) -> Result<SymbolTable, AdapterError>;
47
48 fn load_schema_by_name(&self, name: &str) -> Result<SymbolTable, AdapterError>;
50
51 fn list_schemas(&self) -> Result<Vec<SchemaMetadata>, AdapterError>;
53
54 fn delete_schema(&mut self, id: SchemaId) -> Result<(), AdapterError>;
56
57 fn search_schemas(&self, pattern: &str) -> Result<Vec<SchemaMetadata>, AdapterError>;
59
60 fn get_schema_history(&self, name: &str) -> Result<Vec<SchemaVersion>, AdapterError>;
62}
63
64#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
66pub struct SchemaId(pub u64);
67
68#[derive(Clone, Debug, Serialize, Deserialize)]
70pub struct SchemaMetadata {
71 pub id: SchemaId,
73 pub name: String,
75 pub version: u32,
77 pub created_at: u64,
79 pub updated_at: u64,
81 pub num_domains: usize,
83 pub num_predicates: usize,
85 pub num_variables: usize,
87 pub description: Option<String>,
89}
90
91#[derive(Clone, Debug, Serialize, Deserialize)]
93pub struct SchemaVersion {
94 pub version: u32,
96 pub timestamp: u64,
98 pub description: String,
100 pub schema_id: SchemaId,
102}
103
104#[cfg(test)]
106#[path = "../database_tests.rs"]
107mod tests;