diff --git a/internal/compiler/output_columns.go b/internal/compiler/output_columns.go index 26a421f025..9080079848 100644 --- a/internal/compiler/output_columns.go +++ b/internal/compiler/output_columns.go @@ -502,18 +502,25 @@ func (c *Compiler) sourceTables(qc *QueryCatalog, node ast.Node) ([]*Table, erro switch n := item.(type) { case *ast.RangeFunction: - // If the function or table can't be found, don't error out. There - // are many queries that depend on functions unknown to sqlc. var funcCall *ast.FuncCall switch f := n.Functions.Items[0].(type) { case *ast.List: - funcCall = f.Items[0].(*ast.FuncCall) + switch fi := f.Items[0].(type) { + case *ast.FuncCall: + funcCall = fi + case *ast.SQLValueFunction: + continue // TODO handle this correctly + default: + continue + } case *ast.FuncCall: funcCall = f default: return nil, fmt.Errorf("sourceTables: unsupported function call type %T", n.Functions.Items[0]) } + // If the function or table can't be found, don't error out. There + // are many queries that depend on functions unknown to sqlc. fn, err := qc.GetFunc(funcCall.Func) if err != nil { continue diff --git a/internal/endtoend/testdata/func_return/postgresql/pgx/v4/go/query.sql.go b/internal/endtoend/testdata/func_return/postgresql/pgx/v4/go/query.sql.go index c02a12fcee..ebdbe62c21 100644 --- a/internal/endtoend/testdata/func_return/postgresql/pgx/v4/go/query.sql.go +++ b/internal/endtoend/testdata/func_return/postgresql/pgx/v4/go/query.sql.go @@ -42,6 +42,20 @@ func (q *Queries) GenerateSeries(ctx context.Context, arg GenerateSeriesParams) return items, nil } +const getDate = `-- name: GetDate :one +SELECT from CURRENT_DATE +` + +type GetDateRow struct { +} + +func (q *Queries) GetDate(ctx context.Context) (GetDateRow, error) { + row := q.db.QueryRow(ctx, getDate) + var i GetDateRow + err := row.Scan() + return i, err +} + const getUsers = `-- name: GetUsers :many SELECT id, first_name FROM users_func() diff --git a/internal/endtoend/testdata/func_return/postgresql/pgx/v4/query.sql b/internal/endtoend/testdata/func_return/postgresql/pgx/v4/query.sql index 291c520acd..c2fe0b941b 100644 --- a/internal/endtoend/testdata/func_return/postgresql/pgx/v4/query.sql +++ b/internal/endtoend/testdata/func_return/postgresql/pgx/v4/query.sql @@ -7,4 +7,7 @@ WHERE first_name != ''; /* name: GenerateSeries :many */ SELECT ($1::inet) + i FROM generate_series(0, $2::int) AS i -LIMIT 1; \ No newline at end of file +LIMIT 1; + +/* name: GetDate :one */ +SELECT * from CURRENT_DATE; \ No newline at end of file diff --git a/internal/endtoend/testdata/func_return/postgresql/pgx/v5/go/query.sql.go b/internal/endtoend/testdata/func_return/postgresql/pgx/v5/go/query.sql.go index 66de6767b2..eccd27dfa6 100644 --- a/internal/endtoend/testdata/func_return/postgresql/pgx/v5/go/query.sql.go +++ b/internal/endtoend/testdata/func_return/postgresql/pgx/v5/go/query.sql.go @@ -41,6 +41,20 @@ func (q *Queries) GenerateSeries(ctx context.Context, arg GenerateSeriesParams) return items, nil } +const getDate = `-- name: GetDate :one +SELECT from CURRENT_DATE +` + +type GetDateRow struct { +} + +func (q *Queries) GetDate(ctx context.Context) (GetDateRow, error) { + row := q.db.QueryRow(ctx, getDate) + var i GetDateRow + err := row.Scan() + return i, err +} + const getUsers = `-- name: GetUsers :many SELECT id, first_name FROM users_func() diff --git a/internal/endtoend/testdata/func_return/postgresql/pgx/v5/query.sql b/internal/endtoend/testdata/func_return/postgresql/pgx/v5/query.sql index 291c520acd..c2fe0b941b 100644 --- a/internal/endtoend/testdata/func_return/postgresql/pgx/v5/query.sql +++ b/internal/endtoend/testdata/func_return/postgresql/pgx/v5/query.sql @@ -7,4 +7,7 @@ WHERE first_name != ''; /* name: GenerateSeries :many */ SELECT ($1::inet) + i FROM generate_series(0, $2::int) AS i -LIMIT 1; \ No newline at end of file +LIMIT 1; + +/* name: GetDate :one */ +SELECT * from CURRENT_DATE; \ No newline at end of file diff --git a/internal/endtoend/testdata/func_return/postgresql/stdlib/go/query.sql.go b/internal/endtoend/testdata/func_return/postgresql/stdlib/go/query.sql.go index 5d58491f5c..2788b8b686 100644 --- a/internal/endtoend/testdata/func_return/postgresql/stdlib/go/query.sql.go +++ b/internal/endtoend/testdata/func_return/postgresql/stdlib/go/query.sql.go @@ -45,6 +45,20 @@ func (q *Queries) GenerateSeries(ctx context.Context, arg GenerateSeriesParams) return items, nil } +const getDate = `-- name: GetDate :one +SELECT from CURRENT_DATE +` + +type GetDateRow struct { +} + +func (q *Queries) GetDate(ctx context.Context) (GetDateRow, error) { + row := q.db.QueryRowContext(ctx, getDate) + var i GetDateRow + err := row.Scan() + return i, err +} + const getUsers = `-- name: GetUsers :many SELECT id, first_name FROM users_func() diff --git a/internal/endtoend/testdata/func_return/postgresql/stdlib/query.sql b/internal/endtoend/testdata/func_return/postgresql/stdlib/query.sql index 291c520acd..c2fe0b941b 100644 --- a/internal/endtoend/testdata/func_return/postgresql/stdlib/query.sql +++ b/internal/endtoend/testdata/func_return/postgresql/stdlib/query.sql @@ -7,4 +7,7 @@ WHERE first_name != ''; /* name: GenerateSeries :many */ SELECT ($1::inet) + i FROM generate_series(0, $2::int) AS i -LIMIT 1; \ No newline at end of file +LIMIT 1; + +/* name: GetDate :one */ +SELECT * from CURRENT_DATE; \ No newline at end of file