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 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.0'
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 ''
@@ -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 = :first
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 = doc.at_css('NextToken')
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', 249)
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
- 13, 14, 67, 64, 25, 63, 29, 62, 42, 65,
135
- 65, 27, 15, 43, 63, 16, 62, 44, 17, 18,
136
- 19, 40, 20, 21, 98, 94, 22, 23, 24, 71,
137
- 72, 36, 37, 93, 94, 57, 58, 45, 46, 47,
138
- 43, 48, 49, 50, 51, 52, 55, 55, 39, 59,
139
- 38, 35, 66, 41, 68, 69, 70, 34, 73, 55,
140
- 75, 76, 77, 78, 79, 29, 81, 82, 83, 84,
141
- 85, 87, 88, 89, 91, 92, 31, 95, 96, 91,
142
- 30 ]
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, 56, 53, 1, 52, 14, 52, 26, 56,
146
- 53, 14, 0, 28, 72, 0, 72, 30, 0, 0,
147
- 0, 24, 0, 0, 97, 97, 0, 0, 0, 60,
148
- 60, 21, 21, 90, 90, 47, 47, 31, 31, 32,
149
- 33, 34, 35, 42, 43, 44, 45, 46, 23, 50,
150
- 22, 20, 55, 25, 57, 58, 59, 19, 64, 65,
151
- 66, 67, 68, 70, 71, 17, 73, 76, 77, 78,
152
- 79, 81, 82, 83, 85, 86, 16, 92, 94, 95,
153
- 15 ]
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, 66, 72, 61, nil, 35,
158
- 29, 6, 46, 44, 17, 53, 5, nil, 1, nil,
159
- 13, 20, 36, 28, 37, 38, nil, nil, nil, nil,
160
- nil, nil, 39, 40, 35, 42, 43, 31, nil, nil,
161
- 44, nil, 1, -2, nil, 45, -3, 49, 49, 50,
162
- 18, nil, nil, nil, 52, 55, 52, 55, 56, nil,
163
- 56, 49, 10, 59, nil, nil, 60, 61, 61, 60,
164
- nil, 63, 64, 65, nil, 66, 63, nil, nil, nil,
165
- 22, nil, 67, nil, 70, 71, nil, 13, nil ]
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
- -53, -53, -1, -2, -3, -4, -5, -6, -7, -8,
169
- -9, -10, -11, -12, -14, -53, -53, -39, -41, -53,
170
- -53, -53, -53, -53, -53, -53, -53, -15, -16, -49,
171
- -53, -53, -53, -40, -53, -53, -44, -45, -46, -47,
172
- -48, 99, -53, -53, -53, -53, -53, -53, -42, -43,
173
- -53, -50, -53, -25, -32, -53, -29, -36, -37, -53,
174
- -53, -20, -22, -23, -26, -53, -53, -30, -53, -38,
175
- -53, -53, -53, -27, -33, -34, -31, -53, -53, -53,
176
- -21, -53, -53, -53, -13, -53, -19, -24, -28, -35,
177
- -53, -51, -53, -17, -53, -53, -52, -53, -18 ]
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
- 61, 90, 28, 53, 56, 33, 11, 6, 7, 8,
181
- 9, 97, 10, 5, 12, 26, 1, 86, 4, 60,
182
- 80, 3, 2, 74, 32 ]
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
- 18, 16, 14, 19, 19, 14, 11, 6, 7, 8,
186
- 9, 16, 10, 5, 12, 13, 1, 15, 4, 17,
187
- 18, 3, 2, 20, 21 ]
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, 16, 22, 21, 18, 13, 7, 8, 9, 10,
191
- 12, 6, 14, 1, -12, -62, -84, -33, -52, -42,
192
- -42, 7 ]
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
- 54, nil ]
201
+ nil, 56, nil ]
198
202
 
199
203
  racc_reduce_table = [
200
204
  0, 0, :racc_error,
201
- 1, 31, :_reduce_none,
202
- 1, 31, :_reduce_none,
203
- 1, 31, :_reduce_none,
204
- 1, 31, :_reduce_none,
205
- 1, 31, :_reduce_none,
206
- 1, 31, :_reduce_none,
207
- 1, 31, :_reduce_none,
208
- 1, 31, :_reduce_none,
209
- 1, 31, :_reduce_none,
210
- 1, 31, :_reduce_none,
211
- 1, 31, :_reduce_none,
212
- 1, 31, :_reduce_12,
213
- 8, 32, :_reduce_13,
214
- 0, 43, :_reduce_14,
215
- 1, 43, :_reduce_15,
216
- 1, 43, :_reduce_none,
217
- 3, 45, :_reduce_17,
218
- 5, 45, :_reduce_18,
219
- 8, 33, :_reduce_19,
220
- 1, 47, :_reduce_20,
221
- 3, 47, :_reduce_21,
222
- 1, 48, :_reduce_none,
223
- 1, 48, :_reduce_none,
224
- 8, 34, :_reduce_24,
225
- 4, 34, :_reduce_25,
226
- 5, 34, :_reduce_26,
227
- 6, 34, :_reduce_27,
228
- 8, 35, :_reduce_28,
229
- 4, 35, :_reduce_29,
230
- 5, 35, :_reduce_30,
231
- 6, 35, :_reduce_31,
232
- 1, 49, :_reduce_32,
233
- 3, 49, :_reduce_33,
234
- 3, 50, :_reduce_34,
235
- 8, 36, :_reduce_35,
236
- 4, 36, :_reduce_36,
237
- 4, 36, :_reduce_37,
238
- 5, 36, :_reduce_38,
239
- 0, 51, :_reduce_39,
240
- 1, 51, :_reduce_none,
241
- 1, 37, :_reduce_41,
242
- 3, 38, :_reduce_42,
243
- 3, 39, :_reduce_43,
244
- 2, 40, :_reduce_44,
245
- 2, 40, :_reduce_45,
246
- 2, 41, :_reduce_46,
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, 42, :_reduce_48,
249
- 1, 44, :_reduce_49,
250
- 3, 44, :_reduce_50,
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 = 53
260
+ racc_reduce_n = 55
255
261
 
256
- racc_shift_n = 99
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
- :CREATE => 21,
281
- :DOMAIN => 22,
282
- :DROP => 23,
283
- :SHOW => 24,
284
- :DOMAINS => 25,
285
- :REGIONS => 26,
286
- :USE => 27,
287
- :DESC => 28,
288
- :DESCRIBE => 29 }
289
-
290
- racc_nt_base = 30
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
- module_eval(<<'.,.,', 'sdb-parser.y', 16)
393
- def _reduce_12(val, _values)
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', 21)
400
- def _reduce_13(val, _values)
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', 26)
407
- def _reduce_14(val, _values)
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', 30)
414
- def _reduce_15(val, _values)
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 16 omitted
431
+ # reduce 17 omitted
421
432
 
422
- module_eval(<<'.,.,', 'sdb-parser.y', 36)
423
- def _reduce_17(val, _values)
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', 40)
430
- def _reduce_18(val, _values)
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', 45)
437
- def _reduce_19(val, _values)
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', 69)
463
- def _reduce_20(val, _values)
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', 73)
470
- def _reduce_21(val, _values)
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
- module_eval(<<'.,.,', 'sdb-parser.y', 81)
481
- def _reduce_24(val, _values)
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', 87)
490
- def _reduce_25(val, _values)
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', 93)
499
- def _reduce_26(val, _values)
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', 99)
508
- def _reduce_27(val, _values)
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', 106)
517
- def _reduce_28(val, _values)
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', 112)
526
- def _reduce_29(val, _values)
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', 118)
535
- def _reduce_30(val, _values)
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', 124)
544
- def _reduce_31(val, _values)
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', 131)
553
- def _reduce_32(val, _values)
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', 135)
560
- def _reduce_33(val, _values)
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', 140)
567
- def _reduce_34(val, _values)
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', 145)
574
- def _reduce_35(val, _values)
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', 149)
581
- def _reduce_36(val, _values)
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', 153)
588
- def _reduce_37(val, _values)
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', 157)
595
- def _reduce_38(val, _values)
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', 162)
602
- def _reduce_39(val, _values)
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 40 omitted
619
+ # reduce 41 omitted
609
620
 
610
- module_eval(<<'.,.,', 'sdb-parser.y', 168)
611
- def _reduce_41(val, _values)
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', 194)
639
- def _reduce_42(val, _values)
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', 199)
646
- def _reduce_43(val, _values)
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', 204)
653
- def _reduce_44(val, _values)
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', 208)
660
- def _reduce_45(val, _values)
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', 212)
667
- def _reduce_46(val, _values)
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', 216)
674
- def _reduce_47(val, _values)
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', 220)
681
- def _reduce_48(val, _values)
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', 225)
688
- def _reduce_49(val, _values)
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', 229)
695
- def _reduce_50(val, _values)
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', 234)
702
- def _reduce_51(val, _values)
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', 238)
709
- def _reduce_52(val, _values)
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
@@ -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 /`([^`]|``)*`/)
@@ -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 = @driver.select(parsed.query, consistent)
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
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.3.0
4
+ version: 1.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: