Skip to content

Commit f25b96a

Browse files
ryu-ichirohkyleconroy
authored andcommitted
Generate nullable subselect statements
1 parent 0b952b4 commit f25b96a

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:
@@ -764,3 +769,17 @@ func findColumnForRef(ref *ast.ColumnRef, tables []*Table, targetList *ast.List)
764769

765770
return nil
766771
}
772+
773+
// hasWhereOrHavingClause returns true if the statement contains WHERE or HAVING clause
774+
func hasWhereOrHavingClause(node ast.Node) bool {
775+
stmt := node.(*ast.SelectStmt)
776+
777+
if _, isTODO := stmt.WhereClause.(*ast.TODO); stmt.WhereClause != nil && !isTODO {
778+
return true
779+
}
780+
if _, isTODO := stmt.HavingClause.(*ast.TODO); stmt.HavingClause != nil && !isTODO {
781+
return true
782+
}
783+
784+
return false
785+
}

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)