improved Sync2 method
This commit is contained in:
parent
64790ba262
commit
0fa2433cf9
13
engine.go
13
engine.go
|
@ -1116,19 +1116,22 @@ func (engine *Engine) Sync2(beans ...interface{}) error {
|
|||
}
|
||||
|
||||
if oriCol != nil {
|
||||
if col.SQLType.Name != oriCol.SQLType.Name {
|
||||
if col.SQLType.Name == core.Text &&
|
||||
oriCol.SQLType.Name == core.Varchar {
|
||||
expectedType := engine.dialect.SqlType(col)
|
||||
//curType := oriCol.SQLType.Name
|
||||
curType := engine.dialect.SqlType(oriCol)
|
||||
if expectedType != curType {
|
||||
if expectedType == core.Text &&
|
||||
curType == core.Varchar {
|
||||
// currently only support mysql
|
||||
if engine.dialect.DBType() == core.MYSQL {
|
||||
_, err = engine.Exec(engine.dialect.ModifyColumnSql(table.Name, col))
|
||||
} else {
|
||||
engine.LogWarnf("Table %s Column %s db type is %s, struct type is %s\n",
|
||||
table.Name, col.Name, oriCol.SQLType.Name, col.SQLType.Name)
|
||||
table.Name, col.Name, curType, expectedType)
|
||||
}
|
||||
} else {
|
||||
engine.LogWarnf("Table %s Column %s db type is %s, struct type is %s",
|
||||
table.Name, col.Name, oriCol.SQLType.Name, col.SQLType.Name)
|
||||
table.Name, col.Name, curType, expectedType)
|
||||
}
|
||||
}
|
||||
if col.Default != oriCol.Default {
|
||||
|
|
|
@ -60,7 +60,7 @@ func (db *mysql) SqlType(c *core.Column) string {
|
|||
for v, _ := range c.EnumOptions {
|
||||
opts += fmt.Sprintf(",'%v'", v)
|
||||
}
|
||||
res += strings.TrimLeft(opts,",")
|
||||
res += strings.TrimLeft(opts, ",")
|
||||
res += ")"
|
||||
case core.Set: //mysql set
|
||||
res = core.Set
|
||||
|
@ -69,7 +69,7 @@ func (db *mysql) SqlType(c *core.Column) string {
|
|||
for v, _ := range c.SetOptions {
|
||||
opts += fmt.Sprintf(",'%v'", v)
|
||||
}
|
||||
res += strings.TrimLeft(opts,",")
|
||||
res += strings.TrimLeft(opts, ",")
|
||||
res += ")"
|
||||
default:
|
||||
res = t
|
||||
|
@ -78,6 +78,11 @@ func (db *mysql) SqlType(c *core.Column) string {
|
|||
var hasLen1 bool = (c.Length > 0)
|
||||
var hasLen2 bool = (c.Length2 > 0)
|
||||
|
||||
if res == core.BigInt && !hasLen1 && !hasLen2 {
|
||||
c.Length = 20
|
||||
hasLen1 = true
|
||||
}
|
||||
|
||||
if hasLen2 {
|
||||
res += "(" + strconv.Itoa(c.Length) + "," + strconv.Itoa(c.Length2) + ")"
|
||||
} else if hasLen1 {
|
||||
|
|
|
@ -177,7 +177,8 @@ WHERE c.relkind = 'r'::char AND c.relname = $1 AND f.attnum > 0 ORDER BY f.attnu
|
|||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
//fmt.Println(args,colName, isNullable, dataType,maxLenStr, colDefault, numPrecision, numRadix,isPK ,isUnique)
|
||||
|
||||
//fmt.Println(args, colName, isNullable, dataType, maxLenStr, colDefault, numPrecision, numRadix, isPK, isUnique)
|
||||
var maxLen int
|
||||
if maxLenStr != nil {
|
||||
maxLen, err = strconv.Atoi(*maxLenStr)
|
||||
|
@ -220,7 +221,7 @@ WHERE c.relkind = 'r'::char AND c.relname = $1 AND f.attnum > 0 ORDER BY f.attnu
|
|||
|
||||
col.Length = maxLen
|
||||
|
||||
if col.SQLType.IsText() {
|
||||
if col.SQLType.IsText() || col.SQLType.IsTime() {
|
||||
if col.Default != "" {
|
||||
col.Default = "'" + col.Default + "'"
|
||||
} else {
|
||||
|
|
|
@ -996,9 +996,8 @@ func (session *Session) Get(bean interface{}) (bool, error) {
|
|||
err = session.row2Bean(rawRows, fields, len(fields), bean)
|
||||
}
|
||||
return true, err
|
||||
} else {
|
||||
return false, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// Count counts the records. bean's non-empty fields
|
||||
|
|
Loading…
Reference in New Issue