sqlx_rxqlite/
arguments.rs

1use crate::encode::{Encode, IsNull};
2//use crate::types::Type;
3//use crate::type_info::DataType;
4use crate::{RXQLite, RXQLiteTypeInfo};
5//use crate::error::BoxDynError;
6
7pub(crate) use sqlx_core::arguments::*;
8use sqlx_core::types::Type;
9//use sqlx_core::encode::IsNull;
10
11/// Implementation of [`Arguments`] for MySQL.
12#[derive(Debug, Default, Clone)]
13pub struct RXQLiteArguments {
14    pub(crate) values: Vec<rxqlite_common::Value>,
15    pub(crate) types: Vec<RXQLiteTypeInfo>,
16}
17/*
18impl<'q> Encode<'q, RXQLite> for i8 {
19    fn encode_by_ref(&self, args: &mut Vec<rxqlite_common::Value>) -> IsNull {
20        args.push(rxqlite_common::Value::from(*self));
21
22        IsNull::No
23    }
24}
25*/
26impl RXQLiteArguments {
27    pub(crate) fn add<'q, T>(&mut self, value: T)
28    where
29        T: Encode<'q, RXQLite> + Type<RXQLite>,
30    {
31        let ty = T::type_info();
32
33        if let IsNull::Yes = value.encode_by_ref(&mut self.values) {
34          self.values.push(rxqlite_common::Value::Null);
35        } else {
36        }
37        self.types.push(ty);
38    }
39
40    #[doc(hidden)]
41    pub fn len(&self) -> usize {
42        self.types.len()
43    }
44}
45
46impl<'q> Arguments<'q> for RXQLiteArguments {
47    type Database = RXQLite;
48
49    fn reserve(&mut self, len: usize, size: usize) {
50        self.types.reserve(len);
51        self.values.reserve(size);
52    }
53
54    fn add<T>(&mut self, value: T)
55    where
56        T: Encode<'q, Self::Database> + Type<Self::Database>,
57    {
58        self.add(value)
59    }
60}