sdbcli 1.4.2 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +33 -1
- data/bin/sdbcli +2 -2
- data/lib/sdbcli/sdb-parser.tab.rb +243 -207
- data/lib/sdbcli/sdb-parser.y +16 -0
- data/lib/sdbcli/sdb-runner.rb +46 -0
- metadata +60 -46
data/README
CHANGED
@@ -92,7 +92,7 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
92
92
|
displays a present page number or displays a result of the specified page
|
93
93
|
(PAGE statement is published after SELECT statement)
|
94
94
|
|
95
|
-
DESC domain_name
|
95
|
+
DESC[RIBE] domain_name
|
96
96
|
displays information about the domain
|
97
97
|
|
98
98
|
USE region_or_endpoint
|
@@ -188,3 +188,35 @@ If '-' is specified as a file name, the input/output of data will become a stand
|
|
188
188
|
# 6 rows in set
|
189
189
|
|
190
190
|
'sum' method and 'avg' method are added to Array class.
|
191
|
+
|
192
|
+
== Group By (Aggregate)
|
193
|
+
|
194
|
+
ap-northeast-1> select * from access_logs limit 30;
|
195
|
+
---
|
196
|
+
- [20130205/host1, {host: host1, response_time: "298.37"}]
|
197
|
+
- [20130205/host2, {host: host2, response_time: "294.65"}]
|
198
|
+
- [20130205/host3, {host: host3, response_time: "293.42"}]
|
199
|
+
- [20130205/host4, {host: host4, response_time: "294.08"}]
|
200
|
+
- [20130205/host5, {host: host5, response_time: "294.3"}]
|
201
|
+
...
|
202
|
+
# 30 rows in set
|
203
|
+
|
204
|
+
ap-northeast-1> select * from access_logs limit 30 | group_by(:host) {|i| i.response_time.to_f.avg };
|
205
|
+
---
|
206
|
+
host1: 303.6425
|
207
|
+
host2: 301.8875
|
208
|
+
host3: 300.9525
|
209
|
+
host4: 302.1675
|
210
|
+
host5: 301.62
|
211
|
+
|
212
|
+
== Exec ruby or shell command
|
213
|
+
|
214
|
+
ap-northeast-1> | (1 + 1).to_f;
|
215
|
+
--- 2.0
|
216
|
+
|
217
|
+
ap-northeast-1> ! ls;
|
218
|
+
--- |
|
219
|
+
README
|
220
|
+
bin
|
221
|
+
lib
|
222
|
+
sdbcli.gemspec
|
data/bin/sdbcli
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
3
3
|
|
4
|
-
Version = '1.4.
|
4
|
+
Version = '1.4.3'
|
5
5
|
HISTORY_FILE = File.join((ENV['HOME'] || ENV['USERPROFILE'] || '.'), '.sdbcli_history')
|
6
6
|
HISTSIZE = 500
|
7
7
|
SELECT_LIMIT = 2500
|
@@ -406,7 +406,7 @@ PAGE [number]
|
|
406
406
|
displays a present page number or displays a result of the specified page
|
407
407
|
(PAGE statement is published after SELECT statement)
|
408
408
|
|
409
|
-
DESC domain_name
|
409
|
+
DESC[RIBE] domain_name
|
410
410
|
displays information about the domain
|
411
411
|
|
412
412
|
USE region_or_endpoint
|
@@ -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', 294)
|
17
17
|
|
18
18
|
KEYWORDS = %w(
|
19
19
|
ADD
|
@@ -110,6 +110,10 @@ def scan
|
|
110
110
|
yield [tok, tok]
|
111
111
|
elsif (tok = @ss.scan /[a-z_$][-0-9a-z_$.]*\b/i)
|
112
112
|
yield [:IDENTIFIER, tok]
|
113
|
+
elsif (tok = @ss.scan /\|/i)
|
114
|
+
yield [:RUBY, @ss.scan(/.*/)]
|
115
|
+
elsif (tok = @ss.scan /!/i)
|
116
|
+
yield [:EXEC, @ss.scan(/.*/)]
|
113
117
|
else
|
114
118
|
raise Racc::ParseError, ('parse error on value "%s"' % @ss.rest.inspect)
|
115
119
|
end
|
@@ -139,145 +143,151 @@ end
|
|
139
143
|
##### State transition tables begin ###
|
140
144
|
|
141
145
|
racc_action_table = [
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
146
|
+
7, 11, 78, 79, 20, 72, 45, 74, 77, 77,
|
147
|
+
42, 72, 61, 74, 18, 86, 87, 26, 86, 87,
|
148
|
+
34, 2, 6, 10, 14, 17, 62, 22, 25, 29,
|
149
|
+
86, 87, 1, 5, 9, 13, 16, 86, 87, 49,
|
150
|
+
50, 86, 87, 86, 87, 82, 83, 107, 108, 86,
|
151
|
+
87, 69, 70, 86, 87, 59, 60, 112, 108, 63,
|
152
|
+
64, 65, 65, 56, 58, 75, 57, 56, 55, 80,
|
153
|
+
81, 54, 84, 53, 65, 89, 90, 91, 92, 45,
|
154
|
+
94, 95, 96, 97, 98, 48, 47, 46, 41, 40,
|
155
|
+
106, 39, 109, 38, 37, 76 ]
|
152
156
|
|
153
157
|
racc_action_check = [
|
154
|
-
0, 0,
|
155
|
-
|
156
|
-
0, 0, 0, 0, 0, 0,
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
158
|
+
0, 0, 66, 68, 0, 83, 20, 83, 66, 68,
|
159
|
+
20, 62, 52, 62, 0, 94, 94, 0, 96, 96,
|
160
|
+
0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
|
161
|
+
95, 95, 0, 0, 0, 0, 0, 97, 97, 29,
|
162
|
+
29, 98, 98, 76, 76, 71, 71, 105, 105, 108,
|
163
|
+
108, 61, 61, 109, 109, 48, 48, 111, 111, 55,
|
164
|
+
56, 59, 60, 51, 47, 63, 46, 44, 43, 69,
|
165
|
+
70, 41, 75, 40, 77, 78, 79, 80, 82, 34,
|
166
|
+
84, 89, 90, 91, 92, 26, 25, 24, 18, 17,
|
167
|
+
99, 9, 106, 5, 1, 65 ]
|
164
168
|
|
165
169
|
racc_action_pointer = [
|
166
|
-
-1,
|
167
|
-
nil, nil, nil, nil, nil, nil, nil,
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
nil, nil,
|
174
|
-
|
175
|
-
|
176
|
-
|
170
|
+
-1, 87, nil, nil, nil, 86, nil, nil, nil, 84,
|
171
|
+
nil, nil, nil, nil, nil, nil, nil, 62, 72, nil,
|
172
|
+
-1, nil, nil, nil, 87, 59, 78, nil, nil, 8,
|
173
|
+
nil, nil, nil, nil, 72, nil, nil, nil, nil, nil,
|
174
|
+
66, 64, nil, 62, 53, nil, 66, 57, 36, nil,
|
175
|
+
nil, 49, 6, nil, 14, 52, 53, nil, nil, 54,
|
176
|
+
55, 44, 4, 57, nil, 85, -6, nil, -5, 61,
|
177
|
+
61, 32, nil, nil, nil, 63, 40, 67, 66, 67,
|
178
|
+
68, nil, 61, -2, 70, nil, nil, nil, nil, 71,
|
179
|
+
72, 73, 72, nil, 12, 27, 15, 34, 38, 76,
|
180
|
+
nil, nil, nil, nil, nil, 34, 80, nil, 46, 50,
|
181
|
+
nil, 44, nil ]
|
177
182
|
|
178
183
|
racc_action_default = [
|
179
|
-
-
|
180
|
-
-9,
|
181
|
-
-
|
182
|
-
-
|
183
|
-
-
|
184
|
-
-
|
185
|
-
-
|
186
|
-
-
|
187
|
-
-
|
188
|
-
-
|
189
|
-
-
|
184
|
+
-67, -67, -49, -17, -5, -67, -50, -18, -6, -67,
|
185
|
+
-51, -9, -7, -61, -52, -8, -62, -67, -67, -10,
|
186
|
+
-22, -11, -54, -12, -67, -67, -67, -13, -1, -67,
|
187
|
+
-14, -2, -15, -3, -47, -16, -4, -58, -59, -60,
|
188
|
+
-67, -67, -23, -67, -24, -63, -67, -67, -67, -56,
|
189
|
+
-57, -48, -67, -53, -67, -67, -67, 113, -55, -67,
|
190
|
+
-67, -67, -67, -67, -64, -67, -33, -40, -37, -44,
|
191
|
+
-45, -67, -31, -28, -30, -67, -67, -67, -34, -38,
|
192
|
+
-67, -46, -67, -67, -67, -42, -19, -20, -41, -35,
|
193
|
+
-39, -67, -67, -29, -67, -67, -67, -67, -67, -27,
|
194
|
+
-21, -32, -36, -43, -65, -67, -67, -25, -67, -67,
|
195
|
+
-66, -67, -26 ]
|
190
196
|
|
191
197
|
racc_goto_table = [
|
192
|
-
85,
|
193
|
-
|
194
|
-
|
195
|
-
|
198
|
+
85, 73, 44, 105, 66, 68, 30, 8, 12, 15,
|
199
|
+
19, 21, 23, 27, 111, 4, 51, 32, 100, 101,
|
200
|
+
102, 103, 93, 35, 3, 24, 43, 36, 99, 33,
|
201
|
+
71, 31, 110, 28, 88, 52 ]
|
196
202
|
|
197
203
|
racc_goto_check = [
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
204
|
+
18, 24, 20, 22, 25, 25, 14, 7, 8, 9,
|
205
|
+
10, 11, 12, 13, 22, 6, 20, 15, 18, 18,
|
206
|
+
18, 18, 24, 16, 17, 1, 19, 5, 21, 4,
|
207
|
+
23, 3, 18, 2, 26, 27 ]
|
202
208
|
|
203
209
|
racc_goto_pointer = [
|
204
|
-
nil,
|
205
|
-
11,
|
206
|
-
-
|
210
|
+
nil, 25, 33, 31, 29, 27, 15, 7, 8, 9,
|
211
|
+
10, 11, 12, 13, 6, 17, 23, 24, -76, 6,
|
212
|
+
-18, -64, -95, -32, -61, -55, -43, 1 ]
|
207
213
|
|
208
214
|
racc_goto_default = [
|
209
215
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
210
|
-
nil, nil, nil, nil, nil, nil,
|
211
|
-
nil, nil, nil, nil,
|
216
|
+
nil, nil, nil, nil, nil, nil, nil, nil, 104, nil,
|
217
|
+
nil, nil, nil, nil, nil, nil, 67, nil ]
|
212
218
|
|
213
219
|
racc_reduce_table = [
|
214
220
|
0, 0, :racc_error,
|
215
|
-
1,
|
216
|
-
1,
|
217
|
-
1,
|
218
|
-
1,
|
219
|
-
1,
|
220
|
-
1,
|
221
|
-
1,
|
222
|
-
1,
|
223
|
-
1,
|
224
|
-
1,
|
225
|
-
1,
|
226
|
-
1,
|
227
|
-
1,
|
228
|
-
1,
|
229
|
-
1,
|
230
|
-
1,
|
231
|
-
1,
|
232
|
-
1,
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
1,
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
1,
|
221
|
+
1, 39, :_reduce_none,
|
222
|
+
1, 39, :_reduce_none,
|
223
|
+
1, 39, :_reduce_none,
|
224
|
+
1, 39, :_reduce_none,
|
225
|
+
1, 39, :_reduce_none,
|
226
|
+
1, 39, :_reduce_none,
|
227
|
+
1, 39, :_reduce_none,
|
228
|
+
1, 39, :_reduce_none,
|
229
|
+
1, 39, :_reduce_none,
|
230
|
+
1, 39, :_reduce_none,
|
231
|
+
1, 39, :_reduce_none,
|
232
|
+
1, 39, :_reduce_none,
|
233
|
+
1, 39, :_reduce_none,
|
234
|
+
1, 39, :_reduce_none,
|
235
|
+
1, 39, :_reduce_none,
|
236
|
+
1, 39, :_reduce_none,
|
237
|
+
1, 39, :_reduce_none,
|
238
|
+
1, 39, :_reduce_18,
|
239
|
+
1, 56, :_reduce_none,
|
240
|
+
1, 56, :_reduce_none,
|
241
|
+
8, 40, :_reduce_21,
|
242
|
+
0, 57, :_reduce_22,
|
243
|
+
1, 57, :_reduce_23,
|
244
|
+
1, 57, :_reduce_none,
|
245
|
+
3, 59, :_reduce_25,
|
246
|
+
5, 59, :_reduce_26,
|
247
|
+
8, 41, :_reduce_27,
|
248
|
+
1, 61, :_reduce_28,
|
249
|
+
3, 61, :_reduce_29,
|
250
|
+
1, 62, :_reduce_none,
|
251
|
+
1, 62, :_reduce_none,
|
252
|
+
8, 42, :_reduce_32,
|
253
|
+
4, 42, :_reduce_33,
|
254
|
+
5, 42, :_reduce_34,
|
255
|
+
6, 42, :_reduce_35,
|
256
|
+
8, 43, :_reduce_36,
|
257
|
+
4, 43, :_reduce_37,
|
258
|
+
5, 43, :_reduce_38,
|
259
|
+
6, 43, :_reduce_39,
|
260
|
+
1, 63, :_reduce_40,
|
261
|
+
3, 63, :_reduce_41,
|
262
|
+
3, 64, :_reduce_42,
|
263
|
+
8, 44, :_reduce_43,
|
264
|
+
4, 44, :_reduce_44,
|
265
|
+
4, 44, :_reduce_45,
|
266
|
+
5, 44, :_reduce_46,
|
267
|
+
0, 65, :_reduce_47,
|
268
|
+
1, 65, :_reduce_none,
|
263
269
|
1, 45, :_reduce_49,
|
264
|
-
1,
|
265
|
-
|
270
|
+
1, 46, :_reduce_50,
|
271
|
+
1, 47, :_reduce_51,
|
266
272
|
1, 46, :_reduce_52,
|
267
|
-
3,
|
268
|
-
|
269
|
-
|
270
|
-
2,
|
273
|
+
3, 49, :_reduce_53,
|
274
|
+
1, 48, :_reduce_54,
|
275
|
+
3, 50, :_reduce_55,
|
276
|
+
2, 51, :_reduce_56,
|
271
277
|
2, 51, :_reduce_57,
|
272
|
-
2,
|
273
|
-
|
274
|
-
|
275
|
-
1,
|
276
|
-
|
278
|
+
2, 52, :_reduce_58,
|
279
|
+
2, 53, :_reduce_59,
|
280
|
+
2, 53, :_reduce_60,
|
281
|
+
1, 54, :_reduce_61,
|
282
|
+
1, 55, :_reduce_62,
|
283
|
+
1, 58, :_reduce_63,
|
284
|
+
3, 58, :_reduce_64,
|
285
|
+
1, 60, :_reduce_65,
|
286
|
+
3, 60, :_reduce_66 ]
|
277
287
|
|
278
|
-
racc_reduce_n =
|
288
|
+
racc_reduce_n = 67
|
279
289
|
|
280
|
-
racc_shift_n =
|
290
|
+
racc_shift_n = 113
|
281
291
|
|
282
292
|
racc_token_table = {
|
283
293
|
false => 0,
|
@@ -315,9 +325,11 @@ racc_token_table = {
|
|
315
325
|
:REGIONS => 32,
|
316
326
|
:USE => 33,
|
317
327
|
:DESC => 34,
|
318
|
-
:DESCRIBE => 35
|
328
|
+
:DESCRIBE => 35,
|
329
|
+
:RUBY => 36,
|
330
|
+
:EXEC => 37 }
|
319
331
|
|
320
|
-
racc_nt_base =
|
332
|
+
racc_nt_base = 38
|
321
333
|
|
322
334
|
racc_use_result_var = false
|
323
335
|
|
@@ -374,6 +386,8 @@ Racc_token_to_s_table = [
|
|
374
386
|
"USE",
|
375
387
|
"DESC",
|
376
388
|
"DESCRIBE",
|
389
|
+
"RUBY",
|
390
|
+
"EXEC",
|
377
391
|
"$start",
|
378
392
|
"stmt",
|
379
393
|
"get_stmt",
|
@@ -390,6 +404,8 @@ Racc_token_to_s_table = [
|
|
390
404
|
"show_stmt",
|
391
405
|
"use_stmt",
|
392
406
|
"desc_stmt",
|
407
|
+
"ruby_stmt",
|
408
|
+
"exec_stmt",
|
393
409
|
"value",
|
394
410
|
"get_output_list",
|
395
411
|
"identifier_list",
|
@@ -437,56 +453,60 @@ Racc_debug_parser = false
|
|
437
453
|
|
438
454
|
# reduce 15 omitted
|
439
455
|
|
440
|
-
|
441
|
-
|
456
|
+
# reduce 16 omitted
|
457
|
+
|
458
|
+
# reduce 17 omitted
|
459
|
+
|
460
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 22)
|
461
|
+
def _reduce_18(val, _values)
|
442
462
|
@stmt_with_expr
|
443
463
|
|
444
464
|
end
|
445
465
|
.,.,
|
446
466
|
|
447
|
-
# reduce
|
467
|
+
# reduce 19 omitted
|
448
468
|
|
449
|
-
# reduce
|
469
|
+
# reduce 20 omitted
|
450
470
|
|
451
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
452
|
-
def
|
471
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 30)
|
472
|
+
def _reduce_21(val, _values)
|
453
473
|
struct(:GET, :domain => val[3], :item_name => val[7], :attr_names => val[1])
|
454
474
|
|
455
475
|
end
|
456
476
|
.,.,
|
457
477
|
|
458
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
459
|
-
def
|
478
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 35)
|
479
|
+
def _reduce_22(val, _values)
|
460
480
|
[]
|
461
481
|
|
462
482
|
end
|
463
483
|
.,.,
|
464
484
|
|
465
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
466
|
-
def
|
485
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 39)
|
486
|
+
def _reduce_23(val, _values)
|
467
487
|
[]
|
468
488
|
|
469
489
|
end
|
470
490
|
.,.,
|
471
491
|
|
472
|
-
# reduce
|
492
|
+
# reduce 24 omitted
|
473
493
|
|
474
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
475
|
-
def
|
494
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 45)
|
495
|
+
def _reduce_25(val, _values)
|
476
496
|
[val[1]]
|
477
497
|
|
478
498
|
end
|
479
499
|
.,.,
|
480
500
|
|
481
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
482
|
-
def
|
501
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 49)
|
502
|
+
def _reduce_26(val, _values)
|
483
503
|
val[0] + [val[3]]
|
484
504
|
|
485
505
|
end
|
486
506
|
.,.,
|
487
507
|
|
488
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
489
|
-
def
|
508
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 54)
|
509
|
+
def _reduce_27(val, _values)
|
490
510
|
items = val[7].map do |vals|
|
491
511
|
unless val[4].length == vals.length
|
492
512
|
raise Racc::ParseError, 'The number of an attribute and values differs'
|
@@ -511,26 +531,26 @@ module_eval(<<'.,.,', 'sdb-parser.y', 52)
|
|
511
531
|
end
|
512
532
|
.,.,
|
513
533
|
|
514
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
515
|
-
def
|
534
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 78)
|
535
|
+
def _reduce_28(val, _values)
|
516
536
|
[val[0]]
|
517
537
|
|
518
538
|
end
|
519
539
|
.,.,
|
520
540
|
|
521
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
522
|
-
def
|
541
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 82)
|
542
|
+
def _reduce_29(val, _values)
|
523
543
|
val[0] + [val[2]]
|
524
544
|
|
525
545
|
end
|
526
546
|
.,.,
|
527
547
|
|
528
|
-
# reduce
|
548
|
+
# reduce 30 omitted
|
529
549
|
|
530
|
-
# reduce
|
550
|
+
# reduce 31 omitted
|
531
551
|
|
532
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
533
|
-
def
|
552
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 90)
|
553
|
+
def _reduce_32(val, _values)
|
534
554
|
attrs = {}
|
535
555
|
val[3].each {|k, v| attrs[k] = v }
|
536
556
|
struct(:UPDATE, :domain => val[1], :items => [[val[7], attrs]])
|
@@ -538,8 +558,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 88)
|
|
538
558
|
end
|
539
559
|
.,.,
|
540
560
|
|
541
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
542
|
-
def
|
561
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 96)
|
562
|
+
def _reduce_33(val, _values)
|
543
563
|
attrs = {}
|
544
564
|
val[3].each {|k, v| attrs[k] = v }
|
545
565
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
@@ -547,8 +567,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 94)
|
|
547
567
|
end
|
548
568
|
.,.,
|
549
569
|
|
550
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
551
|
-
def
|
570
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 102)
|
571
|
+
def _reduce_34(val, _values)
|
552
572
|
attrs = {}
|
553
573
|
val[3].each {|k, v| attrs[k] = v }
|
554
574
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
@@ -556,8 +576,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 100)
|
|
556
576
|
end
|
557
577
|
.,.,
|
558
578
|
|
559
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
560
|
-
def
|
579
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 108)
|
580
|
+
def _reduce_35(val, _values)
|
561
581
|
attrs = {}
|
562
582
|
val[3].each {|k, v| attrs[k] = v }
|
563
583
|
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
@@ -565,8 +585,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 106)
|
|
565
585
|
end
|
566
586
|
.,.,
|
567
587
|
|
568
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
569
|
-
def
|
588
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 115)
|
589
|
+
def _reduce_36(val, _values)
|
570
590
|
attrs = {}
|
571
591
|
val[3].each {|k, v| attrs[k] = v }
|
572
592
|
struct(:MERGE, :domain => val[1], :items => [[val[7], attrs]])
|
@@ -574,8 +594,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 113)
|
|
574
594
|
end
|
575
595
|
.,.,
|
576
596
|
|
577
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
578
|
-
def
|
597
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 121)
|
598
|
+
def _reduce_37(val, _values)
|
579
599
|
attrs = {}
|
580
600
|
val[3].each {|k, v| attrs[k] = v }
|
581
601
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
@@ -583,8 +603,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 119)
|
|
583
603
|
end
|
584
604
|
.,.,
|
585
605
|
|
586
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
587
|
-
def
|
606
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 127)
|
607
|
+
def _reduce_38(val, _values)
|
588
608
|
attrs = {}
|
589
609
|
val[3].each {|k, v| attrs[k] = v }
|
590
610
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
@@ -592,8 +612,8 @@ module_eval(<<'.,.,', 'sdb-parser.y', 125)
|
|
592
612
|
end
|
593
613
|
.,.,
|
594
614
|
|
595
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
596
|
-
def
|
615
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 133)
|
616
|
+
def _reduce_39(val, _values)
|
597
617
|
attrs = {}
|
598
618
|
val[3].each {|k, v| attrs[k] = v }
|
599
619
|
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
@@ -601,66 +621,66 @@ module_eval(<<'.,.,', 'sdb-parser.y', 131)
|
|
601
621
|
end
|
602
622
|
.,.,
|
603
623
|
|
604
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
605
|
-
def
|
624
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 140)
|
625
|
+
def _reduce_40(val, _values)
|
606
626
|
[val[0]]
|
607
627
|
|
608
628
|
end
|
609
629
|
.,.,
|
610
630
|
|
611
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
612
|
-
def
|
631
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 144)
|
632
|
+
def _reduce_41(val, _values)
|
613
633
|
val[0] + [val[2]]
|
614
634
|
|
615
635
|
end
|
616
636
|
.,.,
|
617
637
|
|
618
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
619
|
-
def
|
638
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 149)
|
639
|
+
def _reduce_42(val, _values)
|
620
640
|
[val[0], val[2]]
|
621
641
|
|
622
642
|
end
|
623
643
|
.,.,
|
624
644
|
|
625
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
626
|
-
def
|
645
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 154)
|
646
|
+
def _reduce_43(val, _values)
|
627
647
|
struct(:DELETE, :domain => val[3], :items => [[val[7], val[1]]])
|
628
648
|
|
629
649
|
end
|
630
650
|
.,.,
|
631
651
|
|
632
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
633
|
-
def
|
652
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 158)
|
653
|
+
def _reduce_44(val, _values)
|
634
654
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => '')
|
635
655
|
|
636
656
|
end
|
637
657
|
.,.,
|
638
658
|
|
639
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
640
|
-
def
|
659
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 162)
|
660
|
+
def _reduce_45(val, _values)
|
641
661
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE ')
|
642
662
|
|
643
663
|
end
|
644
664
|
.,.,
|
645
665
|
|
646
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
647
|
-
def
|
666
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 166)
|
667
|
+
def _reduce_46(val, _values)
|
648
668
|
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE itemName')
|
649
669
|
|
650
670
|
end
|
651
671
|
.,.,
|
652
672
|
|
653
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
654
|
-
def
|
673
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 171)
|
674
|
+
def _reduce_47(val, _values)
|
655
675
|
[]
|
656
676
|
|
657
677
|
end
|
658
678
|
.,.,
|
659
679
|
|
660
|
-
# reduce
|
680
|
+
# reduce 48 omitted
|
661
681
|
|
662
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
663
|
-
def
|
682
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 177)
|
683
|
+
def _reduce_49(val, _values)
|
664
684
|
query = ''
|
665
685
|
ruby = nil
|
666
686
|
|
@@ -687,39 +707,39 @@ module_eval(<<'.,.,', 'sdb-parser.y', 175)
|
|
687
707
|
end
|
688
708
|
.,.,
|
689
709
|
|
690
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
691
|
-
def
|
710
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 203)
|
711
|
+
def _reduce_50(val, _values)
|
692
712
|
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
693
713
|
struct(:NEXT, :ruby => ruby)
|
694
714
|
|
695
715
|
end
|
696
716
|
.,.,
|
697
717
|
|
698
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
699
|
-
def
|
718
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 209)
|
719
|
+
def _reduce_51(val, _values)
|
700
720
|
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
701
721
|
struct(:CURRENT, :ruby => ruby)
|
702
722
|
|
703
723
|
end
|
704
724
|
.,.,
|
705
725
|
|
706
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
707
|
-
def
|
726
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 215)
|
727
|
+
def _reduce_52(val, _values)
|
708
728
|
ruby = val[0].sub(/\A\s*\|\s*/, '') if val[0]
|
709
729
|
struct(:PREV, :ruby => ruby)
|
710
730
|
|
711
731
|
end
|
712
732
|
.,.,
|
713
733
|
|
714
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
715
|
-
def
|
734
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 221)
|
735
|
+
def _reduce_53(val, _values)
|
716
736
|
struct(:CREATE, :domain => val[2])
|
717
737
|
|
718
738
|
end
|
719
739
|
.,.,
|
720
740
|
|
721
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
722
|
-
def
|
741
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 226)
|
742
|
+
def _reduce_54(val, _values)
|
723
743
|
page, ruby = val[0].split(/\s*\|\s*/, 2)
|
724
744
|
page = page.split(/\s+/, 2)[1]
|
725
745
|
page = page.strip.to_i if page
|
@@ -728,71 +748,87 @@ module_eval(<<'.,.,', 'sdb-parser.y', 224)
|
|
728
748
|
end
|
729
749
|
.,.,
|
730
750
|
|
731
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
732
|
-
def
|
751
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 234)
|
752
|
+
def _reduce_55(val, _values)
|
733
753
|
struct(:DROP, :domain => val[2])
|
734
754
|
|
735
755
|
end
|
736
756
|
.,.,
|
737
757
|
|
738
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
739
|
-
def
|
758
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 239)
|
759
|
+
def _reduce_56(val, _values)
|
740
760
|
struct(:SHOW, :operand => :domains)
|
741
761
|
|
742
762
|
end
|
743
763
|
.,.,
|
744
764
|
|
745
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
746
|
-
def
|
765
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 243)
|
766
|
+
def _reduce_57(val, _values)
|
747
767
|
struct(:SHOW, :operand => :regions)
|
748
768
|
|
749
769
|
end
|
750
770
|
.,.,
|
751
771
|
|
752
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
753
|
-
def
|
772
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 247)
|
773
|
+
def _reduce_58(val, _values)
|
754
774
|
struct(:USE, :endpoint => val[1])
|
755
775
|
|
756
776
|
end
|
757
777
|
.,.,
|
758
778
|
|
759
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
760
|
-
def
|
779
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 251)
|
780
|
+
def _reduce_59(val, _values)
|
761
781
|
struct(:DESCRIBE, :domain => val[1])
|
762
782
|
|
763
783
|
end
|
764
784
|
.,.,
|
765
785
|
|
766
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
767
|
-
def
|
786
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 255)
|
787
|
+
def _reduce_60(val, _values)
|
768
788
|
struct(:DESCRIBE, :domain => val[1])
|
769
789
|
|
770
790
|
end
|
771
791
|
.,.,
|
772
792
|
|
773
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
774
|
-
def
|
793
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 259)
|
794
|
+
def _reduce_61(val, _values)
|
795
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
796
|
+
struct(:RUBY, :script => script)
|
797
|
+
|
798
|
+
end
|
799
|
+
.,.,
|
800
|
+
|
801
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 264)
|
802
|
+
def _reduce_62(val, _values)
|
803
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
804
|
+
struct(:EXEC, :script => script)
|
805
|
+
|
806
|
+
end
|
807
|
+
.,.,
|
808
|
+
|
809
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 270)
|
810
|
+
def _reduce_63(val, _values)
|
775
811
|
[val[0]]
|
776
812
|
|
777
813
|
end
|
778
814
|
.,.,
|
779
815
|
|
780
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
781
|
-
def
|
816
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 274)
|
817
|
+
def _reduce_64(val, _values)
|
782
818
|
val[0] + [val[2]]
|
783
819
|
|
784
820
|
end
|
785
821
|
.,.,
|
786
822
|
|
787
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
788
|
-
def
|
823
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 279)
|
824
|
+
def _reduce_65(val, _values)
|
789
825
|
[val[0]]
|
790
826
|
|
791
827
|
end
|
792
828
|
.,.,
|
793
829
|
|
794
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
795
|
-
def
|
830
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 283)
|
831
|
+
def _reduce_66(val, _values)
|
796
832
|
[val[0], val[2]].flatten
|
797
833
|
|
798
834
|
end
|
data/lib/sdbcli/sdb-parser.y
CHANGED
@@ -16,6 +16,8 @@ rule
|
|
16
16
|
| show_stmt
|
17
17
|
| use_stmt
|
18
18
|
| desc_stmt
|
19
|
+
| ruby_stmt
|
20
|
+
| exec_stmt
|
19
21
|
| error
|
20
22
|
{
|
21
23
|
@stmt_with_expr
|
@@ -253,6 +255,16 @@ rule
|
|
253
255
|
{
|
254
256
|
struct(:DESCRIBE, :domain => val[1])
|
255
257
|
}
|
258
|
+
ruby_stmt : RUBY
|
259
|
+
{
|
260
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
261
|
+
struct(:RUBY, :script => script)
|
262
|
+
}
|
263
|
+
exec_stmt : EXEC
|
264
|
+
{
|
265
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
266
|
+
struct(:EXEC, :script => script)
|
267
|
+
}
|
256
268
|
|
257
269
|
identifier_list: IDENTIFIER
|
258
270
|
{
|
@@ -375,6 +387,10 @@ def scan
|
|
375
387
|
yield [tok, tok]
|
376
388
|
elsif (tok = @ss.scan /[a-z_$][-0-9a-z_$.]*\b/i)
|
377
389
|
yield [:IDENTIFIER, tok]
|
390
|
+
elsif (tok = @ss.scan /\|/i)
|
391
|
+
yield [:RUBY, @ss.scan(/.*/)]
|
392
|
+
elsif (tok = @ss.scan /!/i)
|
393
|
+
yield [:EXEC, @ss.scan(/.*/)]
|
378
394
|
else
|
379
395
|
raise Racc::ParseError, ('parse error on value "%s"' % @ss.rest.inspect)
|
380
396
|
end
|
data/lib/sdbcli/sdb-runner.rb
CHANGED
@@ -168,6 +168,48 @@ module SimpleDB
|
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|
171
|
+
|
172
|
+
def items.group_by(name, &block)
|
173
|
+
item_h = {}
|
174
|
+
|
175
|
+
self.each do |item|
|
176
|
+
key = item[1][name.to_s]
|
177
|
+
|
178
|
+
unless item_h[key]
|
179
|
+
item_list = []
|
180
|
+
|
181
|
+
def item_list.method_missing(method_name)
|
182
|
+
case method_name.to_s
|
183
|
+
when /itemName/i
|
184
|
+
self.map {|i| i[0] }
|
185
|
+
else
|
186
|
+
self.map {|i| i[1][method_name.to_s] }
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
item_h[key] = item_list
|
191
|
+
end
|
192
|
+
|
193
|
+
item_h[key] << item
|
194
|
+
end
|
195
|
+
|
196
|
+
if block
|
197
|
+
old_item_h = item_h
|
198
|
+
item_h = {}
|
199
|
+
|
200
|
+
old_item_h.each do |key, item_list|
|
201
|
+
if block.arity == 2
|
202
|
+
new_item_list = block.call(item_list, key)
|
203
|
+
else
|
204
|
+
new_item_list = block.call(item_list)
|
205
|
+
end
|
206
|
+
|
207
|
+
item_h[key] = new_item_list
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
item_h
|
212
|
+
end
|
171
213
|
end
|
172
214
|
|
173
215
|
if parsed.ruby
|
@@ -207,6 +249,10 @@ module SimpleDB
|
|
207
249
|
nil
|
208
250
|
when :DESCRIBE
|
209
251
|
@driver.describe(parsed.domain)
|
252
|
+
when :RUBY
|
253
|
+
eval(parsed.script.strip)
|
254
|
+
when :EXEC
|
255
|
+
`#{parsed.script.strip}`
|
210
256
|
else
|
211
257
|
raise 'must not happen'
|
212
258
|
end
|
metadata
CHANGED
@@ -1,55 +1,59 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdbcli
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 4
|
9
|
+
- 3
|
10
|
+
version: 1.4.3
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- winebarrel
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2013-02-05 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: nokogiri
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
22
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: json
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
33
24
|
none: false
|
34
|
-
requirements:
|
35
|
-
- -
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
38
32
|
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: json
|
39
36
|
prerelease: false
|
40
|
-
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
38
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
46
48
|
description:
|
47
49
|
email: sgwr_dts@yahoo.co.jp
|
48
|
-
executables:
|
50
|
+
executables:
|
49
51
|
- sdbcli
|
50
52
|
extensions: []
|
53
|
+
|
51
54
|
extra_rdoc_files: []
|
52
|
-
|
55
|
+
|
56
|
+
files:
|
53
57
|
- README
|
54
58
|
- bin/sdbcli
|
55
59
|
- lib/sdbcli/sdb-client.rb
|
@@ -61,26 +65,36 @@ files:
|
|
61
65
|
- lib/sdbcli.rb
|
62
66
|
homepage: https://bitbucket.org/winebarrel/sdbcli
|
63
67
|
licenses: []
|
68
|
+
|
64
69
|
post_install_message:
|
65
70
|
rdoc_options: []
|
66
|
-
|
71
|
+
|
72
|
+
require_paths:
|
67
73
|
- lib
|
68
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
75
|
none: false
|
70
|
-
requirements:
|
71
|
-
- -
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
74
|
-
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
84
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
80
92
|
requirements: []
|
93
|
+
|
81
94
|
rubyforge_project:
|
82
|
-
rubygems_version: 1.8.
|
95
|
+
rubygems_version: 1.8.24
|
83
96
|
signing_key:
|
84
97
|
specification_version: 3
|
85
98
|
summary: sdbcli is an interactive command-line client of Amazon SimpleDB.
|
86
99
|
test_files: []
|
100
|
+
|