feat(writers): quote default values based on SQL column type
Some checks failed
CI / Test (1.24) (push) Successful in -22m47s
CI / Lint (push) Failing after -24m34s
Integration Tests / Integration Tests (push) Successful in -25m0s
CI / Test (1.25) (push) Successful in -22m35s
CI / Build (push) Successful in -24m43s
Release / Build and Release (push) Successful in -21m46s
Some checks failed
CI / Test (1.24) (push) Successful in -22m47s
CI / Lint (push) Failing after -24m34s
Integration Tests / Integration Tests (push) Successful in -25m0s
CI / Test (1.25) (push) Successful in -22m35s
CI / Build (push) Successful in -24m43s
Release / Build and Release (push) Successful in -21m46s
Bun and GORM struct tags now emit quoted defaults for string/date/time/UUID columns (e.g. default:'disconnected') and unquoted defaults for numeric and boolean columns (e.g. default:0, default:true). Function-call expressions such as now() or gen_random_uuid() are never quoted regardless of type. Adds QuoteDefaultValue(value, sqlType) helper in pkg/writers and updates both type mappers and the bun writer tests accordingly.
This commit is contained in:
@@ -208,8 +208,8 @@ func (tm *TypeMapper) BuildBunTag(column *models.Column, table *models.Table) st
|
||||
|
||||
// Default value
|
||||
if column.Default != nil {
|
||||
// Sanitize default value to remove backticks
|
||||
safeDefault := writers.SanitizeStructTagValue(fmt.Sprintf("%v", column.Default))
|
||||
// Sanitize default value to remove backticks, then quote based on column type
|
||||
safeDefault := writers.QuoteDefaultValue(writers.SanitizeStructTagValue(fmt.Sprintf("%v", column.Default)), column.Type)
|
||||
parts = append(parts, fmt.Sprintf("default:%s", safeDefault))
|
||||
}
|
||||
|
||||
|
||||
@@ -312,7 +312,7 @@ func TestWriter_MultipleReferencesToSameTable(t *testing.T) {
|
||||
fieldName string
|
||||
tag string
|
||||
}{
|
||||
{"RelRIDFilepointerRequestOrgAPIEvents", "join:id_filepointer=rid_filepointer_request"}, // Has many via rid_filepointer_request
|
||||
{"RelRIDFilepointerRequestOrgAPIEvents", "join:id_filepointer=rid_filepointer_request"}, // Has many via rid_filepointer_request
|
||||
{"RelRIDFilepointerResponseOrgAPIEvents", "join:id_filepointer=rid_filepointer_response"}, // Has many via rid_filepointer_response
|
||||
}
|
||||
|
||||
@@ -461,10 +461,10 @@ func TestWriter_MultipleHasManyRelationships(t *testing.T) {
|
||||
|
||||
// Verify all has-many relationships have unique names
|
||||
hasManyExpectations := []string{
|
||||
"RelRIDAPIProviderOrgLogins", // Has many via Login
|
||||
"RelRIDAPIProviderOrgLogins", // Has many via Login
|
||||
"RelRIDAPIProviderOrgFilepointers", // Has many via Filepointer
|
||||
"RelRIDAPIProviderOrgAPIEvents", // Has many via APIEvent
|
||||
"RelRIDOwner", // Has one via rid_owner
|
||||
"RelRIDAPIProviderOrgAPIEvents", // Has many via APIEvent
|
||||
"RelRIDOwner", // Has one via rid_owner
|
||||
}
|
||||
|
||||
for _, exp := range hasManyExpectations {
|
||||
@@ -615,14 +615,44 @@ func TestTypeMapper_BuildBunTag(t *testing.T) {
|
||||
want: []string{"email,", "type:varchar(255),", "nullzero,"},
|
||||
},
|
||||
{
|
||||
name: "with default",
|
||||
name: "with default string",
|
||||
column: &models.Column{
|
||||
Name: "status",
|
||||
Type: "text",
|
||||
NotNull: true,
|
||||
Default: "active",
|
||||
},
|
||||
want: []string{"status,", "type:text,", "default:active,"},
|
||||
want: []string{"status,", "type:text,", "default:'active',"},
|
||||
},
|
||||
{
|
||||
name: "with default integer",
|
||||
column: &models.Column{
|
||||
Name: "retries",
|
||||
Type: "integer",
|
||||
NotNull: true,
|
||||
Default: "0",
|
||||
},
|
||||
want: []string{"retries,", "type:integer,", "default:0,"},
|
||||
},
|
||||
{
|
||||
name: "with default boolean",
|
||||
column: &models.Column{
|
||||
Name: "active",
|
||||
Type: "boolean",
|
||||
NotNull: true,
|
||||
Default: "true",
|
||||
},
|
||||
want: []string{"active,", "type:boolean,", "default:true,"},
|
||||
},
|
||||
{
|
||||
name: "with default function call",
|
||||
column: &models.Column{
|
||||
Name: "created_at",
|
||||
Type: "timestamp",
|
||||
NotNull: true,
|
||||
Default: "now()",
|
||||
},
|
||||
want: []string{"created_at,", "type:timestamp,", "default:now(),"},
|
||||
},
|
||||
{
|
||||
name: "auto increment with AutoIncrement flag",
|
||||
|
||||
Reference in New Issue
Block a user