From 91ea7427fe0a0ab8bde541a6eeda86cb3e2cdf17 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 26 Mar 2017 20:37:04 +0800 Subject: [PATCH] add cond test and fix missing quote on sum --- session_cond_test.go | 95 ++++++++++++++++++++++++++++++++++++++++++++ statement.go | 2 +- xorm.go | 2 +- 3 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 session_cond_test.go diff --git a/session_cond_test.go b/session_cond_test.go new file mode 100644 index 00000000..d5a93924 --- /dev/null +++ b/session_cond_test.go @@ -0,0 +1,95 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "testing" + + "github.com/go-xorm/builder" + "github.com/stretchr/testify/assert" +) + +func TestBuilder(t *testing.T) { + assert.NoError(t, prepareEngine()) + + const ( + OpEqual int = iota + OpGreatThan + OpLessThan + ) + + type Condition struct { + Id int64 + TableName string + ColName string + Op int + Value string + } + + err := testEngine.CreateTables(&Condition{}) + assert.NoError(t, err) + + _, err = testEngine.Insert(&Condition{TableName: "table1", ColName: "col1", Op: OpEqual, Value: "1"}) + assert.NoError(t, err) + + var cond Condition + has, err := testEngine.Where(builder.Eq{"col_name": "col1"}).Get(&cond) + assert.NoError(t, err) + assert.Equal(t, true, has, "records should exist") + + has, err = testEngine.Where(builder.Eq{"col_name": "col1"}. + And(builder.Eq{"op": OpEqual})). + NoAutoCondition(). + Get(&cond) + assert.NoError(t, err) + assert.Equal(t, true, has, "records should exist") + + has, err = testEngine.Where(builder.Eq{"col_name": "col1", "op": OpEqual, "value": "1"}). + NoAutoCondition(). + Get(&cond) + assert.NoError(t, err) + assert.Equal(t, true, has, "records should exist") + + has, err = testEngine.Where(builder.Eq{"col_name": "col1"}. + And(builder.Neq{"op": OpEqual})). + NoAutoCondition(). + Get(&cond) + assert.NoError(t, err) + assert.Equal(t, false, has, "records should not exist") + + var conds []Condition + err = testEngine.Where(builder.Eq{"col_name": "col1"}. + And(builder.Eq{"op": OpEqual})). + Find(&conds) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(conds), "records should exist") + + conds = make([]Condition, 0) + err = testEngine.Where(builder.Like{"col_name", "col"}).Find(&conds) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(conds), "records should exist") + + conds = make([]Condition, 0) + err = testEngine.Where(builder.Expr("col_name = ?", "col1")).Find(&conds) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(conds), "records should exist") + + conds = make([]Condition, 0) + err = testEngine.Where(builder.In("col_name", "col1", "col2")).Find(&conds) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(conds), "records should exist") + + // complex condtions + var where = builder.NewCond() + if true { + where = where.And(builder.Eq{"col_name": "col1"}) + where = where.Or(builder.And(builder.In("col_name", "col1", "col2"), builder.Expr("col_name = ?", "col1"))) + } + + conds = make([]Condition, 0) + err = testEngine.Where(where).Find(&conds) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(conds), "records should exist") +} diff --git a/statement.go b/statement.go index eeb49736..78c83661 100644 --- a/statement.go +++ b/statement.go @@ -1157,7 +1157,7 @@ func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (stri var sumStrs = make([]string, 0, len(columns)) for _, colName := range columns { - sumStrs = append(sumStrs, fmt.Sprintf("COALESCE(sum(%s),0)", colName)) + sumStrs = append(sumStrs, fmt.Sprintf("COALESCE(sum(%s),0)", statement.Engine.Quote(colName))) } condSQL, condArgs, _ := statement.genConds(bean) diff --git a/xorm.go b/xorm.go index facffd28..0d690804 100644 --- a/xorm.go +++ b/xorm.go @@ -17,7 +17,7 @@ import ( const ( // Version show the xorm's version - Version string = "0.6.1.0315" + Version string = "0.6.2.0326" ) func regDrvsNDialects() bool {