From 1c8cdfbf854be892e5414e7cd67d44e23d37f968 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:14:10 -0800 Subject: [PATCH 01/13] Improve test to illustrate correctness --- .../testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go | 2 +- .../testdata/ddl_alter_table_drop_column/sqlite/query.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go index 203f0fe62c..cd4e7fb427 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go @@ -8,7 +8,7 @@ import ( ) const placeholder = `-- name: Placeholder :exec -SELECT 1 +SELECT baz from foo ` func (q *Queries) Placeholder(ctx context.Context) error { diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql index 6520aef4b6..198b08bb8d 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql @@ -1,2 +1,2 @@ -- name: Placeholder :exec -SELECT 1; +SELECT * from foo; From fd5ab20818638b22c3a33aa10f245364868e26b3 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:18:08 -0800 Subject: [PATCH 02/13] Add rename table test --- .../ddl_alter_table_rename/sqlite/go/db.go | 29 +++++++++++++++ .../sqlite/go/models.go | 11 ++++++ .../sqlite/go/query.sql.go | 36 +++++++++++++++++++ .../ddl_alter_table_rename/sqlite/query.sql | 2 ++ .../ddl_alter_table_rename/sqlite/schema.sql | 3 ++ .../ddl_alter_table_rename/sqlite/sqlc.json | 12 +++++++ 6 files changed, 93 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename/sqlite/sqlc.json diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/db.go b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/models.go b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/models.go new file mode 100644 index 0000000000..41e0418d04 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "database/sql" +) + +type Arena struct { + Name sql.NullString +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go new file mode 100644 index 0000000000..eab1c99809 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go @@ -0,0 +1,36 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" + "database/sql" +) + +const placeholder = `-- name: Placeholder :many +SELECT name from arenas +` + +func (q *Queries) Placeholder(ctx context.Context) ([]sql.NullString, error) { + rows, err := q.db.QueryContext(ctx, placeholder) + if err != nil { + return nil, err + } + defer rows.Close() + var items []sql.NullString + for rows.Next() { + var name sql.NullString + if err := rows.Scan(&name); err != nil { + return nil, err + } + items = append(items, name) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql new file mode 100644 index 0000000000..3cb2745388 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql @@ -0,0 +1,2 @@ +/* name: Placeholder :many */ +SELECT * from arenas; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/schema.sql b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/schema.sql new file mode 100644 index 0000000000..8ab8f0675b --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE venues (name text); +ALTER TABLE venues RENAME TO arenas; + diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/sqlc.json new file mode 100644 index 0000000000..2e7b9c9c91 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "_lemon", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 22055d1431e9d4f97c6449c59f90f04dedd6cc2b Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:20:57 -0800 Subject: [PATCH 03/13] Rename column tests --- .../sqlite/go/db.go | 29 +++++++++++++++++++ .../sqlite/go/models.go | 11 +++++++ .../sqlite/go/query.sql.go | 17 +++++++++++ .../sqlite/query.sql | 2 ++ .../sqlite/schema.sql | 2 ++ .../sqlite/sqlc.json | 12 ++++++++ 6 files changed, 73 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/sqlc.json diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/db.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go new file mode 100644 index 0000000000..b93c269f2e --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "database/sql" +) + +type Foo struct { + Baz sql.NullString +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go new file mode 100644 index 0000000000..203f0fe62c --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql new file mode 100644 index 0000000000..43794d52b5 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql @@ -0,0 +1,2 @@ +/* name: Placeholder :many */ +SELECT * from foo; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql new file mode 100644 index 0000000000..7a160ecb13 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE foo (bar text); +ALTER TABLE foo RENAME COLUMN bar TO baz; diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/sqlc.json new file mode 100644 index 0000000000..2e7b9c9c91 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "_lemon", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 40fdea333e0fadd67875df5d071e9dfd78542f49 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:22:21 -0800 Subject: [PATCH 04/13] run regen --- .../sqlite/go/query.sql.go | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go index 203f0fe62c..4a15cc7d5a 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go @@ -5,13 +5,32 @@ package querytest import ( "context" + "database/sql" ) -const placeholder = `-- name: Placeholder :exec -SELECT 1 +const placeholder = `-- name: Placeholder :many +SELECT baz from foo ` -func (q *Queries) Placeholder(ctx context.Context) error { - _, err := q.db.ExecContext(ctx, placeholder) - return err +func (q *Queries) Placeholder(ctx context.Context) ([]sql.NullString, error) { + rows, err := q.db.QueryContext(ctx, placeholder) + if err != nil { + return nil, err + } + defer rows.Close() + var items []sql.NullString + for rows.Next() { + var baz sql.NullString + if err := rows.Scan(&baz); err != nil { + return nil, err + } + items = append(items, baz) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil } From 45701ee3055d1ea7e1f02720ca366c6b2ac15fe6 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:24:03 -0800 Subject: [PATCH 05/13] Test syntax without COLUMN keyword --- .../ddl_alter_table_rename_column/sqlite/go/models.go | 2 +- .../ddl_alter_table_rename_column/sqlite/go/query.sql.go | 8 ++++---- .../ddl_alter_table_rename_column/sqlite/schema.sql | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go index b93c269f2e..877c021f05 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/models.go @@ -7,5 +7,5 @@ import ( ) type Foo struct { - Baz sql.NullString + Boo sql.NullString } diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go index 4a15cc7d5a..b963ca3664 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go @@ -9,7 +9,7 @@ import ( ) const placeholder = `-- name: Placeholder :many -SELECT baz from foo +SELECT boo from foo ` func (q *Queries) Placeholder(ctx context.Context) ([]sql.NullString, error) { @@ -20,11 +20,11 @@ func (q *Queries) Placeholder(ctx context.Context) ([]sql.NullString, error) { defer rows.Close() var items []sql.NullString for rows.Next() { - var baz sql.NullString - if err := rows.Scan(&baz); err != nil { + var boo sql.NullString + if err := rows.Scan(&boo); err != nil { return nil, err } - items = append(items, baz) + items = append(items, boo) } if err := rows.Close(); err != nil { return nil, err diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql index 7a160ecb13..f173f17d91 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/schema.sql @@ -1,2 +1,4 @@ CREATE TABLE foo (bar text); ALTER TABLE foo RENAME COLUMN bar TO baz; + +ALTER TABLE foo RENAME baz TO boo; From 0ff81888d30cdb2e1ee591b331fa7ac34cb8a3ed Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:30:09 -0800 Subject: [PATCH 06/13] Add column SQLite --- .../sqlite/go/db.go | 29 +++++++++++++++ .../sqlite/go/models.go | 13 +++++++ .../sqlite/go/query.sql.go | 35 +++++++++++++++++++ .../sqlite/query.sql | 2 ++ .../sqlite/schema.sql | 3 ++ .../sqlite/sqlc.json | 12 +++++++ 6 files changed, 94 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/models.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/sqlc.json diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/db.go b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/models.go b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/models.go new file mode 100644 index 0000000000..f5e003de77 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "database/sql" +) + +type Venue struct { + Name sql.NullString + Location sql.NullString + Size sql.NullInt64 +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go new file mode 100644 index 0000000000..03592bae03 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go @@ -0,0 +1,35 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :many +SELECT name, location, size from venues +` + +func (q *Queries) Placeholder(ctx context.Context) ([]Venue, error) { + rows, err := q.db.QueryContext(ctx, placeholder) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Venue + for rows.Next() { + var i Venue + if err := rows.Scan(&i.Name, &i.Location, &i.Size); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql new file mode 100644 index 0000000000..1dbfac7154 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql @@ -0,0 +1,2 @@ +/* name: Placeholder :many */ +SELECT * from venues; diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/schema.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/schema.sql new file mode 100644 index 0000000000..8214519580 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE venues (name text); +ALTER TABLE venues ADD location text; +ALTER TABLE venues ADD COLUMN size integer; diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/sqlc.json new file mode 100644 index 0000000000..2e7b9c9c91 --- /dev/null +++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "_lemon", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 66d0d752def133090a5797c5c5794dddd67695eb Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:44:25 -0800 Subject: [PATCH 07/13] Add a more complex create table --- .../endtoend/testdata/ddl_create_table/sqlite/go/models.go | 5 +++++ .../endtoend/testdata/ddl_create_table/sqlite/schema.sql | 2 ++ 2 files changed, 7 insertions(+) diff --git a/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go b/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go index 1824ef8794..b7b2e58979 100644 --- a/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go +++ b/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go @@ -6,6 +6,11 @@ import ( "database/sql" ) +type Arena struct { + Name string + Location sql.NullString +} + type Venue struct { Name sql.NullString } diff --git a/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql b/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql index 78e89cbf4f..192a08a7b1 100644 --- a/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql +++ b/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql @@ -1 +1,3 @@ CREATE TABLE venues (name text); + +CREATE TABLE IF NOT EXISTS arenas (name text PRIMARY KEY, location text) WITHOUT ROWID; \ No newline at end of file From f44d196532e3864445bb62b113542cd30d107504 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:45:00 -0800 Subject: [PATCH 08/13] Check not null too --- internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go | 1 + internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go b/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go index b7b2e58979..8302feb49e 100644 --- a/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go +++ b/internal/endtoend/testdata/ddl_create_table/sqlite/go/models.go @@ -9,6 +9,7 @@ import ( type Arena struct { Name string Location sql.NullString + Size int64 } type Venue struct { diff --git a/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql b/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql index 192a08a7b1..caffd8184a 100644 --- a/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql +++ b/internal/endtoend/testdata/ddl_create_table/sqlite/schema.sql @@ -1,3 +1,3 @@ CREATE TABLE venues (name text); -CREATE TABLE IF NOT EXISTS arenas (name text PRIMARY KEY, location text) WITHOUT ROWID; \ No newline at end of file +CREATE TABLE IF NOT EXISTS arenas (name text PRIMARY KEY, location text, size int NOT NULL) WITHOUT ROWID; \ No newline at end of file From 41357d4706c368396d14343993c7539d0e659a9b Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 17:50:46 -0800 Subject: [PATCH 09/13] Add create trigger --- .../ddl_create_trigger/sqlite/go/db.go | 29 +++++++++++++++++++ .../ddl_create_trigger/sqlite/go/models.go | 13 +++++++++ .../ddl_create_trigger/sqlite/go/query.sql.go | 17 +++++++++++ .../ddl_create_trigger/sqlite/query.sql | 2 ++ .../ddl_create_trigger/sqlite/schema.sql | 21 ++++++++++++++ .../ddl_create_trigger/sqlite/sqlc.json | 12 ++++++++ 6 files changed, 94 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_create_trigger/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/ddl_create_trigger/sqlite/go/models.go create mode 100644 internal/endtoend/testdata/ddl_create_trigger/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_create_trigger/sqlite/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_trigger/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/ddl_create_trigger/sqlite/sqlc.json diff --git a/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/db.go b/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/models.go b/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/models.go new file mode 100644 index 0000000000..9b353e12da --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "database/sql" +) + +type Customer struct { + CustID int64 + CustName sql.NullString + CustAddr sql.NullString +} diff --git a/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/query.sql.go new file mode 100644 index 0000000000..203f0fe62c --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_trigger/sqlite/go/query.sql.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_create_trigger/sqlite/query.sql b/internal/endtoend/testdata/ddl_create_trigger/sqlite/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_trigger/sqlite/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_create_trigger/sqlite/schema.sql b/internal/endtoend/testdata/ddl_create_trigger/sqlite/schema.sql new file mode 100644 index 0000000000..9143d0c069 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_trigger/sqlite/schema.sql @@ -0,0 +1,21 @@ +/* examples copied from https://www.sqlite.org/lang_createtrigger.html + only expectation in sqlc is that they parse, codegen is unaffected */ + +CREATE TRIGGER update_customer_address UPDATE OF address ON customers +BEGIN + UPDATE orders SET address = new.address WHERE customer_name = old.name; +END; + +CREATE TABLE customer( + cust_id INTEGER PRIMARY KEY, + cust_name TEXT, + cust_addr TEXT +); +CREATE VIEW customer_address AS +SELECT cust_id, cust_addr FROM customer; +CREATE TRIGGER cust_addr_chng + INSTEAD OF UPDATE OF cust_addr ON customer_address +BEGIN + UPDATE customer SET cust_addr=NEW.cust_addr + WHERE cust_id=NEW.cust_id; +END; \ No newline at end of file diff --git a/internal/endtoend/testdata/ddl_create_trigger/sqlite/sqlc.json b/internal/endtoend/testdata/ddl_create_trigger/sqlite/sqlc.json new file mode 100644 index 0000000000..2e7b9c9c91 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_trigger/sqlite/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "_lemon", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 382e1f30b0519fe24c506c535dfed94cfcf67130 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 20:02:40 -0800 Subject: [PATCH 10/13] adds test for drop table --- .../testdata/ddl_drop_table/sqlite/go/db.go | 29 +++++++++++++++++++ .../ddl_drop_table/sqlite/go/models.go | 5 ++++ .../ddl_drop_table/sqlite/go/query.sql.go | 17 +++++++++++ .../testdata/ddl_drop_table/sqlite/query.sql | 2 ++ .../testdata/ddl_drop_table/sqlite/schema.sql | 2 ++ .../testdata/ddl_drop_table/sqlite/sqlc.json | 12 ++++++++ 6 files changed, 67 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_drop_table/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/sqlite/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table/sqlite/query.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table/sqlite/sqlc.json diff --git a/internal/endtoend/testdata/ddl_drop_table/sqlite/go/db.go b/internal/endtoend/testdata/ddl_drop_table/sqlite/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/sqlite/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_drop_table/sqlite/go/models.go b/internal/endtoend/testdata/ddl_drop_table/sqlite/go/models.go new file mode 100644 index 0000000000..4e2b892600 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/sqlite/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import () diff --git a/internal/endtoend/testdata/ddl_drop_table/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table/sqlite/go/query.sql.go new file mode 100644 index 0000000000..203f0fe62c --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/sqlite/go/query.sql.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_drop_table/sqlite/query.sql b/internal/endtoend/testdata/ddl_drop_table/sqlite/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/sqlite/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_drop_table/sqlite/schema.sql b/internal/endtoend/testdata/ddl_drop_table/sqlite/schema.sql new file mode 100644 index 0000000000..d2ea37a051 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/sqlite/schema.sql @@ -0,0 +1,2 @@ +CREATE TABLE venues (hi text); +DROP TABLE venues; \ No newline at end of file diff --git a/internal/endtoend/testdata/ddl_drop_table/sqlite/sqlc.json b/internal/endtoend/testdata/ddl_drop_table/sqlite/sqlc.json new file mode 100644 index 0000000000..2e7b9c9c91 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table/sqlite/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "_lemon", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 9d8a8bf5c01e09d755403a9a4b19b3bce5dcf4b8 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 20:02:49 -0800 Subject: [PATCH 11/13] Fix drop table logic --- internal/engine/sqlite/convert.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/engine/sqlite/convert.go b/internal/engine/sqlite/convert.go index 84d02e8842..7ce728dfba 100644 --- a/internal/engine/sqlite/convert.go +++ b/internal/engine/sqlite/convert.go @@ -98,11 +98,9 @@ func convertCreate_table_stmtContext(c *parser.Create_table_stmtContext) ast.Nod } func convertDrop_stmtContext(c *parser.Drop_stmtContext) ast.Node { - // TODO confirm that this logic does what it looks like it should - if tableName, ok := c.TABLE_().(antlr.TerminalNode); ok { - + if c.TABLE_() != nil { name := ast.TableName{ - Name: tableName.GetText(), + Name: c.Any_name().GetText(), } if c.Schema_name() != nil { name.Schema = c.Schema_name().GetText() From 6a707133dae6de8a587136ac9c1df92aba72901d Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 20:04:13 -0800 Subject: [PATCH 12/13] Add drop table if exists test --- .../ddl_drop_table_if_exists/sqlite/go/db.go | 29 +++++++++++++++++++ .../sqlite/go/models.go | 5 ++++ .../sqlite/go/query.sql.go | 17 +++++++++++ .../ddl_drop_table_if_exists/sqlite/query.sql | 2 ++ .../sqlite/schema.sql | 3 ++ .../ddl_drop_table_if_exists/sqlite/sqlc.json | 12 ++++++++ 6 files changed, 68 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/db.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/models.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/query.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/schema.sql create mode 100644 internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/sqlc.json diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/db.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/models.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/models.go new file mode 100644 index 0000000000..4e2b892600 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import () diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/query.sql.go new file mode 100644 index 0000000000..203f0fe62c --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/go/query.sql.go @@ -0,0 +1,17 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const placeholder = `-- name: Placeholder :exec +SELECT 1 +` + +func (q *Queries) Placeholder(ctx context.Context) error { + _, err := q.db.ExecContext(ctx, placeholder) + return err +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/query.sql b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/query.sql new file mode 100644 index 0000000000..6520aef4b6 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/query.sql @@ -0,0 +1,2 @@ +-- name: Placeholder :exec +SELECT 1; diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/schema.sql b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/schema.sql new file mode 100644 index 0000000000..3233bad12f --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/schema.sql @@ -0,0 +1,3 @@ +CREATE TABLE venues (hi text); +DROP TABLE IF EXISTS venues; +DROP TABLE IF EXISTS venues; \ No newline at end of file diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/sqlc.json b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/sqlc.json new file mode 100644 index 0000000000..2e7b9c9c91 --- /dev/null +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/sqlite/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "_lemon", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 877f02e43b87ede368d9b826a1b1409f198a95d1 Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 16 Feb 2022 20:47:16 -0800 Subject: [PATCH 13/13] fix early return --- internal/engine/sqlite/convert.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/engine/sqlite/convert.go b/internal/engine/sqlite/convert.go index 7ce728dfba..d16cbbd49f 100644 --- a/internal/engine/sqlite/convert.go +++ b/internal/engine/sqlite/convert.go @@ -145,9 +145,7 @@ func convertExprContext(c *parser.ExprContext) ast.Node { return fn } - return &ast.Expr{} - - if c.Column_name().(*parser.Column_nameContext) != nil { + if c.Column_name() != nil { return convertColumnNameExpr(c) }