From 45452832a18d557659ce2d1728f0574a31293fa8 Mon Sep 17 00:00:00 2001 From: Randell Date: Wed, 22 Jan 2025 19:40:46 -0700 Subject: [PATCH 1/3] Update for nullable enum --- internal/core/gen.go | 18 +++++++++++++++--- internal/tmpl/ktmodels.tmpl | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/internal/core/gen.go b/internal/core/gen.go index 5a7ac0a..775e7d8 100644 --- a/internal/core/gen.go +++ b/internal/core/gen.go @@ -79,9 +79,17 @@ func jdbcSet(t ktType, idx int, name string) string { } if t.IsEnum { if t.Engine == "postgresql" { - return fmt.Sprintf("stmt.setObject(%d, %s.value, %s)", idx, name, "Types.OTHER") + if t.IsNull { + return fmt.Sprintf("stmt.setObject(%d, %s?.value, %s)", idx, name, "Types.OTHER") + } else { + return fmt.Sprintf("stmt.setObject(%d, %s.value, %s)", idx, name, "Types.OTHER") + } } else { - return fmt.Sprintf("stmt.setString(%d, %s.value)", idx, name) + if t.IsNull { + return fmt.Sprintf("stmt.setString(%d, %s?.value)", idx, name) + } else { + return fmt.Sprintf("stmt.setString(%d, %s.value)", idx, name) + } } } if t.IsArray { @@ -155,7 +163,11 @@ func jdbcGet(t ktType, idx int) string { return fmt.Sprintf(`(results.getArray(%d).array as Array).map { v -> %s.lookup(v)!! }.toList()`, idx, t.Name) } if t.IsEnum { - return fmt.Sprintf("%s.lookup(results.getString(%d))!!", t.Name, idx) + if t.IsNull { + return fmt.Sprintf("%s.lookup(results.getString(%d))", t.Name, idx) + } else { + return fmt.Sprintf("%s.lookup(results.getString(%d))!!", t.Name, idx) + } } if t.IsArray { return fmt.Sprintf(`(results.getArray(%d).array as Array<%s>).toList()`, idx, t.Name) diff --git a/internal/tmpl/ktmodels.tmpl b/internal/tmpl/ktmodels.tmpl index 42a8906..0a8615e 100644 --- a/internal/tmpl/ktmodels.tmpl +++ b/internal/tmpl/ktmodels.tmpl @@ -19,7 +19,7 @@ enum class {{.Name}}(val value: String) { companion object { private val map = {{.Name}}.values().associateBy({{.Name}}::value) - fun lookup(value: String) = map[value] + fun lookup(value: String?) = map[value] } } {{end}} From 87b89ef6e42979e5f640a071d6a3d703bb6fbf1c Mon Sep 17 00:00:00 2001 From: Randell Date: Wed, 23 Apr 2025 15:15:11 -0600 Subject: [PATCH 2/3] If a primitive column is nullable, handle correctly --- .../postgresql/query/checking_account.sql | 0 .../schema/0004_checking_account.sql | 0 internal/core/gen.go | 51 ++++++++++++++----- 3 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 examples/src/main/resources/ondeck/postgresql/query/checking_account.sql create mode 100644 examples/src/main/resources/ondeck/postgresql/schema/0004_checking_account.sql diff --git a/examples/src/main/resources/ondeck/postgresql/query/checking_account.sql b/examples/src/main/resources/ondeck/postgresql/query/checking_account.sql new file mode 100644 index 0000000..e69de29 diff --git a/examples/src/main/resources/ondeck/postgresql/schema/0004_checking_account.sql b/examples/src/main/resources/ondeck/postgresql/schema/0004_checking_account.sql new file mode 100644 index 0000000..e69de29 diff --git a/internal/core/gen.go b/internal/core/gen.go index 5a7ac0a..fbb6b3e 100644 --- a/internal/core/gen.go +++ b/internal/core/gen.go @@ -96,7 +96,11 @@ func jdbcSet(t ktType, idx int, name string) string { if t.IsUUID() { return fmt.Sprintf("stmt.setObject(%d, %s)", idx, name) } - return fmt.Sprintf("stmt.set%s(%d, %s)", t.Name, idx, name) + if t.IsNull && t.PrimitiveType != "" { + return fmt.Sprintf("if (%[3]s != null) stmt.set%[1]s(%[2]d, %[3]s) else stmt.setNull(%[2]d, Types.%[4]s)", t.Name, idx, name, t.PrimitiveType) + } else { + return fmt.Sprintf("stmt.set%s(%d, %s)", t.Name, idx, name) + } } type Params struct { @@ -320,12 +324,13 @@ func BuildDataClasses(conf Config, req *plugin.GenerateRequest) []Struct { } type ktType struct { - Name string - IsEnum bool - IsArray bool - IsNull bool - DataType string - Engine string + Name string + IsEnum bool + IsArray bool + IsNull bool + PrimitiveType string + DataType string + Engine string } func (t ktType) String() string { @@ -374,12 +379,13 @@ func (t ktType) IsBigDecimal() bool { func makeType(req *plugin.GenerateRequest, col *plugin.Column) ktType { typ, isEnum := ktInnerType(req, col) return ktType{ - Name: typ, - IsEnum: isEnum, - IsArray: col.IsArray, - IsNull: !col.NotNull, - DataType: sdk.DataType(col.Type), - Engine: req.Settings.Engine, + Name: typ, + IsEnum: isEnum, + IsArray: col.IsArray, + IsNull: !col.NotNull, + PrimitiveType: ktPrimitiveType(typ), + DataType: sdk.DataType(col.Type), + Engine: req.Settings.Engine, } } @@ -395,6 +401,25 @@ func ktInnerType(req *plugin.GenerateRequest, col *plugin.Column) (string, bool) } } +func ktPrimitiveType(t string) string { + switch t { + case "Int": + return "INTEGER" + case "Double": + return "DOUBLE" + case "Long": + return "BIGINT" + case "Short": + return "SMALLINT" + case "Float": + return "REAL" + case "Boolean": + return "BOOLEAN" + default: + return "" + } +} + type goColumn struct { id int *plugin.Column From 69e74473106b844537faf05cf3a84767934f6bee Mon Sep 17 00:00:00 2001 From: Randell Date: Wed, 23 Apr 2025 15:28:33 -0600 Subject: [PATCH 3/3] Revert "If a primitive column is nullable, handle correctly" This reverts commit 87b89ef6e42979e5f640a071d6a3d703bb6fbf1c. --- .../postgresql/query/checking_account.sql | 0 .../schema/0004_checking_account.sql | 0 internal/core/gen.go | 51 +++++-------------- 3 files changed, 13 insertions(+), 38 deletions(-) delete mode 100644 examples/src/main/resources/ondeck/postgresql/query/checking_account.sql delete mode 100644 examples/src/main/resources/ondeck/postgresql/schema/0004_checking_account.sql diff --git a/examples/src/main/resources/ondeck/postgresql/query/checking_account.sql b/examples/src/main/resources/ondeck/postgresql/query/checking_account.sql deleted file mode 100644 index e69de29..0000000 diff --git a/examples/src/main/resources/ondeck/postgresql/schema/0004_checking_account.sql b/examples/src/main/resources/ondeck/postgresql/schema/0004_checking_account.sql deleted file mode 100644 index e69de29..0000000 diff --git a/internal/core/gen.go b/internal/core/gen.go index 3b74529..775e7d8 100644 --- a/internal/core/gen.go +++ b/internal/core/gen.go @@ -104,11 +104,7 @@ func jdbcSet(t ktType, idx int, name string) string { if t.IsUUID() { return fmt.Sprintf("stmt.setObject(%d, %s)", idx, name) } - if t.IsNull && t.PrimitiveType != "" { - return fmt.Sprintf("if (%[3]s != null) stmt.set%[1]s(%[2]d, %[3]s) else stmt.setNull(%[2]d, Types.%[4]s)", t.Name, idx, name, t.PrimitiveType) - } else { - return fmt.Sprintf("stmt.set%s(%d, %s)", t.Name, idx, name) - } + return fmt.Sprintf("stmt.set%s(%d, %s)", t.Name, idx, name) } type Params struct { @@ -336,13 +332,12 @@ func BuildDataClasses(conf Config, req *plugin.GenerateRequest) []Struct { } type ktType struct { - Name string - IsEnum bool - IsArray bool - IsNull bool - PrimitiveType string - DataType string - Engine string + Name string + IsEnum bool + IsArray bool + IsNull bool + DataType string + Engine string } func (t ktType) String() string { @@ -391,13 +386,12 @@ func (t ktType) IsBigDecimal() bool { func makeType(req *plugin.GenerateRequest, col *plugin.Column) ktType { typ, isEnum := ktInnerType(req, col) return ktType{ - Name: typ, - IsEnum: isEnum, - IsArray: col.IsArray, - IsNull: !col.NotNull, - PrimitiveType: ktPrimitiveType(typ), - DataType: sdk.DataType(col.Type), - Engine: req.Settings.Engine, + Name: typ, + IsEnum: isEnum, + IsArray: col.IsArray, + IsNull: !col.NotNull, + DataType: sdk.DataType(col.Type), + Engine: req.Settings.Engine, } } @@ -413,25 +407,6 @@ func ktInnerType(req *plugin.GenerateRequest, col *plugin.Column) (string, bool) } } -func ktPrimitiveType(t string) string { - switch t { - case "Int": - return "INTEGER" - case "Double": - return "DOUBLE" - case "Long": - return "BIGINT" - case "Short": - return "SMALLINT" - case "Float": - return "REAL" - case "Boolean": - return "BOOLEAN" - default: - return "" - } -} - type goColumn struct { id int *plugin.Column