Skip to content

Commit 8485445

Browse files
committed
refactor(wip)!: consolidating the querybuilder tests
1 parent 538fd6f commit 8485445

18 files changed

Lines changed: 163 additions & 133 deletions

File tree

canyon_core/src/query/operators.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
use crate::query::querybuilder::syntax::dialect::PlaceholderDatatype;
12
use crate::query::querybuilder::syntax::{
23
dialect::SqlDialect,
34
keyword::Keyword,
45
tokens::{PlaceholderKind, SqlToken, SqlTokens, Symbol, ToSqlTokens},
56
};
67
use std::borrow::Cow;
78
use std::fmt::Display;
8-
use crate::query::querybuilder::syntax::dialect::PlaceholderDatatype;
99

1010
/// Enumerated type for represent the available operators
1111
/// in SQL sentences
@@ -100,7 +100,9 @@ impl LikeKind {
100100
out.whitespace();
101101
out.keyword(Keyword::As);
102102
out.whitespace();
103-
out.ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(D::PLACEHOLDER_DATA_TYPE.into())));
103+
out.ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(
104+
D::PLACEHOLDER_DATA_TYPE.into(),
105+
)));
104106
out.symbol(Symbol::RParen);
105107
}
106108

@@ -185,7 +187,9 @@ mod tests {
185187
SqlToken::WhiteSpace,
186188
SqlToken::Keyword(Keyword::As),
187189
SqlToken::WhiteSpace,
188-
SqlToken::Ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(D::PLACEHOLDER_DATA_TYPE.into()))),
190+
SqlToken::Ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(
191+
D::PLACEHOLDER_DATA_TYPE.into(),
192+
))),
189193
SqlToken::Symbol(Symbol::RParen),
190194
SqlToken::Symbol(Symbol::Comma),
191195
SqlToken::WhiteSpace,
@@ -213,7 +217,9 @@ mod tests {
213217
SqlToken::WhiteSpace,
214218
SqlToken::Keyword(Keyword::As),
215219
SqlToken::WhiteSpace,
216-
SqlToken::Ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(D::PLACEHOLDER_DATA_TYPE.into()))),
220+
SqlToken::Ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(
221+
D::PLACEHOLDER_DATA_TYPE.into(),
222+
))),
217223
SqlToken::Symbol(Symbol::RParen),
218224
SqlToken::Symbol(Symbol::RParen),
219225
]
@@ -231,7 +237,9 @@ mod tests {
231237
SqlToken::WhiteSpace,
232238
SqlToken::Keyword(Keyword::As),
233239
SqlToken::WhiteSpace,
234-
SqlToken::Ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(D::PLACEHOLDER_DATA_TYPE.into()))),
240+
SqlToken::Ident(Cow::from(<PlaceholderDatatype as Into<&str>>::into(
241+
D::PLACEHOLDER_DATA_TYPE.into(),
242+
))),
235243
SqlToken::Symbol(Symbol::RParen),
236244
SqlToken::Symbol(Symbol::Comma),
237245
SqlToken::WhiteSpace,
@@ -281,14 +289,11 @@ mod tests {
281289
#[cfg(feature = "postgres")]
282290
#[test]
283291
fn not_like_operator_emits_not_like_instead_of_not_equals() {
284-
let mut expected = vec![
285-
SqlToken::Keyword(Keyword::Not),
286-
SqlToken::WhiteSpace,
287-
];
292+
let mut expected = vec![SqlToken::Keyword(Keyword::Not), SqlToken::WhiteSpace];
288293
expected.extend(full_like_tokens::<PgDialect>());
289294
assert_eq!(
290295
tokens::<PgDialect, _>(Operator::NotLike(LikeKind::Full)),
291296
expected,
292297
);
293298
}
294-
}
299+
}

canyon_core/src/query/query.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,3 @@ impl<'a> Query<'a> {
5656
input.query(&self.sql, &self.params).await
5757
}
5858
}
59-

canyon_core/src/query/querybuilder/syntax/clause.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ impl From<ConditionClauseKind> for Keyword {
3030
ConditionClauseKind::Where => Keyword::Where,
3131
ConditionClauseKind::And | ConditionClauseKind::AndValuesIn => Keyword::And,
3232
ConditionClauseKind::Or | ConditionClauseKind::OrValuesIn => Keyword::Or,
33-
ConditionClauseKind::In => Keyword::In
33+
ConditionClauseKind::In => Keyword::In,
3434
}
3535
}
3636
}

canyon_core/src/query/querybuilder/syntax/dialect.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,17 @@ use std::fmt::Display;
1111
pub trait SqlDialect {
1212
const DB: DatabaseType;
1313
const SUPPORTS_RETURNING: bool = true;
14-
const _SUPPORTS_LIMIT_OFFSET: bool = true;
14+
const _SUPPORTS_LIMIT_OFFSET: bool = true; // TODO: pending to implement
1515
const IDENT_QUOTING: IdentQuotingStyle = IdentQuotingStyle::DoubleQuote;
16-
const ESCAPE_QUOTED_IDENT_DELIMITER: bool = false;
1716
const PLACEHOLDER_SYMBOL: PlaceholderSymbol = PlaceholderSymbol::DollarNumbered;
1817
const PLACEHOLDER_DATA_TYPE: PlaceholderDatatype = PlaceholderDatatype::Varchar;
1918
}
2019

2120
/// Safe assuming that Canyon's default is PostgreSQL,
2221
/// which is the most widely used and standards-compliant database among the supported ones.
23-
pub struct StandardDialect;
22+
pub struct StandardDialect; // TODO: isn't better just to use postgres directly as the default
2423
impl SqlDialect for StandardDialect {
2524
const DB: DatabaseType = PostgreSql;
26-
const ESCAPE_QUOTED_IDENT_DELIMITER: bool = true;
2725
}
2826

2927
#[cfg(feature = "postgres")]
@@ -32,7 +30,6 @@ pub struct PgDialect;
3230
impl SqlDialect for PgDialect {
3331
const DB: DatabaseType = PostgreSql;
3432
const IDENT_QUOTING: IdentQuotingStyle = IdentQuotingStyle::DoubleQuote;
35-
const ESCAPE_QUOTED_IDENT_DELIMITER: bool = true;
3633

3734
const PLACEHOLDER_SYMBOL: PlaceholderSymbol = PlaceholderSymbol::DollarNumbered;
3835
}

canyon_core/src/query/querybuilder/syntax/emitter/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
pub(crate) mod backends;
22
pub(crate) mod types;
33

4+
use crate::query::querybuilder::syntax::emitter::types::delete::EmitDelete;
5+
use crate::query::querybuilder::syntax::emitter::types::update::EmitUpdate;
46
use crate::query::querybuilder::syntax::{
57
ast::BaseAst, dialect::SqlDialect, emitter::types::insert::EmitInsert,
68
emitter::types::select::EmitSelect, query_kind::QueryKind, tokens::SqlTokens,
79
};
810
use transient::{Any, Inv};
9-
use crate::query::querybuilder::syntax::emitter::types::delete::EmitDelete;
10-
use crate::query::querybuilder::syntax::emitter::types::update::EmitUpdate;
1111

1212
// ---------- AST Processor marker trait ----------
1313
pub trait AstProcessor<'a>: Default + AsAstProcessor<'a> {

canyon_core/src/query/querybuilder/syntax/emitter/types/delete.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ pub trait EmitDelete<'a>: SqlEmitter<'a> {
4747
mod tests {
4848
use super::EmitDelete;
4949
use crate::query::querybuilder::syntax::dialect::MsSql;
50+
use crate::query::querybuilder::syntax::tokens::PlaceholderKind;
5051
use crate::query::querybuilder::syntax::writer::TokenWriter;
5152
use crate::query::querybuilder::syntax::{
5253
ast::BaseAst, ast::delete::DeleteAst, dialect::StandardDialect, emitter::SqlEmitter,
5354
};
54-
use crate::query::querybuilder::syntax::tokens::PlaceholderKind;
5555

5656
#[derive(Default)]
5757
struct TestDeleteEmitter;
@@ -67,15 +67,15 @@ mod tests {
6767

6868
fn render_standard<'a>(ast: &SelectlessDeleteAst, base_ast: &mut BaseAst<'a>) -> String {
6969
let mut emitter = TestDeleteEmitter;
70-
let mut tokens = emitter.emit_delete(&ast.0, base_ast);
70+
let tokens = emitter.emit_delete(&ast.0, base_ast);
7171
TokenWriter::new()
7272
.render::<TestDeleteEmitter>(tokens)
7373
.unwrap()
7474
}
7575

7676
fn render_mssql<'a>(ast: &SelectlessDeleteAst, base_ast: &mut BaseAst<'a>) -> String {
7777
let mut emitter = TestDeleteEmitterMsSql;
78-
let mut tokens = emitter.emit_delete(&ast.0, base_ast);
78+
let tokens = emitter.emit_delete(&ast.0, base_ast);
7979
TokenWriter::new()
8080
.render::<TestDeleteEmitterMsSql>(tokens)
8181
.unwrap()
@@ -99,8 +99,7 @@ mod tests {
9999
};
100100

101101
let sql = render_standard(&ast, &mut base_ast);
102-
103-
assert_eq!(sql.trim(), "DELETE FROM users;");
102+
assert_eq!(sql.trim(), "DELETE FROM \"users\";");
104103
}
105104

106105
#[test]
@@ -113,7 +112,7 @@ mod tests {
113112
};
114113

115114
let sql = render_mssql(&ast, &mut base_ast);
116-
assert_eq!(sql.trim(), "DELETE FROM users;");
115+
assert_eq!(sql.trim(), "DELETE FROM [users];");
117116
}
118117

119118
#[test]
@@ -137,6 +136,6 @@ mod tests {
137136

138137
let sql = render_standard(&ast, &mut base_ast);
139138

140-
assert_eq!(sql.trim(), "DELETE FROM users WHERE \"id\" = $1;");
139+
assert_eq!(sql.trim(), "DELETE FROM \"users\" WHERE \"id\" = $1;");
141140
}
142141
}

0 commit comments

Comments
 (0)