This commit is contained in:
2026-05-27 18:45:16 +02:00
parent d9558a5c16
commit 96b6209482
18 changed files with 996 additions and 23 deletions

View File

@@ -230,6 +230,22 @@ pub(crate) async fn ensure_schema(database: &crate::Database) -> Result<(), crat
if let Err(error) = result {
return Err(error);
}
let result = create_tbl_dex_decode_replay_ledger(pool).await;
if let Err(error) = result {
return Err(error);
}
let result = create_uix_dex_decode_replay_ledger_transaction_scope_version(pool).await;
if let Err(error) = result {
return Err(error);
}
let result = create_idx_dex_decode_replay_ledger_signature(pool).await;
if let Err(error) = result {
return Err(error);
}
let result = create_idx_dex_decode_replay_ledger_status(pool).await;
if let Err(error) = result {
return Err(error);
}
let result = create_tbl_transaction_classifications(pool).await;
if let Err(error) = result {
return Err(error);
@@ -1445,6 +1461,80 @@ ON k_sol_dex_decoded_events (transaction_id, instruction_id, event_kind)
.await;
}
/// Creates `k_sol_dex_decode_replay_ledger`.
async fn create_tbl_dex_decode_replay_ledger(
pool: &sqlx::SqlitePool,
) -> Result<(), crate::Error> {
return execute_sqlite_schema_statement(
pool,
"create_tbl_dex_decode_replay_ledger",
r#"
CREATE TABLE IF NOT EXISTS k_sol_dex_decode_replay_ledger (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
transaction_id INTEGER NOT NULL,
signature TEXT NOT NULL,
decoder_scope TEXT NOT NULL,
decoder_version TEXT NOT NULL,
decode_status TEXT NOT NULL,
certainty TEXT NOT NULL,
event_count INTEGER NOT NULL,
distinct_token_mint_count INTEGER NOT NULL,
force_replay_required INTEGER NOT NULL,
status_reason TEXT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY(transaction_id) REFERENCES k_sol_chain_transactions(id)
)
"#,
)
.await;
}
/// Creates unique index on `(transaction_id, decoder_scope, decoder_version)`.
async fn create_uix_dex_decode_replay_ledger_transaction_scope_version(
pool: &sqlx::SqlitePool,
) -> Result<(), crate::Error> {
return execute_sqlite_schema_statement(
pool,
"create_uix_dex_decode_replay_ledger_transaction_scope_version",
r#"
CREATE UNIQUE INDEX IF NOT EXISTS uix_dex_decode_replay_ledger_transaction_scope_version
ON k_sol_dex_decode_replay_ledger (transaction_id, decoder_scope, decoder_version)
"#,
)
.await;
}
/// Creates index on `(signature, decoder_scope, decoder_version)`.
async fn create_idx_dex_decode_replay_ledger_signature(
pool: &sqlx::SqlitePool,
) -> Result<(), crate::Error> {
return execute_sqlite_schema_statement(
pool,
"create_idx_dex_decode_replay_ledger_signature",
r#"
CREATE INDEX IF NOT EXISTS idx_dex_decode_replay_ledger_signature
ON k_sol_dex_decode_replay_ledger (signature, decoder_scope, decoder_version)
"#,
)
.await;
}
/// Creates index on `(decode_status, certainty, force_replay_required)`.
async fn create_idx_dex_decode_replay_ledger_status(
pool: &sqlx::SqlitePool,
) -> Result<(), crate::Error> {
return execute_sqlite_schema_statement(
pool,
"create_idx_dex_decode_replay_ledger_status",
r#"
CREATE INDEX IF NOT EXISTS idx_dex_decode_replay_ledger_status
ON k_sol_dex_decode_replay_ledger (decode_status, certainty, force_replay_required)
"#,
)
.await;
}
async fn create_tbl_launch_surfaces(pool: &sqlx::SqlitePool) -> Result<(), crate::Error> {
return execute_sqlite_schema_statement(
pool,