diff --git a/internal/compiler/output_columns.go b/internal/compiler/output_columns.go index 19128f71ae..b099788b75 100644 --- a/internal/compiler/output_columns.go +++ b/internal/compiler/output_columns.go @@ -595,19 +595,26 @@ func (c *Compiler) sourceTables(qc *QueryCatalog, node ast.Node) ([]*Table, erro func outputColumnRefs(res *ast.ResTarget, tables []*Table, node *ast.ColumnRef) ([]*Column, error) { parts := stringSlice(node.Fields) - var name, alias string + var schema, name, alias string switch { case len(parts) == 1: name = parts[0] case len(parts) == 2: alias = parts[0] name = parts[1] + case len(parts) == 3: + schema = parts[0] + alias = parts[1] + name = parts[2] default: return nil, fmt.Errorf("unknown number of fields: %d", len(parts)) } var cols []*Column var found int for _, t := range tables { + if schema != "" && t.Rel.Schema != schema { + continue + } if alias != "" && t.Rel.Name != alias { continue } diff --git a/internal/endtoend/testdata/schema_scoped_list/mysql/go/query.sql.go b/internal/endtoend/testdata/schema_scoped_list/mysql/go/query.sql.go index 7b26fd358b..236fff1991 100644 --- a/internal/endtoend/testdata/schema_scoped_list/mysql/go/query.sql.go +++ b/internal/endtoend/testdata/schema_scoped_list/mysql/go/query.sql.go @@ -9,6 +9,33 @@ import ( "context" ) +const schemaScopedColList = `-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar +` + +func (q *Queries) SchemaScopedColList(ctx context.Context) ([]uint64, error) { + rows, err := q.db.QueryContext(ctx, schemaScopedColList) + if err != nil { + return nil, err + } + defer rows.Close() + var items []uint64 + for rows.Next() { + var id uint64 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const schemaScopedList = `-- name: SchemaScopedList :many SELECT id FROM foo.bar ` diff --git a/internal/endtoend/testdata/schema_scoped_list/mysql/query.sql b/internal/endtoend/testdata/schema_scoped_list/mysql/query.sql index cb8d6cdb61..43b898c021 100644 --- a/internal/endtoend/testdata/schema_scoped_list/mysql/query.sql +++ b/internal/endtoend/testdata/schema_scoped_list/mysql/query.sql @@ -3,3 +3,6 @@ CREATE TABLE foo.bar (id serial not null); -- name: SchemaScopedList :many SELECT * FROM foo.bar; + +-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar; diff --git a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/go/query.sql.go index 1e0f26b3e1..655ab97f64 100644 --- a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/go/query.sql.go +++ b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/go/query.sql.go @@ -9,6 +9,30 @@ import ( "context" ) +const schemaScopedColList = `-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar +` + +func (q *Queries) SchemaScopedColList(ctx context.Context) ([]int32, error) { + rows, err := q.db.Query(ctx, schemaScopedColList) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const schemaScopedList = `-- name: SchemaScopedList :many SELECT id FROM foo.bar ` diff --git a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/query.sql b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/query.sql index cb8d6cdb61..ef7b01859a 100644 --- a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/query.sql +++ b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v4/query.sql @@ -3,3 +3,6 @@ CREATE TABLE foo.bar (id serial not null); -- name: SchemaScopedList :many SELECT * FROM foo.bar; + +-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar; \ No newline at end of file diff --git a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/go/query.sql.go index 1e0f26b3e1..655ab97f64 100644 --- a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/go/query.sql.go @@ -9,6 +9,30 @@ import ( "context" ) +const schemaScopedColList = `-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar +` + +func (q *Queries) SchemaScopedColList(ctx context.Context) ([]int32, error) { + rows, err := q.db.Query(ctx, schemaScopedColList) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const schemaScopedList = `-- name: SchemaScopedList :many SELECT id FROM foo.bar ` diff --git a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/query.sql b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/query.sql index cb8d6cdb61..ef7b01859a 100644 --- a/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/query.sql +++ b/internal/endtoend/testdata/schema_scoped_list/postgresql/pgx/v5/query.sql @@ -3,3 +3,6 @@ CREATE TABLE foo.bar (id serial not null); -- name: SchemaScopedList :many SELECT * FROM foo.bar; + +-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar; \ No newline at end of file diff --git a/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/go/query.sql.go index 07a890b45e..d31382c9a8 100644 --- a/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/go/query.sql.go @@ -9,6 +9,33 @@ import ( "context" ) +const schemaScopedColList = `-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar +` + +func (q *Queries) SchemaScopedColList(ctx context.Context) ([]int32, error) { + rows, err := q.db.QueryContext(ctx, schemaScopedColList) + if err != nil { + return nil, err + } + defer rows.Close() + var items []int32 + for rows.Next() { + var id int32 + if err := rows.Scan(&id); err != nil { + return nil, err + } + items = append(items, id) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const schemaScopedList = `-- name: SchemaScopedList :many SELECT id FROM foo.bar ` diff --git a/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/query.sql b/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/query.sql index cb8d6cdb61..ef7b01859a 100644 --- a/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/query.sql +++ b/internal/endtoend/testdata/schema_scoped_list/postgresql/stdlib/query.sql @@ -3,3 +3,6 @@ CREATE TABLE foo.bar (id serial not null); -- name: SchemaScopedList :many SELECT * FROM foo.bar; + +-- name: SchemaScopedColList :many +SELECT foo.bar.id FROM foo.bar; \ No newline at end of file