1pub mod builder;
10pub mod common;
11pub mod conditions;
12pub mod helpers;
13pub mod traits;
14pub mod values;
15
16pub mod prelude {
22 pub use crate::SQLiteTransactionType;
23 pub use crate::traits::SQLiteColumn;
24 pub use crate::values::SQLiteValue;
25
26 #[cfg(feature = "rusqlite")]
28 pub use ::rusqlite::types::ToSql;
29}
30
31pub use self::values::{InsertValue, OwnedSQLiteValue, SQLiteValue};
32
33pub use drizzle_core::ParamBind;
35
36#[derive(Default, Debug, Clone, Copy)]
38pub enum SQLiteTransactionType {
39 #[default]
40 Deferred,
42 Immediate,
44 Exclusive,
46}
47
48#[cfg(feature = "rusqlite")]
49impl From<SQLiteTransactionType> for ::rusqlite::TransactionBehavior {
50 fn from(tx_type: SQLiteTransactionType) -> Self {
51 match tx_type {
52 SQLiteTransactionType::Deferred => ::rusqlite::TransactionBehavior::Deferred,
53 SQLiteTransactionType::Immediate => ::rusqlite::TransactionBehavior::Immediate,
54 SQLiteTransactionType::Exclusive => ::rusqlite::TransactionBehavior::Exclusive,
55 }
56 }
57}
58
59#[cfg(feature = "rusqlite")]
60impl From<::rusqlite::TransactionBehavior> for SQLiteTransactionType {
61 fn from(behavior: ::rusqlite::TransactionBehavior) -> Self {
62 match behavior {
63 ::rusqlite::TransactionBehavior::Deferred => SQLiteTransactionType::Deferred,
64 ::rusqlite::TransactionBehavior::Immediate => SQLiteTransactionType::Immediate,
65 ::rusqlite::TransactionBehavior::Exclusive => SQLiteTransactionType::Exclusive,
66 _ => SQLiteTransactionType::Deferred, }
68 }
69}
70
71#[cfg(feature = "libsql")]
73impl From<SQLiteTransactionType> for libsql::TransactionBehavior {
74 fn from(tx_type: SQLiteTransactionType) -> Self {
75 match tx_type {
76 SQLiteTransactionType::Deferred => libsql::TransactionBehavior::Deferred,
77 SQLiteTransactionType::Immediate => libsql::TransactionBehavior::Immediate,
78 SQLiteTransactionType::Exclusive => libsql::TransactionBehavior::Exclusive,
79 }
80 }
81}
82
83#[cfg(feature = "libsql")]
85impl From<libsql::TransactionBehavior> for SQLiteTransactionType {
86 fn from(behavior: libsql::TransactionBehavior) -> Self {
87 match behavior {
88 libsql::TransactionBehavior::Deferred => SQLiteTransactionType::Deferred,
89 libsql::TransactionBehavior::Immediate => SQLiteTransactionType::Immediate,
90 libsql::TransactionBehavior::Exclusive => SQLiteTransactionType::Exclusive,
91 libsql::TransactionBehavior::ReadOnly => SQLiteTransactionType::Deferred, }
93 }
94}
95#[cfg(feature = "turso")]
97impl From<SQLiteTransactionType> for turso::transaction::TransactionBehavior {
98 fn from(tx_type: SQLiteTransactionType) -> Self {
99 match tx_type {
100 SQLiteTransactionType::Deferred => turso::transaction::TransactionBehavior::Deferred,
101 SQLiteTransactionType::Immediate => turso::transaction::TransactionBehavior::Immediate,
102 SQLiteTransactionType::Exclusive => turso::transaction::TransactionBehavior::Exclusive,
103 }
104 }
105}
106
107#[cfg(feature = "turso")]
109impl From<turso::transaction::TransactionBehavior> for SQLiteTransactionType {
110 fn from(behavior: turso::transaction::TransactionBehavior) -> Self {
111 match behavior {
112 turso::transaction::TransactionBehavior::Deferred => SQLiteTransactionType::Deferred,
113 turso::transaction::TransactionBehavior::Immediate => SQLiteTransactionType::Immediate,
114 turso::transaction::TransactionBehavior::Exclusive => SQLiteTransactionType::Exclusive,
115 _ => SQLiteTransactionType::Deferred,
116 }
117 }
118}
119
120#[macro_export]
133macro_rules! params {
134 [$($param:tt),+ $(,)?] => {
136 [
137 $(
138 $crate::params_internal!($param)
139 ),+
140 ]
141 };
142}
143
144#[macro_export]
146macro_rules! params_internal {
147 ({ $key:ident: $value:expr }) => {
149 $crate::ParamBind::new(stringify!($key), $crate::SQLiteValue::from($value))
150 };
151 ($value:expr) => {
153 $crate::ParamBind::new("", $crate::SQLiteValue::from($value))
154 };
155}