From 53f417b63b72be345e740c1c1dc023ab041b0a68 Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Wed, 2 Aug 2023 16:56:12 +0900 Subject: [PATCH 1/3] fix(engine/sqlite): fixed detection of column alias without AS fix #2559 --- internal/engine/sqlite/convert.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/engine/sqlite/convert.go b/internal/engine/sqlite/convert.go index 9ff35a79d9..7a9bfa6dbd 100644 --- a/internal/engine/sqlite/convert.go +++ b/internal/engine/sqlite/convert.go @@ -496,7 +496,7 @@ func (c *cc) getCols(core *parser.Select_coreContext) []ast.Node { continue } - if col.AS_() != nil { + if col.Column_alias() != nil { name := identifier(col.Column_alias().GetText()) target.Name = &name } From 115fefe6a875cc9ac1b05eab74b4a9ac996ee131 Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Wed, 2 Aug 2023 17:01:56 +0900 Subject: [PATCH 2/3] test: update endtoend --- .../testdata/column_as/sqlite/go/models.go | 4 -- .../testdata/column_as/sqlite/go/query.sql.go | 51 ++++++++++--------- .../testdata/column_as/sqlite/query.sql | 7 +-- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/internal/endtoend/testdata/column_as/sqlite/go/models.go b/internal/endtoend/testdata/column_as/sqlite/go/models.go index 1799cf3af6..e57c7500db 100644 --- a/internal/endtoend/testdata/column_as/sqlite/go/models.go +++ b/internal/endtoend/testdata/column_as/sqlite/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Email string -} diff --git a/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go b/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go index da7bd6bbe9..a7afa41d53 100644 --- a/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go +++ b/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go @@ -9,29 +9,34 @@ import ( "context" ) -const columnAs = `-- name: ColumnAs :many -SELECT email AS id FROM foo +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y ` -func (q *Queries) ColumnAs(ctx context.Context) ([]string, error) { - rows, err := q.db.QueryContext(ctx, columnAs) - if err != nil { - return nil, err - } - defer rows.Close() - var items []string - for rows.Next() { - var id string - 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 +type WithAsRow struct { + X int64 + Y int64 +} + +func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) { + row := q.db.QueryRowContext(ctx, withAs) + var i WithAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int64 + Y int64 +} + +func (q *Queries) WithoutAs(ctx context.Context) (WithoutAsRow, error) { + row := q.db.QueryRowContext(ctx, withoutAs) + var i WithoutAsRow + err := row.Scan(&i.X, &i.Y) + return i, err } diff --git a/internal/endtoend/testdata/column_as/sqlite/query.sql b/internal/endtoend/testdata/column_as/sqlite/query.sql index 4b055cc896..c7282d88ef 100644 --- a/internal/endtoend/testdata/column_as/sqlite/query.sql +++ b/internal/endtoend/testdata/column_as/sqlite/query.sql @@ -1,4 +1,5 @@ -CREATE TABLE foo (email text not null); +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; -/* name: ColumnAs :many */ -SELECT email AS id FROM foo; +-- name: WithoutAs :one +SELECT 1 x, 2 y; From ae8709b64eb5bf01f27ed7e91644aabb8d327ad9 Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Thu, 3 Aug 2023 01:51:03 +0900 Subject: [PATCH 3/3] test: update endtoend --- .../testdata/column_as/mysql/go/models.go | 4 -- .../testdata/column_as/mysql/go/query.sql.go | 51 ++++++++++--------- .../testdata/column_as/mysql/query.sql | 7 +-- .../column_as/postgresql/pgx/v4/go/models.go | 4 -- .../postgresql/pgx/v4/go/query.sql.go | 48 +++++++++-------- .../column_as/postgresql/pgx/v4/query.sql | 7 +-- .../column_as/postgresql/pgx/v5/go/models.go | 4 -- .../postgresql/pgx/v5/go/query.sql.go | 48 +++++++++-------- .../column_as/postgresql/pgx/v5/query.sql | 7 +-- .../column_as/postgresql/stdlib/go/models.go | 4 -- .../postgresql/stdlib/go/query.sql.go | 51 ++++++++++--------- .../column_as/postgresql/stdlib/query.sql | 7 +-- 12 files changed, 128 insertions(+), 114 deletions(-) diff --git a/internal/endtoend/testdata/column_as/mysql/go/models.go b/internal/endtoend/testdata/column_as/mysql/go/models.go index 1799cf3af6..e57c7500db 100644 --- a/internal/endtoend/testdata/column_as/mysql/go/models.go +++ b/internal/endtoend/testdata/column_as/mysql/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Email string -} diff --git a/internal/endtoend/testdata/column_as/mysql/go/query.sql.go b/internal/endtoend/testdata/column_as/mysql/go/query.sql.go index da7bd6bbe9..9c0f512ba6 100644 --- a/internal/endtoend/testdata/column_as/mysql/go/query.sql.go +++ b/internal/endtoend/testdata/column_as/mysql/go/query.sql.go @@ -9,29 +9,34 @@ import ( "context" ) -const columnAs = `-- name: ColumnAs :many -SELECT email AS id FROM foo +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y ` -func (q *Queries) ColumnAs(ctx context.Context) ([]string, error) { - rows, err := q.db.QueryContext(ctx, columnAs) - if err != nil { - return nil, err - } - defer rows.Close() - var items []string - for rows.Next() { - var id string - 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 +type WithAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) { + row := q.db.QueryRowContext(ctx, withAs) + var i WithAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithoutAs(ctx context.Context) (WithoutAsRow, error) { + row := q.db.QueryRowContext(ctx, withoutAs) + var i WithoutAsRow + err := row.Scan(&i.X, &i.Y) + return i, err } diff --git a/internal/endtoend/testdata/column_as/mysql/query.sql b/internal/endtoend/testdata/column_as/mysql/query.sql index 4b055cc896..35014456bb 100644 --- a/internal/endtoend/testdata/column_as/mysql/query.sql +++ b/internal/endtoend/testdata/column_as/mysql/query.sql @@ -1,4 +1,5 @@ -CREATE TABLE foo (email text not null); +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; -/* name: ColumnAs :many */ -SELECT email AS id FROM foo; +-- name: WithoutAs :one +SELECT 1 x, 2 y; \ No newline at end of file diff --git a/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/models.go b/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/models.go index 1799cf3af6..e57c7500db 100644 --- a/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/models.go +++ b/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Email string -} diff --git a/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/query.sql.go index ca2b6e2495..d0a54ab63c 100644 --- a/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/query.sql.go +++ b/internal/endtoend/testdata/column_as/postgresql/pgx/v4/go/query.sql.go @@ -9,26 +9,34 @@ import ( "context" ) -const columnAs = `-- name: ColumnAs :many -SELECT email AS id FROM foo +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y ` -func (q *Queries) ColumnAs(ctx context.Context) ([]string, error) { - rows, err := q.db.Query(ctx, columnAs) - if err != nil { - return nil, err - } - defer rows.Close() - var items []string - for rows.Next() { - var id string - 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 +type WithAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) { + row := q.db.QueryRow(ctx, withAs) + var i WithAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithoutAs(ctx context.Context) (WithoutAsRow, error) { + row := q.db.QueryRow(ctx, withoutAs) + var i WithoutAsRow + err := row.Scan(&i.X, &i.Y) + return i, err } diff --git a/internal/endtoend/testdata/column_as/postgresql/pgx/v4/query.sql b/internal/endtoend/testdata/column_as/postgresql/pgx/v4/query.sql index 339627fd50..35014456bb 100644 --- a/internal/endtoend/testdata/column_as/postgresql/pgx/v4/query.sql +++ b/internal/endtoend/testdata/column_as/postgresql/pgx/v4/query.sql @@ -1,4 +1,5 @@ -CREATE TABLE foo (email text not null); +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; --- name: ColumnAs :many -SELECT email AS id FROM foo; +-- name: WithoutAs :one +SELECT 1 x, 2 y; \ No newline at end of file diff --git a/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/models.go b/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/models.go index 1799cf3af6..e57c7500db 100644 --- a/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/models.go +++ b/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Email string -} diff --git a/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/query.sql.go index ca2b6e2495..d0a54ab63c 100644 --- a/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/column_as/postgresql/pgx/v5/go/query.sql.go @@ -9,26 +9,34 @@ import ( "context" ) -const columnAs = `-- name: ColumnAs :many -SELECT email AS id FROM foo +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y ` -func (q *Queries) ColumnAs(ctx context.Context) ([]string, error) { - rows, err := q.db.Query(ctx, columnAs) - if err != nil { - return nil, err - } - defer rows.Close() - var items []string - for rows.Next() { - var id string - 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 +type WithAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) { + row := q.db.QueryRow(ctx, withAs) + var i WithAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithoutAs(ctx context.Context) (WithoutAsRow, error) { + row := q.db.QueryRow(ctx, withoutAs) + var i WithoutAsRow + err := row.Scan(&i.X, &i.Y) + return i, err } diff --git a/internal/endtoend/testdata/column_as/postgresql/pgx/v5/query.sql b/internal/endtoend/testdata/column_as/postgresql/pgx/v5/query.sql index 339627fd50..35014456bb 100644 --- a/internal/endtoend/testdata/column_as/postgresql/pgx/v5/query.sql +++ b/internal/endtoend/testdata/column_as/postgresql/pgx/v5/query.sql @@ -1,4 +1,5 @@ -CREATE TABLE foo (email text not null); +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; --- name: ColumnAs :many -SELECT email AS id FROM foo; +-- name: WithoutAs :one +SELECT 1 x, 2 y; \ No newline at end of file diff --git a/internal/endtoend/testdata/column_as/postgresql/stdlib/go/models.go b/internal/endtoend/testdata/column_as/postgresql/stdlib/go/models.go index 1799cf3af6..e57c7500db 100644 --- a/internal/endtoend/testdata/column_as/postgresql/stdlib/go/models.go +++ b/internal/endtoend/testdata/column_as/postgresql/stdlib/go/models.go @@ -5,7 +5,3 @@ package querytest import () - -type Foo struct { - Email string -} diff --git a/internal/endtoend/testdata/column_as/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/column_as/postgresql/stdlib/go/query.sql.go index da7bd6bbe9..9c0f512ba6 100644 --- a/internal/endtoend/testdata/column_as/postgresql/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/column_as/postgresql/stdlib/go/query.sql.go @@ -9,29 +9,34 @@ import ( "context" ) -const columnAs = `-- name: ColumnAs :many -SELECT email AS id FROM foo +const withAs = `-- name: WithAs :one +SELECT 1 AS x, 2 AS y ` -func (q *Queries) ColumnAs(ctx context.Context) ([]string, error) { - rows, err := q.db.QueryContext(ctx, columnAs) - if err != nil { - return nil, err - } - defer rows.Close() - var items []string - for rows.Next() { - var id string - 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 +type WithAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) { + row := q.db.QueryRowContext(ctx, withAs) + var i WithAsRow + err := row.Scan(&i.X, &i.Y) + return i, err +} + +const withoutAs = `-- name: WithoutAs :one +SELECT 1 x, 2 y +` + +type WithoutAsRow struct { + X int32 + Y int32 +} + +func (q *Queries) WithoutAs(ctx context.Context) (WithoutAsRow, error) { + row := q.db.QueryRowContext(ctx, withoutAs) + var i WithoutAsRow + err := row.Scan(&i.X, &i.Y) + return i, err } diff --git a/internal/endtoend/testdata/column_as/postgresql/stdlib/query.sql b/internal/endtoend/testdata/column_as/postgresql/stdlib/query.sql index 339627fd50..35014456bb 100644 --- a/internal/endtoend/testdata/column_as/postgresql/stdlib/query.sql +++ b/internal/endtoend/testdata/column_as/postgresql/stdlib/query.sql @@ -1,4 +1,5 @@ -CREATE TABLE foo (email text not null); +-- name: WithAs :one +SELECT 1 AS x, 2 AS y; --- name: ColumnAs :many -SELECT email AS id FROM foo; +-- name: WithoutAs :one +SELECT 1 x, 2 y; \ No newline at end of file