1use super::connection::{SqliteBindCollector, SqliteValue};
4use super::query_builder::SqliteQueryBuilder;
5use crate::backend::*;
6use crate::sql_types::TypeMetadata;
7
8#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Default)]
10pub struct Sqlite;
11
12#[allow(missing_debug_implementations)]
21#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)]
22pub enum SqliteType {
23 Binary,
25 Text,
27 Float,
29 Double,
31 SmallInt,
33 Integer,
35 Long,
37}
38
39impl Backend for Sqlite {
40 type QueryBuilder = SqliteQueryBuilder;
41 type RawValue<'a> = SqliteValue<'a, 'a, 'a>;
42 type BindCollector<'a> = SqliteBindCollector<'a>;
43}
44
45impl TypeMetadata for Sqlite {
46 type TypeMetadata = SqliteType;
47 type MetadataLookup = ();
48}
49
50impl SqlDialect for Sqlite {
51 #[cfg(not(feature = "returning_clauses_for_sqlite_3_35"))]
52 type ReturningClause = sql_dialect::returning_clause::DoesNotSupportReturningClause;
53 #[cfg(feature = "returning_clauses_for_sqlite_3_35")]
54 type ReturningClause = SqliteReturningClause;
55
56 type OnConflictClause = SqliteOnConflictClause;
57
58 type InsertWithDefaultKeyword =
59 sql_dialect::default_keyword_for_insert::DoesNotSupportDefaultKeyword;
60 type BatchInsertSupport = SqliteBatchInsert;
61 type ConcatClause = sql_dialect::concat_clause::ConcatWithPipesClause;
62 type DefaultValueClauseForInsert = sql_dialect::default_value_clause::AnsiDefaultValueClause;
63
64 type EmptyFromClauseSyntax = sql_dialect::from_clause_syntax::AnsiSqlFromClauseSyntax;
65 type SelectStatementSyntax = sql_dialect::select_statement_syntax::AnsiSqlSelectStatement;
66
67 type ExistsSyntax = sql_dialect::exists_syntax::AnsiSqlExistsSyntax;
68 type ArrayComparison = sql_dialect::array_comparison::AnsiSqlArrayComparison;
69 type AliasSyntax = sql_dialect::alias_syntax::AsAliasSyntax;
70
71 type WindowFrameClauseGroupSupport =
72 sql_dialect::window_frame_clause_group_support::IsoGroupWindowFrameUnit;
73 type WindowFrameExclusionSupport =
74 sql_dialect::window_frame_exclusion_support::FrameExclusionSupport;
75 type AggregateFunctionExpressions =
76 sql_dialect::aggregate_function_expressions::PostgresLikeAggregateFunctionExpressions;
77 type BuiltInWindowFunctionRequireOrder =
78 sql_dialect::built_in_window_function_require_order::NoOrderRequired;
79}
80
81impl DieselReserveSpecialization for Sqlite {}
82impl TrustedBackend for Sqlite {}
83
84#[derive(Debug, Copy, Clone)]
85pub struct SqliteOnConflictClause;
86
87impl sql_dialect::on_conflict_clause::SupportsOnConflictClause for SqliteOnConflictClause {}
88impl sql_dialect::on_conflict_clause::SupportsOnConflictClauseWhere for SqliteOnConflictClause {}
89impl sql_dialect::on_conflict_clause::PgLikeOnConflictClause for SqliteOnConflictClause {}
90
91#[derive(Debug, Copy, Clone)]
92pub struct SqliteBatchInsert;
93
94#[derive(Debug, Copy, Clone)]
95pub struct SqliteReturningClause;
96
97impl sql_dialect::returning_clause::SupportsReturningClause for SqliteReturningClause {}