Skip to content

Commit a905a74

Browse files
authored
Primary key constraint forces not null (#851) (#860)
1 parent 8ae6b48 commit a905a74

File tree

7 files changed

+107
-1
lines changed

7 files changed

+107
-1
lines changed

internal/endtoend/testdata/primary_key_later/go/db.go

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

internal/endtoend/testdata/primary_key_later/go/models.go

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

internal/endtoend/testdata/primary_key_later/go/queries.sql.go

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-- name: GetAuthor :one
2+
SELECT
3+
*
4+
FROM
5+
authors
6+
WHERE
7+
id = $1
8+
LIMIT 1;
9+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE authors (
2+
id bigserial,
3+
name text NOT NULL,
4+
bio text,
5+
PRIMARY KEY (id)
6+
);
7+
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+
"engine": "postgresql",
6+
"path": "go",
7+
"name": "primary_key_later",
8+
"schema": "schema.sql",
9+
"queries": "queries.sql"
10+
}
11+
]
12+
}

internal/engine/postgresql/parse.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,17 @@ func translate(node nodes.Node) (ast.Node, error) {
399399
Name: name,
400400
IfNotExists: n.IfNotExists,
401401
}
402+
primaryKey := make(map[string]bool)
403+
for _, elt := range n.TableElts.Items {
404+
switch n := elt.(type) {
405+
case nodes.Constraint:
406+
if n.Contype == nodes.CONSTR_PRIMARY {
407+
for _, item := range n.Keys.Items {
408+
primaryKey[item.(nodes.String).Str] = true
409+
}
410+
}
411+
}
412+
}
402413
for _, elt := range n.TableElts.Items {
403414
switch n := elt.(type) {
404415
case nodes.ColumnDef:
@@ -409,7 +420,7 @@ func translate(node nodes.Node) (ast.Node, error) {
409420
create.Cols = append(create.Cols, &ast.ColumnDef{
410421
Colname: *n.Colname,
411422
TypeName: tn,
412-
IsNotNull: isNotNull(n),
423+
IsNotNull: isNotNull(n) || primaryKey[*n.Colname],
413424
IsArray: isArray(n.TypeName),
414425
})
415426
}

0 commit comments

Comments
 (0)