sdbcli 1.3.6 → 1.4.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.
- data/README +4 -0
- data/bin/sdbcli +5 -1
- data/lib/sdbcli/sdb-client.rb +1 -1
- data/lib/sdbcli/sdb-driver.rb +47 -1
- data/lib/sdbcli/sdb-parser.tab.rb +262 -231
- data/lib/sdbcli/sdb-parser.y +24 -11
- data/lib/sdbcli/sdb-runner.rb +4 -2
- data/lib/sdbcli/sdb-token-generator.rb +57 -0
- metadata +2 -1
data/README
CHANGED
@@ -84,6 +84,10 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
84
84
|
displays a present result
|
85
85
|
(CURRENT statement is published after SELECT statement)
|
86
86
|
|
87
|
+
PAGE number
|
88
|
+
displays a result of the specified page
|
89
|
+
(PAGE statement is published after SELECT statement)
|
90
|
+
|
87
91
|
DESC domain_name
|
88
92
|
displays information about the domain
|
89
93
|
|
data/bin/sdbcli
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
3
3
|
|
4
|
-
Version = '1.
|
4
|
+
Version = '1.4.0'
|
5
5
|
HISTORY_FILE = File.join((ENV['HOME'] || ENV['USERPROFILE'] || '.'), '.sdbcli_history')
|
6
6
|
HISTSIZE = 500
|
7
7
|
SELECT_LIMIT = 2500
|
@@ -398,6 +398,10 @@ CUR[RENT]
|
|
398
398
|
displays a present result
|
399
399
|
(CURRENT statement is published after SELECT statement)
|
400
400
|
|
401
|
+
PAGE number
|
402
|
+
displays a result of the specified page
|
403
|
+
(PAGE statement is published after SELECT statement)
|
404
|
+
|
401
405
|
DESC domain_name
|
402
406
|
displays information about the domain
|
403
407
|
|
data/lib/sdbcli/sdb-client.rb
CHANGED
@@ -137,7 +137,7 @@ module SimpleDB
|
|
137
137
|
if (error = doc.at_css('Errors Error'))
|
138
138
|
code = error.at_css('Code').content
|
139
139
|
message = error.at_css('Message').content
|
140
|
-
raise Error, "#{code}: #{message}"
|
140
|
+
raise SimpleDB::Error, "#{code}: #{message}"
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
data/lib/sdbcli/sdb-driver.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'sdbcli/sdb-client'
|
2
|
+
require 'sdbcli/sdb-token-generator'
|
3
|
+
require 'strscan'
|
2
4
|
|
3
5
|
module SimpleDB
|
4
6
|
class Error < StandardError; end
|
@@ -164,6 +166,46 @@ module SimpleDB
|
|
164
166
|
return items
|
165
167
|
end
|
166
168
|
|
169
|
+
def page_to(page, consistent = false)
|
170
|
+
if page < 1
|
171
|
+
raise SimpleDB::Error, "Invalid page number: #{page}"
|
172
|
+
end
|
173
|
+
|
174
|
+
unless @select_expr
|
175
|
+
return []
|
176
|
+
end
|
177
|
+
|
178
|
+
ss = StringScanner.new(@select_expr.dup)
|
179
|
+
limit = 100
|
180
|
+
|
181
|
+
until ss.eos?
|
182
|
+
if ss.scan(/[^`'"L]+/i) #'
|
183
|
+
elsif ss.scan( /`(?:[^`]|``)*`/)
|
184
|
+
elsif ss.scan(/'(?:[^']|'')*'/) #'
|
185
|
+
elsif ss.scan(/"(?:[^"]|"")*"/) #"
|
186
|
+
elsif (tok = ss.scan /LIMIT\s+\d\b/i)
|
187
|
+
limit = tok.split(/\s+/).last.to_i
|
188
|
+
elsif ss.scan(/./)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
params = {:SelectExpression => @select_expr, :ConsistentRead => consistent}
|
193
|
+
items = []
|
194
|
+
|
195
|
+
token = (page > 1) ? SimpleDB::TokenGenerator.next_token(limit, page) : :first
|
196
|
+
|
197
|
+
new_token = iterate(:select, params, token) do |doc|
|
198
|
+
doc.css('Item').map do |i|
|
199
|
+
items << [i.at_css('Name').content, attrs_to_hash(i)]
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
@current_token = token
|
204
|
+
@next_token = new_token
|
205
|
+
|
206
|
+
return items
|
207
|
+
end
|
208
|
+
|
167
209
|
def delete(domain_name, items = {})
|
168
210
|
until (chunk = items.slice!(0, MAX_NUMBER_SUBMITTED_ITEMS)).empty?
|
169
211
|
params = {}
|
@@ -237,7 +279,11 @@ module SimpleDB
|
|
237
279
|
token = nil
|
238
280
|
|
239
281
|
while @token
|
240
|
-
|
282
|
+
if @token != :first
|
283
|
+
tok = @token.kind_of?(String) ? @token : @token.content
|
284
|
+
@params.update(:NextToken => tok)
|
285
|
+
end
|
286
|
+
|
241
287
|
doc = @client.send(@method, @params)
|
242
288
|
yield(doc)
|
243
289
|
token = doc.at_css('NextToken')
|
@@ -13,7 +13,7 @@ module SimpleDB
|
|
13
13
|
|
14
14
|
class Parser < Racc::Parser
|
15
15
|
|
16
|
-
module_eval(<<'...end sdb-parser.y/module_eval...', 'sdb-parser.y',
|
16
|
+
module_eval(<<'...end sdb-parser.y/module_eval...', 'sdb-parser.y', 274)
|
17
17
|
|
18
18
|
KEYWORDS = %w(
|
19
19
|
ADD
|
@@ -92,16 +92,18 @@ def scan
|
|
92
92
|
yield [:NEXT, @ss.scan(/\s*\|\s*.*/)]
|
93
93
|
elsif (tok = @ss.scan /CUR(RENT)?\b/i)
|
94
94
|
yield [:CURRENT, @ss.scan(/\s*\|\s*.*/)]
|
95
|
+
elsif (tok = @ss.scan /PAGE\s+\d+/i)
|
96
|
+
yield [:PAGE, tok + @ss.scan(/(\s*\|\s*.*)?/)]
|
95
97
|
elsif (tok = @ss.scan /NULL\b/i)
|
96
98
|
yield [:NULL, nil]
|
97
99
|
elsif (tok = @ss.scan /`([^`]|``)*`/)
|
98
100
|
yield [:IDENTIFIER, tok.slice(1...-1).gsub(/``/, '`')]
|
99
101
|
elsif (tok = @ss.scan /'([^']|'')*'/) #'
|
100
|
-
yield [:
|
102
|
+
yield [:STRING, tok.slice(1...-1).gsub(/''/, "'")]
|
101
103
|
elsif (tok = @ss.scan /"([^"]|"")*"/) #"
|
102
|
-
yield [:
|
104
|
+
yield [:STRING, tok.slice(1...-1).gsub(/""/, '"')]
|
103
105
|
elsif (tok = @ss.scan /\d+(\.\d+)?/)
|
104
|
-
yield [:
|
106
|
+
yield [:NUMBER, tok]
|
105
107
|
elsif (tok = @ss.scan /[,\(\)\*]/)
|
106
108
|
yield [tok, tok]
|
107
109
|
elsif (tok = @ss.scan /[a-z_$][-0-9a-z_$.]*\b/i)
|
@@ -135,172 +137,182 @@ end
|
|
135
137
|
##### State transition tables begin ###
|
136
138
|
|
137
139
|
racc_action_table = [
|
138
|
-
|
139
|
-
|
140
|
-
20, 21, 22, 23,
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
140
|
+
16, 9, 73, 70, 17, 69, 35, 68, 71, 71,
|
141
|
+
33, 69, 31, 68, 18, 81, 82, 19, 81, 82,
|
142
|
+
20, 21, 22, 23, 24, 56, 25, 26, 27, 42,
|
143
|
+
43, 28, 29, 30, 81, 82, 81, 82, 101, 102,
|
144
|
+
81, 82, 106, 102, 81, 82, 77, 78, 51, 52,
|
145
|
+
81, 82, 81, 82, 63, 64, 57, 58, 61, 61,
|
146
|
+
54, 65, 49, 53, 72, 55, 74, 75, 76, 50,
|
147
|
+
79, 61, 49, 84, 85, 86, 87, 48, 89, 90,
|
148
|
+
91, 47, 93, 46, 45, 44, 41, 100, 40, 103,
|
149
|
+
35, 37, 36 ]
|
147
150
|
|
148
151
|
racc_action_check = [
|
149
|
-
0, 0,
|
150
|
-
|
151
|
-
0, 0, 0, 0,
|
152
|
-
0, 0,
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
152
|
+
0, 0, 62, 59, 0, 58, 17, 58, 62, 59,
|
153
|
+
17, 78, 1, 78, 0, 89, 89, 0, 93, 93,
|
154
|
+
0, 0, 0, 0, 0, 48, 0, 0, 0, 27,
|
155
|
+
27, 0, 0, 0, 91, 91, 90, 90, 98, 98,
|
156
|
+
86, 86, 105, 105, 72, 72, 66, 66, 37, 37,
|
157
|
+
102, 102, 103, 103, 53, 53, 49, 50, 51, 52,
|
158
|
+
40, 56, 39, 38, 61, 41, 63, 64, 65, 36,
|
159
|
+
70, 71, 34, 73, 74, 76, 77, 32, 79, 84,
|
160
|
+
85, 31, 87, 30, 29, 28, 26, 94, 24, 100,
|
161
|
+
20, 19, 18 ]
|
158
162
|
|
159
163
|
racc_action_pointer = [
|
160
|
-
-1,
|
161
|
-
nil, nil, nil, nil, nil, nil,
|
162
|
-
nil, nil, nil,
|
163
|
-
|
164
|
-
nil, nil, nil, nil, nil, nil,
|
165
|
-
45,
|
166
|
-
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
nil,
|
164
|
+
-1, 12, nil, nil, nil, nil, nil, nil, nil, nil,
|
165
|
+
nil, nil, nil, nil, nil, nil, nil, -1, 76, 84,
|
166
|
+
83, nil, nil, nil, 62, nil, 60, -1, 78, 77,
|
167
|
+
76, 81, 71, nil, 58, nil, 62, 29, 57, 48,
|
168
|
+
53, 58, nil, nil, nil, nil, nil, nil, 18, 49,
|
169
|
+
45, 51, 52, 47, nil, nil, 53, nil, -2, -5,
|
170
|
+
nil, 54, -6, 58, 58, 59, 33, nil, nil, nil,
|
171
|
+
61, 64, 41, 64, 65, nil, 65, 59, 4, 68,
|
172
|
+
nil, nil, nil, nil, 69, 70, 37, 70, nil, 12,
|
173
|
+
33, 31, nil, 15, 73, nil, nil, nil, 25, nil,
|
174
|
+
77, nil, 47, 49, nil, 29, nil ]
|
171
175
|
|
172
176
|
racc_action_default = [
|
173
|
-
-
|
174
|
-
-9, -10, -11, -12, -13, -14, -
|
175
|
-
-
|
176
|
-
-
|
177
|
-
-
|
178
|
-
-
|
179
|
-
-
|
180
|
-
-
|
181
|
-
-
|
182
|
-
-
|
183
|
-
-
|
177
|
+
-61, -61, -1, -2, -3, -4, -5, -6, -7, -8,
|
178
|
+
-9, -10, -11, -12, -13, -14, -15, -19, -61, -61,
|
179
|
+
-44, -46, -47, -48, -61, -50, -61, -61, -61, -61,
|
180
|
+
-61, -61, -61, -20, -21, -57, -61, -61, -61, -45,
|
181
|
+
-61, -61, -52, -53, -54, -55, -56, 107, -61, -61,
|
182
|
+
-61, -61, -61, -61, -49, -51, -61, -58, -61, -30,
|
183
|
+
-37, -61, -34, -41, -42, -61, -61, -25, -27, -28,
|
184
|
+
-31, -61, -61, -35, -61, -43, -61, -61, -61, -32,
|
185
|
+
-38, -16, -17, -39, -36, -61, -61, -61, -26, -61,
|
186
|
+
-61, -61, -18, -61, -24, -29, -33, -40, -61, -59,
|
187
|
+
-61, -22, -61, -61, -60, -61, -23 ]
|
184
188
|
|
185
189
|
racc_goto_table = [
|
186
|
-
|
187
|
-
10,
|
188
|
-
|
190
|
+
83, 67, 98, 34, 59, 62, 39, 14, 7, 8,
|
191
|
+
10, 11, 105, 12, 92, 13, 6, 95, 96, 97,
|
192
|
+
15, 88, 1, 32, 5, 94, 4, 66, 3, 2,
|
193
|
+
104, 80, 38 ]
|
189
194
|
|
190
195
|
racc_goto_check = [
|
191
|
-
|
192
|
-
9,
|
193
|
-
|
196
|
+
15, 21, 19, 17, 22, 22, 17, 13, 7, 8,
|
197
|
+
9, 10, 19, 11, 15, 12, 6, 15, 15, 15,
|
198
|
+
14, 21, 1, 16, 5, 18, 4, 20, 3, 2,
|
199
|
+
15, 23, 24 ]
|
194
200
|
|
195
201
|
racc_goto_pointer = [
|
196
|
-
nil,
|
197
|
-
|
198
|
-
-
|
202
|
+
nil, 22, 29, 28, 26, 24, 16, 8, 9, 10,
|
203
|
+
11, 13, 15, 7, 20, -72, 6, -14, -62, -91,
|
204
|
+
-31, -57, -47, -40, 12 ]
|
199
205
|
|
200
206
|
racc_goto_default = [
|
201
207
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
202
|
-
nil, nil, nil, nil, nil,
|
203
|
-
nil,
|
208
|
+
nil, nil, nil, nil, nil, 99, nil, nil, nil, nil,
|
209
|
+
nil, nil, nil, 60, nil ]
|
204
210
|
|
205
211
|
racc_reduce_table = [
|
206
212
|
0, 0, :racc_error,
|
207
|
-
1,
|
208
|
-
1,
|
209
|
-
1,
|
210
|
-
1,
|
211
|
-
1,
|
212
|
-
1,
|
213
|
-
1,
|
214
|
-
1,
|
215
|
-
1,
|
216
|
-
1,
|
217
|
-
1,
|
218
|
-
1,
|
219
|
-
1,
|
220
|
-
1,
|
221
|
-
|
222
|
-
|
223
|
-
1,
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
1,
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
1,
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
2,
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
213
|
+
1, 36, :_reduce_none,
|
214
|
+
1, 36, :_reduce_none,
|
215
|
+
1, 36, :_reduce_none,
|
216
|
+
1, 36, :_reduce_none,
|
217
|
+
1, 36, :_reduce_none,
|
218
|
+
1, 36, :_reduce_none,
|
219
|
+
1, 36, :_reduce_none,
|
220
|
+
1, 36, :_reduce_none,
|
221
|
+
1, 36, :_reduce_none,
|
222
|
+
1, 36, :_reduce_none,
|
223
|
+
1, 36, :_reduce_none,
|
224
|
+
1, 36, :_reduce_none,
|
225
|
+
1, 36, :_reduce_none,
|
226
|
+
1, 36, :_reduce_none,
|
227
|
+
1, 36, :_reduce_15,
|
228
|
+
1, 50, :_reduce_none,
|
229
|
+
1, 50, :_reduce_none,
|
230
|
+
8, 37, :_reduce_18,
|
231
|
+
0, 51, :_reduce_19,
|
232
|
+
1, 51, :_reduce_20,
|
233
|
+
1, 51, :_reduce_none,
|
234
|
+
3, 53, :_reduce_22,
|
235
|
+
5, 53, :_reduce_23,
|
236
|
+
8, 38, :_reduce_24,
|
237
|
+
1, 55, :_reduce_25,
|
238
|
+
3, 55, :_reduce_26,
|
239
|
+
1, 56, :_reduce_none,
|
240
|
+
1, 56, :_reduce_none,
|
241
|
+
8, 39, :_reduce_29,
|
242
|
+
4, 39, :_reduce_30,
|
243
|
+
5, 39, :_reduce_31,
|
244
|
+
6, 39, :_reduce_32,
|
245
|
+
8, 40, :_reduce_33,
|
246
|
+
4, 40, :_reduce_34,
|
247
|
+
5, 40, :_reduce_35,
|
248
|
+
6, 40, :_reduce_36,
|
249
|
+
1, 57, :_reduce_37,
|
250
|
+
3, 57, :_reduce_38,
|
251
|
+
3, 58, :_reduce_39,
|
252
|
+
8, 41, :_reduce_40,
|
253
|
+
4, 41, :_reduce_41,
|
254
|
+
4, 41, :_reduce_42,
|
255
|
+
5, 41, :_reduce_43,
|
256
|
+
0, 59, :_reduce_44,
|
257
|
+
1, 59, :_reduce_none,
|
258
|
+
1, 42, :_reduce_46,
|
259
|
+
1, 43, :_reduce_47,
|
260
|
+
1, 43, :_reduce_48,
|
261
|
+
3, 45, :_reduce_49,
|
262
|
+
1, 44, :_reduce_50,
|
263
|
+
3, 46, :_reduce_51,
|
264
|
+
2, 47, :_reduce_52,
|
265
|
+
2, 47, :_reduce_53,
|
266
|
+
2, 48, :_reduce_54,
|
267
|
+
2, 49, :_reduce_55,
|
268
|
+
2, 49, :_reduce_56,
|
269
|
+
1, 52, :_reduce_57,
|
270
|
+
3, 52, :_reduce_58,
|
271
|
+
1, 54, :_reduce_59,
|
272
|
+
3, 54, :_reduce_60 ]
|
273
|
+
|
274
|
+
racc_reduce_n = 61
|
275
|
+
|
276
|
+
racc_shift_n = 107
|
267
277
|
|
268
278
|
racc_token_table = {
|
269
279
|
false => 0,
|
270
280
|
:error => 1,
|
271
281
|
:current_stmt => 2,
|
272
|
-
:
|
273
|
-
:
|
274
|
-
:
|
275
|
-
:
|
276
|
-
:
|
277
|
-
|
278
|
-
:
|
279
|
-
"
|
280
|
-
"
|
281
|
-
"
|
282
|
-
"
|
283
|
-
|
284
|
-
:
|
285
|
-
:
|
286
|
-
:
|
287
|
-
:
|
288
|
-
:
|
289
|
-
:
|
290
|
-
:
|
291
|
-
:
|
292
|
-
:
|
293
|
-
:
|
294
|
-
:
|
295
|
-
:
|
296
|
-
:
|
297
|
-
:
|
298
|
-
:
|
299
|
-
:
|
300
|
-
:
|
301
|
-
:
|
302
|
-
|
303
|
-
|
282
|
+
:STRING => 3,
|
283
|
+
:NUMBER => 4,
|
284
|
+
:GET => 5,
|
285
|
+
:FROM => 6,
|
286
|
+
:IDENTIFIER => 7,
|
287
|
+
:WHERE => 8,
|
288
|
+
:ITEMNAME => 9,
|
289
|
+
"=" => 10,
|
290
|
+
"*" => 11,
|
291
|
+
"(" => 12,
|
292
|
+
")" => 13,
|
293
|
+
"," => 14,
|
294
|
+
:INSERT => 15,
|
295
|
+
:INTO => 16,
|
296
|
+
:VALUES => 17,
|
297
|
+
:UPDATE => 18,
|
298
|
+
:SET => 19,
|
299
|
+
:ADD => 20,
|
300
|
+
:DELETE => 21,
|
301
|
+
:SELECT => 22,
|
302
|
+
:NEXT => 23,
|
303
|
+
:CURRENT => 24,
|
304
|
+
:CREATE => 25,
|
305
|
+
:DOMAIN => 26,
|
306
|
+
:PAGE => 27,
|
307
|
+
:DROP => 28,
|
308
|
+
:SHOW => 29,
|
309
|
+
:DOMAINS => 30,
|
310
|
+
:REGIONS => 31,
|
311
|
+
:USE => 32,
|
312
|
+
:DESC => 33,
|
313
|
+
:DESCRIBE => 34 }
|
314
|
+
|
315
|
+
racc_nt_base = 35
|
304
316
|
|
305
317
|
racc_use_result_var = false
|
306
318
|
|
@@ -324,13 +336,14 @@ Racc_token_to_s_table = [
|
|
324
336
|
"$end",
|
325
337
|
"error",
|
326
338
|
"current_stmt",
|
339
|
+
"STRING",
|
340
|
+
"NUMBER",
|
327
341
|
"GET",
|
328
342
|
"FROM",
|
329
343
|
"IDENTIFIER",
|
330
344
|
"WHERE",
|
331
345
|
"ITEMNAME",
|
332
346
|
"\"=\"",
|
333
|
-
"VALUE",
|
334
347
|
"\"*\"",
|
335
348
|
"\"(\"",
|
336
349
|
"\")\"",
|
@@ -347,6 +360,7 @@ Racc_token_to_s_table = [
|
|
347
360
|
"CURRENT",
|
348
361
|
"CREATE",
|
349
362
|
"DOMAIN",
|
363
|
+
"PAGE",
|
350
364
|
"DROP",
|
351
365
|
"SHOW",
|
352
366
|
"DOMAINS",
|
@@ -363,11 +377,13 @@ Racc_token_to_s_table = [
|
|
363
377
|
"delete_stmt",
|
364
378
|
"select_stmt",
|
365
379
|
"next_stmt",
|
380
|
+
"page_stmt",
|
366
381
|
"create_stmt",
|
367
382
|
"drop_stmt",
|
368
383
|
"show_stmt",
|
369
384
|
"use_stmt",
|
370
385
|
"desc_stmt",
|
386
|
+
"value",
|
371
387
|
"get_output_list",
|
372
388
|
"identifier_list",
|
373
389
|
"value_list_list",
|
@@ -410,52 +426,58 @@ Racc_debug_parser = false
|
|
410
426
|
|
411
427
|
# reduce 13 omitted
|
412
428
|
|
413
|
-
|
414
|
-
|
429
|
+
# reduce 14 omitted
|
430
|
+
|
431
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 19)
|
432
|
+
def _reduce_15(val, _values)
|
415
433
|
@stmt_with_expr
|
416
434
|
|
417
435
|
end
|
418
436
|
.,.,
|
419
437
|
|
420
|
-
|
421
|
-
|
438
|
+
# reduce 16 omitted
|
439
|
+
|
440
|
+
# reduce 17 omitted
|
441
|
+
|
442
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 27)
|
443
|
+
def _reduce_18(val, _values)
|
422
444
|
struct(:GET, :domain => val[3], :item_name => val[7], :attr_names => val[1])
|
423
445
|
|
424
446
|
end
|
425
447
|
.,.,
|
426
448
|
|
427
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
428
|
-
def
|
449
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 32)
|
450
|
+
def _reduce_19(val, _values)
|
429
451
|
[]
|
430
452
|
|
431
453
|
end
|
432
454
|
.,.,
|
433
455
|
|
434
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
435
|
-
def
|
456
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 36)
|
457
|
+
def _reduce_20(val, _values)
|
436
458
|
[]
|
437
459
|
|
438
460
|
end
|
439
461
|
.,.,
|
440
462
|
|
441
|
-
# reduce
|
463
|
+
# reduce 21 omitted
|
442
464
|
|
443
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
444
|
-
def
|
465
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 42)
|
466
|
+
def _reduce_22(val, _values)
|
445
467
|
[val[1]]
|
446
468
|
|
447
469
|
end
|
448
470
|
.,.,
|
449
471
|
|
450
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
451
|
-
def
|
472
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 46)
|
473
|
+
def _reduce_23(val, _values)
|
452
474
|
val[0] + [val[3]]
|
453
475
|
|
454
476
|
end
|
455
477
|
.,.,
|
456
478
|
|
457
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
458
|
-
def
|
479
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 51)
|
480
|
+
def _reduce_24(val, _values)
|
459
481
|
items = val[7].map do |vals|
|
460
482
|
unless val[4].length == vals.length
|
461
483
|
raise Racc::ParseError, 'The number of an attribute and values differs'
|
@@ -480,26 +502,26 @@ module_eval(<<'.,.,', 'sdb-parser.y', 47)
|
|
480
502
|
end
|
481
503
|
.,.,
|
482
504
|
|
483
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
484
|
-
def
|
505
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 75)
|
506
|
+
def _reduce_25(val, _values)
|
485
507
|
[val[0]]
|
486
508
|
|
487
509
|
end
|
488
510
|
.,.,
|
489
511
|
|
490
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
491
|
-
def
|
512
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 79)
|
513
|
+
def _reduce_26(val, _values)
|
492
514
|
val[0] + [val[2]]
|
493
515
|
|
494
516
|
end
|
495
517
|
.,.,
|
496
518
|
|
497
|
-
# reduce
|
519
|
+
# reduce 27 omitted
|
498
520
|
|
499
|
-
# reduce
|
521
|
+
# reduce 28 omitted
|
500
522
|
|
501
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
502
|
-
def
|
523
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 87)
|
524
|
+
def _reduce_29(val, _values)
|
503
525
|
attrs = {}
|
504
526
|
val[3].each {|k, v| attrs[k] = v }
|
505
527
|
struct(:UPDATE, :domain => val[1], :items => [[val[7], attrs]])
|
@@ -507,8 +529,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 83)
|
|
507
529
|
end
|
508
530
|
.,.,
|
509
531
|
|
510
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
511
|
-
def
|
532
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 93)
|
533
|
+
def _reduce_30(val, _values)
|
512
534
|
attrs = {}
|
513
535
|
val[3].each {|k, v| attrs[k] = v }
|
514
536
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
@@ -516,8 +538,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 89)
|
|
516
538
|
end
|
517
539
|
.,.,
|
518
540
|
|
519
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
520
|
-
def
|
541
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 99)
|
542
|
+
def _reduce_31(val, _values)
|
521
543
|
attrs = {}
|
522
544
|
val[3].each {|k, v| attrs[k] = v }
|
523
545
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
@@ -525,8 +547,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 95)
|
|
525
547
|
end
|
526
548
|
.,.,
|
527
549
|
|
528
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
529
|
-
def
|
550
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 105)
|
551
|
+
def _reduce_32(val, _values)
|
530
552
|
attrs = {}
|
531
553
|
val[3].each {|k, v| attrs[k] = v }
|
532
554
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
@@ -534,8 +556,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 101)
|
|
534
556
|
end
|
535
557
|
.,.,
|
536
558
|
|
537
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
538
|
-
def
|
559
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 112)
|
560
|
+
def _reduce_33(val, _values)
|
539
561
|
attrs = {}
|
540
562
|
val[3].each {|k, v| attrs[k] = v }
|
541
563
|
struct(:MERGE, :domain => val[1], :items => [[val[7], attrs]])
|
@@ -543,8 +565,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 108)
|
|
543
565
|
end
|
544
566
|
.,.,
|
545
567
|
|
546
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
547
|
-
def
|
568
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 118)
|
569
|
+
def _reduce_34(val, _values)
|
548
570
|
attrs = {}
|
549
571
|
val[3].each {|k, v| attrs[k] = v }
|
550
572
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
@@ -552,8 +574,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 114)
|
|
552
574
|
end
|
553
575
|
.,.,
|
554
576
|
|
555
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
556
|
-
def
|
577
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 124)
|
578
|
+
def _reduce_35(val, _values)
|
557
579
|
attrs = {}
|
558
580
|
val[3].each {|k, v| attrs[k] = v }
|
559
581
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
@@ -561,8 +583,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 120)
|
|
561
583
|
end
|
562
584
|
.,.,
|
563
585
|
|
564
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
565
|
-
def
|
586
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 130)
|
587
|
+
def _reduce_36(val, _values)
|
566
588
|
attrs = {}
|
567
589
|
val[3].each {|k, v| attrs[k] = v }
|
568
590
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
@@ -570,73 +592,73 @@ module_eval(<<'.,.,', 'sdb-parser.y', 126)
|
|
570
592
|
end
|
571
593
|
.,.,
|
572
594
|
|
573
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
574
|
-
def
|
595
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 137)
|
596
|
+
def _reduce_37(val, _values)
|
575
597
|
[val[0]]
|
576
598
|
|
577
599
|
end
|
578
600
|
.,.,
|
579
601
|
|
580
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
581
|
-
def
|
602
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 141)
|
603
|
+
def _reduce_38(val, _values)
|
582
604
|
val[0] + [val[2]]
|
583
605
|
|
584
606
|
end
|
585
607
|
.,.,
|
586
608
|
|
587
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
588
|
-
def
|
609
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 146)
|
610
|
+
def _reduce_39(val, _values)
|
589
611
|
[val[0], val[2]]
|
590
612
|
|
591
613
|
end
|
592
614
|
.,.,
|
593
615
|
|
594
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
595
|
-
def
|
616
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 151)
|
617
|
+
def _reduce_40(val, _values)
|
596
618
|
struct(:DELETE, :domain => val[3], :items => [[val[7], val[1]]])
|
597
619
|
|
598
620
|
end
|
599
621
|
.,.,
|
600
622
|
|
601
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
602
|
-
def
|
623
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 155)
|
624
|
+
def _reduce_41(val, _values)
|
603
625
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => '')
|
604
626
|
|
605
627
|
end
|
606
628
|
.,.,
|
607
629
|
|
608
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
609
|
-
def
|
630
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 159)
|
631
|
+
def _reduce_42(val, _values)
|
610
632
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE ')
|
611
633
|
|
612
634
|
end
|
613
635
|
.,.,
|
614
636
|
|
615
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
616
|
-
def
|
637
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 163)
|
638
|
+
def _reduce_43(val, _values)
|
617
639
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE itemName')
|
618
640
|
|
619
641
|
end
|
620
642
|
.,.,
|
621
643
|
|
622
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
623
|
-
def
|
644
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 168)
|
645
|
+
def _reduce_44(val, _values)
|
624
646
|
[]
|
625
647
|
|
626
648
|
end
|
627
649
|
.,.,
|
628
650
|
|
629
|
-
# reduce
|
651
|
+
# reduce 45 omitted
|
630
652
|
|
631
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
632
|
-
def
|
653
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 174)
|
654
|
+
def _reduce_46(val, _values)
|
633
655
|
query = ''
|
634
656
|
ruby = nil
|
635
657
|
|
636
658
|
ss = StringScanner.new(val[0])
|
637
659
|
|
638
660
|
until ss.eos?
|
639
|
-
if (tok = ss.scan
|
661
|
+
if (tok = ss.scan /[^`'"|]+/) #'
|
640
662
|
query << tok
|
641
663
|
elsif (tok = ss.scan /`(?:[^`]|``)*`/)
|
642
664
|
query << tok
|
@@ -656,94 +678,103 @@ module_eval(<<'.,.,', 'sdb-parser.y', 170)
|
|
656
678
|
end
|
657
679
|
.,.,
|
658
680
|
|
659
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
660
|
-
def
|
681
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 200)
|
682
|
+
def _reduce_47(val, _values)
|
661
683
|
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
662
684
|
struct(:NEXT, :ruby => ruby)
|
663
685
|
|
664
686
|
end
|
665
687
|
.,.,
|
666
688
|
|
667
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
668
|
-
def
|
689
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 206)
|
690
|
+
def _reduce_48(val, _values)
|
669
691
|
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
670
692
|
struct(:CURRENT, :ruby => ruby)
|
671
693
|
|
672
694
|
end
|
673
695
|
.,.,
|
674
696
|
|
675
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
676
|
-
def
|
697
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 212)
|
698
|
+
def _reduce_49(val, _values)
|
677
699
|
struct(:CREATE, :domain => val[2])
|
678
700
|
|
679
701
|
end
|
680
702
|
.,.,
|
681
703
|
|
682
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
683
|
-
def
|
704
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 217)
|
705
|
+
def _reduce_50(val, _values)
|
706
|
+
page, ruby = val[0].split(/\s*\|\s*/, 2)
|
707
|
+
page = page.split(/\s+/, 2).last.strip.to_i
|
708
|
+
struct(:PAGE, :page => page, :ruby => ruby)
|
709
|
+
|
710
|
+
end
|
711
|
+
.,.,
|
712
|
+
|
713
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 224)
|
714
|
+
def _reduce_51(val, _values)
|
684
715
|
struct(:DROP, :domain => val[2])
|
685
716
|
|
686
717
|
end
|
687
718
|
.,.,
|
688
719
|
|
689
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
690
|
-
def
|
720
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 229)
|
721
|
+
def _reduce_52(val, _values)
|
691
722
|
struct(:SHOW, :operand => :domains)
|
692
723
|
|
693
724
|
end
|
694
725
|
.,.,
|
695
726
|
|
696
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
697
|
-
def
|
727
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 233)
|
728
|
+
def _reduce_53(val, _values)
|
698
729
|
struct(:SHOW, :operand => :regions)
|
699
730
|
|
700
731
|
end
|
701
732
|
.,.,
|
702
733
|
|
703
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
704
|
-
def
|
734
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 237)
|
735
|
+
def _reduce_54(val, _values)
|
705
736
|
struct(:USE, :endpoint => val[1])
|
706
737
|
|
707
738
|
end
|
708
739
|
.,.,
|
709
740
|
|
710
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
711
|
-
def
|
741
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 241)
|
742
|
+
def _reduce_55(val, _values)
|
712
743
|
struct(:DESCRIBE, :domain => val[1])
|
713
744
|
|
714
745
|
end
|
715
746
|
.,.,
|
716
747
|
|
717
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
718
|
-
def
|
748
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 245)
|
749
|
+
def _reduce_56(val, _values)
|
719
750
|
struct(:DESCRIBE, :domain => val[1])
|
720
751
|
|
721
752
|
end
|
722
753
|
.,.,
|
723
754
|
|
724
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
725
|
-
def
|
755
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 250)
|
756
|
+
def _reduce_57(val, _values)
|
726
757
|
[val[0]]
|
727
758
|
|
728
759
|
end
|
729
760
|
.,.,
|
730
761
|
|
731
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
732
|
-
def
|
762
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 254)
|
763
|
+
def _reduce_58(val, _values)
|
733
764
|
val[0] + [val[2]]
|
734
765
|
|
735
766
|
end
|
736
767
|
.,.,
|
737
768
|
|
738
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
739
|
-
def
|
769
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 259)
|
770
|
+
def _reduce_59(val, _values)
|
740
771
|
[val[0]]
|
741
772
|
|
742
773
|
end
|
743
774
|
.,.,
|
744
775
|
|
745
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
746
|
-
def
|
776
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 263)
|
777
|
+
def _reduce_60(val, _values)
|
747
778
|
[val[0], val[2]].flatten
|
748
779
|
|
749
780
|
end
|
data/lib/sdbcli/sdb-parser.y
CHANGED
@@ -9,6 +9,7 @@ rule
|
|
9
9
|
| select_stmt
|
10
10
|
| next_stmt
|
11
11
|
| current_stmt
|
12
|
+
| page_stmt
|
12
13
|
| create_stmt
|
13
14
|
| drop_stmt
|
14
15
|
| show_stmt
|
@@ -19,7 +20,10 @@ rule
|
|
19
20
|
@stmt_with_expr
|
20
21
|
}
|
21
22
|
|
22
|
-
|
23
|
+
value : STRING
|
24
|
+
| NUMBER
|
25
|
+
|
26
|
+
get_stmt : GET get_output_list FROM IDENTIFIER WHERE ITEMNAME '=' value
|
23
27
|
{
|
24
28
|
struct(:GET, :domain => val[3], :item_name => val[7], :attr_names => val[1])
|
25
29
|
}
|
@@ -79,7 +83,7 @@ rule
|
|
79
83
|
itemname_identifier : ITEMNAME
|
80
84
|
| IDENTIFIER
|
81
85
|
|
82
|
-
update_stmt : UPDATE IDENTIFIER SET set_clause_list WHERE ITEMNAME '='
|
86
|
+
update_stmt : UPDATE IDENTIFIER SET set_clause_list WHERE ITEMNAME '=' value
|
83
87
|
{
|
84
88
|
attrs = {}
|
85
89
|
val[3].each {|k, v| attrs[k] = v }
|
@@ -104,7 +108,7 @@ rule
|
|
104
108
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
105
109
|
}
|
106
110
|
|
107
|
-
merge_stmt : UPDATE IDENTIFIER ADD set_clause_list WHERE ITEMNAME '='
|
111
|
+
merge_stmt : UPDATE IDENTIFIER ADD set_clause_list WHERE ITEMNAME '=' value
|
108
112
|
{
|
109
113
|
attrs = {}
|
110
114
|
val[3].each {|k, v| attrs[k] = v }
|
@@ -138,12 +142,12 @@ rule
|
|
138
142
|
val[0] + [val[2]]
|
139
143
|
}
|
140
144
|
|
141
|
-
set_clause : IDENTIFIER '='
|
145
|
+
set_clause : IDENTIFIER '=' value
|
142
146
|
{
|
143
147
|
[val[0], val[2]]
|
144
148
|
}
|
145
149
|
|
146
|
-
delete_stmt : DELETE delete_attr_list FROM IDENTIFIER WHERE ITEMNAME '='
|
150
|
+
delete_stmt : DELETE delete_attr_list FROM IDENTIFIER WHERE ITEMNAME '=' value
|
147
151
|
{
|
148
152
|
struct(:DELETE, :domain => val[3], :items => [[val[7], val[1]]])
|
149
153
|
}
|
@@ -174,7 +178,7 @@ rule
|
|
174
178
|
ss = StringScanner.new(val[0])
|
175
179
|
|
176
180
|
until ss.eos?
|
177
|
-
if (tok = ss.scan
|
181
|
+
if (tok = ss.scan /[^`'"|]+/) #'
|
178
182
|
query << tok
|
179
183
|
elsif (tok = ss.scan /`(?:[^`]|``)*`/)
|
180
184
|
query << tok
|
@@ -209,6 +213,13 @@ rule
|
|
209
213
|
struct(:CREATE, :domain => val[2])
|
210
214
|
}
|
211
215
|
|
216
|
+
page_stmt : PAGE
|
217
|
+
{
|
218
|
+
page, ruby = val[0].split(/\s*\|\s*/, 2)
|
219
|
+
page = page.split(/\s+/, 2).last.strip.to_i
|
220
|
+
struct(:PAGE, :page => page, :ruby => ruby)
|
221
|
+
}
|
222
|
+
|
212
223
|
drop_stmt : DROP DOMAIN IDENTIFIER
|
213
224
|
{
|
214
225
|
struct(:DROP, :domain => val[2])
|
@@ -244,11 +255,11 @@ rule
|
|
244
255
|
val[0] + [val[2]]
|
245
256
|
}
|
246
257
|
|
247
|
-
value_list :
|
258
|
+
value_list : value
|
248
259
|
{
|
249
260
|
[val[0]]
|
250
261
|
}
|
251
|
-
| value_list ','
|
262
|
+
| value_list ',' value
|
252
263
|
{
|
253
264
|
[val[0], val[2]].flatten
|
254
265
|
}
|
@@ -338,16 +349,18 @@ def scan
|
|
338
349
|
yield [:NEXT, @ss.scan(/\s*\|\s*.*/)]
|
339
350
|
elsif (tok = @ss.scan /CUR(RENT)?\b/i)
|
340
351
|
yield [:CURRENT, @ss.scan(/\s*\|\s*.*/)]
|
352
|
+
elsif (tok = @ss.scan /PAGE\s+\d+/i)
|
353
|
+
yield [:PAGE, tok + @ss.scan(/(\s*\|\s*.*)?/)]
|
341
354
|
elsif (tok = @ss.scan /NULL\b/i)
|
342
355
|
yield [:NULL, nil]
|
343
356
|
elsif (tok = @ss.scan /`([^`]|``)*`/)
|
344
357
|
yield [:IDENTIFIER, tok.slice(1...-1).gsub(/``/, '`')]
|
345
358
|
elsif (tok = @ss.scan /'([^']|'')*'/) #'
|
346
|
-
yield [:
|
359
|
+
yield [:STRING, tok.slice(1...-1).gsub(/''/, "'")]
|
347
360
|
elsif (tok = @ss.scan /"([^"]|"")*"/) #"
|
348
|
-
yield [:
|
361
|
+
yield [:STRING, tok.slice(1...-1).gsub(/""/, '"')]
|
349
362
|
elsif (tok = @ss.scan /\d+(\.\d+)?/)
|
350
|
-
yield [:
|
363
|
+
yield [:NUMBER, tok]
|
351
364
|
elsif (tok = @ss.scan /[,\(\)\*]/)
|
352
365
|
yield [tok, tok]
|
353
366
|
elsif (tok = @ss.scan /[a-z_$][-0-9a-z_$.]*\b/i)
|
data/lib/sdbcli/sdb-runner.rb
CHANGED
@@ -132,7 +132,7 @@ module SimpleDB
|
|
132
132
|
rownum = items.length
|
133
133
|
@driver.delete(parsed.domain, items)
|
134
134
|
Rownum.new(rownum)
|
135
|
-
when :SELECT, :NEXT, :CURRENT
|
135
|
+
when :SELECT, :NEXT, :CURRENT, :PAGE
|
136
136
|
items = case command
|
137
137
|
when :SELECT
|
138
138
|
@driver.select(parsed.query, consistent, true)
|
@@ -140,6 +140,8 @@ module SimpleDB
|
|
140
140
|
@driver.next_list(consistent)
|
141
141
|
when :CURRENT
|
142
142
|
@driver.current_list(consistent)
|
143
|
+
when :PAGE
|
144
|
+
@driver.page_to(parsed.page, consistent)
|
143
145
|
else
|
144
146
|
raise 'must not happen'
|
145
147
|
end
|
@@ -168,7 +170,7 @@ module SimpleDB
|
|
168
170
|
begin
|
169
171
|
items = items.instance_eval(parsed.ruby.strip)
|
170
172
|
rescue SyntaxError => e
|
171
|
-
raise e.message
|
173
|
+
raise SimpleDB::Error, e.message
|
172
174
|
end
|
173
175
|
end
|
174
176
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# original code:
|
2
|
+
# http://d.hatena.ne.jp/tottokug/20120810/1344611039
|
3
|
+
module SimpleDB
|
4
|
+
class TokenGenerator
|
5
|
+
|
6
|
+
BASE_STRING = %w(
|
7
|
+
101011001110110100000000000001010111001101110010000000000010011101100011011011110110110100101110
|
8
|
+
011000010110110101100001011110100110111101101110001011100111001101100100011100110010111001010001
|
9
|
+
011101010110010101110010011110010101000001110010011011110110001101100101011100110111001101101111
|
10
|
+
011100100010111001001101011011110111001001100101010101000110111101101011011001010110111011101011
|
11
|
+
011010011100010111001011100111001000001101001101101010110000001100000000000010110100100100000000
|
12
|
+
000101000110100101101110011010010111010001101001011000010110110001000011011011110110111001101010
|
13
|
+
011101010110111001100011011101000100100101101110011001000110010101111000010110100000000000001110
|
14
|
+
011010010111001101010000011000010110011101100101010000100110111101110101011011100110010001100001
|
15
|
+
011100100111100101001010000000000000110001101100011000010111001101110100010001010110111001110100
|
16
|
+
011010010111010001111001010010010100010001011010000000000000101001101100011100100111000101000101
|
17
|
+
011011100110000101100010011011000110010101100100010010010000000000001111011100010111010101100101
|
18
|
+
011100100111100101000011011011110110110101110000011011000110010101111000011010010111010001111001
|
19
|
+
010010100000000000010011011100010111010101100101011100100111100101010011011101000111001001101001
|
20
|
+
011011100110011101000011011010000110010101100011011010110111001101110101011011010100100100000000
|
21
|
+
000010100111010101101110011010010110111101101110010010010110111001100100011001010111100001011010
|
22
|
+
000000000000110101110101011100110110010101010001011101010110010101110010011110010100100101101110
|
23
|
+
011001000110010101111000010011000000000000001101011000110110111101101110011100110110100101110011
|
24
|
+
011101000110010101101110011101000100110001010011010011100111010000000000000100100100110001101010
|
25
|
+
011000010111011001100001001011110110110001100001011011100110011100101111010100110111010001110010
|
26
|
+
011010010110111001100111001110110100110000000000000100100110110001100001011100110111010001000001
|
27
|
+
011101000111010001110010011010010110001001110101011101000110010101010110011000010110110001110101
|
28
|
+
011001010111000100000000011111100000000000000001010011000000000000001001011100110110111101110010
|
29
|
+
011101000100111101110010011001000110010101110010011101000000000000101111010011000110001101101111
|
30
|
+
011011010010111101100001011011010110000101111010011011110110111000101111011100110110010001110011
|
31
|
+
001011110101000101110101011001010111001001111001010100000111001001101111011000110110010101110011
|
32
|
+
011100110110111101110010001011110101000101110101011001010111001001111001001001000101001101101111
|
33
|
+
011100100111010001001111011100100110010001100101011100100011101101111000011100000000000000000000
|
34
|
+
000000000000000000000000
|
35
|
+
%064d
|
36
|
+
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
37
|
+
00000000000000000000000000000000000000000000000001110000011100000111000001111000
|
38
|
+
).join
|
39
|
+
|
40
|
+
CODE_TABLE = Hash[
|
41
|
+
*(0b000000..0b111111).map {|i| '%06d' % i.to_s(2) }.zip(
|
42
|
+
('A'..'Z').to_a +
|
43
|
+
('a'..'z').to_a +
|
44
|
+
('0'..'9').to_a +
|
45
|
+
['+', '/']
|
46
|
+
).flatten]
|
47
|
+
|
48
|
+
def self.next_token(limit, page)
|
49
|
+
offset = limit * (page - 1)
|
50
|
+
base = BASE_STRING % offset.to_s(2)
|
51
|
+
|
52
|
+
base.scan(/.{6}/).map {|bits|
|
53
|
+
CODE_TABLE[bits]
|
54
|
+
}.join
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdbcli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/sdbcli/sdb-parser.tab.rb
|
58
58
|
- lib/sdbcli/sdb-parser.y
|
59
59
|
- lib/sdbcli/sdb-runner.rb
|
60
|
+
- lib/sdbcli/sdb-token-generator.rb
|
60
61
|
- lib/sdbcli.rb
|
61
62
|
homepage: https://bitbucket.org/winebarrel/sdbcli
|
62
63
|
licenses: []
|