gorm/dialects/common/sqlschema/sqlschema.go
2018-03-18 23:12:40 +08:00

73 lines
1.2 KiB
Go

package sqlschema
import (
"database/sql"
"fmt"
"strconv"
"github.com/jinzhu/gorm/schema"
)
// SQLSchema sql schema
type SQLSchema struct {
*schema.Schema
Fields []*Field
}
// Field SQLSchema Field
type Field struct {
*schema.Field
DataType sql.NullString
Precision sql.NullInt64
Length sql.NullInt64
Nullable sql.NullBool
Unique sql.NullBool
}
// Parse parse sql schema
func Parse(dest interface{}) *SQLSchema {
s := schema.Parse(dest)
sqlSchema := &SQLSchema{
Schema: s,
}
for _, f := range s.Fields {
if f.IsNormal {
field := &Field{Field: f}
if s, ok := field.TagSettings["TYPE"]; ok {
_ = field.DataType.Scan(s)
}
if num, ok := field.TagSettings["SIZE"]; ok {
n, err := strconv.Atoi(num)
if err != nil {
fmt.Println(err)
}
_ = field.Length.Scan(n)
}
if num, ok := field.TagSettings["PRECISION"]; ok {
n, err := strconv.Atoi(num)
if err != nil {
fmt.Println(err)
}
_ = field.Precision.Scan(n)
}
if _, ok := field.TagSettings["NOT NULL"]; !ok {
_ = field.Nullable.Scan(true)
}
if _, ok := field.TagSettings["UNIQUE"]; ok {
_ = field.Nullable.Scan(true)
}
sqlSchema.Fields = append(sqlSchema.Fields, field)
}
}
return sqlSchema
}