diff --git a/app_test.go b/app_test.go index abc14b4..db35fa2 100644 --- a/app_test.go +++ b/app_test.go @@ -21,12 +21,13 @@ type Base struct { type User struct { Base - Firstname string `json:"firstname"` - Lastname string `json:"lastname"` - Email string `json:"email"` - UserName string `gorm:"column:display_name" json:"userName"` - PersonSex string `json:"gender"` - Age uint `json:"age"` + Firstname string `json:"firstname"` + Lastname string `json:"lastname"` + Email string `json:"email"` + UserName string `gorm:"column:display_name" json:"userName"` + PersonSex string `json:"gender"` + Age uint `json:"age"` + Contributor bool `json:"contributor"` } func TestMain(m *testing.M) { @@ -458,3 +459,18 @@ func Test_QueryWithFilterPropertyDoesntMatchJsonProperty(t *testing.T) { assert.Equal(t, expectedSql, sql) } + +func Test_QueryWithFilterAndOrInColumnName(t *testing.T) { + query := Query{Filter: "contributor eq 'true'"} + + sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { + res, _, _ := Apply(tx.Model(&User{}), query, nil, nil, &[]User{}) + return res.Find(&[]User{}) + }) + + expectedSql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { + return tx.Model(&User{}).Where("LOWER(contributor) = LOWER('true')").Find(&[]User{}) + }) + + assert.Equal(t, expectedSql, sql) +} diff --git a/utils.go b/utils.go index ff6eb75..cc47e0f 100644 --- a/utils.go +++ b/utils.go @@ -22,7 +22,7 @@ func splitString(input string) []string { if char == '\'' { buffer.WriteRune(rune(char)) singleQuote = !singleQuote - } else if !singleQuote && (char == 'a' || char == 'o') && i+1 < len(input) && (input[i:i+3] == "and" || input[i:i+2] == "or") { + } else if !singleQuote && (char == 'a' || char == 'o') && i+1 < len(input) && (input[i-1:i+3] == " and" || input[i-1:i+2] == " or") { if buffer.Len() > 0 { result = append(result, strings.TrimSpace(buffer.String())) buffer.Reset()