#![allow(dead_code)]
use macrame::schema::ddl;
pub const TS: &str = "2026-01-01T00:00:00.000000Z";
pub const CONCEPTS_V7: &str = r#"
CREATE TABLE concepts (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
content TEXT NOT NULL DEFAULT '',
embedding_model TEXT,
valid_from TEXT NOT NULL,
valid_to TEXT NOT NULL DEFAULT '9999-12-31T23:59:59.999999Z',
recorded_at TEXT NOT NULL,
retired INTEGER NOT NULL DEFAULT 0,
CHECK (valid_from GLOB '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]Z' AND valid_to GLOB '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]Z' AND recorded_at GLOB '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][0-9][0-9][0-9]Z' AND 1)
)
"#;
pub const CONCEPTS_FTS_V7: &str = r#"
CREATE VIRTUAL TABLE concepts_fts USING fts5(
title, content, content='concepts', content_rowid='rowid'
)
"#;
pub const FTS_TRIGGERS_V7: &[&str] = &[
r#"
CREATE TRIGGER trg_concepts_fts_insert AFTER INSERT ON concepts
BEGIN
INSERT INTO concepts_fts (rowid, title, content)
VALUES (NEW.rowid, NEW.title, NEW.content);
END;
"#,
r#"
CREATE TRIGGER trg_concepts_fts_update AFTER UPDATE ON concepts
BEGIN
INSERT INTO concepts_fts (concepts_fts, rowid, title, content)
VALUES ('delete', OLD.rowid, OLD.title, OLD.content);
INSERT INTO concepts_fts (rowid, title, content)
VALUES (NEW.rowid, NEW.title, NEW.content);
END;
"#,
];
pub const UNREAD_INDICES_V7: &[&str] = &[
"CREATE INDEX idx_annotations_label ON analytics_annotations (label)",
"CREATE INDEX idx_lc_tgt_active ON links_current (target_id, valid_to)",
];
pub async fn v7_schema(conn: &libsql::Connection) {
conn.execute(CONCEPTS_V7, ()).await.unwrap();
conn.execute(ddl::CREATE_LINKS_TABLE, ()).await.unwrap();
conn.execute(ddl::CREATE_LINKS_CURRENT_TABLE, ())
.await
.unwrap();
conn.execute(ddl::CREATE_TRANSACTION_LOG_TABLE, ())
.await
.unwrap();
conn.execute(ddl::CREATE_ANALYTICS_ANNOTATIONS_TABLE, ())
.await
.unwrap();
conn.execute(CONCEPTS_FTS_V7, ()).await.unwrap();
for index_ddl in ddl::CREATE_INDICES.iter().chain(UNREAD_INDICES_V7) {
conn.execute(index_ddl, ()).await.unwrap();
}
for trigger_ddl in ddl::CREATE_TRIGGERS {
if trigger_ddl.contains("trg_concepts_fts_") {
continue;
}
conn.execute(trigger_ddl, ()).await.unwrap();
}
for trigger_ddl in FTS_TRIGGERS_V7 {
conn.execute(trigger_ddl, ()).await.unwrap();
}
}
pub async fn seeded_v7(conn: &libsql::Connection, concepts: &[&str]) {
v7_schema(conn).await;
for id in concepts {
conn.execute(
"INSERT INTO concepts (id, title, content, valid_from, recorded_at) \
VALUES (?1, 'N', 'findable body text', ?2, ?2)",
libsql::params![*id, TS],
)
.await
.unwrap();
}
for pair in concepts.windows(2) {
conn.execute(
"INSERT INTO links (source_id, target_id, edge_type, valid_from, valid_to, \
weight, properties, recorded_at) \
VALUES (?1, ?2, 'KNOWS', ?3, '9999-12-31T23:59:59.999999Z', 1.0, '{}', ?3)",
libsql::params![pair[0], pair[1], TS],
)
.await
.unwrap();
}
conn.execute("PRAGMA user_version = 7", ()).await.unwrap();
}