diff --git a/internal/compiler/output_columns.go b/internal/compiler/output_columns.go index 26a421f025..9804597628 100644 --- a/internal/compiler/output_columns.go +++ b/internal/compiler/output_columns.go @@ -661,6 +661,7 @@ func findColumnForRef(ref *ast.ColumnRef, tables []*Table, selectStatement *ast. } var found int + var foundResTarget *ast.ResTarget for _, t := range tables { if alias != "" && t.Rel.Name != alias { continue @@ -686,7 +687,10 @@ func findColumnForRef(ref *ast.ColumnRef, tables []*Table, selectStatement *ast. continue } if resTarget.Name != nil && *resTarget.Name == name { - found++ + if resTarget != foundResTarget { + found++ + foundResTarget = resTarget + } } } } diff --git a/internal/endtoend/testdata/join_group_order/postgresql/go/db.go b/internal/endtoend/testdata/join_group_order/postgresql/go/db.go new file mode 100644 index 0000000000..8c5b31f933 --- /dev/null +++ b/internal/endtoend/testdata/join_group_order/postgresql/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.18.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/join_group_order/postgresql/go/models.go b/internal/endtoend/testdata/join_group_order/postgresql/go/models.go new file mode 100644 index 0000000000..6eab90c5ee --- /dev/null +++ b/internal/endtoend/testdata/join_group_order/postgresql/go/models.go @@ -0,0 +1,19 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.18.0 + +package querytest + +import ( + "database/sql" +) + +type Author struct { + ID sql.NullInt32 +} + +type Book struct { + ID sql.NullInt32 + AuthorID sql.NullInt32 + Price sql.NullInt32 +} diff --git a/internal/endtoend/testdata/join_group_order/postgresql/go/query.sql.go b/internal/endtoend/testdata/join_group_order/postgresql/go/query.sql.go new file mode 100644 index 0000000000..8b100385ae --- /dev/null +++ b/internal/endtoend/testdata/join_group_order/postgresql/go/query.sql.go @@ -0,0 +1,47 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.18.0 +// source: query.sql + +package querytest + +import ( + "context" + "database/sql" +) + +const listAuthorsByCheapestBook = `-- name: ListAuthorsByCheapestBook :many +SELECT + author_id, min(b.price) as min_price +From books b inner join authors a on a.id = b.author_id +GROUP BY b.author_id +ORDER BY min_price +` + +type ListAuthorsByCheapestBookRow struct { + AuthorID sql.NullInt32 + MinPrice interface{} +} + +func (q *Queries) ListAuthorsByCheapestBook(ctx context.Context) ([]ListAuthorsByCheapestBookRow, error) { + rows, err := q.db.QueryContext(ctx, listAuthorsByCheapestBook) + if err != nil { + return nil, err + } + defer rows.Close() + var items []ListAuthorsByCheapestBookRow + for rows.Next() { + var i ListAuthorsByCheapestBookRow + if err := rows.Scan(&i.AuthorID, &i.MinPrice); 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/join_group_order/postgresql/query.sql b/internal/endtoend/testdata/join_group_order/postgresql/query.sql new file mode 100644 index 0000000000..e77d0cec4b --- /dev/null +++ b/internal/endtoend/testdata/join_group_order/postgresql/query.sql @@ -0,0 +1,17 @@ +-- Example queries for sqlc +CREATE TABLE authors ( + id INT +); + +CREATE TABLE books ( + id INT, + author_id INT, + price INT +); + +-- name: ListAuthorsByCheapestBook :many +SELECT + author_id, min(b.price) as min_price +From books b inner join authors a on a.id = b.author_id +GROUP BY b.author_id +ORDER BY min_price; \ No newline at end of file diff --git a/internal/endtoend/testdata/join_group_order/postgresql/sqlc.yaml b/internal/endtoend/testdata/join_group_order/postgresql/sqlc.yaml new file mode 100644 index 0000000000..c4b3831631 --- /dev/null +++ b/internal/endtoend/testdata/join_group_order/postgresql/sqlc.yaml @@ -0,0 +1,7 @@ +version: 1 +packages: + - path: "go" + name: "querytest" + engine: "postgresql" + schema: "query.sql" + queries: "query.sql" \ No newline at end of file