Skip to content

Commit 6d32f72

Browse files
authored
feat(engine/sqlite): Support COLLATE for sqlite WHERE clause (#2554)
* feat(engine/sqlite): support COLLATE for sqlite WHERE clause close #1808 * test: add endtoend
1 parent 5696f2f commit 6d32f72

File tree

6 files changed

+100
-0
lines changed

6 files changed

+100
-0
lines changed

internal/endtoend/testdata/where_collate/sqlite/go/db.go

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/where_collate/sqlite/go/models.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/where_collate/sqlite/go/query.sql.go

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE TABLE accounts (
2+
id TEXT NOT NULL PRIMARY KEY,
3+
name TEXT NOT NULL UNIQUE,
4+
5+
UNIQUE (name COLLATE NOCASE)
6+
);
7+
8+
-- name: GetAccountByName :one
9+
SELECT * FROM accounts
10+
WHERE name = ? COLLATE NOCASE
11+
LIMIT 1;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "sqlite",
7+
"schema": "query.sql",
8+
"queries": "query.sql",
9+
"name": "querytest"
10+
}
11+
]
12+
}

internal/engine/sqlite/convert.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,14 @@ func (c *cc) convertCastExpr(n *parser.Expr_castContext) ast.Node {
977977
}
978978
}
979979

980+
func (c *cc) convertCollateExpr(n *parser.Expr_collateContext) ast.Node {
981+
return &ast.CollateExpr{
982+
Xpr: c.convert(n.Expr()),
983+
Arg: NewIdentifer(n.Collation_name().GetText()),
984+
Location: n.GetStart().GetStart(),
985+
}
986+
}
987+
980988
func (c *cc) convert(node node) ast.Node {
981989
switch n := node.(type) {
982990

@@ -1037,6 +1045,9 @@ func (c *cc) convert(node node) ast.Node {
10371045
case *parser.Expr_betweenContext:
10381046
return c.convertBetweenExpr(n)
10391047

1048+
case *parser.Expr_collateContext:
1049+
return c.convertCollateExpr(n)
1050+
10401051
case *parser.Factored_select_stmtContext:
10411052
// TODO: need to handle this
10421053
return todo("convert(case=parser.Factored_select_stmtContext)", n)

0 commit comments

Comments
 (0)