fix bugs
This commit is contained in:
parent
8230e91572
commit
2489be134c
2
go.mod
2
go.mod
|
@ -16,5 +16,5 @@ require (
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.4.0
|
||||||
github.com/ziutek/mymysql v1.5.4
|
github.com/ziutek/mymysql v1.5.4
|
||||||
xorm.io/builder v0.3.6
|
xorm.io/builder v0.3.6
|
||||||
xorm.io/core v0.7.1
|
xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb
|
||||||
)
|
)
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -168,3 +168,5 @@ xorm.io/core v0.7.0 h1:hKxuOKWZNeiFQsSuGet/KV8HZ788hclvAl+7azx3tkM=
|
||||||
xorm.io/core v0.7.0/go.mod h1:TuOJjIVa7e3w/rN8tDcAvuLBMtwzdHPbyOzE6Gk1EUI=
|
xorm.io/core v0.7.0/go.mod h1:TuOJjIVa7e3w/rN8tDcAvuLBMtwzdHPbyOzE6Gk1EUI=
|
||||||
xorm.io/core v0.7.1 h1:I6x6Q6dYb67aDEoYFWr2t8UcKIYjJPyCHS+aXuj5V0Y=
|
xorm.io/core v0.7.1 h1:I6x6Q6dYb67aDEoYFWr2t8UcKIYjJPyCHS+aXuj5V0Y=
|
||||||
xorm.io/core v0.7.1/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM=
|
xorm.io/core v0.7.1/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM=
|
||||||
|
xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb h1:msX3zG3BPl8Ti+LDzP33/9K7BzO/WqFXk610K1kYKfo=
|
||||||
|
xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM=
|
||||||
|
|
|
@ -896,6 +896,7 @@ func TestInsertWhere(t *testing.T) {
|
||||||
|
|
||||||
inserted, err = testEngine.Table(new(InsertWhere)).Where("repo_id=?", 1).
|
inserted, err = testEngine.Table(new(InsertWhere)).Where("repo_id=?", 1).
|
||||||
SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
|
SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
|
||||||
|
SetExpr("repo_id", "1").
|
||||||
Insert(map[string]string{
|
Insert(map[string]string{
|
||||||
"name": "trest3",
|
"name": "trest3",
|
||||||
})
|
})
|
||||||
|
|
|
@ -49,10 +49,27 @@ func quoteNeeded(a interface{}) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertArg(arg interface{}) string {
|
func convertStringSingleQuote(arg string) string {
|
||||||
|
return "'" + strings.Replace(arg, "'", "''", -1) + "'"
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertString(arg string) string {
|
||||||
|
var buf strings.Builder
|
||||||
|
buf.WriteRune('\'')
|
||||||
|
for _, c := range arg {
|
||||||
|
if c == '\\' || c == '\'' {
|
||||||
|
buf.WriteRune('\\')
|
||||||
|
}
|
||||||
|
buf.WriteRune(c)
|
||||||
|
}
|
||||||
|
buf.WriteRune('\'')
|
||||||
|
return buf.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertArg(arg interface{}, convertFunc func(string) string) string {
|
||||||
if quoteNeeded(arg) {
|
if quoteNeeded(arg) {
|
||||||
argv := fmt.Sprintf("%v", arg)
|
argv := fmt.Sprintf("%v", arg)
|
||||||
return "'" + strings.Replace(strings.Replace(argv, `\`, `\\`, -1), `'`, `\'`, -1) + "'"
|
return convertFunc(argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("%v", arg)
|
return fmt.Sprintf("%v", arg)
|
||||||
|
@ -93,7 +110,11 @@ func (statement *Statement) writeArg(w *builder.BytesWriter, arg interface{}) er
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if _, err := w.WriteString(convertArg(arg)); err != nil {
|
var convertFunc = convertString
|
||||||
|
if statement.Engine.dialect.DBType() == core.SQLITE {
|
||||||
|
convertFunc = convertStringSingleQuote
|
||||||
|
}
|
||||||
|
if _, err := w.WriteString(convertArg(arg, convertFunc)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ func (exprs *exprParams) getByName(colName string) (exprParam, bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (exprs *exprParams) writeArgs(w *builder.BytesWriter) error {
|
func (exprs *exprParams) writeArgs(w *builder.BytesWriter) error {
|
||||||
for _, expr := range exprs.args {
|
for i, expr := range exprs.args {
|
||||||
switch arg := expr.(type) {
|
switch arg := expr.(type) {
|
||||||
case *builder.Builder:
|
case *builder.Builder:
|
||||||
if _, err := w.WriteString("("); err != nil {
|
if _, err := w.WriteString("("); err != nil {
|
||||||
|
@ -74,6 +74,11 @@ func (exprs *exprParams) writeArgs(w *builder.BytesWriter) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if i != len(exprs.args)-1 {
|
||||||
|
if _, err := w.WriteString(","); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue