1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//! The SQLite backend

use super::bind_collector::SqliteBindCollector;
use super::query_builder::SqliteQueryBuilder;
use diesel::sql_types::TypeMetadata;

/// The SQLite backend
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Default)]
pub struct Sqlite;

impl diesel::backend::Backend for Sqlite {
    type QueryBuilder = SqliteQueryBuilder;
    type RawValue<'a> = super::sqlite_value::SqliteValue<'a>;
    type BindCollector<'a> = SqliteBindCollector<'a>;
}

impl TypeMetadata for Sqlite {
    type TypeMetadata = ft_sys_shared::SqliteType;
    type MetadataLookup = ();
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::Float> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Real
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::Double> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Real
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::Integer> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Integer
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::BigInt> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Integer
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::SmallInt> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Integer
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::Binary> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Blob
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::Bool> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Integer
    }
}

impl diesel::sql_types::HasSqlType<diesel::sql_types::Text> for Sqlite {
    fn metadata(_lookup: &mut Self::MetadataLookup) -> Self::TypeMetadata {
        ft_sys_shared::SqliteType::Text
    }
}

impl diesel::backend::SqlDialect for Sqlite {
    type ReturningClause = SqliteReturningClause;

    type OnConflictClause = SqliteOnConflictClause;

    type InsertWithDefaultKeyword =
        diesel::backend::sql_dialect::default_keyword_for_insert::DoesNotSupportDefaultKeyword;
    type BatchInsertSupport = SqliteBatchInsert;
    type ConcatClause = diesel::backend::sql_dialect::concat_clause::ConcatWithPipesClause;
    type DefaultValueClauseForInsert =
        diesel::backend::sql_dialect::default_value_clause::AnsiDefaultValueClause;

    type EmptyFromClauseSyntax =
        diesel::backend::sql_dialect::from_clause_syntax::AnsiSqlFromClauseSyntax;
    type SelectStatementSyntax =
        diesel::backend::sql_dialect::select_statement_syntax::AnsiSqlSelectStatement;

    type ExistsSyntax = diesel::backend::sql_dialect::exists_syntax::AnsiSqlExistsSyntax;
    type ArrayComparison = diesel::backend::sql_dialect::array_comparison::AnsiSqlArrayComparison;
}

impl diesel::backend::DieselReserveSpecialization for Sqlite {}
impl diesel::backend::TrustedBackend for Sqlite {}

#[derive(Debug, Copy, Clone)]
pub struct SqliteOnConflictClause;

impl diesel::backend::sql_dialect::on_conflict_clause::SupportsOnConflictClause
    for SqliteOnConflictClause
{
}
impl diesel::backend::sql_dialect::on_conflict_clause::PgLikeOnConflictClause
    for SqliteOnConflictClause
{
}

#[derive(Debug, Copy, Clone)]
pub struct SqliteBatchInsert;

impl diesel::backend::sql_dialect::batch_insert_support::SupportsBatchInsert for SqliteBatchInsert {}

#[derive(Debug, Copy, Clone)]
pub struct SqliteReturningClause;

impl diesel::backend::sql_dialect::returning_clause::SupportsReturningClause
    for SqliteReturningClause
{
}