1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//! SQLite backend implementation.
//!
//! This module provides a complete SQLite implementation of all storage traits.
//! It supports both in-memory databases (great for testing) and file-based
//! databases (for development and small deployments).
//!
//! # Features
//!
//! - In-memory and file-based modes
//! - Full CRUD operations with tenant isolation
//! - Version history tracking
//! - Basic search support (string, token, date, reference)
//! - Transaction support with ACID guarantees
//!
//! # Example
//!
//! ```no_run
//! use helios_persistence::backends::sqlite::SqliteBackend;
//! use helios_persistence::tenant::{TenantContext, TenantId, TenantPermissions};
//!
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! // Create an in-memory database
//! let backend = SqliteBackend::in_memory()?;
//!
//! // Initialize the schema
//! backend.init_schema()?;
//!
//! // Create a tenant context
//! let tenant = TenantContext::new(
//! TenantId::new("acme"),
//! TenantPermissions::full_access(),
//! );
//!
//! // Now you can use the backend for CRUD operations
//! # Ok(())
//! # }
//! ```
//!
//! # Schema
//!
//! The SQLite backend uses the following schema:
//!
//! ```sql
//! -- Main resource table
//! CREATE TABLE resources (
//! tenant_id TEXT NOT NULL,
//! resource_type TEXT NOT NULL,
//! id TEXT NOT NULL,
//! version_id TEXT NOT NULL,
//! data BLOB NOT NULL, -- JSON data
//! last_updated TEXT NOT NULL,
//! is_deleted INTEGER NOT NULL DEFAULT 0,
//! deleted_at TEXT,
//! PRIMARY KEY (tenant_id, resource_type, id)
//! );
//!
//! -- Version history table
//! CREATE TABLE resource_history (
//! tenant_id TEXT NOT NULL,
//! resource_type TEXT NOT NULL,
//! id TEXT NOT NULL,
//! version_id TEXT NOT NULL,
//! data BLOB NOT NULL,
//! last_updated TEXT NOT NULL,
//! is_deleted INTEGER NOT NULL DEFAULT 0,
//! PRIMARY KEY (tenant_id, resource_type, id, version_id)
//! );
//! ```
pub use ;