rbdc_sqlite/statement/
mod.rs

1use crate::{SqliteColumn, SqliteTypeInfo};
2use either::Either;
3use rbdc::ext::ustr::UStr;
4use std::collections::HashMap;
5use std::sync::Arc;
6
7mod handle;
8mod r#virtual;
9
10pub(crate) use handle::StatementHandle;
11pub(crate) use r#virtual::VirtualStatement;
12
13#[derive(Debug, Clone)]
14#[allow(clippy::rc_buffer)]
15pub struct SqliteStatement {
16    pub(crate) sql: String,
17    pub(crate) parameters: usize,
18    pub(crate) columns: Arc<Vec<SqliteColumn>>,
19    pub(crate) column_names: Arc<HashMap<UStr, usize>>,
20}
21
22impl SqliteStatement {
23    pub fn to_owned(&self) -> SqliteStatement {
24        SqliteStatement {
25            sql: self.sql.clone(),
26            parameters: self.parameters,
27            columns: Arc::clone(&self.columns),
28            column_names: Arc::clone(&self.column_names),
29        }
30    }
31
32    pub fn sql(&self) -> &str {
33        &self.sql
34    }
35
36    pub fn parameters(&self) -> Option<Either<&[SqliteTypeInfo], usize>> {
37        Some(Either::Right(self.parameters))
38    }
39
40    pub fn columns(&self) -> &[SqliteColumn] {
41        &self.columns
42    }
43}