From a382049f26326d3adbf1b111499d73dd025f921e Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 19 Jun 2017 21:11:17 +0800 Subject: [PATCH] add reserved mode and bug fix --- engine.go | 35 ++++++++++++----------------------- xorm_test.go | 2 +- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/engine.go b/engine.go index 0f2045c2..76e59b22 100644 --- a/engine.go +++ b/engine.go @@ -30,7 +30,7 @@ type QuoteMode int const ( QuoteAddAlways QuoteMode = iota QuoteNoAdd - //QuoteAddNonReserved + QuoteAddReserved ) // Engine is the major struct of xorm, it means a database manager. @@ -141,18 +141,10 @@ func (engine *Engine) QuoteStr() string { // Quote Use QuoteStr quote the string sql func (engine *Engine) Quote(value string) string { - value = strings.TrimSpace(value) - if len(value) == 0 { - return value - } - - if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' { - return value - } - - value = strings.Replace(value, ".", engine.QuoteStr()+"."+engine.QuoteStr(), -1) - - return engine.QuoteStr() + value + engine.QuoteStr() + var buf string + b := bytes.NewBufferString(buf) + engine.QuoteTo(b, value) + return b.String() } // QuoteTo quotes string and writes into the buffer @@ -166,18 +158,15 @@ func (engine *Engine) QuoteTo(buf *bytes.Buffer, value string) { return } - if engine.QuoteStr() != "" { - if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' { - buf.WriteString(value) - return - } + v := strings.Trim(value, "`"+engine.dialect.QuoteStr()) + if engine.QuoteMode == QuoteNoAdd || + (engine.QuoteMode == QuoteAddReserved && !engine.dialect.IsReserved(v)) { + buf.WriteString(v) + return } - value = strings.Replace(value, ".", engine.QuoteStr()+"."+engine.QuoteStr(), -1) - - buf.WriteString(engine.QuoteStr()) - buf.WriteString(value) - buf.WriteString(engine.QuoteStr()) + v = strings.Replace(v, ".", engine.QuoteStr()+"."+engine.QuoteStr(), -1) + buf.WriteString(engine.dialect.Quote(v)) } func (engine *Engine) quote(sql string) string { diff --git a/xorm_test.go b/xorm_test.go index 92ed043d..24062d53 100644 --- a/xorm_test.go +++ b/xorm_test.go @@ -36,7 +36,7 @@ func createEngine(dbType, connStr string) error { testEngine.ShowSQL(*showSQL) testEngine.logger.SetLevel(core.LOG_DEBUG) - //testEngine.QuoteMode = QuoteNoAdd + //testEngine.QuoteMode = QuoteAddReserved } tables, err := testEngine.DBMetas()