Skip to content

Commit b8760ca

Browse files
committed
fix: now possible to write null values to primitive typed fields
1 parent f789cbc commit b8760ca

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

internal/codegen/queries.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func BuildQueriesFile(config core.Config, queryFilename string, queries []core.Q
126126
className += "Queries"
127127

128128
imports := make([]string, 0)
129-
imports = append(imports, "java.sql.Connection", "java.sql.SQLException", "java.sql.ResultSet")
129+
imports = append(imports, "java.sql.Connection", "java.sql.SQLException", "java.sql.ResultSet", "java.sql.Types")
130130

131131
var nonNullAnnotation string
132132
if config.NonNullAnnotation != "" {

internal/core/models.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ type QueryArg struct {
5151

5252
// TODO - enum types
5353
var literalBindTypes = []string{"Integer", "Long", "Short", "String", "Boolean", "Float", "Double", "BigDecimal"}
54+
var bindTypeToJavaSqlTypeConst = map[string]string{
55+
"Integer": "INTEGER",
56+
"Long": "BIGINT",
57+
"Short": "SMALLINT",
58+
"Boolean": "BOOLEAN",
59+
"Float": "REAL",
60+
"Double": "DOUBLE",
61+
}
5462

5563
func (q QueryArg) BindStmt() string {
5664
typeOnly := q.JavaType.Type[strings.LastIndex(q.JavaType.Type, ".")+1:]
@@ -63,11 +71,18 @@ func (q QueryArg) BindStmt() string {
6371
}
6472

6573
if slices.Contains(literalBindTypes, typeOnly) {
74+
javaSqlType, ok := bindTypeToJavaSqlTypeConst[typeOnly]
6675
// annoying special case
6776
if typeOnly == "Integer" {
6877
typeOnly = "Int"
6978
}
70-
return fmt.Sprintf("stmt.set%s(%d, %s);", typeOnly, q.Number, q.Name)
79+
rawSet := fmt.Sprintf("stmt.set%s(%d, %s);", typeOnly, q.Number, q.Name)
80+
81+
if !q.JavaType.IsNullable || !ok {
82+
return rawSet
83+
}
84+
85+
return fmt.Sprintf("%s == null ? stmt.setNull(%d, Types.%s) : %s", q.Name, q.Number, javaSqlType, rawSet)
7186
}
7287

7388
return fmt.Sprintf("stmt.setObject(%d, %s);", q.Number, q.Name)

tests/sqlc.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins:
33
- name: java
44
wasm:
55
url: file://sqlc-gen-java.wasm
6-
sha256: e51e6ef79772b317ee7fab2cb7675bc9959466df8a0438f5de9c1a257abb128f
6+
sha256: ec7a6b66a3c514f8b638d0f274295ca067722fa47c566f48c2d360687af6d1c6
77
sql:
88
- schema: src/main/resources/postgres/schema.sql
99
queries: src/main/resources/postgres/queries.sql

0 commit comments

Comments
 (0)