From e31e3bdead9399b4c83f3a5905bb19e22364d764 Mon Sep 17 00:00:00 2001 From: zaneli Date: Sun, 5 Feb 2023 01:26:47 +0900 Subject: [PATCH 1/3] fix: Rename argument when conflicted to imported package --- internal/codegen/golang/gen.go | 5 ++- internal/codegen/golang/imports.go | 19 ++++++++++ .../conflicted_arg_name/postgresql/db/db.go | 31 ++++++++++++++++ .../postgresql/db/models.go | 18 ++++++++++ .../postgresql/db/query.sql.go | 35 +++++++++++++++++++ .../conflicted_arg_name/postgresql/query.sql | 12 +++++++ .../conflicted_arg_name/postgresql/sqlc.json | 11 ++++++ 7 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go create mode 100644 internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go create mode 100644 internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go create mode 100644 internal/endtoend/testdata/conflicted_arg_name/postgresql/query.sql create mode 100644 internal/endtoend/testdata/conflicted_arg_name/postgresql/sqlc.json diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index e463849f03..dd802f0150 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -94,7 +94,6 @@ func generate(req *plugin.CodeGenRequest, enums []Enum, structs []Struct, querie SQLDriver: parseDriver(golang.SqlPackage), Q: "`", Package: golang.Package, - GoQueries: queries, Enums: enums, Structs: structs, SqlcVersion: req.SqlcVersion, @@ -111,9 +110,13 @@ func generate(req *plugin.CodeGenRequest, enums []Enum, structs []Struct, querie output := map[string]string{} execute := func(name, templateName string) error { + imports := i.Imports(name) + replacedQueries := replaceConflictedArg(imports, queries) + var b bytes.Buffer w := bufio.NewWriter(&b) tctx.SourceName = name + tctx.GoQueries = replacedQueries err := tmpl.ExecuteTemplate(w, templateName, &tctx) w.Flush() if err != nil { diff --git a/internal/codegen/golang/imports.go b/internal/codegen/golang/imports.go index 94b68aa14e..6da4b9c5e5 100644 --- a/internal/codegen/golang/imports.go +++ b/internal/codegen/golang/imports.go @@ -462,3 +462,22 @@ func trimSliceAndPointerPrefix(v string) string { v = strings.TrimPrefix(v, "*") return v } + +func replaceConflictedArg(imports [][]ImportSpec, queries []Query) []Query { + m := make(map[string]struct{}) + for _, is := range imports { + for _, i := range is { + paths := strings.Split(i.Path, "/") + m[paths[len(paths)-1]] = struct{}{} + } + } + + replacedQueries := make([]Query, 0, len(queries)) + for _, query := range queries { + if _, exist := m[query.Arg.Name]; exist { + query.Arg.Name = toCamelCase(fmt.Sprintf("arg_%s", query.Arg.Name)) + } + replacedQueries = append(replacedQueries, query) + } + return replacedQueries +} diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go new file mode 100644 index 0000000000..79b63a944e --- /dev/null +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.16.0 + +package db + +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/conflicted_arg_name/postgresql/db/models.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go new file mode 100644 index 0000000000..b9c96495bd --- /dev/null +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go @@ -0,0 +1,18 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.16.0 + +package db + +import ( + "time" + + "github.com/google/uuid" +) + +type Foo struct { + Time time.Time + Time2 time.Time + Uuid uuid.UUID + Uuid2 uuid.UUID +} diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go new file mode 100644 index 0000000000..4cf8c7f4be --- /dev/null +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go @@ -0,0 +1,35 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.16.0 +// source: query.sql + +package db + +import ( + "context" + "time" + + "github.com/google/uuid" +) + +const time2ByTime = `-- name: Time2ByTime :one +SELECT time2 FROM foo WHERE time=$1 +` + +func (q *Queries) Time2ByTime(ctx context.Context, argTime time.Time) (time.Time, error) { + row := q.db.QueryRowContext(ctx, time2ByTime, argTime) + var time2 time.Time + err := row.Scan(&time2) + return time2, err +} + +const uuid2ByUuid = `-- name: Uuid2ByUuid :one +SELECT uuid2 FROM foo WHERE uuid=$1 +` + +func (q *Queries) Uuid2ByUuid(ctx context.Context, argUuid uuid.UUID) (uuid.UUID, error) { + row := q.db.QueryRowContext(ctx, uuid2ByUuid, argUuid) + var uuid2 uuid.UUID + err := row.Scan(&uuid2) + return uuid2, err +} diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/query.sql b/internal/endtoend/testdata/conflicted_arg_name/postgresql/query.sql new file mode 100644 index 0000000000..db97e5f333 --- /dev/null +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/query.sql @@ -0,0 +1,12 @@ +CREATE TABLE foo ( + time date NOT NULL, + time2 date NOT NULL, + uuid uuid NOT NULL, + uuid2 uuid NOT NULL +); + +-- name: Time2ByTime :one +SELECT time2 FROM foo WHERE time=$1; + +-- name: Uuid2ByUuid :one +SELECT uuid2 FROM foo WHERE uuid=$1; diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/sqlc.json b/internal/endtoend/testdata/conflicted_arg_name/postgresql/sqlc.json new file mode 100644 index 0000000000..ff443fe1b9 --- /dev/null +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/sqlc.json @@ -0,0 +1,11 @@ +{ + "version": "1", + "packages": [ + { + "path": "db", + "engine": "postgresql", + "schema": "query.sql", + "queries": "query.sql" + } + ] +} From d9bf2b829439ba4e5e1fc4d48e8b57003bd9c564 Mon Sep 17 00:00:00 2001 From: zaneli Date: Tue, 21 Feb 2023 16:12:06 +0900 Subject: [PATCH 2/3] update testdata --- .../endtoend/testdata/conflicted_arg_name/postgresql/db/db.go | 2 +- .../testdata/conflicted_arg_name/postgresql/db/models.go | 2 +- .../testdata/conflicted_arg_name/postgresql/db/query.sql.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go index 79b63a944e..1122eb7d7a 100644 --- a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.16.0 +// sqlc v1.17.0 package db diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go index b9c96495bd..ed612106ca 100644 --- a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.16.0 +// sqlc v1.17.0 package db diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go index 4cf8c7f4be..727a19d270 100644 --- a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.16.0 +// sqlc v1.17.0 // source: query.sql package db From 3670f7135674071e41d1d2c73a4445e080398e19 Mon Sep 17 00:00:00 2001 From: zaneli Date: Thu, 23 Feb 2023 10:02:44 +0900 Subject: [PATCH 3/3] generate testdata by sqlc v1.17.2 --- .../endtoend/testdata/conflicted_arg_name/postgresql/db/db.go | 2 +- .../testdata/conflicted_arg_name/postgresql/db/models.go | 2 +- .../testdata/conflicted_arg_name/postgresql/db/query.sql.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go index 1122eb7d7a..35e5f4a4b6 100644 --- a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package db diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go index ed612106ca..eae65e7679 100644 --- a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.17.0 +// sqlc v1.17.2 package db diff --git a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go index 727a19d270..bdbef2b7d4 100644 --- a/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/query.sql.go +++ b/internal/endtoend/testdata/conflicted_arg_name/postgresql/db/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 db