Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 77436757c8 | |||
| 5e6f03e412 |
@@ -62,6 +62,17 @@ func (tm *TypeMapper) isSimpleType(sqlType string) bool {
|
||||
return simpleTypes[sqlType]
|
||||
}
|
||||
|
||||
// isSerialType checks if a SQL type is a serial type (auto-incrementing)
|
||||
func (tm *TypeMapper) isSerialType(sqlType string) bool {
|
||||
baseType := tm.extractBaseType(sqlType)
|
||||
serialTypes := map[string]bool{
|
||||
"serial": true,
|
||||
"bigserial": true,
|
||||
"smallserial": true,
|
||||
}
|
||||
return serialTypes[baseType]
|
||||
}
|
||||
|
||||
// baseGoType returns the base Go type for a SQL type (not null, simple types only)
|
||||
func (tm *TypeMapper) baseGoType(sqlType string) string {
|
||||
typeMap := map[string]string{
|
||||
@@ -122,10 +133,10 @@ func (tm *TypeMapper) bunGoType(sqlType string) string {
|
||||
"decimal": tm.sqlTypesAlias + ".SqlFloat64",
|
||||
|
||||
// Date/Time types
|
||||
"timestamp": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamp without time zone": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamp with time zone": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamptz": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamp": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"timestamp without time zone": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"timestamp with time zone": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"timestamptz": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"date": tm.sqlTypesAlias + ".SqlDate",
|
||||
"time": tm.sqlTypesAlias + ".SqlTime",
|
||||
"time without time zone": tm.sqlTypesAlias + ".SqlTime",
|
||||
@@ -190,6 +201,11 @@ func (tm *TypeMapper) BuildBunTag(column *models.Column, table *models.Table) st
|
||||
parts = append(parts, "pk")
|
||||
}
|
||||
|
||||
// Auto increment (for serial types or explicit auto_increment)
|
||||
if column.AutoIncrement || tm.isSerialType(column.Type) {
|
||||
parts = append(parts, "autoincrement")
|
||||
}
|
||||
|
||||
// Default value
|
||||
if column.Default != nil {
|
||||
// Sanitize default value to remove backticks
|
||||
|
||||
@@ -90,8 +90,8 @@ func TestWriter_WriteTable(t *testing.T) {
|
||||
}
|
||||
|
||||
// Verify Bun-specific elements
|
||||
if !strings.Contains(generated, "bun:\"id,type:bigint,pk,") {
|
||||
t.Errorf("Missing Bun-style primary key tag")
|
||||
if !strings.Contains(generated, "bun:\"id,type:bigint,pk,autoincrement,") {
|
||||
t.Errorf("Missing Bun-style primary key tag with autoincrement")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -567,8 +567,8 @@ func TestTypeMapper_SQLTypeToGoType_Bun(t *testing.T) {
|
||||
{"bigint", false, "resolvespec_common.SqlInt64"},
|
||||
{"varchar", true, "resolvespec_common.SqlString"}, // Bun uses sql types even for NOT NULL strings
|
||||
{"varchar", false, "resolvespec_common.SqlString"},
|
||||
{"timestamp", true, "resolvespec_common.SqlTime"},
|
||||
{"timestamp", false, "resolvespec_common.SqlTime"},
|
||||
{"timestamp", true, "resolvespec_common.SqlTimeStamp"},
|
||||
{"timestamp", false, "resolvespec_common.SqlTimeStamp"},
|
||||
{"date", false, "resolvespec_common.SqlDate"},
|
||||
{"boolean", true, "bool"},
|
||||
{"boolean", false, "resolvespec_common.SqlBool"},
|
||||
@@ -624,6 +624,37 @@ func TestTypeMapper_BuildBunTag(t *testing.T) {
|
||||
},
|
||||
want: []string{"status,", "type:text,", "default:active,"},
|
||||
},
|
||||
{
|
||||
name: "auto increment with AutoIncrement flag",
|
||||
column: &models.Column{
|
||||
Name: "id",
|
||||
Type: "bigint",
|
||||
NotNull: true,
|
||||
IsPrimaryKey: true,
|
||||
AutoIncrement: true,
|
||||
},
|
||||
want: []string{"id,", "type:bigint,", "pk,", "autoincrement,"},
|
||||
},
|
||||
{
|
||||
name: "serial type (auto-increment)",
|
||||
column: &models.Column{
|
||||
Name: "id",
|
||||
Type: "serial",
|
||||
NotNull: true,
|
||||
IsPrimaryKey: true,
|
||||
},
|
||||
want: []string{"id,", "type:serial,", "pk,", "autoincrement,"},
|
||||
},
|
||||
{
|
||||
name: "bigserial type (auto-increment)",
|
||||
column: &models.Column{
|
||||
Name: "id",
|
||||
Type: "bigserial",
|
||||
NotNull: true,
|
||||
IsPrimaryKey: true,
|
||||
},
|
||||
want: []string{"id,", "type:bigserial,", "pk,", "autoincrement,"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
@@ -158,10 +158,10 @@ func (tm *TypeMapper) nullableGoType(sqlType string) string {
|
||||
"decimal": tm.sqlTypesAlias + ".SqlFloat64",
|
||||
|
||||
// Date/Time types
|
||||
"timestamp": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamp without time zone": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamp with time zone": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamptz": tm.sqlTypesAlias + ".SqlTime",
|
||||
"timestamp": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"timestamp without time zone": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"timestamp with time zone": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"timestamptz": tm.sqlTypesAlias + ".SqlTimeStamp",
|
||||
"date": tm.sqlTypesAlias + ".SqlDate",
|
||||
"time": tm.sqlTypesAlias + ".SqlTime",
|
||||
"time without time zone": tm.sqlTypesAlias + ".SqlTime",
|
||||
|
||||
@@ -655,7 +655,7 @@ func TestTypeMapper_SQLTypeToGoType(t *testing.T) {
|
||||
{"varchar", true, "string"},
|
||||
{"varchar", false, "sql_types.SqlString"},
|
||||
{"timestamp", true, "time.Time"},
|
||||
{"timestamp", false, "sql_types.SqlTime"},
|
||||
{"timestamp", false, "sql_types.SqlTimeStamp"},
|
||||
{"boolean", true, "bool"},
|
||||
{"boolean", false, "sql_types.SqlBool"},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user