sdbcli 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +7 -0
- data/bin/sdbcli +21 -1
- data/lib/sdbcli/sdb-driver.rb +36 -7
- data/lib/sdbcli/sdb-parser.tab.rb +208 -189
- data/lib/sdbcli/sdb-parser.y +9 -0
- data/lib/sdbcli/sdb-runner.rb +17 -2
- metadata +1 -1
data/README
CHANGED
@@ -26,6 +26,7 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
26
26
|
--retry=NUM
|
27
27
|
--retry-interval=SECOND
|
28
28
|
--require=FILE_LIST
|
29
|
+
--iteratable
|
29
30
|
shell> export AWS_ACCESS_KEY_ID='...'
|
30
31
|
shell> export AWS_SECRET_ACCESS_KEY='...'
|
31
32
|
shell> export SDB_ENDPOINT='sdb.ap-northeast-1.amazonaws.com' # or SDB_REGION=ap-northeast-1
|
@@ -75,6 +76,10 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
75
76
|
queries using the SELECT statement
|
76
77
|
see http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/UsingSelect.html
|
77
78
|
|
79
|
+
NEXT
|
80
|
+
displays a continuation of a result
|
81
|
+
(NEXT statement is published after SELECT statement)
|
82
|
+
|
78
83
|
DESC domain_name
|
79
84
|
displays information about the domain
|
80
85
|
|
@@ -88,6 +93,8 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
88
93
|
.quit | .exit exits sdbcli
|
89
94
|
.format (yaml|json)? displays a format or changes it
|
90
95
|
.consistent (true|false)? displays ConsistentRead parameter or changes it
|
96
|
+
.iteratable (true|false)? displays iteratable option or changes it
|
97
|
+
all results are displayed if true
|
91
98
|
.timeout SECOND displays a timeout second or changes it
|
92
99
|
.version displays a version
|
93
100
|
|
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.3.
|
4
|
+
Version = '1.3.1'
|
5
5
|
HISTORY_FILE = File.join((ENV['HOME'] || ENV['USERPROFILE'] || '.'), '.sdbcli_history')
|
6
6
|
HISTSIZE = 500
|
7
7
|
SELECT_LIMIT = 2500
|
@@ -29,6 +29,7 @@ export = nil
|
|
29
29
|
$import_export_retry = 3
|
30
30
|
$retry_interval = 3
|
31
31
|
timeout = 60
|
32
|
+
iteratable = false
|
32
33
|
|
33
34
|
ARGV.options do |opt|
|
34
35
|
opt.on('-k', '--access-key=ACCESS_KEY') {|v| access_key_id = v }
|
@@ -44,6 +45,7 @@ ARGV.options do |opt|
|
|
44
45
|
opt.on('' , '--retry=NUM', Integer) {|v| $import_export_retry = v.to_i }
|
45
46
|
opt.on('' , '--retry-interval=SECOND', Integer) {|v| $retry_interval = v.to_i }
|
46
47
|
opt.on('' , '--require=FILE_LIST', Array) {|v| v.each {|i| require i} }
|
48
|
+
opt.on('' , '--iteratable') { iteratable = true }
|
47
49
|
opt.parse!
|
48
50
|
|
49
51
|
unless access_key_id and secret_access_key and sdb_endpoint
|
@@ -54,6 +56,7 @@ end
|
|
54
56
|
|
55
57
|
$runner = SimpleDB::Runner.new(access_key_id, secret_access_key, sdb_endpoint)
|
56
58
|
$runner.timeout = timeout
|
59
|
+
$runner.iteratable = iteratable
|
57
60
|
|
58
61
|
def output_error(msg, strip = false)
|
59
62
|
case $format
|
@@ -383,6 +386,10 @@ SELECT output_list FROM domain_name [WHERE expression] [sort_instructions] [LIMI
|
|
383
386
|
queries using the SELECT statement
|
384
387
|
see http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/UsingSelect.html
|
385
388
|
|
389
|
+
NEXT
|
390
|
+
displays a continuation of a result
|
391
|
+
(NEXT statement is published after SELECT statement)
|
392
|
+
|
386
393
|
DESC domain_name
|
387
394
|
displays information about the domain
|
388
395
|
|
@@ -396,6 +403,8 @@ USE region_or_endpoint
|
|
396
403
|
.quit | .exit exits sdbcli
|
397
404
|
.format (yaml|json)? displays a format or changes it
|
398
405
|
.consistent (true|false)? displays ConsistentRead parameter or changes it
|
406
|
+
.iteratable (true|false)? displays iteratable option or changes it
|
407
|
+
all results are displayed if true
|
399
408
|
.timeout SECOND displays a timeout second or changes it
|
400
409
|
.version displays a version
|
401
410
|
|
@@ -463,6 +472,17 @@ while buf = Readline.readline(prompt, true)
|
|
463
472
|
else
|
464
473
|
output_error('Invalid argument')
|
465
474
|
end
|
475
|
+
elsif r =~ 'iteratable'
|
476
|
+
case (arg || '').strip
|
477
|
+
when ''
|
478
|
+
puts $runner.iteratable
|
479
|
+
when 'true'
|
480
|
+
$runner.iteratable = true
|
481
|
+
when 'false'
|
482
|
+
$runner.iteratable = false
|
483
|
+
else
|
484
|
+
output_error('Invalid argument')
|
485
|
+
end
|
466
486
|
elsif r =~ 'timeout'
|
467
487
|
case (arg || '').strip
|
468
488
|
when ''
|
data/lib/sdbcli/sdb-driver.rb
CHANGED
@@ -10,6 +10,8 @@ module SimpleDB
|
|
10
10
|
|
11
11
|
def initialize(accessKeyId, secretAccessKey, endpoint = 'sdb.amazonaws.com')
|
12
12
|
@client = Client.new(accessKeyId, secretAccessKey, endpoint)
|
13
|
+
@select_expr = nil
|
14
|
+
@next_token = nil
|
13
15
|
end
|
14
16
|
|
15
17
|
def endpoint
|
@@ -105,11 +107,33 @@ module SimpleDB
|
|
105
107
|
attrs_to_hash(doc)
|
106
108
|
end
|
107
109
|
|
108
|
-
def select(expr, consistent = false)
|
110
|
+
def select(expr, consistent = false, persist = false)
|
109
111
|
params = {:SelectExpression => expr, :ConsistentRead => consistent}
|
110
112
|
items = []
|
111
113
|
|
112
|
-
iterate(:select, params) do |doc|
|
114
|
+
token = iterate(:select, params) do |doc|
|
115
|
+
doc.css('Item').map do |i|
|
116
|
+
items << [i.at_css('Name').content, attrs_to_hash(i)]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
if persist
|
121
|
+
@select_expr = expr
|
122
|
+
@next_token = token
|
123
|
+
end
|
124
|
+
|
125
|
+
return items
|
126
|
+
end
|
127
|
+
|
128
|
+
def next_list(consistent = false)
|
129
|
+
unless @select_expr and @next_token
|
130
|
+
return []
|
131
|
+
end
|
132
|
+
|
133
|
+
params = {:SelectExpression => @select_expr, :ConsistentRead => consistent}
|
134
|
+
items = []
|
135
|
+
|
136
|
+
@next_token = iterate(:select, params, @next_token) do |doc|
|
113
137
|
doc.css('Item').map do |i|
|
114
138
|
items << [i.at_css('Name').content, attrs_to_hash(i)]
|
115
139
|
end
|
@@ -172,33 +196,38 @@ module SimpleDB
|
|
172
196
|
return h
|
173
197
|
end
|
174
198
|
|
175
|
-
def iterate(method, params = {})
|
176
|
-
Iterator.new(@client, method, params, @iteratable).each do |doc|
|
199
|
+
def iterate(method, params = {}, token = :first)
|
200
|
+
Iterator.new(@client, method, params, @iteratable, token).each do |doc|
|
177
201
|
yield(doc)
|
178
202
|
end
|
179
203
|
end
|
180
204
|
|
181
205
|
class Iterator
|
182
|
-
def initialize(client, method, params = {}, iteratable = false)
|
206
|
+
def initialize(client, method, params = {}, iteratable = false, token = :first)
|
183
207
|
@client = client
|
184
208
|
@method = method
|
185
209
|
@params = params.dup
|
186
|
-
@token =
|
210
|
+
@token = token
|
187
211
|
@iteratable = iteratable
|
188
212
|
end
|
189
213
|
|
190
214
|
def each
|
215
|
+
token = nil
|
216
|
+
|
191
217
|
while @token
|
192
218
|
@params.update(:NextToken => @token.content) if @token != :first
|
193
219
|
doc = @client.send(@method, @params)
|
194
220
|
yield(doc)
|
221
|
+
token = doc.at_css('NextToken')
|
195
222
|
|
196
223
|
if @iteratable
|
197
|
-
@token =
|
224
|
+
@token = token
|
198
225
|
else
|
199
226
|
@token = nil
|
200
227
|
end
|
201
228
|
end
|
229
|
+
|
230
|
+
return token
|
202
231
|
end
|
203
232
|
end # Iterator
|
204
233
|
end # Driver
|
@@ -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', 256)
|
17
17
|
|
18
18
|
KEYWORDS = %w(
|
19
19
|
ADD
|
@@ -88,6 +88,8 @@ def scan
|
|
88
88
|
yield [tok.upcase.to_sym, tok]
|
89
89
|
elsif (tok = @ss.scan /SELECT\b/i)
|
90
90
|
yield [:SELECT, tok + @ss.scan(/.*/)]
|
91
|
+
elsif (tok = @ss.scan /NEXT\b/i)
|
92
|
+
yield [:NEXT, @ss.scan(/\s*\|\s*.*/)]
|
91
93
|
elsif (tok = @ss.scan /NULL\b/i)
|
92
94
|
yield [:NULL, nil]
|
93
95
|
elsif (tok = @ss.scan /`([^`]|``)*`/)
|
@@ -131,129 +133,133 @@ end
|
|
131
133
|
##### State transition tables begin ###
|
132
134
|
|
133
135
|
racc_action_table = [
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
136
|
+
14, 15, 69, 66, 27, 65, 31, 64, 44, 67,
|
137
|
+
67, 29, 16, 45, 65, 17, 64, 46, 18, 19,
|
138
|
+
20, 21, 42, 22, 23, 100, 96, 24, 25, 26,
|
139
|
+
73, 74, 38, 39, 95, 96, 59, 60, 47, 48,
|
140
|
+
49, 45, 50, 51, 52, 53, 54, 57, 57, 41,
|
141
|
+
61, 40, 37, 68, 43, 70, 71, 72, 36, 75,
|
142
|
+
57, 77, 78, 79, 80, 81, 31, 83, 84, 85,
|
143
|
+
86, 87, 89, 90, 91, 93, 94, 33, 97, 98,
|
144
|
+
93, 32 ]
|
143
145
|
|
144
146
|
racc_action_check = [
|
145
|
-
0, 0,
|
146
|
-
|
147
|
-
0,
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
147
|
+
0, 0, 58, 55, 1, 54, 15, 54, 28, 58,
|
148
|
+
55, 15, 0, 30, 74, 0, 74, 32, 0, 0,
|
149
|
+
0, 0, 26, 0, 0, 99, 99, 0, 0, 0,
|
150
|
+
62, 62, 23, 23, 92, 92, 49, 49, 33, 33,
|
151
|
+
34, 35, 36, 37, 44, 45, 46, 47, 48, 25,
|
152
|
+
52, 24, 22, 57, 27, 59, 60, 61, 21, 66,
|
153
|
+
67, 68, 69, 70, 72, 73, 18, 75, 78, 79,
|
154
|
+
80, 81, 83, 84, 85, 87, 88, 17, 94, 96,
|
155
|
+
97, 16 ]
|
154
156
|
|
155
157
|
racc_action_pointer = [
|
156
158
|
-1, 4, nil, nil, nil, nil, nil, nil, nil, nil,
|
157
|
-
nil, nil, nil, nil, 2,
|
158
|
-
29, 6,
|
159
|
-
13,
|
160
|
-
nil, nil,
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
nil,
|
165
|
-
|
159
|
+
nil, nil, nil, nil, nil, 2, 67, 73, 62, nil,
|
160
|
+
nil, 35, 29, 6, 47, 45, 18, 54, 5, nil,
|
161
|
+
1, nil, 13, 21, 37, 29, 38, 39, nil, nil,
|
162
|
+
nil, nil, nil, nil, 40, 41, 36, 43, 44, 32,
|
163
|
+
nil, nil, 45, nil, 1, -2, nil, 46, -3, 50,
|
164
|
+
50, 51, 19, nil, nil, nil, 53, 56, 53, 56,
|
165
|
+
57, nil, 57, 50, 10, 60, nil, nil, 61, 62,
|
166
|
+
62, 61, nil, 64, 65, 66, nil, 67, 64, nil,
|
167
|
+
nil, nil, 23, nil, 68, nil, 71, 72, nil, 14,
|
168
|
+
nil ]
|
166
169
|
|
167
170
|
racc_action_default = [
|
168
|
-
-
|
169
|
-
-9, -10, -11, -12, -
|
170
|
-
-
|
171
|
-
-
|
172
|
-
-48,
|
173
|
-
-
|
174
|
-
-
|
175
|
-
-
|
176
|
-
-
|
177
|
-
-
|
171
|
+
-55, -55, -1, -2, -3, -4, -5, -6, -7, -8,
|
172
|
+
-9, -10, -11, -12, -13, -15, -55, -55, -40, -42,
|
173
|
+
-43, -55, -55, -55, -55, -55, -55, -55, -55, -16,
|
174
|
+
-17, -51, -55, -55, -55, -41, -55, -55, -46, -47,
|
175
|
+
-48, -49, -50, 101, -55, -55, -55, -55, -55, -55,
|
176
|
+
-44, -45, -55, -52, -55, -26, -33, -55, -30, -37,
|
177
|
+
-38, -55, -55, -21, -23, -24, -27, -55, -55, -31,
|
178
|
+
-55, -39, -55, -55, -55, -28, -34, -35, -32, -55,
|
179
|
+
-55, -55, -22, -55, -55, -55, -14, -55, -20, -25,
|
180
|
+
-29, -36, -55, -53, -55, -18, -55, -55, -54, -55,
|
181
|
+
-19 ]
|
178
182
|
|
179
183
|
racc_goto_table = [
|
180
|
-
|
181
|
-
9,
|
182
|
-
|
184
|
+
63, 92, 30, 55, 58, 35, 12, 6, 7, 8,
|
185
|
+
9, 99, 10, 11, 5, 13, 28, 1, 88, 4,
|
186
|
+
82, 62, 3, 2, 76, 34 ]
|
183
187
|
|
184
188
|
racc_goto_check = [
|
185
|
-
|
186
|
-
9,
|
187
|
-
18, 3, 2,
|
189
|
+
19, 17, 15, 20, 20, 15, 12, 6, 7, 8,
|
190
|
+
9, 17, 10, 11, 5, 13, 14, 1, 16, 4,
|
191
|
+
19, 18, 3, 2, 21, 22 ]
|
188
192
|
|
189
193
|
racc_goto_pointer = [
|
190
|
-
nil,
|
191
|
-
12, 6,
|
192
|
-
-
|
194
|
+
nil, 17, 23, 22, 19, 14, 7, 8, 9, 10,
|
195
|
+
12, 13, 6, 15, 1, -13, -63, -86, -33, -54,
|
196
|
+
-44, -43, 7 ]
|
193
197
|
|
194
198
|
racc_goto_default = [
|
195
199
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
196
200
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
197
|
-
|
201
|
+
nil, 56, nil ]
|
198
202
|
|
199
203
|
racc_reduce_table = [
|
200
204
|
0, 0, :racc_error,
|
201
|
-
1,
|
202
|
-
1,
|
203
|
-
1,
|
204
|
-
1,
|
205
|
-
1,
|
206
|
-
1,
|
207
|
-
1,
|
208
|
-
1,
|
209
|
-
1,
|
210
|
-
1,
|
211
|
-
1,
|
212
|
-
1,
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
1,
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
1,
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
3,
|
235
|
-
|
236
|
-
|
237
|
-
4,
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
1,
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
2,
|
205
|
+
1, 32, :_reduce_none,
|
206
|
+
1, 32, :_reduce_none,
|
207
|
+
1, 32, :_reduce_none,
|
208
|
+
1, 32, :_reduce_none,
|
209
|
+
1, 32, :_reduce_none,
|
210
|
+
1, 32, :_reduce_none,
|
211
|
+
1, 32, :_reduce_none,
|
212
|
+
1, 32, :_reduce_none,
|
213
|
+
1, 32, :_reduce_none,
|
214
|
+
1, 32, :_reduce_none,
|
215
|
+
1, 32, :_reduce_none,
|
216
|
+
1, 32, :_reduce_none,
|
217
|
+
1, 32, :_reduce_13,
|
218
|
+
8, 33, :_reduce_14,
|
219
|
+
0, 45, :_reduce_15,
|
220
|
+
1, 45, :_reduce_16,
|
221
|
+
1, 45, :_reduce_none,
|
222
|
+
3, 47, :_reduce_18,
|
223
|
+
5, 47, :_reduce_19,
|
224
|
+
8, 34, :_reduce_20,
|
225
|
+
1, 49, :_reduce_21,
|
226
|
+
3, 49, :_reduce_22,
|
227
|
+
1, 50, :_reduce_none,
|
228
|
+
1, 50, :_reduce_none,
|
229
|
+
8, 35, :_reduce_25,
|
230
|
+
4, 35, :_reduce_26,
|
231
|
+
5, 35, :_reduce_27,
|
232
|
+
6, 35, :_reduce_28,
|
233
|
+
8, 36, :_reduce_29,
|
234
|
+
4, 36, :_reduce_30,
|
235
|
+
5, 36, :_reduce_31,
|
236
|
+
6, 36, :_reduce_32,
|
237
|
+
1, 51, :_reduce_33,
|
238
|
+
3, 51, :_reduce_34,
|
239
|
+
3, 52, :_reduce_35,
|
240
|
+
8, 37, :_reduce_36,
|
241
|
+
4, 37, :_reduce_37,
|
242
|
+
4, 37, :_reduce_38,
|
243
|
+
5, 37, :_reduce_39,
|
244
|
+
0, 53, :_reduce_40,
|
245
|
+
1, 53, :_reduce_none,
|
246
|
+
1, 38, :_reduce_42,
|
247
|
+
1, 39, :_reduce_43,
|
248
|
+
3, 40, :_reduce_44,
|
249
|
+
3, 41, :_reduce_45,
|
250
|
+
2, 42, :_reduce_46,
|
247
251
|
2, 42, :_reduce_47,
|
248
|
-
2,
|
249
|
-
|
250
|
-
|
252
|
+
2, 43, :_reduce_48,
|
253
|
+
2, 44, :_reduce_49,
|
254
|
+
2, 44, :_reduce_50,
|
251
255
|
1, 46, :_reduce_51,
|
252
|
-
3, 46, :_reduce_52
|
256
|
+
3, 46, :_reduce_52,
|
257
|
+
1, 48, :_reduce_53,
|
258
|
+
3, 48, :_reduce_54 ]
|
253
259
|
|
254
|
-
racc_reduce_n =
|
260
|
+
racc_reduce_n = 55
|
255
261
|
|
256
|
-
racc_shift_n =
|
262
|
+
racc_shift_n = 101
|
257
263
|
|
258
264
|
racc_token_table = {
|
259
265
|
false => 0,
|
@@ -277,17 +283,18 @@ racc_token_table = {
|
|
277
283
|
:ADD => 18,
|
278
284
|
:DELETE => 19,
|
279
285
|
:SELECT => 20,
|
280
|
-
:
|
281
|
-
:
|
282
|
-
:
|
283
|
-
:
|
284
|
-
:
|
285
|
-
:
|
286
|
-
:
|
287
|
-
:
|
288
|
-
:
|
289
|
-
|
290
|
-
|
286
|
+
:NEXT => 21,
|
287
|
+
:CREATE => 22,
|
288
|
+
:DOMAIN => 23,
|
289
|
+
:DROP => 24,
|
290
|
+
:SHOW => 25,
|
291
|
+
:DOMAINS => 26,
|
292
|
+
:REGIONS => 27,
|
293
|
+
:USE => 28,
|
294
|
+
:DESC => 29,
|
295
|
+
:DESCRIBE => 30 }
|
296
|
+
|
297
|
+
racc_nt_base = 31
|
291
298
|
|
292
299
|
racc_use_result_var = false
|
293
300
|
|
@@ -329,6 +336,7 @@ Racc_token_to_s_table = [
|
|
329
336
|
"ADD",
|
330
337
|
"DELETE",
|
331
338
|
"SELECT",
|
339
|
+
"NEXT",
|
332
340
|
"CREATE",
|
333
341
|
"DOMAIN",
|
334
342
|
"DROP",
|
@@ -346,6 +354,7 @@ Racc_token_to_s_table = [
|
|
346
354
|
"merge_stmt",
|
347
355
|
"delete_stmt",
|
348
356
|
"select_stmt",
|
357
|
+
"next_stmt",
|
349
358
|
"create_stmt",
|
350
359
|
"drop_stmt",
|
351
360
|
"show_stmt",
|
@@ -389,52 +398,54 @@ Racc_debug_parser = false
|
|
389
398
|
|
390
399
|
# reduce 11 omitted
|
391
400
|
|
392
|
-
|
393
|
-
|
401
|
+
# reduce 12 omitted
|
402
|
+
|
403
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 17)
|
404
|
+
def _reduce_13(val, _values)
|
394
405
|
@stmt_with_expr
|
395
406
|
|
396
407
|
end
|
397
408
|
.,.,
|
398
409
|
|
399
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
400
|
-
def
|
410
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 22)
|
411
|
+
def _reduce_14(val, _values)
|
401
412
|
struct(:GET, :domain => val[3], :item_name => val[7], :attr_names => val[1])
|
402
413
|
|
403
414
|
end
|
404
415
|
.,.,
|
405
416
|
|
406
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
407
|
-
def
|
417
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 27)
|
418
|
+
def _reduce_15(val, _values)
|
408
419
|
[]
|
409
420
|
|
410
421
|
end
|
411
422
|
.,.,
|
412
423
|
|
413
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
414
|
-
def
|
424
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 31)
|
425
|
+
def _reduce_16(val, _values)
|
415
426
|
[]
|
416
427
|
|
417
428
|
end
|
418
429
|
.,.,
|
419
430
|
|
420
|
-
# reduce
|
431
|
+
# reduce 17 omitted
|
421
432
|
|
422
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
423
|
-
def
|
433
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 37)
|
434
|
+
def _reduce_18(val, _values)
|
424
435
|
[val[1]]
|
425
436
|
|
426
437
|
end
|
427
438
|
.,.,
|
428
439
|
|
429
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
430
|
-
def
|
440
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 41)
|
441
|
+
def _reduce_19(val, _values)
|
431
442
|
val[0] + [val[3]]
|
432
443
|
|
433
444
|
end
|
434
445
|
.,.,
|
435
446
|
|
436
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
437
|
-
def
|
447
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 46)
|
448
|
+
def _reduce_20(val, _values)
|
438
449
|
items = val[7].map do |vals|
|
439
450
|
unless val[4].length == vals.length
|
440
451
|
raise Racc::ParseError, 'The number of an attribute and values differs'
|
@@ -459,26 +470,26 @@ module_eval(<<'.,.,', 'sdb-parser.y', 45)
|
|
459
470
|
end
|
460
471
|
.,.,
|
461
472
|
|
462
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
463
|
-
def
|
473
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 70)
|
474
|
+
def _reduce_21(val, _values)
|
464
475
|
[val[0]]
|
465
476
|
|
466
477
|
end
|
467
478
|
.,.,
|
468
479
|
|
469
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
470
|
-
def
|
480
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 74)
|
481
|
+
def _reduce_22(val, _values)
|
471
482
|
val[0] + [val[2]]
|
472
483
|
|
473
484
|
end
|
474
485
|
.,.,
|
475
486
|
|
476
|
-
# reduce 22 omitted
|
477
|
-
|
478
487
|
# reduce 23 omitted
|
479
488
|
|
480
|
-
|
481
|
-
|
489
|
+
# reduce 24 omitted
|
490
|
+
|
491
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 82)
|
492
|
+
def _reduce_25(val, _values)
|
482
493
|
attrs = {}
|
483
494
|
val[3].each {|k, v| attrs[k] = v }
|
484
495
|
struct(:UPDATE, :domain => val[1], :items => [[val[7], attrs]])
|
@@ -486,8 +497,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 81)
|
|
486
497
|
end
|
487
498
|
.,.,
|
488
499
|
|
489
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
490
|
-
def
|
500
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 88)
|
501
|
+
def _reduce_26(val, _values)
|
491
502
|
attrs = {}
|
492
503
|
val[3].each {|k, v| attrs[k] = v }
|
493
504
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
@@ -495,8 +506,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 87)
|
|
495
506
|
end
|
496
507
|
.,.,
|
497
508
|
|
498
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
499
|
-
def
|
509
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 94)
|
510
|
+
def _reduce_27(val, _values)
|
500
511
|
attrs = {}
|
501
512
|
val[3].each {|k, v| attrs[k] = v }
|
502
513
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
@@ -504,8 +515,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 93)
|
|
504
515
|
end
|
505
516
|
.,.,
|
506
517
|
|
507
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
508
|
-
def
|
518
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 100)
|
519
|
+
def _reduce_28(val, _values)
|
509
520
|
attrs = {}
|
510
521
|
val[3].each {|k, v| attrs[k] = v }
|
511
522
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
@@ -513,8 +524,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 99)
|
|
513
524
|
end
|
514
525
|
.,.,
|
515
526
|
|
516
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
517
|
-
def
|
527
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 107)
|
528
|
+
def _reduce_29(val, _values)
|
518
529
|
attrs = {}
|
519
530
|
val[3].each {|k, v| attrs[k] = v }
|
520
531
|
struct(:MERGE, :domain => val[1], :items => [[val[7], attrs]])
|
@@ -522,8 +533,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 106)
|
|
522
533
|
end
|
523
534
|
.,.,
|
524
535
|
|
525
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
526
|
-
def
|
536
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 113)
|
537
|
+
def _reduce_30(val, _values)
|
527
538
|
attrs = {}
|
528
539
|
val[3].each {|k, v| attrs[k] = v }
|
529
540
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
@@ -531,8 +542,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 112)
|
|
531
542
|
end
|
532
543
|
.,.,
|
533
544
|
|
534
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
535
|
-
def
|
545
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 119)
|
546
|
+
def _reduce_31(val, _values)
|
536
547
|
attrs = {}
|
537
548
|
val[3].each {|k, v| attrs[k] = v }
|
538
549
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
@@ -540,8 +551,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 118)
|
|
540
551
|
end
|
541
552
|
.,.,
|
542
553
|
|
543
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
544
|
-
def
|
554
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 125)
|
555
|
+
def _reduce_32(val, _values)
|
545
556
|
attrs = {}
|
546
557
|
val[3].each {|k, v| attrs[k] = v }
|
547
558
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
@@ -549,66 +560,66 @@ module_eval(<<'.,.,', 'sdb-parser.y', 124)
|
|
549
560
|
end
|
550
561
|
.,.,
|
551
562
|
|
552
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
553
|
-
def
|
563
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 132)
|
564
|
+
def _reduce_33(val, _values)
|
554
565
|
[val[0]]
|
555
566
|
|
556
567
|
end
|
557
568
|
.,.,
|
558
569
|
|
559
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
560
|
-
def
|
570
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 136)
|
571
|
+
def _reduce_34(val, _values)
|
561
572
|
val[0] + [val[2]]
|
562
573
|
|
563
574
|
end
|
564
575
|
.,.,
|
565
576
|
|
566
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
567
|
-
def
|
577
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 141)
|
578
|
+
def _reduce_35(val, _values)
|
568
579
|
[val[0], val[2]]
|
569
580
|
|
570
581
|
end
|
571
582
|
.,.,
|
572
583
|
|
573
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
574
|
-
def
|
584
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 146)
|
585
|
+
def _reduce_36(val, _values)
|
575
586
|
struct(:DELETE, :domain => val[3], :items => [[val[7], val[1]]])
|
576
587
|
|
577
588
|
end
|
578
589
|
.,.,
|
579
590
|
|
580
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
581
|
-
def
|
591
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 150)
|
592
|
+
def _reduce_37(val, _values)
|
582
593
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => '')
|
583
594
|
|
584
595
|
end
|
585
596
|
.,.,
|
586
597
|
|
587
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
588
|
-
def
|
598
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 154)
|
599
|
+
def _reduce_38(val, _values)
|
589
600
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE ')
|
590
601
|
|
591
602
|
end
|
592
603
|
.,.,
|
593
604
|
|
594
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
595
|
-
def
|
605
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 158)
|
606
|
+
def _reduce_39(val, _values)
|
596
607
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE itemName')
|
597
608
|
|
598
609
|
end
|
599
610
|
.,.,
|
600
611
|
|
601
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
602
|
-
def
|
612
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 163)
|
613
|
+
def _reduce_40(val, _values)
|
603
614
|
[]
|
604
615
|
|
605
616
|
end
|
606
617
|
.,.,
|
607
618
|
|
608
|
-
# reduce
|
619
|
+
# reduce 41 omitted
|
609
620
|
|
610
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
611
|
-
def
|
621
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 169)
|
622
|
+
def _reduce_42(val, _values)
|
612
623
|
query = ''
|
613
624
|
ruby = nil
|
614
625
|
|
@@ -635,78 +646,86 @@ module_eval(<<'.,.,', 'sdb-parser.y', 168)
|
|
635
646
|
end
|
636
647
|
.,.,
|
637
648
|
|
638
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
639
|
-
def
|
649
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 195)
|
650
|
+
def _reduce_43(val, _values)
|
651
|
+
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
652
|
+
struct(:NEXT, :ruby => ruby)
|
653
|
+
|
654
|
+
end
|
655
|
+
.,.,
|
656
|
+
|
657
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 201)
|
658
|
+
def _reduce_44(val, _values)
|
640
659
|
struct(:CREATE, :domain => val[2])
|
641
660
|
|
642
661
|
end
|
643
662
|
.,.,
|
644
663
|
|
645
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
646
|
-
def
|
664
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 206)
|
665
|
+
def _reduce_45(val, _values)
|
647
666
|
struct(:DROP, :domain => val[2])
|
648
667
|
|
649
668
|
end
|
650
669
|
.,.,
|
651
670
|
|
652
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
653
|
-
def
|
671
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 211)
|
672
|
+
def _reduce_46(val, _values)
|
654
673
|
struct(:SHOW, :operand => :domains)
|
655
674
|
|
656
675
|
end
|
657
676
|
.,.,
|
658
677
|
|
659
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
660
|
-
def
|
678
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 215)
|
679
|
+
def _reduce_47(val, _values)
|
661
680
|
struct(:SHOW, :operand => :regions)
|
662
681
|
|
663
682
|
end
|
664
683
|
.,.,
|
665
684
|
|
666
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
667
|
-
def
|
685
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 219)
|
686
|
+
def _reduce_48(val, _values)
|
668
687
|
struct(:USE, :endpoint => val[1])
|
669
688
|
|
670
689
|
end
|
671
690
|
.,.,
|
672
691
|
|
673
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
674
|
-
def
|
692
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 223)
|
693
|
+
def _reduce_49(val, _values)
|
675
694
|
struct(:DESCRIBE, :domain => val[1])
|
676
695
|
|
677
696
|
end
|
678
697
|
.,.,
|
679
698
|
|
680
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
681
|
-
def
|
699
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 227)
|
700
|
+
def _reduce_50(val, _values)
|
682
701
|
struct(:DESCRIBE, :domain => val[1])
|
683
702
|
|
684
703
|
end
|
685
704
|
.,.,
|
686
705
|
|
687
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
688
|
-
def
|
706
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 232)
|
707
|
+
def _reduce_51(val, _values)
|
689
708
|
[val[0]]
|
690
709
|
|
691
710
|
end
|
692
711
|
.,.,
|
693
712
|
|
694
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
695
|
-
def
|
713
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 236)
|
714
|
+
def _reduce_52(val, _values)
|
696
715
|
val[0] + [val[2]]
|
697
716
|
|
698
717
|
end
|
699
718
|
.,.,
|
700
719
|
|
701
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
702
|
-
def
|
720
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 241)
|
721
|
+
def _reduce_53(val, _values)
|
703
722
|
[val[0]]
|
704
723
|
|
705
724
|
end
|
706
725
|
.,.,
|
707
726
|
|
708
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
709
|
-
def
|
727
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 245)
|
728
|
+
def _reduce_54(val, _values)
|
710
729
|
[val[0], val[2]].flatten
|
711
730
|
|
712
731
|
end
|
data/lib/sdbcli/sdb-parser.y
CHANGED
@@ -7,6 +7,7 @@ rule
|
|
7
7
|
| merge_stmt
|
8
8
|
| delete_stmt
|
9
9
|
| select_stmt
|
10
|
+
| next_stmt
|
10
11
|
| create_stmt
|
11
12
|
| drop_stmt
|
12
13
|
| show_stmt
|
@@ -190,6 +191,12 @@ rule
|
|
190
191
|
struct(:SELECT, :query => query, :ruby => ruby)
|
191
192
|
}
|
192
193
|
|
194
|
+
next_stmt : NEXT
|
195
|
+
{
|
196
|
+
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
197
|
+
struct(:NEXT, :ruby => ruby)
|
198
|
+
}
|
199
|
+
|
193
200
|
create_stmt : CREATE DOMAIN IDENTIFIER
|
194
201
|
{
|
195
202
|
struct(:CREATE, :domain => val[2])
|
@@ -320,6 +327,8 @@ def scan
|
|
320
327
|
yield [tok.upcase.to_sym, tok]
|
321
328
|
elsif (tok = @ss.scan /SELECT\b/i)
|
322
329
|
yield [:SELECT, tok + @ss.scan(/.*/)]
|
330
|
+
elsif (tok = @ss.scan /NEXT\b/i)
|
331
|
+
yield [:NEXT, @ss.scan(/\s*\|\s*.*/)]
|
323
332
|
elsif (tok = @ss.scan /NULL\b/i)
|
324
333
|
yield [:NULL, nil]
|
325
334
|
elsif (tok = @ss.scan /`([^`]|``)*`/)
|
data/lib/sdbcli/sdb-runner.rb
CHANGED
@@ -73,6 +73,14 @@ module SimpleDB
|
|
73
73
|
@driver.timeout = v
|
74
74
|
end
|
75
75
|
|
76
|
+
def iteratable
|
77
|
+
@driver.iteratable
|
78
|
+
end
|
79
|
+
|
80
|
+
def iteratable=(v)
|
81
|
+
@driver.iteratable = v
|
82
|
+
end
|
83
|
+
|
76
84
|
def region
|
77
85
|
REGIONS[endpoint]
|
78
86
|
end
|
@@ -124,8 +132,15 @@ module SimpleDB
|
|
124
132
|
rownum = items.length
|
125
133
|
@driver.delete(parsed.domain, items)
|
126
134
|
Rownum.new(rownum)
|
127
|
-
when :SELECT
|
128
|
-
items =
|
135
|
+
when :SELECT, :NEXT
|
136
|
+
items = case command
|
137
|
+
when :SELECT
|
138
|
+
@driver.select(parsed.query, consistent, true)
|
139
|
+
when :NEXT
|
140
|
+
@driver.next_list(consistent)
|
141
|
+
else
|
142
|
+
raise 'must not happen'
|
143
|
+
end
|
129
144
|
|
130
145
|
def items.method_missing(method_name)
|
131
146
|
case method_name.to_s
|