gitea

Development moved to Codeberg

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
  112. 112
  113. 113
  114. 114
  115. 115
  116. 116
  117. 117
  118. 118
  119. 119
  120. 120
// Copyright 2016 The XORM Authors. All rights reserved.
// Use of this source code is governed by a BSD
// license that can be found in the LICENSE file.

/*

Package builder is a simple and powerful sql builder for Go.

Make sure you have installed Go 1.1+ and then:

    go get xorm.io/builder

WARNNING: Currently, only query conditions are supported. Below is the supported conditions.

1. Eq is a redefine of a map, you can give one or more conditions to Eq

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Eq{"a":1})
    // a=? [1]
    sql, args, _ := ToSQL(Eq{"b":"c"}.And(Eq{"c": 0}))
    // b=? AND c=? ["c", 0]
    sql, args, _ := ToSQL(Eq{"b":"c", "c":0})
    // b=? AND c=? ["c", 0]
    sql, args, _ := ToSQL(Eq{"b":"c"}.Or(Eq{"b":"d"}))
    // b=? OR b=? ["c", "d"]
    sql, args, _ := ToSQL(Eq{"b": []string{"c", "d"}})
    // b IN (?,?) ["c", "d"]
    sql, args, _ := ToSQL(Eq{"b": 1, "c":[]int{2, 3}})
    // b=? AND c IN (?,?) [1, 2, 3]

2. Neq is the same to Eq

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Neq{"a":1})
    // a<>? [1]
    sql, args, _ := ToSQL(Neq{"b":"c"}.And(Neq{"c": 0}))
    // b<>? AND c<>? ["c", 0]
    sql, args, _ := ToSQL(Neq{"b":"c", "c":0})
    // b<>? AND c<>? ["c", 0]
    sql, args, _ := ToSQL(Neq{"b":"c"}.Or(Neq{"b":"d"}))
    // b<>? OR b<>? ["c", "d"]
    sql, args, _ := ToSQL(Neq{"b": []string{"c", "d"}})
    // b NOT IN (?,?) ["c", "d"]
    sql, args, _ := ToSQL(Neq{"b": 1, "c":[]int{2, 3}})
    // b<>? AND c NOT IN (?,?) [1, 2, 3]

3. Gt, Gte, Lt, Lte

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Gt{"a", 1}.And(Gte{"b", 2}))
    // a>? AND b>=? [1, 2]
    sql, args, _ := ToSQL(Lt{"a", 1}.Or(Lte{"b", 2}))
    // a<? OR b<=? [1, 2]

4. Like

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Like{"a", "c"})
    // a LIKE ? [%c%]

5. Expr you can customerize your sql with Expr

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Expr("a = ? ", 1))
    // a = ? [1]
    sql, args, _ := ToSQL(Eq{"a": Expr("select id from table where c = ?", 1)})
    // a=(select id from table where c = ?) [1]

6. In and NotIn

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(In("a", 1, 2, 3))
    // a IN (?,?,?) [1,2,3]
    sql, args, _ := ToSQL(In("a", []int{1, 2, 3}))
    // a IN (?,?,?) [1,2,3]
    sql, args, _ := ToSQL(In("a", Expr("select id from b where c = ?", 1))))
    // a IN (select id from b where c = ?) [1]

7. IsNull and NotNull

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(IsNull{"a"})
    // a IS NULL []
    sql, args, _ := ToSQL(NotNull{"b"})
     // b IS NOT NULL []

8. And(conds ...Cond), And can connect one or more condtions via AND

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(And(Eq{"a":1}, Like{"b", "c"}, Neq{"d", 2}))
    // a=? AND b LIKE ? AND d<>? [1, %c%, 2]

9. Or(conds ...Cond), Or can connect one or more conditions via Or

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Or(Eq{"a":1}, Like{"b", "c"}, Neq{"d", 2}))
    // a=? OR b LIKE ? OR d<>? [1, %c%, 2]
    sql, args, _ := ToSQL(Or(Eq{"a":1}, And(Like{"b", "c"}, Neq{"d", 2})))
    // a=? OR (b LIKE ? AND d<>?) [1, %c%, 2]

10. Between

    import . "xorm.io/builder"

    sql, args, _ := ToSQL(Between("a", 1, 2))
    // a BETWEEN 1 AND 2

11. define yourself conditions
Since Cond is a interface, you can define yourself conditions and compare with them
*/
package builder