Add sqlschema
This commit is contained in:
parent
7ee0af3283
commit
f2f5133fc0
72
dialects/common/sqlschema/sqlschema.go
Normal file
72
dialects/common/sqlschema/sqlschema.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
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
|
||||||
|
}
|
19
dialects/common/sqlschema/types.go
Normal file
19
dialects/common/sqlschema/types.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package sqlschema
|
||||||
|
|
||||||
|
// ColumnType column type
|
||||||
|
type ColumnType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Boolean boolean type
|
||||||
|
Boolean ColumnType = "boolean"
|
||||||
|
// Integer integer type
|
||||||
|
Integer ColumnType = "boolean"
|
||||||
|
// Float float type
|
||||||
|
Float ColumnType = "float"
|
||||||
|
// String string type
|
||||||
|
String ColumnType = "string"
|
||||||
|
// Text long string type
|
||||||
|
Text ColumnType = "text"
|
||||||
|
// Binary binary type
|
||||||
|
Binary ColumnType = "binary"
|
||||||
|
)
|
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
"github.com/jinzhu/gorm/dialects/common/sqlbuilder"
|
"github.com/jinzhu/gorm/dialects/common/sqlbuilder"
|
||||||
"github.com/jinzhu/gorm/model"
|
"github.com/jinzhu/gorm/model"
|
||||||
|
"github.com/jinzhu/gorm/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Dialect Sqlite3 Dialect for GORM
|
// Dialect Sqlite3 Dialect for GORM
|
||||||
@ -319,3 +320,26 @@ func (dialect *Dialect) Delete(tx *gorm.DB) (err error) {
|
|||||||
_, err = dialect.DB.Exec(s.String(), args...)
|
_, err = dialect.DB.Exec(s.String(), args...)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AutoMigrate auto migrate database
|
||||||
|
func (dialect *Dialect) AutoMigrate(value interface{}) (err error) {
|
||||||
|
// create table
|
||||||
|
|
||||||
|
// create missed column
|
||||||
|
|
||||||
|
// safe upgrade some fields (like size, change data type)
|
||||||
|
|
||||||
|
// create missed foreign key
|
||||||
|
|
||||||
|
// create missed index
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dialect *Dialect) HasTable(name string) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dialect *Dialect) CreateTable(value interface{}) error {
|
||||||
|
s := schema.Parse(value)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user