feat: ParseDatabaseType receive tbls column
parent
0bf8b52ffd
commit
6f4457605b
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue