feat: ParseDatabaseType receive tbls column

main
sudo pacman -Syu 2022-11-07 00:35:44 +07:00
parent 0bf8b52ffd
commit 6f4457605b
No known key found for this signature in database
GPG Key ID: D6CB5C6C567C47B0
2 changed files with 11 additions and 12 deletions

View File

@ -7,31 +7,30 @@ import (
"time" "time"
"github.com/brianvoe/gofakeit/v6" "github.com/brianvoe/gofakeit/v6"
tblsschema "github.com/k1LoW/tbls/schema"
) )
var ErrNotSupportDatabaseType = errors.New("not support database type") var ErrNotSupportDatabaseType = errors.New("not support database type")
// varchar(123) func ParseDatabaseType(column *tblsschema.Column) (DatabaseType, error) {
// timestamp
func ParseDatabaseType(databaseTypeStr string) (DatabaseType, error) {
switch { switch {
case strings.HasPrefix(strings.ToLower(databaseTypeStr), "varchar"): case strings.HasPrefix(strings.ToLower(column.Type), "varchar"):
dtVarchar := DTVarchar{} dtVarchar := DTVarchar{}
if _, err := fmt.Sscanf(databaseTypeStr, "varchar(%d)", &dtVarchar.Length); err != nil { if _, err := fmt.Sscanf(column.Type, "varchar(%d)", &dtVarchar.Length); err != nil {
return nil, fmt.Errorf("fmt: failed to sscanf [%s]: %w", databaseTypeStr, err) return nil, fmt.Errorf("fmt: failed to sscanf [%s]: %w", column.Type, err)
} }
return &dtVarchar, nil return &dtVarchar, nil
case strings.HasPrefix(strings.ToLower(databaseTypeStr), "bigint"): case strings.HasPrefix(strings.ToLower(column.Type), "bigint"):
return &DTBigint{}, nil return &DTBigint{}, nil
case strings.HasPrefix(strings.ToLower(databaseTypeStr), "int"): case strings.HasPrefix(strings.ToLower(column.Type), "int"):
return &DTInt{}, nil return &DTInt{}, nil
case strings.EqualFold(databaseTypeStr, "timestamp"): case strings.EqualFold(column.Type, "timestamp"):
return &DTTimestamp{}, nil return &DTTimestamp{}, nil
case strings.EqualFold(databaseTypeStr, "json"): case strings.EqualFold(column.Type, "json"):
return &DTJSON{}, nil return &DTJSON{}, nil
default: 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)
} }
} }

View File

@ -225,7 +225,7 @@ func (p *populator) prepareInsert(tableName string) ([]string, []string, []func(
questionMarks := make([]string, 0, len(table.Columns)) questionMarks := make([]string, 0, len(table.Columns))
argFns := make([]func() any, 0, len(table.Columns)) argFns := make([]func() any, 0, len(table.Columns))
for _, column := range table.Columns { for _, column := range table.Columns {
dt, err := ParseDatabaseType(column.Type) dt, err := ParseDatabaseType(column)
if err != nil { if err != nil {
return nil, nil, nil, fmt.Errorf("failed to parse database type [%s]: %w", column.Type, err) return nil, nil, nil, fmt.Errorf("failed to parse database type [%s]: %w", column.Type, err)
} }