From c38af20e243ae2112aa13e5ab52a219867c79a06 Mon Sep 17 00:00:00 2001 From: Tim Millard Date: Fri, 9 Apr 2021 20:23:29 +1000 Subject: [PATCH 1/6] fixed alter type to update column types --- internal/sql/catalog/types.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/internal/sql/catalog/types.go b/internal/sql/catalog/types.go index 409bbd7447..baf0e41e95 100644 --- a/internal/sql/catalog/types.go +++ b/internal/sql/catalog/types.go @@ -207,5 +207,16 @@ func (c *Catalog) renameType(stmt *ast.RenameTypeStmt) error { } + // Update all the table column with the new type + for si, schema := range c.Schemas { + for ti, table := range schema.Tables { + for ci, column := range table.Columns { + if column.Type == *stmt.Type { + c.Schemas[si].Tables[ti].Columns[ci].Type.Name = newName + } + } + } + } + return nil } From a5513601585f337ec173494abf8aa55653e699d4 Mon Sep 17 00:00:00 2001 From: Tim Millard Date: Thu, 9 Dec 2021 00:22:28 +1100 Subject: [PATCH 2/6] Add table inherits to structs --- internal/codegen/golang/result.go | 4 ++++ internal/codegen/golang/struct.go | 9 +++++---- internal/codegen/golang/templates/template.tmpl | 6 +++++- internal/engine/postgresql/parse.go | 9 +++++++++ internal/sql/ast/create_table_stmt.go | 11 ++++++----- internal/sql/catalog/catalog.go | 7 ++++--- internal/sql/catalog/table.go | 2 +- 7 files changed, 34 insertions(+), 14 deletions(-) diff --git a/internal/codegen/golang/result.go b/internal/codegen/golang/result.go index b213826eb9..3db5a5d5b8 100644 --- a/internal/codegen/golang/result.go +++ b/internal/codegen/golang/result.go @@ -78,6 +78,10 @@ func buildStructs(r *compiler.Result, settings config.CombinedSettings) []Struct Name: StructName(structName, settings), Comment: table.Comment, } + for _, inh := range table.Inherits { + // TODO: struct name need to include schema and settings, as above. + s.Inherits = append(s.Inherits, StructName(inh.Name, settings)) + } for _, column := range table.Columns { tags := map[string]string{} if settings.Go.EmitDBTags { diff --git a/internal/codegen/golang/struct.go b/internal/codegen/golang/struct.go index 74be48e3f3..072cd20fe2 100644 --- a/internal/codegen/golang/struct.go +++ b/internal/codegen/golang/struct.go @@ -8,10 +8,11 @@ import ( ) type Struct struct { - Table core.FQN - Name string - Fields []Field - Comment string + Table core.FQN + Name string + Fields []Field + Comment string + Inherits []string } func StructName(name string, settings config.CombinedSettings) string { diff --git a/internal/codegen/golang/templates/template.tmpl b/internal/codegen/golang/templates/template.tmpl index 53a2323b3b..a56869f1cb 100644 --- a/internal/codegen/golang/templates/template.tmpl +++ b/internal/codegen/golang/templates/template.tmpl @@ -84,7 +84,11 @@ func (e *{{.Name}}) Scan(src interface{}) error { {{range .Structs}} {{if .Comment}}{{comment .Comment}}{{end}} -type {{.Name}} struct { {{- range .Fields}} +type {{.Name}} struct { +{{- range .Inherits}} + {{.}} +{{- end}} +{{- range .Fields}} {{- if .Comment}} {{comment .Comment}}{{else}} {{- end}} diff --git a/internal/engine/postgresql/parse.go b/internal/engine/postgresql/parse.go index 33cac214af..bad10ab62a 100644 --- a/internal/engine/postgresql/parse.go +++ b/internal/engine/postgresql/parse.go @@ -365,6 +365,15 @@ func translate(node *nodes.Node) (ast.Node, error) { Name: rel.TableName(), IfNotExists: n.IfNotExists, } + for _, node := range n.InhRelations { + switch item := node.Node.(type) { + case *nodes.Node_RangeVar: + if item.RangeVar.Inh { + rel := parseRelationFromRangeVar(item.RangeVar) + create.InhRelations = append(create.InhRelations, rel.TableName()) + } + } + } primaryKey := make(map[string]bool) for _, elt := range n.TableElts { switch item := elt.Node.(type) { diff --git a/internal/sql/ast/create_table_stmt.go b/internal/sql/ast/create_table_stmt.go index 96512ea3fa..e36ed08f53 100644 --- a/internal/sql/ast/create_table_stmt.go +++ b/internal/sql/ast/create_table_stmt.go @@ -1,11 +1,12 @@ package ast type CreateTableStmt struct { - IfNotExists bool - Name *TableName - Cols []*ColumnDef - ReferTable *TableName - Comment string + IfNotExists bool + Name *TableName + Cols []*ColumnDef + ReferTable *TableName + Comment string + InhRelations []*TableName } func (n *CreateTableStmt) Pos() int { diff --git a/internal/sql/catalog/catalog.go b/internal/sql/catalog/catalog.go index e7964cf16f..f5ec8c8e26 100644 --- a/internal/sql/catalog/catalog.go +++ b/internal/sql/catalog/catalog.go @@ -181,9 +181,10 @@ func (s *Schema) getType(rel *ast.TypeName) (Type, int, error) { } type Table struct { - Rel *ast.TableName - Columns []*Column - Comment string + Rel *ast.TableName + Columns []*Column + Comment string + Inherits []*ast.TableName } // TODO: Should this just be ast Nodes? diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index a91404c8d8..5755e049e8 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -138,7 +138,7 @@ func (c *Catalog) createTable(stmt *ast.CreateTableStmt) error { return sqlerr.RelationExists(stmt.Name.Name) } - tbl := Table{Rel: stmt.Name, Comment: stmt.Comment} + tbl := Table{Rel: stmt.Name, Comment: stmt.Comment, Inherits: stmt.InhRelations} if stmt.ReferTable != nil && len(stmt.Cols) != 0 { return errors.New("create table node cannot have both a ReferTable and Cols") From 8083b88e83d9db02c12aa5cfbc20f336f036d6ce Mon Sep 17 00:00:00 2001 From: Tim Millard Date: Thu, 9 Dec 2021 08:59:36 +1100 Subject: [PATCH 3/6] Rename create_table_stmt.InhRelations to Inherits --- internal/engine/postgresql/parse.go | 2 +- internal/sql/ast/create_table_stmt.go | 12 ++++++------ internal/sql/catalog/table.go | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/engine/postgresql/parse.go b/internal/engine/postgresql/parse.go index bad10ab62a..74bb5b685c 100644 --- a/internal/engine/postgresql/parse.go +++ b/internal/engine/postgresql/parse.go @@ -370,7 +370,7 @@ func translate(node *nodes.Node) (ast.Node, error) { case *nodes.Node_RangeVar: if item.RangeVar.Inh { rel := parseRelationFromRangeVar(item.RangeVar) - create.InhRelations = append(create.InhRelations, rel.TableName()) + create.Inherits = append(create.Inherits, rel.TableName()) } } } diff --git a/internal/sql/ast/create_table_stmt.go b/internal/sql/ast/create_table_stmt.go index e36ed08f53..7273ffa852 100644 --- a/internal/sql/ast/create_table_stmt.go +++ b/internal/sql/ast/create_table_stmt.go @@ -1,12 +1,12 @@ package ast type CreateTableStmt struct { - IfNotExists bool - Name *TableName - Cols []*ColumnDef - ReferTable *TableName - Comment string - InhRelations []*TableName + IfNotExists bool + Name *TableName + Cols []*ColumnDef + ReferTable *TableName + Comment string + Inherits []*TableName } func (n *CreateTableStmt) Pos() int { diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index 5755e049e8..1c3a42401f 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -138,7 +138,7 @@ func (c *Catalog) createTable(stmt *ast.CreateTableStmt) error { return sqlerr.RelationExists(stmt.Name.Name) } - tbl := Table{Rel: stmt.Name, Comment: stmt.Comment, Inherits: stmt.InhRelations} + tbl := Table{Rel: stmt.Name, Comment: stmt.Comment, Inherits: stmt.Inherits} if stmt.ReferTable != nil && len(stmt.Cols) != 0 { return errors.New("create table node cannot have both a ReferTable and Cols") From 127c4727881d36067354df17ed6460e7645e0fbd Mon Sep 17 00:00:00 2001 From: Tim Millard Date: Mon, 13 Dec 2021 22:38:05 +1100 Subject: [PATCH 4/6] Add inherit table column to table --- internal/codegen/golang/result.go | 4 ---- internal/codegen/golang/struct.go | 9 ++++----- internal/codegen/golang/templates/template.tmpl | 6 +----- internal/sql/catalog/catalog.go | 7 +++---- internal/sql/catalog/table.go | 9 ++++++++- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/internal/codegen/golang/result.go b/internal/codegen/golang/result.go index 3db5a5d5b8..b213826eb9 100644 --- a/internal/codegen/golang/result.go +++ b/internal/codegen/golang/result.go @@ -78,10 +78,6 @@ func buildStructs(r *compiler.Result, settings config.CombinedSettings) []Struct Name: StructName(structName, settings), Comment: table.Comment, } - for _, inh := range table.Inherits { - // TODO: struct name need to include schema and settings, as above. - s.Inherits = append(s.Inherits, StructName(inh.Name, settings)) - } for _, column := range table.Columns { tags := map[string]string{} if settings.Go.EmitDBTags { diff --git a/internal/codegen/golang/struct.go b/internal/codegen/golang/struct.go index 072cd20fe2..74be48e3f3 100644 --- a/internal/codegen/golang/struct.go +++ b/internal/codegen/golang/struct.go @@ -8,11 +8,10 @@ import ( ) type Struct struct { - Table core.FQN - Name string - Fields []Field - Comment string - Inherits []string + Table core.FQN + Name string + Fields []Field + Comment string } func StructName(name string, settings config.CombinedSettings) string { diff --git a/internal/codegen/golang/templates/template.tmpl b/internal/codegen/golang/templates/template.tmpl index a56869f1cb..53a2323b3b 100644 --- a/internal/codegen/golang/templates/template.tmpl +++ b/internal/codegen/golang/templates/template.tmpl @@ -84,11 +84,7 @@ func (e *{{.Name}}) Scan(src interface{}) error { {{range .Structs}} {{if .Comment}}{{comment .Comment}}{{end}} -type {{.Name}} struct { -{{- range .Inherits}} - {{.}} -{{- end}} -{{- range .Fields}} +type {{.Name}} struct { {{- range .Fields}} {{- if .Comment}} {{comment .Comment}}{{else}} {{- end}} diff --git a/internal/sql/catalog/catalog.go b/internal/sql/catalog/catalog.go index f5ec8c8e26..e7964cf16f 100644 --- a/internal/sql/catalog/catalog.go +++ b/internal/sql/catalog/catalog.go @@ -181,10 +181,9 @@ func (s *Schema) getType(rel *ast.TypeName) (Type, int, error) { } type Table struct { - Rel *ast.TableName - Columns []*Column - Comment string - Inherits []*ast.TableName + Rel *ast.TableName + Columns []*Column + Comment string } // TODO: Should this just be ast Nodes? diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index 1c3a42401f..283e169a72 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -138,7 +138,14 @@ func (c *Catalog) createTable(stmt *ast.CreateTableStmt) error { return sqlerr.RelationExists(stmt.Name.Name) } - tbl := Table{Rel: stmt.Name, Comment: stmt.Comment, Inherits: stmt.Inherits} + tbl := Table{Rel: stmt.Name, Comment: stmt.Comment} + for _, inheritTable := range stmt.Inherits { + t, _, err := schema.getTable(inheritTable) + if err != nil { + return err + } + tbl.Columns = append(tbl.Columns, t.Columns...) + } if stmt.ReferTable != nil && len(stmt.Cols) != 0 { return errors.New("create table node cannot have both a ReferTable and Cols") From 4a57bf3af6ebe229b56f0eb37e3b8023867a0972 Mon Sep 17 00:00:00 2001 From: Tim Millard Date: Mon, 13 Dec 2021 23:04:05 +1100 Subject: [PATCH 5/6] Tests for Create Table Inherits --- .../postgresql/pgx/go/db.go | 30 ++++++ .../postgresql/pgx/go/models.go | 27 ++++++ .../postgresql/pgx/go/query.sql.go | 85 +++++++++++++++++ .../postgresql/pgx/query.sql | 8 ++ .../postgresql/pgx/schema.sql | 13 +++ .../postgresql/pgx/sqlc.json | 13 +++ .../postgresql/stdlib/go/db.go | 29 ++++++ .../postgresql/stdlib/go/models.go | 27 ++++++ .../postgresql/stdlib/go/query.sql.go | 94 +++++++++++++++++++ .../postgresql/stdlib/query.sql | 8 ++ .../postgresql/stdlib/schema.sql | 13 +++ .../postgresql/stdlib/sqlc.json | 12 +++ 12 files changed, 359 insertions(+) create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/db.go create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/models.go create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/schema.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/sqlc.json create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/query.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/schema.sql create mode 100644 internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/sqlc.json diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/db.go b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/db.go new file mode 100644 index 0000000000..4559f50a4f --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/db.go @@ -0,0 +1,30 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "context" + + "github.com/jackc/pgconn" + "github.com/jackc/pgx/v4" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/models.go b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/models.go new file mode 100644 index 0000000000..b9f9b7bae1 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/models.go @@ -0,0 +1,27 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "database/sql" + + "github.com/google/uuid" +) + +type Organisation struct { + PartyID uuid.UUID + Name string + LegalName sql.NullString +} + +type Party struct { + PartyID uuid.UUID + Name string +} + +type Person struct { + PartyID uuid.UUID + Name string + FirstName string + LastName string +} diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/query.sql.go b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/query.sql.go new file mode 100644 index 0000000000..bb2f4c7430 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/go/query.sql.go @@ -0,0 +1,85 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAllOrganisations = `-- name: GetAllOrganisations :many +SELECT party_id, name, legal_name FROM organisation +` + +func (q *Queries) GetAllOrganisations(ctx context.Context) ([]Organisation, error) { + rows, err := q.db.Query(ctx, getAllOrganisations) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Organisation + for rows.Next() { + var i Organisation + if err := rows.Scan(&i.PartyID, &i.Name, &i.LegalName); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getAllParties = `-- name: GetAllParties :many +SELECT party_id, name FROM party +` + +func (q *Queries) GetAllParties(ctx context.Context) ([]Party, error) { + rows, err := q.db.Query(ctx, getAllParties) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Party + for rows.Next() { + var i Party + if err := rows.Scan(&i.PartyID, &i.Name); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getAllPeople = `-- name: GetAllPeople :many +SELECT party_id, name, first_name, last_name FROM person +` + +func (q *Queries) GetAllPeople(ctx context.Context) ([]Person, error) { + rows, err := q.db.Query(ctx, getAllPeople) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Person + for rows.Next() { + var i Person + if err := rows.Scan( + &i.PartyID, + &i.Name, + &i.FirstName, + &i.LastName, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/query.sql b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/query.sql new file mode 100644 index 0000000000..30adbd9aa1 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/query.sql @@ -0,0 +1,8 @@ +-- name: GetAllParties :many +SELECT * FROM party; + +-- name: GetAllPeople :many +SELECT * FROM person; + +-- name: GetAllOrganisations :many +SELECT * FROM organisation; diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/schema.sql b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/schema.sql new file mode 100644 index 0000000000..3190f48f83 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/schema.sql @@ -0,0 +1,13 @@ +CREATE TABLE party ( + party_id uuid PRIMARY KEY, + name text NOT NULL +); + +CREATE TABLE person ( + first_name text NOT NULL, + last_name text NOT NULL +) INHERITS (party); + +CREATE TABLE organisation ( + legal_name text +) INHERITS (party); diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/sqlc.json b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/sqlc.json new file mode 100644 index 0000000000..d1244c9e7a --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/pgx/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v4", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/db.go b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/db.go new file mode 100644 index 0000000000..6a99519302 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/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_table_inherits/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/models.go new file mode 100644 index 0000000000..b9f9b7bae1 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/models.go @@ -0,0 +1,27 @@ +// Code generated by sqlc. DO NOT EDIT. + +package querytest + +import ( + "database/sql" + + "github.com/google/uuid" +) + +type Organisation struct { + PartyID uuid.UUID + Name string + LegalName sql.NullString +} + +type Party struct { + PartyID uuid.UUID + Name string +} + +type Person struct { + PartyID uuid.UUID + Name string + FirstName string + LastName string +} diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/query.sql.go new file mode 100644 index 0000000000..886045b4f8 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/go/query.sql.go @@ -0,0 +1,94 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: query.sql + +package querytest + +import ( + "context" +) + +const getAllOrganisations = `-- name: GetAllOrganisations :many +SELECT party_id, name, legal_name FROM organisation +` + +func (q *Queries) GetAllOrganisations(ctx context.Context) ([]Organisation, error) { + rows, err := q.db.QueryContext(ctx, getAllOrganisations) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Organisation + for rows.Next() { + var i Organisation + if err := rows.Scan(&i.PartyID, &i.Name, &i.LegalName); 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 +} + +const getAllParties = `-- name: GetAllParties :many +SELECT party_id, name FROM party +` + +func (q *Queries) GetAllParties(ctx context.Context) ([]Party, error) { + rows, err := q.db.QueryContext(ctx, getAllParties) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Party + for rows.Next() { + var i Party + if err := rows.Scan(&i.PartyID, &i.Name); 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 +} + +const getAllPeople = `-- name: GetAllPeople :many +SELECT party_id, name, first_name, last_name FROM person +` + +func (q *Queries) GetAllPeople(ctx context.Context) ([]Person, error) { + rows, err := q.db.QueryContext(ctx, getAllPeople) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Person + for rows.Next() { + var i Person + if err := rows.Scan( + &i.PartyID, + &i.Name, + &i.FirstName, + &i.LastName, + ); 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_create_table_inherits/postgresql/stdlib/query.sql b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/query.sql new file mode 100644 index 0000000000..30adbd9aa1 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/query.sql @@ -0,0 +1,8 @@ +-- name: GetAllParties :many +SELECT * FROM party; + +-- name: GetAllPeople :many +SELECT * FROM person; + +-- name: GetAllOrganisations :many +SELECT * FROM organisation; diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/schema.sql b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/schema.sql new file mode 100644 index 0000000000..3190f48f83 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/schema.sql @@ -0,0 +1,13 @@ +CREATE TABLE party ( + party_id uuid PRIMARY KEY, + name text NOT NULL +); + +CREATE TABLE person ( + first_name text NOT NULL, + last_name text NOT NULL +) INHERITS (party); + +CREATE TABLE organisation ( + legal_name text +) INHERITS (party); diff --git a/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/sqlc.json b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/sqlc.json new file mode 100644 index 0000000000..f717ca2e66 --- /dev/null +++ b/internal/endtoend/testdata/ddl_create_table_inherits/postgresql/stdlib/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} From 32adaf9c553faac3fb75ed4de65ac137c6b749e1 Mon Sep 17 00:00:00 2001 From: Tim Millard Date: Mon, 13 Dec 2021 23:33:32 +1100 Subject: [PATCH 6/6] Regen Create Table partition tests --- .../ddl_create_table_partition/postgresql/pgx/go/models.go | 2 ++ .../ddl_create_table_partition/postgresql/stdlib/go/models.go | 2 ++ 2 files changed, 4 insertions(+) diff --git a/internal/endtoend/testdata/ddl_create_table_partition/postgresql/pgx/go/models.go b/internal/endtoend/testdata/ddl_create_table_partition/postgresql/pgx/go/models.go index a6e501eb11..82da8f5c84 100644 --- a/internal/endtoend/testdata/ddl_create_table_partition/postgresql/pgx/go/models.go +++ b/internal/endtoend/testdata/ddl_create_table_partition/postgresql/pgx/go/models.go @@ -12,4 +12,6 @@ type Foo struct { } type Foo1 struct { + ID uuid.UUID + OtherID uuid.UUID } diff --git a/internal/endtoend/testdata/ddl_create_table_partition/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/ddl_create_table_partition/postgresql/stdlib/go/models.go index a6e501eb11..82da8f5c84 100644 --- a/internal/endtoend/testdata/ddl_create_table_partition/postgresql/stdlib/go/models.go +++ b/internal/endtoend/testdata/ddl_create_table_partition/postgresql/stdlib/go/models.go @@ -12,4 +12,6 @@ type Foo struct { } type Foo1 struct { + ID uuid.UUID + OtherID uuid.UUID }