use macrame::prelude::*;
const PROBES: &[(&str, &str)] = &[
(
"fold: recorded_at window",
"SELECT seq_id, table_name, entity_id, operation, payload FROM transaction_log \
WHERE recorded_at <= ?1",
),
(
"archive: oldest hot stamp",
"SELECT MIN(recorded_at) FROM transaction_log WHERE recorded_at < ?1",
),
(
"archive: log archivable EXISTS",
"SELECT seq_id FROM transaction_log WHERE recorded_at < ?1 AND EXISTS ( \
SELECT 1 FROM transaction_log newer \
WHERE newer.entity_id = transaction_log.entity_id \
AND newer.seq_id > transaction_log.seq_id)",
),
(
"as_of: latest per entity",
"SELECT entity_id, seq_id, payload FROM ( \
SELECT entity_id, seq_id, payload, \
ROW_NUMBER() OVER (PARTITION BY entity_id ORDER BY seq_id DESC) as rn \
FROM transaction_log WHERE recorded_at <= ?1) WHERE rn = 1",
),
(
"annotations by label",
"SELECT concept_id, value FROM analytics_annotations WHERE label = ?1",
),
(
"in-edges by target",
"SELECT source_id FROM links_current WHERE target_id = ?1 AND valid_to = ?2",
),
(
"traversal recursive step",
"SELECT l.target_id FROM links_current l WHERE l.source_id = ?1 \
AND l.valid_from <= ?3 AND ?3 < l.valid_to AND l.weight >= ?4",
),
(
"overlap guard",
"SELECT valid_from, valid_to FROM links_current \
WHERE source_id = ?1 AND target_id = ?2 AND edge_type = ?3 AND valid_from <> ?4",
),
];
#[tokio::main]
async fn main() {
let dir = tempfile::TempDir::new().unwrap();
let db = Database::open_with_cadence(&dir.path().join("p.db"), None)
.await
.unwrap();
let conn = db.read_conn();
for (label, sql) in PROBES {
let mut rows = conn
.query(&format!("EXPLAIN QUERY PLAN {sql}"), ())
.await
.unwrap();
let mut plan = Vec::new();
while let Some(r) = rows.next().await.unwrap() {
plan.push(r.get::<String>(3).unwrap());
}
println!("{label:>32} {}", plan.join(" | "));
}
}