Skip to content

Commit 03ea5bc

Browse files
committed
Generate nullable subselect statements
1 parent c13b156 commit 03ea5bc

File tree

26 files changed

+703
-0
lines changed

26 files changed

+703
-0
lines changed

internal/compiler/output_columns.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,11 @@ func outputColumns(qc *QueryCatalog, node ast.Node) ([]*Column, error) {
344344
if res.Name != nil {
345345
first.Name = *res.Name
346346
}
347+
348+
if hasWhereOrHavingClause(n) {
349+
first.NotNull = false
350+
}
351+
347352
cols = append(cols, first)
348353

349354
default:
@@ -633,3 +638,17 @@ func findColumnForRef(ref *ast.ColumnRef, tables []*Table, selectStatement *ast.
633638

634639
return nil
635640
}
641+
642+
// hasWhereOrHavingClause returns true if the statement contains WHERE or HAVING clause
643+
func hasWhereOrHavingClause(node ast.Node) bool {
644+
stmt := node.(*ast.SelectStmt)
645+
646+
if _, isTODO := stmt.WhereClause.(*ast.TODO); stmt.WhereClause != nil && !isTODO {
647+
return true
648+
}
649+
if _, isTODO := stmt.HavingClause.(*ast.TODO); stmt.HavingClause != nil && !isTODO {
650+
return true
651+
}
652+
653+
return false
654+
}

internal/endtoend/testdata/nullable_subselect/mysql/go/db.go

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/nullable_subselect/mysql/go/models.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/nullable_subselect/mysql/go/query.sql.go

Lines changed: 75 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE foo (a int not null, b int);
2+
3+
-- name: SubqueryWithWhereClause :many
4+
SELECT a, (SELECT COUNT(a) FROM foo WHERE a > 10) as "total" FROM foo;
5+
6+
-- name: SubqueryWithHavingClause :many
7+
SELECT a, (SELECT COUNT(a) FROM foo GROUP BY b HAVING COUNT(a) > 10) as "total" FROM foo;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "mysql",
7+
"name": "querytest",
8+
"schema": "query.sql",
9+
"queries": "query.sql"
10+
}
11+
]
12+
}

internal/endtoend/testdata/nullable_subselect/postgresql/pgx/v4/go/db.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/nullable_subselect/postgresql/pgx/v4/go/models.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/nullable_subselect/postgresql/pgx/v4/go/query.sql.go

Lines changed: 68 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE foo (a int not null, b int);
2+
3+
-- name: SubqueryWithWhereClause :many
4+
SELECT a, (SELECT COUNT(a) FROM foo WHERE a > 10) as "total" FROM foo;
5+
6+
-- name: SubqueryWithHavingClause :many
7+
SELECT a, (SELECT COUNT(a) FROM foo GROUP BY b HAVING COUNT(a) > 10) as "total" FROM foo;

0 commit comments

Comments
 (0)