diff --git a/pkg/writers/bun/type_mapper.go b/pkg/writers/bun/type_mapper.go index 4cbbd83..e7a762d 100644 --- a/pkg/writers/bun/type_mapper.go +++ b/pkg/writers/bun/type_mapper.go @@ -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{ @@ -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 diff --git a/pkg/writers/bun/writer_test.go b/pkg/writers/bun/writer_test.go index c6c7a66..188efe2 100644 --- a/pkg/writers/bun/writer_test.go +++ b/pkg/writers/bun/writer_test.go @@ -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") } } @@ -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 {