Skip to content

Commit 7310299

Browse files
authored
dinosql: Add PostgreSQL support for TRUNCATE (#448)
1 parent f7ad23c commit 7310299

File tree

6 files changed

+80
-4
lines changed

6 files changed

+80
-4
lines changed

internal/dinosql/parser.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ func parseQuery(c core.Catalog, stmt nodes.Node, source string, rewriteParameter
429429
if err := validateInsertStmt(n); err != nil {
430430
return nil, err
431431
}
432+
case nodes.TruncateStmt:
432433
case nodes.UpdateStmt:
433434
default:
434435
return nil, errUnsupportedStatementType
@@ -766,15 +767,20 @@ func sourceTables(qc *QueryCatalog, node nodes.Node) ([]core.Table, error) {
766767
list = nodes.List{
767768
Items: []nodes.Node{*n.Relation},
768769
}
769-
case nodes.UpdateStmt:
770-
list = nodes.List{
771-
Items: append(n.FromClause.Items, *n.Relation),
772-
}
773770
case nodes.SelectStmt:
774771
list = search(n.FromClause, func(node nodes.Node) bool {
775772
_, ok := node.(nodes.RangeVar)
776773
return ok
777774
})
775+
case nodes.TruncateStmt:
776+
list = search(n.Relations, func(node nodes.Node) bool {
777+
_, ok := node.(nodes.RangeVar)
778+
return ok
779+
})
780+
case nodes.UpdateStmt:
781+
list = nodes.List{
782+
Items: append(n.FromClause.Items, *n.Relation),
783+
}
778784
default:
779785
return nil, fmt.Errorf("sourceTables: unsupported node type: %T", n)
780786
}
@@ -830,6 +836,8 @@ func outputColumns(qc *QueryCatalog, node nodes.Node) ([]core.Column, error) {
830836
targets = n.ReturningList
831837
case nodes.SelectStmt:
832838
targets = n.TargetList
839+
case nodes.TruncateStmt:
840+
targets = nodes.List{}
833841
case nodes.UpdateStmt:
834842
targets = n.ReturningList
835843
default:

internal/endtoend/testdata/truncate/go/db.go

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

internal/endtoend/testdata/truncate/go/models.go

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

internal/endtoend/testdata/truncate/go/query.sql.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE TABLE bar (id serial not null);
2+
3+
-- name: Truncate :exec
4+
TRUNCATE bar;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"version": "1",
3+
"packages": [{
4+
"path": "go",
5+
"name": "querytest",
6+
"schema": "query.sql",
7+
"queries": "query.sql"
8+
}]
9+
}

0 commit comments

Comments
 (0)