0.5.3
This commit is contained in:
@@ -3,9 +3,7 @@
|
||||
//! Database schema initialization.
|
||||
|
||||
/// Ensures that the database schema exists.
|
||||
pub(crate) async fn ensure_schema(
|
||||
database: &crate::KbDatabase,
|
||||
) -> Result<(), crate::KbError> {
|
||||
pub(crate) async fn ensure_schema(database: &crate::KbDatabase) -> Result<(), crate::KbError> {
|
||||
match database.connection() {
|
||||
crate::KbDatabaseConnection::Sqlite(pool) => {
|
||||
let metadata_table_result = sqlx::query(
|
||||
@@ -153,6 +151,107 @@ ON kb_observed_tokens (status)
|
||||
error
|
||||
)));
|
||||
}
|
||||
let onchain_observations_result = sqlx::query(
|
||||
r#"
|
||||
CREATE TABLE IF NOT EXISTS kb_onchain_observations (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
observation_kind TEXT NOT NULL,
|
||||
source_kind INTEGER NOT NULL,
|
||||
endpoint_name TEXT NULL,
|
||||
object_key TEXT NOT NULL,
|
||||
slot INTEGER NULL,
|
||||
payload_json TEXT NOT NULL,
|
||||
observed_at TEXT NOT NULL
|
||||
)
|
||||
"#,
|
||||
)
|
||||
.execute(pool)
|
||||
.await;
|
||||
if let Err(error) = onchain_observations_result {
|
||||
return Err(crate::KbError::Db(format!(
|
||||
"cannot create table kb_onchain_observations on sqlite: {}",
|
||||
error
|
||||
)));
|
||||
}
|
||||
let onchain_observations_object_key_index_result = sqlx::query(
|
||||
r#"
|
||||
CREATE INDEX IF NOT EXISTS kb_idx_onchain_observations_object_key
|
||||
ON kb_onchain_observations (object_key)
|
||||
"#,
|
||||
)
|
||||
.execute(pool)
|
||||
.await;
|
||||
if let Err(error) = onchain_observations_object_key_index_result {
|
||||
return Err(crate::KbError::Db(format!(
|
||||
"cannot create index kb_idx_onchain_observations_object_key on sqlite: {}",
|
||||
error
|
||||
)));
|
||||
}
|
||||
let onchain_observations_observed_at_index_result = sqlx::query(
|
||||
r#"
|
||||
CREATE INDEX IF NOT EXISTS kb_idx_onchain_observations_observed_at
|
||||
ON kb_onchain_observations (observed_at)
|
||||
"#,
|
||||
)
|
||||
.execute(pool)
|
||||
.await;
|
||||
if let Err(error) = onchain_observations_observed_at_index_result {
|
||||
return Err(crate::KbError::Db(format!(
|
||||
"cannot create index kb_idx_onchain_observations_observed_at on sqlite: {}",
|
||||
error
|
||||
)));
|
||||
}
|
||||
let analysis_signals_result = sqlx::query(
|
||||
r#"
|
||||
CREATE TABLE IF NOT EXISTS kb_analysis_signals (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
signal_kind TEXT NOT NULL,
|
||||
severity INTEGER NOT NULL,
|
||||
object_key TEXT NOT NULL,
|
||||
related_observation_id INTEGER NULL,
|
||||
score REAL NULL,
|
||||
payload_json TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
FOREIGN KEY(related_observation_id) REFERENCES kb_onchain_observations(id)
|
||||
)
|
||||
"#,
|
||||
)
|
||||
.execute(pool)
|
||||
.await;
|
||||
if let Err(error) = analysis_signals_result {
|
||||
return Err(crate::KbError::Db(format!(
|
||||
"cannot create table kb_analysis_signals on sqlite: {}",
|
||||
error
|
||||
)));
|
||||
}
|
||||
let analysis_signals_object_key_index_result = sqlx::query(
|
||||
r#"
|
||||
CREATE INDEX IF NOT EXISTS kb_idx_analysis_signals_object_key
|
||||
ON kb_analysis_signals (object_key)
|
||||
"#,
|
||||
)
|
||||
.execute(pool)
|
||||
.await;
|
||||
if let Err(error) = analysis_signals_object_key_index_result {
|
||||
return Err(crate::KbError::Db(format!(
|
||||
"cannot create index kb_idx_analysis_signals_object_key on sqlite: {}",
|
||||
error
|
||||
)));
|
||||
}
|
||||
let analysis_signals_created_at_index_result = sqlx::query(
|
||||
r#"
|
||||
CREATE INDEX IF NOT EXISTS kb_idx_analysis_signals_created_at
|
||||
ON kb_analysis_signals (created_at)
|
||||
"#,
|
||||
)
|
||||
.execute(pool)
|
||||
.await;
|
||||
if let Err(error) = analysis_signals_created_at_index_result {
|
||||
return Err(crate::KbError::Db(format!(
|
||||
"cannot create index kb_idx_analysis_signals_created_at on sqlite: {}",
|
||||
error
|
||||
)));
|
||||
}
|
||||
let schema_version = crate::KbDbMetadataDto::new(
|
||||
"schema_version".to_string(),
|
||||
env!("CARGO_PKG_VERSION").to_string(),
|
||||
@@ -162,6 +261,6 @@ ON kb_observed_tokens (status)
|
||||
return Err(error);
|
||||
}
|
||||
Ok(())
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user