ronin-sql 0.2.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. data/.document +4 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +1 -0
  4. data/.yardopts +1 -0
  5. data/COPYING.txt +623 -288
  6. data/{History.txt → ChangeLog.md} +33 -35
  7. data/Gemfile +25 -0
  8. data/README.md +110 -0
  9. data/Rakefile +30 -20
  10. data/bin/ronin-sql +18 -5
  11. data/gemspec.yml +16 -0
  12. data/lib/ronin/formatting/extensions/sql.rb +4 -3
  13. data/lib/ronin/formatting/extensions/sql/string.rb +83 -10
  14. data/lib/ronin/formatting/sql.rb +4 -3
  15. data/lib/ronin/sql.rb +5 -12
  16. data/lib/ronin/{code/sql/create_index.rb → sql/binary_expr.rb} +25 -18
  17. data/lib/ronin/sql/clause.rb +72 -0
  18. data/lib/ronin/sql/clauses.rb +297 -0
  19. data/lib/ronin/sql/emittable.rb +84 -0
  20. data/lib/ronin/sql/emitter.rb +375 -0
  21. data/lib/ronin/sql/field.rb +106 -0
  22. data/lib/ronin/{code/sql/as.rb → sql/fields.rb} +36 -17
  23. data/lib/ronin/{code/sql/binary_expr.rb → sql/function.rb} +27 -27
  24. data/lib/ronin/sql/functions.rb +989 -0
  25. data/lib/ronin/sql/injection.rb +125 -157
  26. data/lib/ronin/{code/sql/default_values_clause.rb → sql/literal.rb} +13 -11
  27. data/lib/ronin/sql/literals.rb +72 -0
  28. data/lib/ronin/sql/operators.rb +332 -0
  29. data/lib/ronin/sql/sql.rb +86 -0
  30. data/lib/ronin/sql/statement.rb +70 -0
  31. data/lib/ronin/sql/statement_list.rb +110 -0
  32. data/lib/ronin/sql/statements.rb +115 -0
  33. data/lib/ronin/{code/sql/desc.rb → sql/unary_expr.rb} +11 -11
  34. data/lib/ronin/sql/version.rb +5 -4
  35. data/ronin-sql.gemspec +61 -0
  36. data/spec/formatting/sql/string_spec.rb +172 -0
  37. data/spec/spec_helper.rb +1 -4
  38. data/spec/sql/binary_expr.rb +5 -0
  39. data/spec/sql/binary_expr_examples.rb +25 -0
  40. data/spec/sql/clause_examples.rb +43 -0
  41. data/spec/sql/clause_spec.rb +31 -0
  42. data/spec/sql/clauses_spec.rb +43 -0
  43. data/spec/sql/emittable_spec.rb +41 -0
  44. data/spec/sql/emitter_spec.rb +472 -0
  45. data/spec/sql/field_spec.rb +103 -0
  46. data/spec/sql/fields_spec.rb +40 -0
  47. data/spec/sql/function_examples.rb +30 -0
  48. data/spec/sql/function_spec.rb +25 -0
  49. data/spec/sql/functions_spec.rb +110 -0
  50. data/spec/sql/injection_spec.rb +233 -0
  51. data/spec/sql/literal_spec.rb +5 -0
  52. data/spec/sql/literals_spec.rb +46 -0
  53. data/spec/sql/operators_spec.rb +44 -0
  54. data/spec/sql/sql_spec.rb +18 -0
  55. data/spec/sql/statement_examples.rb +39 -0
  56. data/spec/sql/statement_list_spec.rb +48 -0
  57. data/spec/sql/statement_sql.rb +38 -0
  58. data/spec/sql/statements_spec.rb +22 -0
  59. data/spec/sql/unary_expr.rb +5 -0
  60. data/spec/sql/unary_expr_examples.rb +20 -0
  61. metadata +116 -217
  62. data.tar.gz.sig +0 -0
  63. data/Manifest.txt +0 -108
  64. data/README.txt +0 -112
  65. data/lib/ronin/code/sql.rb +0 -22
  66. data/lib/ronin/code/sql/add_column_clause.rb +0 -42
  67. data/lib/ronin/code/sql/alter_table.rb +0 -52
  68. data/lib/ronin/code/sql/asc.rb +0 -36
  69. data/lib/ronin/code/sql/between.rb +0 -66
  70. data/lib/ronin/code/sql/clause.rb +0 -35
  71. data/lib/ronin/code/sql/code.rb +0 -35
  72. data/lib/ronin/code/sql/common_dialect.rb +0 -66
  73. data/lib/ronin/code/sql/create.rb +0 -74
  74. data/lib/ronin/code/sql/create_table.rb +0 -44
  75. data/lib/ronin/code/sql/create_view.rb +0 -41
  76. data/lib/ronin/code/sql/delete.rb +0 -52
  77. data/lib/ronin/code/sql/dialect.rb +0 -282
  78. data/lib/ronin/code/sql/drop.rb +0 -55
  79. data/lib/ronin/code/sql/drop_index.rb +0 -41
  80. data/lib/ronin/code/sql/drop_table.rb +0 -41
  81. data/lib/ronin/code/sql/drop_view.rb +0 -41
  82. data/lib/ronin/code/sql/emittable.rb +0 -100
  83. data/lib/ronin/code/sql/exceptions.rb +0 -24
  84. data/lib/ronin/code/sql/exceptions/unknown_clause.rb +0 -29
  85. data/lib/ronin/code/sql/exceptions/unknown_dialect.rb +0 -29
  86. data/lib/ronin/code/sql/exceptions/unknown_statement.rb +0 -29
  87. data/lib/ronin/code/sql/expr.rb +0 -102
  88. data/lib/ronin/code/sql/field.rb +0 -101
  89. data/lib/ronin/code/sql/fields_clause.rb +0 -46
  90. data/lib/ronin/code/sql/from_clause.rb +0 -42
  91. data/lib/ronin/code/sql/function.rb +0 -53
  92. data/lib/ronin/code/sql/group_by_clause.rb +0 -46
  93. data/lib/ronin/code/sql/having_clause.rb +0 -46
  94. data/lib/ronin/code/sql/in.rb +0 -47
  95. data/lib/ronin/code/sql/injected_statement.rb +0 -100
  96. data/lib/ronin/code/sql/injection.rb +0 -203
  97. data/lib/ronin/code/sql/insert.rb +0 -54
  98. data/lib/ronin/code/sql/intersect_clause.rb +0 -42
  99. data/lib/ronin/code/sql/join_clause.rb +0 -123
  100. data/lib/ronin/code/sql/like.rb +0 -73
  101. data/lib/ronin/code/sql/limit_clause.rb +0 -42
  102. data/lib/ronin/code/sql/modifier.rb +0 -48
  103. data/lib/ronin/code/sql/offset_clause.rb +0 -42
  104. data/lib/ronin/code/sql/on_clause.rb +0 -55
  105. data/lib/ronin/code/sql/order_by_clause.rb +0 -42
  106. data/lib/ronin/code/sql/program.rb +0 -225
  107. data/lib/ronin/code/sql/rename_to_clause.rb +0 -42
  108. data/lib/ronin/code/sql/replace.rb +0 -54
  109. data/lib/ronin/code/sql/select.rb +0 -103
  110. data/lib/ronin/code/sql/set_clause.rb +0 -42
  111. data/lib/ronin/code/sql/statement.rb +0 -180
  112. data/lib/ronin/code/sql/token.rb +0 -62
  113. data/lib/ronin/code/sql/unary_expr.rb +0 -47
  114. data/lib/ronin/code/sql/union_all_clause.rb +0 -42
  115. data/lib/ronin/code/sql/union_clause.rb +0 -42
  116. data/lib/ronin/code/sql/update.rb +0 -52
  117. data/lib/ronin/code/sql/values_clause.rb +0 -46
  118. data/lib/ronin/code/sql/where_clause.rb +0 -42
  119. data/lib/ronin/sql/error.rb +0 -26
  120. data/lib/ronin/sql/error/error.rb +0 -62
  121. data/lib/ronin/sql/error/extensions.rb +0 -22
  122. data/lib/ronin/sql/error/extensions/string.rb +0 -77
  123. data/lib/ronin/sql/error/message.rb +0 -62
  124. data/lib/ronin/sql/error/pattern.rb +0 -104
  125. data/lib/ronin/sql/error/patterns.rb +0 -99
  126. data/lib/ronin/sql/extensions.rb +0 -22
  127. data/lib/ronin/sql/extensions/uri.rb +0 -22
  128. data/lib/ronin/sql/extensions/uri/http.rb +0 -107
  129. data/spec/code/sql/common_dialect_spec.rb +0 -205
  130. data/spec/code/sql/create_examples.rb +0 -19
  131. data/spec/code/sql/create_index_spec.rb +0 -25
  132. data/spec/code/sql/create_table_spec.rb +0 -27
  133. data/spec/code/sql/create_view_spec.rb +0 -16
  134. data/spec/code/sql/delete_spec.rb +0 -14
  135. data/spec/code/sql/drop_examples.rb +0 -10
  136. data/spec/code/sql/drop_index_spec.rb +0 -16
  137. data/spec/code/sql/drop_table_spec.rb +0 -16
  138. data/spec/code/sql/drop_view_spec.rb +0 -16
  139. data/spec/code/sql/has_default_values_clause_examples.rb +0 -10
  140. data/spec/code/sql/has_fields_clause_examples.rb +0 -15
  141. data/spec/code/sql/has_from_clause_examples.rb +0 -13
  142. data/spec/code/sql/has_values_clause_examples.rb +0 -15
  143. data/spec/code/sql/has_where_clause_examples.rb +0 -15
  144. data/spec/code/sql/insert_spec.rb +0 -21
  145. data/spec/code/sql/replace_spec.rb +0 -21
  146. data/spec/code/sql/select_spec.rb +0 -105
  147. data/spec/code/sql/update_spec.rb +0 -26
  148. data/spec/helpers/code.rb +0 -14
  149. data/spec/sql/error_spec.rb +0 -24
  150. data/spec/sql/extensions/uri/http_spec.rb +0 -34
  151. data/spec/sql_spec.rb +0 -9
  152. data/tasks/spec.rb +0 -10
  153. data/tasks/yard.rb +0 -13
  154. metadata.gz.sig +0 -0
@@ -1,8 +1,9 @@
1
1
  #
2
- # Ronin SQL - A Ronin library providing support for SQL related security
3
- # tasks.
2
+ # Ronin SQL - A Ruby DSL for crafting SQL Injections.
4
3
  #
5
- # Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
4
+ # Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin SQL.
6
7
  #
7
8
  # This program is free software; you can redistribute it and/or modify
8
9
  # it under the terms of the GNU General Public License as published by
data/lib/ronin/sql.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  #
2
- # Ronin SQL - A Ronin library providing support for SQL related security
3
- # tasks.
2
+ # Ronin SQL - A Ruby DSL for crafting SQL Injections.
4
3
  #
5
- # Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
4
+ # Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin SQL.
6
7
  #
7
8
  # This program is free software; you can redistribute it and/or modify
8
9
  # it under the terms of the GNU General Public License as published by
@@ -19,12 +20,4 @@
19
20
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
21
  #
21
22
 
22
- require 'ronin/sql/extensions'
23
- require 'ronin/sql/error'
24
- require 'ronin/sql/injection'
25
- require 'ronin/sql/version'
26
- require 'ronin/config'
27
-
28
- module Ronin
29
- Config.load :sql
30
- end
23
+ require 'ronin/sql/sql'
@@ -1,8 +1,9 @@
1
1
  #
2
- # Ronin SQL - A Ronin library providing support for SQL related security
3
- # tasks.
2
+ # Ronin SQL - A Ruby DSL for crafting SQL Injections.
4
3
  #
5
- # Copyright (c) 2007-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
4
+ # Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin SQL.
6
7
  #
7
8
  # This program is free software; you can redistribute it and/or modify
8
9
  # it under the terms of the GNU General Public License as published by
@@ -19,26 +20,32 @@
19
20
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
21
  #
21
22
 
22
- require 'ronin/code/sql/create'
23
- require 'ronin/code/sql/on_clause'
23
+ require 'ronin/sql/operators'
24
+ require 'ronin/sql/emittable'
24
25
 
25
26
  module Ronin
26
- module Code
27
- module SQL
28
- class CreateIndex < Create
29
-
30
- clause :on, OnClause
27
+ module SQL
28
+ #
29
+ # Represents a binary expression in SQL.
30
+ #
31
+ class BinaryExpr < Struct.new(:left,:operator,:right)
31
32
 
32
- def initialize(dialect,index=nil,options={},&block)
33
- super(dialect,'INDEX',index,options,&block)
34
- end
35
-
36
- def index(name=nil)
37
- @name = name if name
38
- return @name
39
- end
33
+ include Operators
34
+ include Emittable
40
35
 
36
+ #
37
+ # Converts the binary expression to SQL.
38
+ #
39
+ # @param [Hash] options
40
+ # Additional options for {Emitter#initialize}.
41
+ #
42
+ # @return [String]
43
+ # The emitted SQL expression.
44
+ #
45
+ def to_sql(options={})
46
+ emitter(options).emit_expression(self)
41
47
  end
48
+
42
49
  end
43
50
  end
44
51
  end
@@ -0,0 +1,72 @@
1
+ #
2
+ # Ronin SQL - A Ruby DSL for crafting SQL Injections.
3
+ #
4
+ # Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin SQL.
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #
22
+
23
+ require 'ronin/sql/literals'
24
+ require 'ronin/sql/fields'
25
+ require 'ronin/sql/functions'
26
+ require 'ronin/sql/statement'
27
+ require 'ronin/sql/statements'
28
+ require 'ronin/sql/emittable'
29
+
30
+ module Ronin
31
+ module SQL
32
+ #
33
+ # Represents a SQL Clause.
34
+ #
35
+ class Clause < Struct.new(:keyword,:argument)
36
+
37
+ include Literals
38
+ include Fields
39
+ include Functions
40
+ include Statements
41
+ include Emittable
42
+
43
+ #
44
+ # Initializes the SQL clause.
45
+ #
46
+ # @param [Symbol] keyword
47
+ # The name of the clause.
48
+ #
49
+ # @param [Object] argument
50
+ # Additional argument for the clause.
51
+ #
52
+ # @yield [(clause)]
53
+ # If a block is given, the return value will be used as the argument.
54
+ #
55
+ # @yieldparam [Clause] clause
56
+ # If the block accepts an argument, it will be passed the new clause.
57
+ # Otherwise the block will be evaluated within the clause.
58
+ #
59
+ def initialize(keyword,argument=nil,&block)
60
+ super(keyword,argument)
61
+
62
+ if block
63
+ self.argument = case block.arity
64
+ when 0 then instance_eval(&block)
65
+ else block.call(self)
66
+ end
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,297 @@
1
+ #
2
+ # Ronin SQL - A Ruby DSL for crafting SQL Injections.
3
+ #
4
+ # Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin SQL.
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #
22
+
23
+ module Ronin
24
+ module SQL
25
+ #
26
+ # Methods for creating common SQL {Clause Clauses}.
27
+ #
28
+ module Clauses
29
+ #
30
+ # The defined clauses of the statement.
31
+ #
32
+ # @return [Array<Clause>]
33
+ # The clauses defined thus far.
34
+ #
35
+ def clauses
36
+ @clauses ||= []
37
+ end
38
+
39
+ #
40
+ # Appends an arbitrary clause.
41
+ #
42
+ # @param [Symbol] keyword
43
+ # The name of the clause.
44
+ #
45
+ # @param [Object] argument
46
+ # Additional argument for the clause.
47
+ #
48
+ # @yield [(clause)]
49
+ # If a block is given, the return value will be used as the argument.
50
+ #
51
+ # @yieldparam [Clause] clause
52
+ # If the block accepts an argument, it will be passed the new clause.
53
+ # Otherwise the block will be evaluated within the clause.
54
+ #
55
+ # @return [self]
56
+ #
57
+ def clause(keyword,argument=nil,&block)
58
+ clauses << Clause.new(keyword,argument,&block)
59
+ return self
60
+ end
61
+
62
+ #
63
+ # Appends a `FROM` clause.
64
+ #
65
+ # @param [Field, Symbol] table
66
+ # The table to select from.
67
+ #
68
+ # @return [self]
69
+ #
70
+ def from(table=nil,&block)
71
+ clause(:FROM,table,&block)
72
+ end
73
+
74
+ #
75
+ # Appends an `INTO` clause.
76
+ #
77
+ # @param [Field, Symbol] table
78
+ # The table to insert into.
79
+ #
80
+ # @return [self]
81
+ #
82
+ def into(table=nil,&block)
83
+ clause(:INTO,table,&block)
84
+ end
85
+
86
+ #
87
+ # Appends a `WHERE` clause.
88
+ #
89
+ # @return [self]
90
+ #
91
+ def where(&block)
92
+ clause(:WHERE,&block)
93
+ end
94
+
95
+ #
96
+ # Appends a `JOIN` clause.
97
+ #
98
+ # @param [Field, Symbol] table
99
+ # The table to join.
100
+ #
101
+ # @return [self]
102
+ #
103
+ def join(table=nil,&block)
104
+ clause(:JOIN,table,&block)
105
+ end
106
+
107
+ #
108
+ # Appends a `INNER JOIN` clause.
109
+ #
110
+ # @param [Field, Symbol] table
111
+ # The table to join.
112
+ #
113
+ # @return [self]
114
+ #
115
+ def inner_join(table=nil,&block)
116
+ clause([:INNER, :JOIN],table,&block)
117
+ end
118
+
119
+ #
120
+ # Appends a `LEFT JOIN` clause.
121
+ #
122
+ # @param [Field, Symbol] table
123
+ # The table to join.
124
+ #
125
+ # @return [self]
126
+ #
127
+ def left_join(table=nil,&block)
128
+ clause([:LEFT, :JOIN],table,&block)
129
+ end
130
+
131
+ #
132
+ # Appends a `RIGHT JOIN` clause.
133
+ #
134
+ # @param [Field, Symbol] table
135
+ # The table to join.
136
+ #
137
+ # @return [self]
138
+ #
139
+ def right_join(table=nil,&block)
140
+ clause([:RIGHT, :JOIN],table,&block)
141
+ end
142
+
143
+ #
144
+ # Appends a `FULL JOIN` clause.
145
+ #
146
+ # @param [Field, Symbol] table
147
+ # The table to join.
148
+ #
149
+ # @return [self]
150
+ #
151
+ def full_join(table=nil,&block)
152
+ clause([:FULL, :JOIN],table,&block)
153
+ end
154
+
155
+ #
156
+ # Appends a `ON` clause.
157
+ #
158
+ # @return [self]
159
+ #
160
+ def on(&block)
161
+ clause(:ON,&block)
162
+ end
163
+
164
+ #
165
+ # Appends a `UNION` clause.
166
+ #
167
+ # @return [self]
168
+ #
169
+ def union(&block)
170
+ clause(:UNION,&block)
171
+ end
172
+
173
+ #
174
+ # Appends a `GROUP BY` clause.
175
+ #
176
+ # @param [Array<Field, Symbol>] columns
177
+ # The columns for `GROUP BY`.
178
+ #
179
+ # @return [self]
180
+ #
181
+ def group_by(*columns,&block)
182
+ clause([:GROUP, :BY],columns,&block)
183
+ end
184
+
185
+ #
186
+ # Appends a `HAVING` clause.
187
+ #
188
+ # @return [self]
189
+ #
190
+ def having(&block)
191
+ clause(:HAVING,&block)
192
+ end
193
+
194
+ #
195
+ # Appends a `LIMIT` clause.
196
+ #
197
+ # @param [Integer] value
198
+ # The maximum number of rows to select.
199
+ #
200
+ # @return [self]
201
+ #
202
+ def limit(value,&block)
203
+ clause(:LIMIT,value,&block)
204
+ end
205
+
206
+ #
207
+ # Appends a `OFFSET` clause.
208
+ #
209
+ # @param [Integer] value
210
+ # The index to start selecting at within the result set.
211
+ #
212
+ # @return [self]
213
+ #
214
+ def offset(value,&block)
215
+ clause(:OFFSET,value,&block)
216
+ end
217
+
218
+ #
219
+ # Appends a `TOP` clause.
220
+ #
221
+ # @param [Integer] value
222
+ # The number of top rows to select.
223
+ #
224
+ # @return [self]
225
+ #
226
+ def top(value,&block)
227
+ clause(:TOP,value,&block)
228
+ end
229
+
230
+ #
231
+ # Appends a `INTO` clause.
232
+ #
233
+ # @param [Field, Symbol] table
234
+ # The table to insert/replace into.
235
+ #
236
+ # @return [self]
237
+ #
238
+ def into(table)
239
+ clause(:INTO,table)
240
+ end
241
+
242
+ #
243
+ # Appends a `VALUES` clause.
244
+ #
245
+ # @param [Array] values
246
+ # The values to insert.
247
+ #
248
+ # @return [self]
249
+ #
250
+ def values(*values)
251
+ clause(:VALUES,values)
252
+ end
253
+
254
+ #
255
+ # Appends a `DEFAULT VALUES` clause.
256
+ #
257
+ # @return [self]
258
+ #
259
+ def default_values
260
+ clause([:DEFAULT, :VALUES])
261
+ end
262
+
263
+ #
264
+ # Appends a `SET` clause.
265
+ #
266
+ # @param [Hash{Field,Symbol => Object}] values
267
+ # The columns and values to update.
268
+ #
269
+ # @return [self]
270
+ #
271
+ def set(values={})
272
+ clause(:SET,values)
273
+ end
274
+
275
+ #
276
+ # Appends a `INDEXED BY` clause.
277
+ #
278
+ # @param [Field, Symbol] name
279
+ # The name of the index.
280
+ #
281
+ # @return [self]
282
+ #
283
+ def indexed_by(name,&block)
284
+ clause([:INDEXED, :BY],name,&block)
285
+ end
286
+
287
+ #
288
+ # Appends a `NOT INDEXED` clause.
289
+ #
290
+ # @return [self]
291
+ #
292
+ def not_indexed
293
+ clause([:NOT, :INDEXED])
294
+ end
295
+ end
296
+ end
297
+ end