This commit is contained in:
Lunny Xiao 2022-05-30 17:57:44 +08:00
parent 261e604c14
commit 5711ab9918
3 changed files with 31 additions and 6 deletions

View File

@ -4,7 +4,27 @@
package statements
import "xorm.io/builder"
import (
"xorm.io/builder"
"xorm.io/xorm/schemas"
)
type QuoteReplacer struct {
*builder.BytesWriter
quoter schemas.Quoter
}
func (q *QuoteReplacer) Write(p []byte) (n int, err error) {
c := q.quoter.Replace(string(p))
return q.BytesWriter.Builder.WriteString(c)
}
func (statement *Statement) quoteReplacer(w *builder.BytesWriter) *QuoteReplacer {
return &QuoteReplacer{
BytesWriter: w,
quoter: statement.dialect.Quoter(),
}
}
// Where add Where statement
func (statement *Statement) Where(query interface{}, args ...interface{}) *Statement {
@ -15,7 +35,7 @@ func (statement *Statement) Where(query interface{}, args ...interface{}) *State
func (statement *Statement) And(query interface{}, args ...interface{}) *Statement {
switch qr := query.(type) {
case string:
cond := builder.Expr(qr, args...)
cond := builder.Expr(statement.ReplaceQuote(qr), args...)
statement.cond = statement.cond.And(cond)
case map[string]interface{}:
cond := make(builder.Eq)

View File

@ -231,7 +231,7 @@ func (statement *Statement) genSelectSQL(columnStr string, needLimit, needOrderB
}
condWriter := builder.NewWriter()
if err := statement.cond.WriteTo(condWriter); err != nil {
if err := statement.cond.WriteTo(statement.quoteReplacer(condWriter)); err != nil {
return "", nil, err
}
@ -282,7 +282,7 @@ func (statement *Statement) genSelectSQL(columnStr string, needLimit, needOrderB
if _, err := fmt.Fprint(mssqlCondi, whereStr); err != nil {
return "", nil, err
}
if err := utils.WriteBuilder(mssqlCondi, condWriter); err != nil {
if err := utils.WriteBuilder(mssqlCondi, statement.quoteReplacer(condWriter)); err != nil {
return "", nil, err
}
}
@ -311,7 +311,7 @@ func (statement *Statement) genSelectSQL(columnStr string, needLimit, needOrderB
if _, err := fmt.Fprint(buf, whereStr); err != nil {
return "", nil, err
}
if err := utils.WriteBuilder(buf, condWriter); err != nil {
if err := utils.WriteBuilder(buf, statement.quoteReplacer(condWriter)); err != nil {
return "", nil, err
}
}

View File

@ -10,8 +10,13 @@ import (
"xorm.io/builder"
)
type BuildReader interface {
String() string
Args() []interface{}
}
// WriteBuilder writes writers to one
func WriteBuilder(w *builder.BytesWriter, inputs ...*builder.BytesWriter) error {
func WriteBuilder(w *builder.BytesWriter, inputs ...BuildReader) error {
for _, input := range inputs {
if _, err := fmt.Fprint(w, input.String()); err != nil {
return err