From c33cb8e0b78c07bd8bf130000dc198ecd76ca0b5 Mon Sep 17 00:00:00 2001 From: Connor Date: Mon, 30 May 2022 11:11:23 -0700 Subject: [PATCH 01/12] feat: pg multi dim arrays --- internal/cmd/shim.go | 10 +- internal/codegen/golang/go_type.go | 6 +- internal/compiler/output_columns.go | 49 +++++---- internal/compiler/query.go | 1 + internal/compiler/query_catalog.go | 16 +-- internal/compiler/resolve.go | 4 + internal/compiler/to_column.go | 9 +- internal/endtoend/endtoend_test.go | 3 + .../testdata/array_text/pgx/go/models.go | 2 +- .../testdata/array_text/pgx/go/query.sql.go | 6 +- .../testdata/array_text/pgx/query.sql | 4 +- internal/engine/postgresql/parse.go | 27 +++-- internal/plugin/codegen.pb.go | 104 ++++++++++-------- internal/plugin/codegen_vtproto.pb.go | 27 +++++ internal/sql/ast/column_def.go | 13 ++- internal/sql/catalog/table.go | 26 +++-- protos/plugin/codegen.proto | 2 + 17 files changed, 188 insertions(+), 121 deletions(-) diff --git a/internal/cmd/shim.go b/internal/cmd/shim.go index 946e6d338c..62d4a44567 100644 --- a/internal/cmd/shim.go +++ b/internal/cmd/shim.go @@ -169,10 +169,11 @@ func pluginCatalog(c *catalog.Catalog) *plugin.Catalog { Schema: c.Type.Schema, Name: c.Type.Name, }, - Comment: c.Comment, - NotNull: c.IsNotNull, - IsArray: c.IsArray, - Length: int32(l), + Comment: c.Comment, + NotNull: c.IsNotNull, + IsArray: c.IsArray, + ArrayBounds: int32(c.ArrayBounds), + Length: int32(l), Table: &plugin.Identifier{ Catalog: t.Rel.Catalog, Schema: t.Rel.Schema, @@ -249,6 +250,7 @@ func pluginQueryColumn(c *compiler.Column) *plugin.Column { Comment: c.Comment, NotNull: c.NotNull, IsArray: c.IsArray, + ArrayBounds: int32(c.ArrayBounds), Length: int32(l), IsNamedParam: c.IsNamedParam, IsFuncCall: c.IsFuncCall, diff --git a/internal/codegen/golang/go_type.go b/internal/codegen/golang/go_type.go index 2832abbd9c..c321e6d122 100644 --- a/internal/codegen/golang/go_type.go +++ b/internal/codegen/golang/go_type.go @@ -18,7 +18,11 @@ func goType(req *plugin.CodeGenRequest, col *plugin.Column) string { } typ := goInnerType(req, col) if col.IsArray { - return "[]" + typ + dims := "" + for i := int32(0); i < col.ArrayBounds; i++ { + dims += "[]" + } + return dims + typ } return typ } diff --git a/internal/compiler/output_columns.go b/internal/compiler/output_columns.go index a01675645b..49a953c8b7 100644 --- a/internal/compiler/output_columns.go +++ b/internal/compiler/output_columns.go @@ -26,12 +26,13 @@ func (c *Compiler) OutputColumns(stmt ast.Node) ([]*catalog.Column, error) { catCols := make([]*catalog.Column, 0, len(cols)) for _, col := range cols { catCols = append(catCols, &catalog.Column{ - Name: col.Name, - Type: ast.TypeName{Name: col.DataType}, - IsNotNull: col.NotNull, - IsArray: col.IsArray, - Comment: col.Comment, - Length: col.Length, + Name: col.Name, + Type: ast.TypeName{Name: col.DataType}, + IsNotNull: col.NotNull, + IsArray: col.IsArray, + ArrayBounds: col.ArrayBounds, + Comment: col.Comment, + Length: col.Length, }) } return catCols, nil @@ -184,15 +185,16 @@ func outputColumns(qc *QueryCatalog, node ast.Node) ([]*Column, error) { cname = *res.Name } cols = append(cols, &Column{ - Name: cname, - Type: c.Type, - Scope: scope, - Table: c.Table, - TableAlias: t.Rel.Name, - DataType: c.DataType, - NotNull: c.NotNull, - IsArray: c.IsArray, - Length: c.Length, + Name: cname, + Type: c.Type, + Scope: scope, + Table: c.Table, + TableAlias: t.Rel.Name, + DataType: c.DataType, + NotNull: c.NotNull, + IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, + Length: c.Length, }) } } @@ -481,14 +483,15 @@ func outputColumnRefs(res *ast.ResTarget, tables []*Table, node *ast.ColumnRef) cname = *res.Name } cols = append(cols, &Column{ - Name: cname, - Type: c.Type, - Table: c.Table, - TableAlias: alias, - DataType: c.DataType, - NotNull: c.NotNull, - IsArray: c.IsArray, - Length: c.Length, + Name: cname, + Type: c.Type, + Table: c.Table, + TableAlias: alias, + DataType: c.DataType, + NotNull: c.NotNull, + IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, + Length: c.Length, }) } } diff --git a/internal/compiler/query.go b/internal/compiler/query.go index e7395aab91..d9bc592d57 100644 --- a/internal/compiler/query.go +++ b/internal/compiler/query.go @@ -19,6 +19,7 @@ type Column struct { DataType string NotNull bool IsArray bool + ArrayBounds int Comment string Length *int IsNamedParam bool diff --git a/internal/compiler/query_catalog.go b/internal/compiler/query_catalog.go index 8dc0a0ac2c..8bd0bfb94c 100644 --- a/internal/compiler/query_catalog.go +++ b/internal/compiler/query_catalog.go @@ -50,13 +50,15 @@ func buildQueryCatalog(c *catalog.Catalog, node ast.Node) (*QueryCatalog, error) func ConvertColumn(rel *ast.TableName, c *catalog.Column) *Column { return &Column{ - Table: rel, - Name: c.Name, - DataType: dataType(&c.Type), - NotNull: c.IsNotNull, - IsArray: c.IsArray, - Type: &c.Type, - Length: c.Length, + Table: rel, + Name: c.Name, + DataType: dataType(&c.Type), + NotNull: c.IsNotNull, + IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, + + Type: &c.Type, + Length: c.Length, } } diff --git a/internal/compiler/resolve.go b/internal/compiler/resolve.go index 4074116e3b..d65b17134e 100644 --- a/internal/compiler/resolve.go +++ b/internal/compiler/resolve.go @@ -192,6 +192,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, DataType: dataType(&c.Type), NotNull: p.NotNull(), IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, Length: c.Length, Table: table, IsNamedParam: isNamed, @@ -251,6 +252,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, DataType: dataType(&c.Type), NotNull: p.NotNull(), IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, Table: table, IsNamedParam: isNamed, }, @@ -416,6 +418,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, DataType: dataType(&c.Type), NotNull: p.NotNull(), IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, Table: &ast.TableName{Schema: schema, Name: rel}, Length: c.Length, IsNamedParam: isNamed, @@ -523,6 +526,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, DataType: dataType(&c.Type), NotNull: c.IsNotNull, IsArray: c.IsArray, + ArrayBounds: c.ArrayBounds, Table: table, IsNamedParam: isNamed, }, diff --git a/internal/compiler/to_column.go b/internal/compiler/to_column.go index 14dee0ac2f..11498529b7 100644 --- a/internal/compiler/to_column.go +++ b/internal/compiler/to_column.go @@ -23,9 +23,10 @@ func toColumn(n *ast.TypeName) *Column { panic("toColumn: " + err.Error()) } return &Column{ - Type: typ, - DataType: strings.TrimPrefix(astutils.Join(n.Names, "."), "."), - NotNull: true, // XXX: How do we know if this should be null? - IsArray: isArray(n), + Type: typ, + DataType: strings.TrimPrefix(astutils.Join(n.Names, "."), "."), + NotNull: true, // XXX: How do we know if this should be null? + IsArray: isArray(n), + ArrayBounds: len(n.ArrayBounds.Items), } } diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index e3989ffcad..a1a4363bc3 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -89,6 +89,9 @@ func TestReplay(t *testing.T) { t.Fatal(err) } for _, replay := range dirs { + if replay != "testdata/array_text/pgx" { + continue + } tc := replay t.Run(tc, func(t *testing.T) { t.Parallel() diff --git a/internal/endtoend/testdata/array_text/pgx/go/models.go b/internal/endtoend/testdata/array_text/pgx/go/models.go index 481cb9a484..fd12331255 100644 --- a/internal/endtoend/testdata/array_text/pgx/go/models.go +++ b/internal/endtoend/testdata/array_text/pgx/go/models.go @@ -7,5 +7,5 @@ package querytest import () type Bar struct { - Tags []string + Tags [][]string } diff --git a/internal/endtoend/testdata/array_text/pgx/go/query.sql.go b/internal/endtoend/testdata/array_text/pgx/go/query.sql.go index a459e38ed0..a39d7a4711 100644 --- a/internal/endtoend/testdata/array_text/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/array_text/pgx/go/query.sql.go @@ -13,15 +13,15 @@ const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([][]string, error) { +func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { rows, err := q.db.Query(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items [][]string + var items [][][]string for rows.Next() { - var tags []string + var tags [][]string if err := rows.Scan(&tags); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/array_text/pgx/query.sql b/internal/endtoend/testdata/array_text/pgx/query.sql index cdb0878271..e6f39f54a8 100644 --- a/internal/endtoend/testdata/array_text/pgx/query.sql +++ b/internal/endtoend/testdata/array_text/pgx/query.sql @@ -1,4 +1,6 @@ -CREATE TABLE bar (tags text[] not null); +CREATE TABLE bar (tags text[][] not null); -- name: TextArray :many SELECT * FROM bar; + +INSERT INTO bar (tags) VALUES ($1); \ No newline at end of file diff --git a/internal/engine/postgresql/parse.go b/internal/engine/postgresql/parse.go index cf30bd4b6a..27093af2d8 100644 --- a/internal/engine/postgresql/parse.go +++ b/internal/engine/postgresql/parse.go @@ -254,10 +254,11 @@ func translate(node *nodes.Node) (ast.Node, error) { } item.Subtype = ast.AT_AddColumn item.Def = &ast.ColumnDef{ - Colname: d.ColumnDef.Colname, - TypeName: rel.TypeName(), - IsNotNull: isNotNull(d.ColumnDef), - IsArray: isArray(d.ColumnDef.TypeName), + Colname: d.ColumnDef.Colname, + TypeName: rel.TypeName(), + IsNotNull: isNotNull(d.ColumnDef), + IsArray: isArray(d.ColumnDef.TypeName), + ArrayBounds: len(d.ColumnDef.TypeName.ArrayBounds), } case nodes.AlterTableType_AT_AlterColumnType: @@ -279,10 +280,11 @@ func translate(node *nodes.Node) (ast.Node, error) { } item.Subtype = ast.AT_AlterColumnType item.Def = &ast.ColumnDef{ - Colname: col, - TypeName: rel.TypeName(), - IsNotNull: isNotNull(d.ColumnDef), - IsArray: isArray(d.ColumnDef.TypeName), + Colname: col, + TypeName: rel.TypeName(), + IsNotNull: isNotNull(d.ColumnDef), + IsArray: isArray(d.ColumnDef.TypeName), + ArrayBounds: len(d.ColumnDef.TypeName.ArrayBounds), } case nodes.AlterTableType_AT_DropColumn: @@ -398,10 +400,11 @@ func translate(node *nodes.Node) (ast.Node, error) { return nil, err } create.Cols = append(create.Cols, &ast.ColumnDef{ - Colname: item.ColumnDef.Colname, - TypeName: rel.TypeName(), - IsNotNull: isNotNull(item.ColumnDef) || primaryKey[item.ColumnDef.Colname], - IsArray: isArray(item.ColumnDef.TypeName), + Colname: item.ColumnDef.Colname, + TypeName: rel.TypeName(), + IsNotNull: isNotNull(item.ColumnDef) || primaryKey[item.ColumnDef.Colname], + IsArray: isArray(item.ColumnDef.TypeName), + ArrayBounds: len(item.ColumnDef.TypeName.ArrayBounds), }) } } diff --git a/internal/plugin/codegen.pb.go b/internal/plugin/codegen.pb.go index e28a4e90b9..3e0c123aa3 100644 --- a/internal/plugin/codegen.pb.go +++ b/internal/plugin/codegen.pb.go @@ -1239,10 +1239,11 @@ type Column struct { IsNamedParam bool `protobuf:"varint,7,opt,name=is_named_param,json=isNamedParam,proto3" json:"is_named_param,omitempty"` IsFuncCall bool `protobuf:"varint,8,opt,name=is_func_call,json=isFuncCall,proto3" json:"is_func_call,omitempty"` // XXX: Figure out what PostgreSQL calls `foo.id` - Scope string `protobuf:"bytes,9,opt,name=scope,proto3" json:"scope,omitempty"` - Table *Identifier `protobuf:"bytes,10,opt,name=table,proto3" json:"table,omitempty"` - TableAlias string `protobuf:"bytes,11,opt,name=table_alias,json=tableAlias,proto3" json:"table_alias,omitempty"` - Type *Identifier `protobuf:"bytes,12,opt,name=type,proto3" json:"type,omitempty"` + Scope string `protobuf:"bytes,9,opt,name=scope,proto3" json:"scope,omitempty"` + Table *Identifier `protobuf:"bytes,10,opt,name=table,proto3" json:"table,omitempty"` + TableAlias string `protobuf:"bytes,11,opt,name=table_alias,json=tableAlias,proto3" json:"table_alias,omitempty"` + Type *Identifier `protobuf:"bytes,12,opt,name=type,proto3" json:"type,omitempty"` + ArrayBounds int32 `protobuf:"varint,13,opt,name=array_bounds,json=arrayBounds,proto3" json:"array_bounds,omitempty"` } func (x *Column) Reset() { @@ -1354,6 +1355,13 @@ func (x *Column) GetType() *Identifier { return nil } +func (x *Column) GetArrayBounds() int32 { + if x != nil { + return x.ArrayBounds + } + return 0 +} + type Query struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1823,7 +1831,7 @@ var file_plugin_codegen_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xd5, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xf8, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x6f, 0x74, 0x4e, 0x75, 0x6c, @@ -1844,48 +1852,50 @@ var file_plugin_codegen_proto_rawDesc = []byte{ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x94, 0x02, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x63, 0x6d, 0x64, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2d, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, - 0x6e, 0x74, 0x6f, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x52, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x6f, - 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x4b, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x06, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x06, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x22, 0xb6, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, - 0x27, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x71, 0x6c, 0x63, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x71, 0x6c, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x0f, - 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x22, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6b, 0x79, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x72, 0x6f, 0x79, 0x2f, 0x73, 0x71, 0x6c, - 0x63, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x72, 0x72, 0x61, 0x79, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x22, 0x94, 0x02, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x28, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, + 0x12, 0x2d, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, + 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x6f, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x11, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, + 0x6e, 0x74, 0x6f, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x4b, 0x0a, 0x09, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, + 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x06, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xb6, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x64, 0x65, 0x47, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x12, 0x27, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, + 0x71, 0x6c, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x71, 0x6c, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x35, 0x0a, 0x0f, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x79, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x72, 0x6f, 0x79, 0x2f, + 0x73, 0x71, 0x6c, 0x63, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/internal/plugin/codegen_vtproto.pb.go b/internal/plugin/codegen_vtproto.pb.go index 0b70319cb4..3717120752 100644 --- a/internal/plugin/codegen_vtproto.pb.go +++ b/internal/plugin/codegen_vtproto.pb.go @@ -1221,6 +1221,11 @@ func (m *Column) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.ArrayBounds != 0 { + i = encodeVarint(dAtA, i, uint64(m.ArrayBounds)) + i-- + dAtA[i] = 0x68 + } if m.Type != nil { size, err := m.Type.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { @@ -2133,6 +2138,9 @@ func (m *Column) SizeVT() (n int) { l = m.Type.SizeVT() n += 1 + l + sov(uint64(l)) } + if m.ArrayBounds != 0 { + n += 1 + sov(uint64(m.ArrayBounds)) + } if m.unknownFields != nil { n += len(m.unknownFields) } @@ -5732,6 +5740,25 @@ func (m *Column) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ArrayBounds", wireType) + } + m.ArrayBounds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ArrayBounds |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) diff --git a/internal/sql/ast/column_def.go b/internal/sql/ast/column_def.go index 279f97bf48..fc8edf76fa 100644 --- a/internal/sql/ast/column_def.go +++ b/internal/sql/ast/column_def.go @@ -1,12 +1,13 @@ package ast type ColumnDef struct { - Colname string - TypeName *TypeName - IsNotNull bool - IsArray bool - Vals *List - Length *int + Colname string + TypeName *TypeName + IsNotNull bool + IsArray bool + ArrayBounds int + Vals *List + Length *int // From pg.ColumnDef Inhcount int diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index 6595fcbace..8e4056f0a6 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -96,12 +96,13 @@ func (table *Table) setNotNull(cmd *ast.AlterTableCmd) error { // // TODO: Should this just be ast Nodes? type Column struct { - Name string - Type ast.TypeName - IsNotNull bool - IsArray bool - Comment string - Length *int + Name string + Type ast.TypeName + IsNotNull bool + IsArray bool + ArrayBounds int + Comment string + Length *int } // An interface is used to resolve a circular import between the catalog and compiler packages. @@ -260,12 +261,13 @@ func (c *Catalog) createTable(stmt *ast.CreateTableStmt) error { } else { for _, col := range stmt.Cols { tc := &Column{ - Name: col.Colname, - Type: *col.TypeName, - IsNotNull: col.IsNotNull, - IsArray: col.IsArray, - Comment: col.Comment, - Length: col.Length, + Name: col.Colname, + Type: *col.TypeName, + IsNotNull: col.IsNotNull, + IsArray: col.IsArray, + ArrayBounds: col.ArrayBounds, + Comment: col.Comment, + Length: col.Length, } if col.Vals != nil { typeName := ast.TypeName{ diff --git a/protos/plugin/codegen.proto b/protos/plugin/codegen.proto index 8dc6360399..588b1a1c68 100644 --- a/protos/plugin/codegen.proto +++ b/protos/plugin/codegen.proto @@ -168,6 +168,8 @@ message Column Identifier table = 10; string table_alias = 11; Identifier type = 12; + + int32 array_bounds = 13; } message Query From 4630b30a414968ef936164051cce9447f39130f9 Mon Sep 17 00:00:00 2001 From: Connor Date: Mon, 30 May 2022 11:51:21 -0700 Subject: [PATCH 02/12] add e2e test --- internal/endtoend/endtoend_test.go | 3 -- .../testdata/array_text/pgx/go/models.go | 2 +- .../testdata/array_text/pgx/go/query.sql.go | 6 +-- .../testdata/array_text/pgx/query.sql | 4 +- .../multidimension_array/pgx/go/db.go | 32 +++++++++++++++ .../multidimension_array/pgx/go/models.go | 11 ++++++ .../multidimension_array/pgx/go/query.sql.go | 34 ++++++++++++++++ .../multidimension_array/pgx/query.sql | 6 +++ .../multidimension_array/pgx/sqlc.json | 13 +++++++ .../multidimension_array/stdlib/go/db.go | 31 +++++++++++++++ .../multidimension_array/stdlib/go/models.go | 11 ++++++ .../stdlib/go/query.sql.go | 39 +++++++++++++++++++ .../multidimension_array/stdlib/query.sql | 4 ++ .../multidimension_array/stdlib/sqlc.json | 11 ++++++ 14 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/go/db.go create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/go/models.go create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/query.sql create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/sqlc.json create mode 100644 internal/endtoend/testdata/multidimension_array/stdlib/go/db.go create mode 100644 internal/endtoend/testdata/multidimension_array/stdlib/go/models.go create mode 100644 internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go create mode 100644 internal/endtoend/testdata/multidimension_array/stdlib/query.sql create mode 100644 internal/endtoend/testdata/multidimension_array/stdlib/sqlc.json diff --git a/internal/endtoend/endtoend_test.go b/internal/endtoend/endtoend_test.go index a1a4363bc3..e3989ffcad 100644 --- a/internal/endtoend/endtoend_test.go +++ b/internal/endtoend/endtoend_test.go @@ -89,9 +89,6 @@ func TestReplay(t *testing.T) { t.Fatal(err) } for _, replay := range dirs { - if replay != "testdata/array_text/pgx" { - continue - } tc := replay t.Run(tc, func(t *testing.T) { t.Parallel() diff --git a/internal/endtoend/testdata/array_text/pgx/go/models.go b/internal/endtoend/testdata/array_text/pgx/go/models.go index fd12331255..481cb9a484 100644 --- a/internal/endtoend/testdata/array_text/pgx/go/models.go +++ b/internal/endtoend/testdata/array_text/pgx/go/models.go @@ -7,5 +7,5 @@ package querytest import () type Bar struct { - Tags [][]string + Tags []string } diff --git a/internal/endtoend/testdata/array_text/pgx/go/query.sql.go b/internal/endtoend/testdata/array_text/pgx/go/query.sql.go index a39d7a4711..a459e38ed0 100644 --- a/internal/endtoend/testdata/array_text/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/array_text/pgx/go/query.sql.go @@ -13,15 +13,15 @@ const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { +func (q *Queries) TextArray(ctx context.Context) ([][]string, error) { rows, err := q.db.Query(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items [][][]string + var items [][]string for rows.Next() { - var tags [][]string + var tags []string if err := rows.Scan(&tags); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/array_text/pgx/query.sql b/internal/endtoend/testdata/array_text/pgx/query.sql index e6f39f54a8..cdb0878271 100644 --- a/internal/endtoend/testdata/array_text/pgx/query.sql +++ b/internal/endtoend/testdata/array_text/pgx/query.sql @@ -1,6 +1,4 @@ -CREATE TABLE bar (tags text[][] not null); +CREATE TABLE bar (tags text[] not null); -- name: TextArray :many SELECT * FROM bar; - -INSERT INTO bar (tags) VALUES ($1); \ No newline at end of file diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/db.go b/internal/endtoend/testdata/multidimension_array/pgx/go/db.go new file mode 100644 index 0000000000..b0157bd009 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 + +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/multidimension_array/pgx/go/models.go b/internal/endtoend/testdata/multidimension_array/pgx/go/models.go new file mode 100644 index 0000000000..fd12331255 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 + +package querytest + +import () + +type Bar struct { + Tags [][]string +} diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go new file mode 100644 index 0000000000..a39d7a4711 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go @@ -0,0 +1,34 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 +// source: query.sql + +package querytest + +import ( + "context" +) + +const textArray = `-- name: TextArray :many +SELECT tags FROM bar +` + +func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { + rows, err := q.db.Query(ctx, textArray) + if err != nil { + return nil, err + } + defer rows.Close() + var items [][][]string + for rows.Next() { + var tags [][]string + if err := rows.Scan(&tags); err != nil { + return nil, err + } + items = append(items, tags) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/multidimension_array/pgx/query.sql b/internal/endtoend/testdata/multidimension_array/pgx/query.sql new file mode 100644 index 0000000000..e6f39f54a8 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/query.sql @@ -0,0 +1,6 @@ +CREATE TABLE bar (tags text[][] not null); + +-- name: TextArray :many +SELECT * FROM bar; + +INSERT INTO bar (tags) VALUES ($1); \ No newline at end of file diff --git a/internal/endtoend/testdata/multidimension_array/pgx/sqlc.json b/internal/endtoend/testdata/multidimension_array/pgx/sqlc.json new file mode 100644 index 0000000000..9403bd0279 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v4", + "name": "querytest", + "schema": "query.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go new file mode 100644 index 0000000000..36ef5f4f45 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 + +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/multidimension_array/stdlib/go/models.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go new file mode 100644 index 0000000000..fd12331255 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go @@ -0,0 +1,11 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 + +package querytest + +import () + +type Bar struct { + Tags [][]string +} diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go new file mode 100644 index 0000000000..6b02846e5f --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.13.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/lib/pq" +) + +const textArray = `-- name: TextArray :many +SELECT tags FROM bar +` + +func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { + rows, err := q.db.QueryContext(ctx, textArray) + if err != nil { + return nil, err + } + defer rows.Close() + var items [][][]string + for rows.Next() { + var tags [][]string + if err := rows.Scan(pq.Array(&tags)); err != nil { + return nil, err + } + items = append(items, tags) + } + 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/multidimension_array/stdlib/query.sql b/internal/endtoend/testdata/multidimension_array/stdlib/query.sql new file mode 100644 index 0000000000..29a4bdbc4a --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/stdlib/query.sql @@ -0,0 +1,4 @@ +CREATE TABLE bar (tags text[][] not null); + +-- name: TextArray :many +SELECT * FROM bar; diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/sqlc.json b/internal/endtoend/testdata/multidimension_array/stdlib/sqlc.json new file mode 100644 index 0000000000..ac7c2ed829 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/stdlib/sqlc.json @@ -0,0 +1,11 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "name": "querytest", + "schema": "query.sql", + "queries": "query.sql" + } + ] +} From e80ace6cf708ad973f952eb644ff1deb880953ce Mon Sep 17 00:00:00 2001 From: Connor Date: Mon, 30 May 2022 12:31:21 -0700 Subject: [PATCH 03/12] update array dims on table alter --- .../codegen_json/gen/codegen_request.json | 48 ++++++++++++------- internal/sql/catalog/table.go | 1 + 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/internal/endtoend/testdata/codegen_json/gen/codegen_request.json b/internal/endtoend/testdata/codegen_json/gen/codegen_request.json index 36239b3913..42ade9b509 100644 --- a/internal/endtoend/testdata/codegen_json/gen/codegen_request.json +++ b/internal/endtoend/testdata/codegen_json/gen/codegen_request.json @@ -85,7 +85,8 @@ "catalog": "", "schema": "", "name": "bigserial" - } + }, + "array_bounds": 0 }, { "name": "name", @@ -106,7 +107,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 }, { "name": "bio", @@ -127,7 +129,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 } ], "comment": "" @@ -177,7 +180,8 @@ "catalog": "", "schema": "", "name": "bigserial" - } + }, + "array_bounds": 0 }, { "name": "name", @@ -198,7 +202,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 }, { "name": "bio", @@ -219,7 +224,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 } ], "params": [ @@ -244,7 +250,8 @@ "catalog": "", "schema": "", "name": "bigserial" - } + }, + "array_bounds": 0 } } ], @@ -276,7 +283,8 @@ "catalog": "", "schema": "", "name": "bigserial" - } + }, + "array_bounds": 0 }, { "name": "name", @@ -297,7 +305,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 }, { "name": "bio", @@ -318,7 +327,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 } ], "params": [], @@ -350,7 +360,8 @@ "catalog": "", "schema": "", "name": "bigserial" - } + }, + "array_bounds": 0 }, { "name": "name", @@ -371,7 +382,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 }, { "name": "bio", @@ -392,7 +404,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 } ], "params": [ @@ -417,7 +430,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 } }, { @@ -441,7 +455,8 @@ "catalog": "", "schema": "", "name": "text" - } + }, + "array_bounds": 0 } } ], @@ -480,7 +495,8 @@ "catalog": "", "schema": "", "name": "bigserial" - } + }, + "array_bounds": 0 } } ], diff --git a/internal/sql/catalog/table.go b/internal/sql/catalog/table.go index 8e4056f0a6..6ea48ed2af 100644 --- a/internal/sql/catalog/table.go +++ b/internal/sql/catalog/table.go @@ -55,6 +55,7 @@ func (table *Table) alterColumnType(cmd *ast.AlterTableCmd) error { if index >= 0 { table.Columns[index].Type = *cmd.Def.TypeName table.Columns[index].IsArray = cmd.Def.IsArray + table.Columns[index].ArrayBounds = cmd.Def.ArrayBounds } return nil } From a9aa0f90178d18a21954a1b65a8d48660d4f5e49 Mon Sep 17 00:00:00 2001 From: Connor Date: Mon, 30 May 2022 12:34:16 -0700 Subject: [PATCH 04/12] remove accidental insert statement --- internal/endtoend/testdata/multidimension_array/pgx/query.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/endtoend/testdata/multidimension_array/pgx/query.sql b/internal/endtoend/testdata/multidimension_array/pgx/query.sql index e6f39f54a8..29a4bdbc4a 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/query.sql +++ b/internal/endtoend/testdata/multidimension_array/pgx/query.sql @@ -2,5 +2,3 @@ CREATE TABLE bar (tags text[][] not null); -- name: TextArray :many SELECT * FROM bar; - -INSERT INTO bar (tags) VALUES ($1); \ No newline at end of file From 5cc5c5f99b81f49f0d801f5b35ef31df59dbb4e9 Mon Sep 17 00:00:00 2001 From: Connor Date: Sat, 3 Sep 2022 16:10:56 +0000 Subject: [PATCH 05/12] regenerate to fix mismatch in testdata generated code version --- internal/endtoend/testdata/multidimension_array/pgx/go/db.go | 2 +- .../endtoend/testdata/multidimension_array/pgx/go/models.go | 2 +- .../endtoend/testdata/multidimension_array/pgx/go/query.sql.go | 2 +- internal/endtoend/testdata/multidimension_array/stdlib/go/db.go | 2 +- .../endtoend/testdata/multidimension_array/stdlib/go/models.go | 2 +- .../testdata/multidimension_array/stdlib/go/query.sql.go | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/db.go b/internal/endtoend/testdata/multidimension_array/pgx/go/db.go index b0157bd009..9d5f1c84a5 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.13.0 +// sqlc v1.15.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/models.go b/internal/endtoend/testdata/multidimension_array/pgx/go/models.go index fd12331255..b9987aaf4b 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/go/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.13.0 +// sqlc v1.15.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go index a39d7a4711..271698c386 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.13.0 +// sqlc v1.15.0 // source: query.sql package querytest diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go index 36ef5f4f45..5f69347d4b 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.13.0 +// sqlc v1.15.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go index fd12331255..b9987aaf4b 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.13.0 +// sqlc v1.15.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go index 6b02846e5f..99c299df51 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.13.0 +// sqlc v1.15.0 // source: query.sql package querytest From 1b954c3aeb57424cd45899ce2d881b617c2c5775 Mon Sep 17 00:00:00 2001 From: Connor Date: Sat, 3 Sep 2022 18:51:25 +0000 Subject: [PATCH 06/12] regenerate codegen json --- .../testdata/codegen_json/gen/codegen.json | 48 +++++++------------ 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/internal/endtoend/testdata/codegen_json/gen/codegen.json b/internal/endtoend/testdata/codegen_json/gen/codegen.json index 8cca705a88..812a9a1c2a 100644 --- a/internal/endtoend/testdata/codegen_json/gen/codegen.json +++ b/internal/endtoend/testdata/codegen_json/gen/codegen.json @@ -94,8 +94,7 @@ "catalog": "", "schema": "", "name": "bigserial" - }, - "array_bounds": 0 + } }, { "name": "name", @@ -116,8 +115,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } }, { "name": "bio", @@ -138,8 +136,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } } ], "comment": "" @@ -49388,8 +49385,7 @@ "catalog": "", "schema": "", "name": "bigserial" - }, - "array_bounds": 0 + } }, { "name": "name", @@ -49410,8 +49406,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } }, { "name": "bio", @@ -49432,8 +49427,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } } ], "params": [ @@ -49458,8 +49452,7 @@ "catalog": "", "schema": "", "name": "bigserial" - }, - "array_bounds": 0 + } } } ], @@ -49491,8 +49484,7 @@ "catalog": "", "schema": "", "name": "bigserial" - }, - "array_bounds": 0 + } }, { "name": "name", @@ -49513,8 +49505,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } }, { "name": "bio", @@ -49535,8 +49526,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } } ], "params": [], @@ -49568,8 +49558,7 @@ "catalog": "", "schema": "", "name": "bigserial" - }, - "array_bounds": 0 + } }, { "name": "name", @@ -49590,8 +49579,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } }, { "name": "bio", @@ -49612,8 +49600,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } } ], "params": [ @@ -49638,8 +49625,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } } }, { @@ -49663,8 +49649,7 @@ "catalog": "", "schema": "", "name": "text" - }, - "array_bounds": 0 + } } } ], @@ -49703,8 +49688,7 @@ "catalog": "", "schema": "", "name": "bigserial" - }, - "array_bounds": 0 + } } } ], From ddc0b2a39f85f80c68b7659292fb1c78db88f17d Mon Sep 17 00:00:00 2001 From: Connor Date: Tue, 14 Feb 2023 19:28:21 +0000 Subject: [PATCH 07/12] madd check for pgxv4 driver in go type --- internal/codegen/golang/go_type.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/internal/codegen/golang/go_type.go b/internal/codegen/golang/go_type.go index 6954a4389b..1bd2e2c854 100644 --- a/internal/codegen/golang/go_type.go +++ b/internal/codegen/golang/go_type.go @@ -38,18 +38,19 @@ func goType(req *plugin.CodeGenRequest, col *plugin.Column) string { } typ := goInnerType(req, col) if col.IsArray { -<<<<<<< HEAD - dims := "" - for i := int32(0); i < col.ArrayBounds; i++ { - dims += "[]" + if parseDriver(req.Settings.Go.SqlPackage) == SQLDriverPGXV4 { + dims := "" + for i := int32(0); i < col.ArrayBounds; i++ { + dims += "[]" + } + return dims + typ } - return dims + typ -======= + if parseDriver(req.Settings.Go.SqlPackage) == SQLDriverPGXV5 { return "pgtype.Array[" + typ + "]" } + return "[]" + typ ->>>>>>> main } return typ } From cb169fbb91ccc295b945fc9697c38acc95ad8a7b Mon Sep 17 00:00:00 2001 From: Connor Date: Tue, 14 Feb 2023 19:56:08 +0000 Subject: [PATCH 08/12] initial attempt at pgtype.Array vs pgtype.FlatArray --- internal/codegen/golang/go_type.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/internal/codegen/golang/go_type.go b/internal/codegen/golang/go_type.go index 1bd2e2c854..fb57921bd4 100644 --- a/internal/codegen/golang/go_type.go +++ b/internal/codegen/golang/go_type.go @@ -1,6 +1,8 @@ package golang import ( + "fmt" + "github.com/kyleconroy/sqlc/internal/codegen/sdk" "github.com/kyleconroy/sqlc/internal/plugin" ) @@ -47,7 +49,17 @@ func goType(req *plugin.CodeGenRequest, col *plugin.Column) string { } if parseDriver(req.Settings.Go.SqlPackage) == SQLDriverPGXV5 { - return "pgtype.Array[" + typ + "]" + if col.ArrayBounds == 1 { + return "pgtype.FlatArray[" + typ + "]" + } + + return fmt.Sprintf(`pgtype.Array[%s]{ + Dims: []ArrayDimension{ + Length: %d, + LowerBound: %d, + }, + Valid: true, + }`, typ, col.ArrayBounds, col.ArrayBounds) } return "[]" + typ From 21e5c0b2377293d1b461d56f1c09b823bb330ade Mon Sep 17 00:00:00 2001 From: Connor Date: Thu, 16 Feb 2023 21:57:09 +0000 Subject: [PATCH 09/12] use pgxtypes flatarray and array --- .../testdata/any/pgx/v5/go/query.sql.go | 4 ++- .../testdata/array_text/pgx/v5/go/models.go | 6 ++-- .../array_text/pgx/v5/go/query.sql.go | 8 +++-- .../array_text_join/pgx/v5/go/models.go | 6 ++-- .../array_text_join/pgx/v5/go/query.sql.go | 8 +++-- .../postgresql/pgx/v5/go/models.go | 6 ++-- .../testdata/exec_imports/pgx/v5/go/models.go | 2 +- .../pgx/{ => v4}/go/db.go | 2 +- .../pgx/{ => v4}/go/models.go | 2 +- .../pgx/{ => v4}/go/query.sql.go | 2 +- .../pgx/{ => v4}/query.sql | 0 .../pgx/{ => v4}/sqlc.json | 0 .../multidimension_array/pgx/v5/go/db.go | 32 +++++++++++++++++ .../multidimension_array/pgx/v5/go/models.go | 13 +++++++ .../pgx/v5/go/query.sql.go | 36 +++++++++++++++++++ .../multidimension_array/pgx/v5/query.sql | 4 +++ .../multidimension_array/pgx/v5/sqlc.json | 13 +++++++ .../multidimension_array/stdlib/go/db.go | 2 +- .../multidimension_array/stdlib/go/models.go | 4 +-- .../stdlib/go/query.sql.go | 8 ++--- .../overrides/postgresql/pgx/v5/go/models.go | 3 +- 21 files changed, 136 insertions(+), 25 deletions(-) rename internal/endtoend/testdata/multidimension_array/pgx/{ => v4}/go/db.go (96%) rename internal/endtoend/testdata/multidimension_array/pgx/{ => v4}/go/models.go (87%) rename internal/endtoend/testdata/multidimension_array/pgx/{ => v4}/go/query.sql.go (97%) rename internal/endtoend/testdata/multidimension_array/pgx/{ => v4}/query.sql (100%) rename internal/endtoend/testdata/multidimension_array/pgx/{ => v4}/sqlc.json (100%) create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/v5/query.sql create mode 100644 internal/endtoend/testdata/multidimension_array/pgx/v5/sqlc.json diff --git a/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go index f9cb60d289..23e6c9b0a6 100644 --- a/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5/pgtype" ) const any = `-- name: Any :many @@ -15,7 +17,7 @@ FROM bar WHERE foo = ANY($1::bigserial[]) ` -func (q *Queries) Any(ctx context.Context, dollar_1 []int64) ([]int64, error) { +func (q *Queries) Any(ctx context.Context, dollar_1 pgtype.FlatArray[int64]) ([]int64, error) { rows, err := q.db.Query(ctx, any, dollar_1) if err != nil { return nil, err diff --git a/internal/endtoend/testdata/array_text/pgx/v5/go/models.go b/internal/endtoend/testdata/array_text/pgx/v5/go/models.go index b85ea5db1f..760190f998 100644 --- a/internal/endtoend/testdata/array_text/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/array_text/pgx/v5/go/models.go @@ -4,8 +4,10 @@ package querytest -import () +import ( + "github.com/jackc/pgx/v5/pgtype" +) type Bar struct { - Tags []string + Tags pgtype.FlatArray[string] } diff --git a/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go index 3695dbc92e..0c87635052 100644 --- a/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go @@ -7,21 +7,23 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5/pgtype" ) const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([][]string, error) { +func (q *Queries) TextArray(ctx context.Context) ([]pgtype.FlatArray[string], error) { rows, err := q.db.Query(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items [][]string + var items []pgtype.FlatArray[string] for rows.Next() { - var tags []string + var tags pgtype.FlatArray[string] if err := rows.Scan(&tags); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go b/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go index 20d377ec70..5392e5b712 100644 --- a/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go @@ -4,11 +4,13 @@ package querytest -import () +import ( + "github.com/jackc/pgx/v5/pgtype" +) type Bar struct { ID string - Info []string + Info pgtype.FlatArray[string] } type Foo struct { diff --git a/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go index 2f97529927..2b3cfc64d4 100644 --- a/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go @@ -7,6 +7,8 @@ package querytest import ( "context" + + "github.com/jackc/pgx/v5/pgtype" ) const joinTextArray = `-- name: JoinTextArray :many @@ -15,15 +17,15 @@ FROM foo JOIN bar ON foo.bar = bar.id ` -func (q *Queries) JoinTextArray(ctx context.Context) ([][]string, error) { +func (q *Queries) JoinTextArray(ctx context.Context) ([]pgtype.FlatArray[string], error) { rows, err := q.db.Query(ctx, joinTextArray) if err != nil { return nil, err } defer rows.Close() - var items [][]string + var items []pgtype.FlatArray[string] for rows.Next() { - var info []string + var info pgtype.FlatArray[string] if err := rows.Scan(&info); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go index 40bafb90e4..b2ad8a8ad9 100644 --- a/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go @@ -4,8 +4,10 @@ package querytest -import () +import ( + "github.com/jackc/pgx/v5/pgtype" +) type Foo struct { - Bar []string + Bar pgtype.FlatArray[string] } diff --git a/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go b/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go index 2028fcd175..c377e27c5c 100644 --- a/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go @@ -10,5 +10,5 @@ import ( type Foo struct { Bar pgtype.Int4 - Bars []int32 + Bars pgtype.FlatArray[int32] } diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/db.go b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go similarity index 96% rename from internal/endtoend/testdata/multidimension_array/pgx/go/db.go rename to internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go index 9d5f1c84a5..20efb105e8 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.15.0 +// sqlc v1.17.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/models.go b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go similarity index 87% rename from internal/endtoend/testdata/multidimension_array/pgx/go/models.go rename to internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go index b9987aaf4b..4c99d14b2e 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.15.0 +// sqlc v1.17.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go similarity index 97% rename from internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go rename to internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go index 271698c386..fd69870672 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.15.0 +// sqlc v1.17.0 // source: query.sql package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/query.sql b/internal/endtoend/testdata/multidimension_array/pgx/v4/query.sql similarity index 100% rename from internal/endtoend/testdata/multidimension_array/pgx/query.sql rename to internal/endtoend/testdata/multidimension_array/pgx/v4/query.sql diff --git a/internal/endtoend/testdata/multidimension_array/pgx/sqlc.json b/internal/endtoend/testdata/multidimension_array/pgx/v4/sqlc.json similarity index 100% rename from internal/endtoend/testdata/multidimension_array/pgx/sqlc.json rename to internal/endtoend/testdata/multidimension_array/pgx/v4/sqlc.json diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go new file mode 100644 index 0000000000..1de07c4da5 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.17.0 + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" +) + +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/multidimension_array/pgx/v5/go/models.go b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go new file mode 100644 index 0000000000..1cbf3edf64 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.17.0 + +package querytest + +import ( + "github.com/jackc/pgx/v5/pgtype" +) + +type Bar struct { + Tags pgtype.Array[string] +} diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go new file mode 100644 index 0000000000..9ddd40f8dd --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go @@ -0,0 +1,36 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.17.0 +// source: query.sql + +package querytest + +import ( + "context" + + "github.com/jackc/pgx/v5/pgtype" +) + +const textArray = `-- name: TextArray :many +SELECT tags FROM bar +` + +func (q *Queries) TextArray(ctx context.Context) ([]pgtype.Array[string], error) { + rows, err := q.db.Query(ctx, textArray) + if err != nil { + return nil, err + } + defer rows.Close() + var items []pgtype.Array[string] + for rows.Next() { + var tags pgtype.Array[string] + if err := rows.Scan(&tags); err != nil { + return nil, err + } + items = append(items, tags) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/query.sql b/internal/endtoend/testdata/multidimension_array/pgx/v5/query.sql new file mode 100644 index 0000000000..29a4bdbc4a --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/query.sql @@ -0,0 +1,4 @@ +CREATE TABLE bar (tags text[][] not null); + +-- name: TextArray :many +SELECT * FROM bar; diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/sqlc.json b/internal/endtoend/testdata/multidimension_array/pgx/v5/sqlc.json new file mode 100644 index 0000000000..65ee88ef90 --- /dev/null +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/sqlc.json @@ -0,0 +1,13 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "engine": "postgresql", + "sql_package": "pgx/v5", + "name": "querytest", + "schema": "query.sql", + "queries": "query.sql" + } + ] +} \ No newline at end of file diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go index 5f69347d4b..22b44a018f 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.15.0 +// sqlc v1.17.0 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go index b9987aaf4b..b85ea5db1f 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go @@ -1,11 +1,11 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.15.0 +// sqlc v1.17.0 package querytest import () type Bar struct { - Tags [][]string + Tags []string } diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go index 99c299df51..8fbf4e1f0a 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.15.0 +// sqlc v1.17.0 // source: query.sql package querytest @@ -15,15 +15,15 @@ const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { +func (q *Queries) TextArray(ctx context.Context) ([][]string, error) { rows, err := q.db.QueryContext(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items [][][]string + var items [][]string for rows.Next() { - var tags [][]string + var tags []string if err := rows.Scan(pq.Array(&tags)); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go index 349d5b4bad..7837a4dfa8 100644 --- a/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go @@ -5,6 +5,7 @@ package override import ( + "github.com/jackc/pgx/v5/pgtype" "github.com/kyleconroy/sqlc-testdata/pkg" "github.com/lib/pq" ) @@ -12,7 +13,7 @@ import ( type Foo struct { Other string Total int64 - Tags []string + Tags pgtype.FlatArray[string] ByteSeq []byte Retyped pkg.CustomType Langs pq.StringArray From f2b511a400bb01fef8cbad626df064387d10d537 Mon Sep 17 00:00:00 2001 From: Connor Date: Thu, 23 Feb 2023 15:15:26 +0000 Subject: [PATCH 10/12] busing same approach with non-pgx types as pull/2090 --- internal/codegen/golang/go_type.go | 20 ++++--------------- .../testdata/any/pgx/v5/go/query.sql.go | 4 +--- .../testdata/array_text/pgx/v5/go/models.go | 6 ++---- .../array_text/pgx/v5/go/query.sql.go | 8 +++----- .../array_text_join/pgx/v5/go/models.go | 6 ++---- .../array_text_join/pgx/v5/go/query.sql.go | 8 +++----- .../postgresql/pgx/v5/go/models.go | 6 ++---- .../testdata/exec_imports/pgx/v5/go/models.go | 2 +- .../multidimension_array/pgx/v4/go/db.go | 2 +- .../multidimension_array/pgx/v4/go/models.go | 2 +- .../pgx/v4/go/query.sql.go | 2 +- .../multidimension_array/pgx/v5/go/db.go | 2 +- .../multidimension_array/pgx/v5/go/models.go | 8 +++----- .../pgx/v5/go/query.sql.go | 10 ++++------ .../multidimension_array/stdlib/go/db.go | 2 +- .../multidimension_array/stdlib/go/models.go | 4 ++-- .../stdlib/go/query.sql.go | 8 ++++---- .../overrides/postgresql/pgx/v5/go/models.go | 3 +-- 18 files changed, 37 insertions(+), 66 deletions(-) diff --git a/internal/codegen/golang/go_type.go b/internal/codegen/golang/go_type.go index 7825eb1d3c..71307d83cd 100644 --- a/internal/codegen/golang/go_type.go +++ b/internal/codegen/golang/go_type.go @@ -38,23 +38,11 @@ func goType(req *plugin.CodeGenRequest, col *plugin.Column) string { } typ := goInnerType(req, col) if col.IsArray { - if parseDriver(req.Settings.Go.SqlPackage) == SQLDriverPGXV4 { - dims := "" - for i := int32(0); i < col.ArrayBounds; i++ { - dims += "[]" - } - return dims + typ + dims := "" + for i := int32(0); i < col.ArrayBounds; i++ { + dims += "[]" } - - if parseDriver(req.Settings.Go.SqlPackage) == SQLDriverPGXV5 { - if col.ArrayBounds == 1 { - return "pgtype.FlatArray[" + typ + "]" - } - - return "pgtype.Array[" + typ + "]" - } - - return "[]" + typ + return dims + typ } return typ } diff --git a/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go index 399d990bb3..eeb7e09ff6 100644 --- a/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/any/pgx/v5/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - - "github.com/jackc/pgx/v5/pgtype" ) const any = `-- name: Any :many @@ -17,7 +15,7 @@ FROM bar WHERE foo = ANY($1::bigserial[]) ` -func (q *Queries) Any(ctx context.Context, dollar_1 pgtype.FlatArray[int64]) ([]int64, error) { +func (q *Queries) Any(ctx context.Context, dollar_1 []int64) ([]int64, error) { rows, err := q.db.Query(ctx, any, dollar_1) if err != nil { return nil, err diff --git a/internal/endtoend/testdata/array_text/pgx/v5/go/models.go b/internal/endtoend/testdata/array_text/pgx/v5/go/models.go index 8f669cd031..9f7dc04e44 100644 --- a/internal/endtoend/testdata/array_text/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/array_text/pgx/v5/go/models.go @@ -4,10 +4,8 @@ package querytest -import ( - "github.com/jackc/pgx/v5/pgtype" -) +import () type Bar struct { - Tags pgtype.FlatArray[string] + Tags []string } diff --git a/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go index cd17a1d3e9..ad1416e216 100644 --- a/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/array_text/pgx/v5/go/query.sql.go @@ -7,23 +7,21 @@ package querytest import ( "context" - - "github.com/jackc/pgx/v5/pgtype" ) const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([]pgtype.FlatArray[string], error) { +func (q *Queries) TextArray(ctx context.Context) ([][]string, error) { rows, err := q.db.Query(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items []pgtype.FlatArray[string] + var items [][]string for rows.Next() { - var tags pgtype.FlatArray[string] + var tags []string if err := rows.Scan(&tags); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go b/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go index dd16a42160..9e1ecd8bda 100644 --- a/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/array_text_join/pgx/v5/go/models.go @@ -4,13 +4,11 @@ package querytest -import ( - "github.com/jackc/pgx/v5/pgtype" -) +import () type Bar struct { ID string - Info pgtype.FlatArray[string] + Info []string } type Foo struct { diff --git a/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go index 92fd663994..bc5abcb082 100644 --- a/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/array_text_join/pgx/v5/go/query.sql.go @@ -7,8 +7,6 @@ package querytest import ( "context" - - "github.com/jackc/pgx/v5/pgtype" ) const joinTextArray = `-- name: JoinTextArray :many @@ -17,15 +15,15 @@ FROM foo JOIN bar ON foo.bar = bar.id ` -func (q *Queries) JoinTextArray(ctx context.Context) ([]pgtype.FlatArray[string], error) { +func (q *Queries) JoinTextArray(ctx context.Context) ([][]string, error) { rows, err := q.db.Query(ctx, joinTextArray) if err != nil { return nil, err } defer rows.Close() - var items []pgtype.FlatArray[string] + var items [][]string for rows.Next() { - var info pgtype.FlatArray[string] + var info []string if err := rows.Scan(&info); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go index dcc3f8e626..26c72e06ba 100644 --- a/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/ddl_alter_table_alter_type/postgresql/pgx/v5/go/models.go @@ -4,10 +4,8 @@ package querytest -import ( - "github.com/jackc/pgx/v5/pgtype" -) +import () type Foo struct { - Bar pgtype.FlatArray[string] + Bar []string } diff --git a/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go b/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go index c8af1c457e..029c1c4450 100644 --- a/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/exec_imports/pgx/v5/go/models.go @@ -10,5 +10,5 @@ import ( type Foo struct { Bar pgtype.Int4 - Bars pgtype.FlatArray[int32] + Bars []int32 } diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go index 20efb105e8..439db75e69 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go index 4c99d14b2e..1348d2049e 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go index fd69870672..ba9508da83 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v4/go/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 // source: query.sql package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go index 1de07c4da5..a84825e0e1 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go index 1cbf3edf64..1348d2049e 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/models.go @@ -1,13 +1,11 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package querytest -import ( - "github.com/jackc/pgx/v5/pgtype" -) +import () type Bar struct { - Tags pgtype.Array[string] + Tags [][]string } diff --git a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go index 9ddd40f8dd..ba9508da83 100644 --- a/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/pgx/v5/go/query.sql.go @@ -1,29 +1,27 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 // source: query.sql package querytest import ( "context" - - "github.com/jackc/pgx/v5/pgtype" ) const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([]pgtype.Array[string], error) { +func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { rows, err := q.db.Query(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items []pgtype.Array[string] + var items [][][]string for rows.Next() { - var tags pgtype.Array[string] + var tags [][]string if err := rows.Scan(&tags); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go index 22b44a018f..02974bda59 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package querytest diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go index b85ea5db1f..1348d2049e 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/models.go @@ -1,11 +1,11 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package querytest import () type Bar struct { - Tags []string + Tags [][]string } diff --git a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go index 8fbf4e1f0a..661745028f 100644 --- a/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/multidimension_array/stdlib/go/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 // source: query.sql package querytest @@ -15,15 +15,15 @@ const textArray = `-- name: TextArray :many SELECT tags FROM bar ` -func (q *Queries) TextArray(ctx context.Context) ([][]string, error) { +func (q *Queries) TextArray(ctx context.Context) ([][][]string, error) { rows, err := q.db.QueryContext(ctx, textArray) if err != nil { return nil, err } defer rows.Close() - var items [][]string + var items [][][]string for rows.Next() { - var tags []string + var tags [][]string if err := rows.Scan(pq.Array(&tags)); err != nil { return nil, err } diff --git a/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go index 92bff224a0..a13f43d815 100644 --- a/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/overrides/postgresql/pgx/v5/go/models.go @@ -5,7 +5,6 @@ package override import ( - "github.com/jackc/pgx/v5/pgtype" "github.com/kyleconroy/sqlc-testdata/pkg" "github.com/lib/pq" ) @@ -13,7 +12,7 @@ import ( type Foo struct { Other string Total int64 - Tags pgtype.FlatArray[string] + Tags []string ByteSeq []byte Retyped pkg.CustomType Langs pq.StringArray From 1a626988ae5b16bdc08330960647ce4e3870119a Mon Sep 17 00:00:00 2001 From: Connor Date: Thu, 23 Feb 2023 15:24:47 +0000 Subject: [PATCH 11/12] remove newline --- internal/compiler/query_catalog.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/compiler/query_catalog.go b/internal/compiler/query_catalog.go index 8bd0bfb94c..06dc7d9e18 100644 --- a/internal/compiler/query_catalog.go +++ b/internal/compiler/query_catalog.go @@ -56,9 +56,8 @@ func ConvertColumn(rel *ast.TableName, c *catalog.Column) *Column { NotNull: c.IsNotNull, IsArray: c.IsArray, ArrayBounds: c.ArrayBounds, - - Type: &c.Type, - Length: c.Length, + Type: &c.Type, + Length: c.Length, } } From be4a3247d4e277383ecff9a2bf2ff8a05085fb91 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 7 Jun 2023 11:29:44 -0700 Subject: [PATCH 12/12] Regenerate proto files --- internal/plugin/codegen_vtproto.pb.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/plugin/codegen_vtproto.pb.go b/internal/plugin/codegen_vtproto.pb.go index 562279612a..4ff5c2b504 100644 --- a/internal/plugin/codegen_vtproto.pb.go +++ b/internal/plugin/codegen_vtproto.pb.go @@ -407,6 +407,7 @@ func (m *Column) CloneVT() *Column { Type: m.Type.CloneVT(), IsSqlcSlice: m.IsSqlcSlice, EmbedTable: m.EmbedTable.CloneVT(), + ArrayBounds: m.ArrayBounds, } if len(m.unknownFields) > 0 { r.unknownFields = make([]byte, len(m.unknownFields)) @@ -3970,6 +3971,11 @@ func (m *Column) MarshalToSizedBufferVTStrict(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.ArrayBounds != 0 { + i = encodeVarint(dAtA, i, uint64(m.ArrayBounds)) + i-- + dAtA[i] = 0x78 + } if m.EmbedTable != nil { size, err := m.EmbedTable.MarshalToSizedBufferVTStrict(dAtA[:i]) if err != nil { @@ -4852,16 +4858,10 @@ func (m *Column) SizeVT() (n int) { l = m.EmbedTable.SizeVT() n += 1 + l + sov(uint64(l)) } -<<<<<<< HEAD if m.ArrayBounds != 0 { n += 1 + sov(uint64(m.ArrayBounds)) } - if m.unknownFields != nil { - n += len(m.unknownFields) - } -======= n += len(m.unknownFields) ->>>>>>> main return n }