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 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: