session_cond_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright 2017 The Xorm Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package xorm
  5. import (
  6. "testing"
  7. "github.com/go-xorm/builder"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestBuilder(t *testing.T) {
  11. assert.NoError(t, prepareEngine())
  12. const (
  13. OpEqual int = iota
  14. OpGreatThan
  15. OpLessThan
  16. )
  17. type Condition struct {
  18. Id int64
  19. TableName string
  20. ColName string
  21. Op int
  22. Value string
  23. }
  24. err := testEngine.CreateTables(&Condition{})
  25. assert.NoError(t, err)
  26. _, err = testEngine.Insert(&Condition{TableName: "table1", ColName: "col1", Op: OpEqual, Value: "1"})
  27. assert.NoError(t, err)
  28. var cond Condition
  29. has, err := testEngine.Where(builder.Eq{"col_name": "col1"}).Get(&cond)
  30. assert.NoError(t, err)
  31. assert.Equal(t, true, has, "records should exist")
  32. has, err = testEngine.Where(builder.Eq{"col_name": "col1"}.
  33. And(builder.Eq{"op": OpEqual})).
  34. NoAutoCondition().
  35. Get(&cond)
  36. assert.NoError(t, err)
  37. assert.Equal(t, true, has, "records should exist")
  38. has, err = testEngine.Where(builder.Eq{"col_name": "col1", "op": OpEqual, "value": "1"}).
  39. NoAutoCondition().
  40. Get(&cond)
  41. assert.NoError(t, err)
  42. assert.Equal(t, true, has, "records should exist")
  43. has, err = testEngine.Where(builder.Eq{"col_name": "col1"}.
  44. And(builder.Neq{"op": OpEqual})).
  45. NoAutoCondition().
  46. Get(&cond)
  47. assert.NoError(t, err)
  48. assert.Equal(t, false, has, "records should not exist")
  49. var conds []Condition
  50. err = testEngine.Where(builder.Eq{"col_name": "col1"}.
  51. And(builder.Eq{"op": OpEqual})).
  52. Find(&conds)
  53. assert.NoError(t, err)
  54. assert.EqualValues(t, 1, len(conds), "records should exist")
  55. conds = make([]Condition, 0)
  56. err = testEngine.Where(builder.Like{"col_name", "col"}).Find(&conds)
  57. assert.NoError(t, err)
  58. assert.EqualValues(t, 1, len(conds), "records should exist")
  59. conds = make([]Condition, 0)
  60. err = testEngine.Where(builder.Expr("col_name = ?", "col1")).Find(&conds)
  61. assert.NoError(t, err)
  62. assert.EqualValues(t, 1, len(conds), "records should exist")
  63. conds = make([]Condition, 0)
  64. err = testEngine.Where(builder.In("col_name", "col1", "col2")).Find(&conds)
  65. assert.NoError(t, err)
  66. assert.EqualValues(t, 1, len(conds), "records should exist")
  67. // complex condtions
  68. var where = builder.NewCond()
  69. if true {
  70. where = where.And(builder.Eq{"col_name": "col1"})
  71. where = where.Or(builder.And(builder.In("col_name", "col1", "col2"), builder.Expr("col_name = ?", "col1")))
  72. }
  73. conds = make([]Condition, 0)
  74. err = testEngine.Where(where).Find(&conds)
  75. assert.NoError(t, err)
  76. assert.EqualValues(t, 1, len(conds), "records should exist")
  77. }