Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions internal/endtoend/testdata/create_table_as/sqlite/go/db.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions internal/endtoend/testdata/create_table_as/sqlite/go/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 48 additions & 0 deletions internal/endtoend/testdata/create_table_as/sqlite/go/query.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions internal/endtoend/testdata/create_table_as/sqlite/query.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- name: ListCopyAll :many
SELECT * FROM copy_all;

-- name: GetCopySome :one
SELECT id, label FROM copy_some WHERE id = ?;
5 changes: 5 additions & 0 deletions internal/endtoend/testdata/create_table_as/sqlite/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CREATE TABLE foo (id INTEGER PRIMARY KEY, val TEXT NOT NULL, score INTEGER NOT NULL);

CREATE TABLE copy_all AS SELECT * FROM foo;

CREATE TABLE IF NOT EXISTS copy_some AS SELECT id, val AS label FROM foo WHERE score > 0;
12 changes: 12 additions & 0 deletions internal/endtoend/testdata/create_table_as/sqlite/sqlc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": "1",
"packages": [
{
"engine": "sqlite",
"path": "go",
"name": "querytest",
"schema": "schema.sql",
"queries": "query.sql"
}
]
}
11 changes: 10 additions & 1 deletion internal/engine/sqlite/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,12 +282,21 @@ func columnTypeName(t *meyer.TypeName) string {
}

func (c *cc) convertCreateTableStmt(n *meyer.CreateTableStmt) ast.Node {
// CREATE TABLE ... AS SELECT takes its columns from the query, so it is
// recorded as a relation defined by that query.
if n.Select != nil {
return &ast.CreateTableAsStmt{
Query: c.convert(n.Select),
Into: &ast.IntoClause{Rel: parseRangeVar(n.Name, nil)},
IfNotExists: n.IfNotExists,
}
}
stmt := &ast.CreateTableStmt{
Name: parseTableName(n.Name),
IfNotExists: n.IfNotExists,
// The node models none of these, so a statement carrying them has
// no faithful rendering and the formatter keeps it as written.
Incomplete: n.Temp || n.Select != nil || len(n.Constraints) > 0 || len(n.Options) > 0,
Incomplete: n.Temp || len(n.Constraints) > 0 || len(n.Options) > 0,
}
for _, def := range n.Columns {
if !representableColumn(def) {
Expand Down
Loading