diff --git a/internal/populatedb/database_type.go b/internal/populatedb/database_type.go index 9ccb3e4..4b8022b 100644 --- a/internal/populatedb/database_type.go +++ b/internal/populatedb/database_type.go @@ -7,31 +7,30 @@ import ( "time" "github.com/brianvoe/gofakeit/v6" + tblsschema "github.com/k1LoW/tbls/schema" ) var ErrNotSupportDatabaseType = errors.New("not support database type") -// varchar(123) -// timestamp -func ParseDatabaseType(databaseTypeStr string) (DatabaseType, error) { +func ParseDatabaseType(column *tblsschema.Column) (DatabaseType, error) { switch { - case strings.HasPrefix(strings.ToLower(databaseTypeStr), "varchar"): + case strings.HasPrefix(strings.ToLower(column.Type), "varchar"): dtVarchar := DTVarchar{} - if _, err := fmt.Sscanf(databaseTypeStr, "varchar(%d)", &dtVarchar.Length); err != nil { - return nil, fmt.Errorf("fmt: failed to sscanf [%s]: %w", databaseTypeStr, err) + if _, err := fmt.Sscanf(column.Type, "varchar(%d)", &dtVarchar.Length); err != nil { + return nil, fmt.Errorf("fmt: failed to sscanf [%s]: %w", column.Type, err) } return &dtVarchar, nil - case strings.HasPrefix(strings.ToLower(databaseTypeStr), "bigint"): + case strings.HasPrefix(strings.ToLower(column.Type), "bigint"): return &DTBigint{}, nil - case strings.HasPrefix(strings.ToLower(databaseTypeStr), "int"): + case strings.HasPrefix(strings.ToLower(column.Type), "int"): return &DTInt{}, nil - case strings.EqualFold(databaseTypeStr, "timestamp"): + case strings.EqualFold(column.Type, "timestamp"): return &DTTimestamp{}, nil - case strings.EqualFold(databaseTypeStr, "json"): + case strings.EqualFold(column.Type, "json"): return &DTJSON{}, nil default: - return nil, fmt.Errorf("not support database type [%s]: %w", databaseTypeStr, ErrNotSupportDatabaseType) + return nil, fmt.Errorf("not support database type [%s]: %w", column.Type, ErrNotSupportDatabaseType) } } diff --git a/internal/populatedb/populatedb.go b/internal/populatedb/populatedb.go index d67eb93..e292359 100644 --- a/internal/populatedb/populatedb.go +++ b/internal/populatedb/populatedb.go @@ -225,7 +225,7 @@ func (p *populator) prepareInsert(tableName string) ([]string, []string, []func( questionMarks := make([]string, 0, len(table.Columns)) argFns := make([]func() any, 0, len(table.Columns)) for _, column := range table.Columns { - dt, err := ParseDatabaseType(column.Type) + dt, err := ParseDatabaseType(column) if err != nil { return nil, nil, nil, fmt.Errorf("failed to parse database type [%s]: %w", column.Type, err) }