This commit is contained in:
Lunny Xiao 2023-09-16 22:33:07 +08:00
parent f234597448
commit 52ab5c818f
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
1 changed files with 32 additions and 25 deletions

View File

@ -637,37 +637,44 @@ func (statement *Statement) ConvertSQLOrArgs(sqlOrArgs ...interface{}) (string,
func (statement *Statement) convertSQLOrArgs(sqlOrArgs ...interface{}) (string, []interface{}, error) { func (statement *Statement) convertSQLOrArgs(sqlOrArgs ...interface{}) (string, []interface{}, error) {
switch sqlOrArgs[0].(type) { switch sqlOrArgs[0].(type) {
case string: case string:
if len(sqlOrArgs) > 1 { if len(sqlOrArgs) <= 1 {
newArgs := make([]interface{}, 0, len(sqlOrArgs)-1) return sqlOrArgs[0].(string), sqlOrArgs[1:], nil
for _, arg := range sqlOrArgs[1:] { }
if v, ok := arg.(time.Time); ok {
newArgs = append(newArgs, v.In(statement.defaultTimeZone).Format("2006-01-02 15:04:05")) newArgs := make([]interface{}, 0, len(sqlOrArgs)-1)
} else if v, ok := arg.(*time.Time); ok && v != nil { for _, arg := range sqlOrArgs[1:] {
newArgs = append(newArgs, v.In(statement.defaultTimeZone).Format("2006-01-02 15:04:05")) if v, ok := arg.(time.Time); ok {
} else if v, ok := arg.(convert.ConversionTo); ok { newArgs = append(newArgs, v.In(statement.defaultTimeZone).Format("2006-01-02 15:04:05"))
r, err := v.ToDB() } else if v, ok := arg.(*time.Time); ok && v != nil {
if err != nil { newArgs = append(newArgs, v.In(statement.defaultTimeZone).Format("2006-01-02 15:04:05"))
return "", nil, err } else if v, ok := arg.(convert.ConversionTo); ok {
} r, err := v.ToDB()
if r != nil { if err != nil {
// for nvarchar column on mssql, bytes have to be converted as ucs-2 external of driver return "", nil, err
// for binary column, a string will be converted as bytes directly. So we have to }
// convert bytes as string if r != nil {
if statement.dialect.URI().DBType == schemas.MSSQL { // for nvarchar column on mssql, bytes have to be converted as ucs-2 external of driver
newArgs = append(newArgs, string(r)) // for binary column, a string will be converted as bytes directly. So we have to
} else { // convert bytes as string
newArgs = append(newArgs, r) if statement.dialect.URI().DBType == schemas.MSSQL {
} newArgs = append(newArgs, string(r))
} else { } else {
newArgs = append(newArgs, nil) newArgs = append(newArgs, r)
} }
} else { } else {
newArgs = append(newArgs, arg) newArgs = append(newArgs, nil)
} }
} else if v, ok := arg.(driver.Valuer); ok {
vv, err := v.Value()
if err != nil {
return "", nil, err
}
newArgs = append(newArgs, vv)
} else {
newArgs = append(newArgs, arg)
} }
return sqlOrArgs[0].(string), newArgs, nil
} }
return sqlOrArgs[0].(string), sqlOrArgs[1:], nil return sqlOrArgs[0].(string), newArgs, nil
case *builder.Builder: case *builder.Builder:
return sqlOrArgs[0].(*builder.Builder).ToSQL() return sqlOrArgs[0].(*builder.Builder).ToSQL()
case builder.Builder: case builder.Builder: