Skip to content

Commit f78aaca

Browse files
committed
Generate nullable subselect statements
1 parent d354c0e commit f78aaca

File tree

28 files changed

+705
-2
lines changed

28 files changed

+705
-2
lines changed

internal/compiler/output_columns.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,11 @@ func (c *Compiler) outputColumns(qc *QueryCatalog, node ast.Node) ([]*Column, er
377377
if res.Name != nil {
378378
first.Name = *res.Name
379379
}
380+
381+
if hasWhereOrHavingClause(n) {
382+
first.NotNull = false
383+
}
384+
380385
cols = append(cols, first)
381386

382387
default:
@@ -713,3 +718,17 @@ func findColumnForRef(ref *ast.ColumnRef, tables []*Table, targetList *ast.List)
713718

714719
return nil
715720
}
721+
722+
// hasWhereOrHavingClause returns true if the statement contains WHERE or HAVING clause
723+
func hasWhereOrHavingClause(node ast.Node) bool {
724+
stmt := node.(*ast.SelectStmt)
725+
726+
if _, isTODO := stmt.WhereClause.(*ast.TODO); stmt.WhereClause != nil && !isTODO {
727+
return true
728+
}
729+
if _, isTODO := stmt.HavingClause.(*ast.TODO); stmt.HavingClause != nil && !isTODO {
730+
return true
731+
}
732+
733+
return false
734+
}

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)