sdbcli 1.3.0 → 1.3.1
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 +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
|