udb/backend/plugins/
sqlite.rs1use crate::backend::BackendKind;
10use crate::backend::plugin::{Backend, RegisterCtx};
11
12#[derive(Debug, Default)]
14pub struct SqlitePlugin;
15
16pub static PLUGIN: SqlitePlugin = SqlitePlugin;
18
19#[async_trait::async_trait]
20impl Backend for SqlitePlugin {
21 fn kind(&self) -> BackendKind {
22 BackendKind::Sqlite
23 }
24
25 async fn register(&self, ctx: &mut RegisterCtx<'_>) {
26 crate::runtime::core::setup_data::register_sqlite(ctx).await;
27 }
28
29 fn generate_artifacts(
30 &self,
31 manifest: &crate::generation::CatalogManifest,
32 sql_config: &crate::generation::sql::SqlGenerationConfig,
33 ) -> Result<Vec<crate::generation::GeneratedArtifact>, String> {
34 crate::generation::backends::generate_sqlite_artifacts(manifest, sql_config)
35 .map_err(|err| err.to_string())
36 }
37}
38
39impl crate::runtime::executors::handle::DispatchFactory for SqlitePlugin {
40 fn build_dispatch_executor(
41 &self,
42 runtime: &crate::runtime::core::DataBrokerRuntime,
43 instance: Option<&str>,
44 _write: bool,
45 context: Option<&crate::broker::RequestContext>,
46 ) -> Result<crate::runtime::executors::handle::DispatchExecutor, tonic::Status> {
47 let instance_name = instance.unwrap_or("primary");
48 let pool = runtime
49 .sqlite_pool_for_instance(instance_name)
50 .ok_or_else(|| {
51 super::dispatch_instance_not_configured_status(
52 "sqlite",
53 format!(
54 "SQLite instance '{instance_name}' is not configured (set UDB_SQLITE_DSN)"
55 ),
56 )
57 })?
58 .clone();
59 let executor = match context {
62 Some(ctx) => crate::runtime::executors::sqlite::SqliteExecutor::with_context(
63 pool,
64 std::sync::Arc::new(ctx.clone()),
65 ),
66 None => crate::runtime::executors::sqlite::SqliteExecutor::with_pool(pool),
67 };
68 Ok(crate::runtime::executors::handle::DispatchExecutor::Sqlite(
69 executor,
70 ))
71 }
72}