sdbcli 0.4.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +4 -2
- data/bin/sdbcli +18 -7
- data/lib/sdbcli/sdb-driver.rb +51 -38
- data/lib/sdbcli/sdb-parser.tab.rb +328 -182
- data/lib/sdbcli/sdb-parser.y +115 -34
- data/lib/sdbcli/sdb-runner.rb +29 -4
- metadata +2 -2
data/README
CHANGED
@@ -52,13 +52,15 @@ https://bitbucket.org/winebarrel/sdbcli
|
|
52
52
|
GET [attr_list] FROM domain_name WHERE itemName = '...'
|
53
53
|
gets the attribute of an item
|
54
54
|
|
55
|
-
INSERT INTO domain_name (itemName, attr1, ...) VALUES ('
|
55
|
+
INSERT INTO domain_name (itemName, attr1, ...) VALUES ('name1', 'val1', ...), ('name2', 'val2', ...), ...
|
56
56
|
creates an item
|
57
57
|
|
58
|
-
UPDATE domain_name
|
58
|
+
UPDATE domain_name {SET|ADD} attr1 = 'val1', ... WHERE itemName = '...'
|
59
|
+
UPDATE domain_name {SET|ADD} attr1 = 'val1', ... [WHERE expression] [sort_instructions] [LIMIT limit]
|
59
60
|
updates an item
|
60
61
|
|
61
62
|
DELETE [attr1, ...] FROM domain_name WHERE itemName = '...'
|
63
|
+
DELETE [attr1, ...] FROM domain_name WHERE [WHERE expression] [sort_instructions] [LIMIT limit]
|
62
64
|
deletes the attribute of an item or an item
|
63
65
|
|
64
66
|
SELECT output_list FROM domain_name [WHERE expression] [sort_instructions] [LIMIT limit]
|
data/bin/sdbcli
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
$LOAD_PATH << File.join(File.
|
2
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
3
3
|
|
4
|
-
Version = '0.
|
4
|
+
Version = '1.0.0'
|
5
5
|
HISTORY_FILE = File.join((ENV['HOME'] || ENV['USERPROFILE'] || '.'), '.sdbcli_history')
|
6
6
|
HISTSIZE = 500
|
7
7
|
|
@@ -87,7 +87,16 @@ def execute(src, show_rows = false)
|
|
87
87
|
|
88
88
|
out = $runner.execute(query, inline)
|
89
89
|
|
90
|
-
if out
|
90
|
+
if out.kind_of?(Integer)
|
91
|
+
puts case $format
|
92
|
+
when :yaml
|
93
|
+
"# #{out} #{out > 1 ? 'rows' : 'row'} changed"
|
94
|
+
when :json
|
95
|
+
"// #{out} #{out > 1 ? 'rows' : 'row'} changed"
|
96
|
+
else
|
97
|
+
"# #{out} #{out > 1 ? 'rows' : 'row'} changed"
|
98
|
+
end
|
99
|
+
elsif out
|
91
100
|
str = nil
|
92
101
|
|
93
102
|
case $format
|
@@ -163,13 +172,15 @@ DROP DOMAIN domain_name
|
|
163
172
|
GET [attr_list] FROM domain_name WHERE itemName = '...'
|
164
173
|
gets the attribute of an item
|
165
174
|
|
166
|
-
INSERT INTO domain_name (itemName, attr1, ...) VALUES ('
|
175
|
+
INSERT INTO domain_name (itemName, attr1, ...) VALUES ('name1', 'val1', ...), ('name2', 'val2', ...), ...
|
167
176
|
creates an item
|
168
177
|
|
169
|
-
UPDATE domain_name
|
178
|
+
UPDATE domain_name {SET|ADD} attr1 = 'val1', ... WHERE itemName = '...'
|
179
|
+
UPDATE domain_name {SET|ADD} attr1 = 'val1', ... [WHERE expression] [sort_instructions] [LIMIT limit]
|
170
180
|
updates an item
|
171
181
|
|
172
182
|
DELETE [attr1, ...] FROM domain_name WHERE itemName = '...'
|
183
|
+
DELETE [attr1, ...] FROM domain_name WHERE [WHERE expression] [sort_instructions] [LIMIT limit]
|
173
184
|
deletes the attribute of an item or an item
|
174
185
|
|
175
186
|
SELECT output_list FROM domain_name [WHERE expression] [sort_instructions] [LIMIT limit]
|
@@ -233,8 +244,8 @@ while buf = Readline.readline(prompt, true)
|
|
233
244
|
elsif r =~ 'exit' or r =~ 'quit'
|
234
245
|
exit
|
235
246
|
elsif r =~ 'format'
|
236
|
-
case arg
|
237
|
-
when
|
247
|
+
case (arg || '').strip
|
248
|
+
when ''
|
238
249
|
puts $format
|
239
250
|
when 'yaml'
|
240
251
|
$format = :yaml
|
data/lib/sdbcli/sdb-driver.rb
CHANGED
@@ -4,6 +4,8 @@ module SimpleDB
|
|
4
4
|
class Error < StandardError; end
|
5
5
|
|
6
6
|
class Driver
|
7
|
+
MAX_NUMBER_SUBMITTED_ITEMS = 25
|
8
|
+
|
7
9
|
attr_accessor :iteratable
|
8
10
|
|
9
11
|
def initialize(accessKeyId, secretAccessKey, endpoint = 'sdb.amazonaws.com')
|
@@ -42,41 +44,50 @@ module SimpleDB
|
|
42
44
|
|
43
45
|
# attr action
|
44
46
|
|
45
|
-
def insert(domain_name,
|
46
|
-
|
47
|
-
|
47
|
+
def insert(domain_name, items = {}, consistent = false)
|
48
|
+
until (chunk = items.slice!(0, MAX_NUMBER_SUBMITTED_ITEMS)).empty?
|
49
|
+
params = {:ConsistentRead => consistent}
|
50
|
+
i = j = 0
|
48
51
|
|
49
|
-
|
50
|
-
[values].flatten.each do |v|
|
52
|
+
chunk.each do |item_name, attrs|
|
51
53
|
i += 1
|
52
|
-
params["
|
53
|
-
|
54
|
-
|
54
|
+
params["Item.#{i}.ItemName"] = item_name
|
55
|
+
|
56
|
+
(attrs || {}).each do |attr_name, values|
|
57
|
+
[values].flatten.each do |v|
|
58
|
+
j += 1
|
59
|
+
params["Item.#{i}.Attribute.#{j}.Name"] = attr_name
|
60
|
+
params["Item.#{i}.Attribute.#{j}.Value"] = v
|
61
|
+
params["Item.#{i}.Attribute.#{j}.Replace"] = false
|
62
|
+
end
|
63
|
+
end
|
55
64
|
end
|
56
|
-
end
|
57
65
|
|
58
|
-
|
66
|
+
@client.batch_put_attributes(domain_name, params)
|
67
|
+
end
|
59
68
|
end
|
60
69
|
|
61
70
|
def update(domain_name, items = {}, consistent = false)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
71
|
+
until (chunk = items.slice!(0, MAX_NUMBER_SUBMITTED_ITEMS)).empty?
|
72
|
+
params = {:ConsistentRead => consistent}
|
73
|
+
i = j = 0
|
74
|
+
|
75
|
+
chunk.each do |item_name, attrs|
|
76
|
+
i += 1
|
77
|
+
params["Item.#{i}.ItemName"] = item_name
|
78
|
+
|
79
|
+
(attrs || {}).each do |attr_name, values|
|
80
|
+
[values].flatten.each do |v|
|
81
|
+
j += 1
|
82
|
+
params["Item.#{i}.Attribute.#{j}.Name"] = attr_name
|
83
|
+
params["Item.#{i}.Attribute.#{j}.Value"] = v
|
84
|
+
params["Item.#{i}.Attribute.#{j}.Replace"] = true
|
85
|
+
end
|
75
86
|
end
|
76
87
|
end
|
77
|
-
end
|
78
88
|
|
79
|
-
|
89
|
+
@client.batch_put_attributes(domain_name, params)
|
90
|
+
end
|
80
91
|
end
|
81
92
|
|
82
93
|
def get(domain_name, item_name, attr_names = [], consistent = false)
|
@@ -100,23 +111,25 @@ module SimpleDB
|
|
100
111
|
end
|
101
112
|
|
102
113
|
def delete(domain_name, items = {}, consistent = false)
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
items.each do |item_name, attrs|
|
107
|
-
i += 1
|
108
|
-
params["Item.#{i}.ItemName"] = item_name
|
114
|
+
until (chunk = items.slice!(0, MAX_NUMBER_SUBMITTED_ITEMS)).empty?
|
115
|
+
params = {:ConsistentRead => consistent}
|
116
|
+
i = j = 0
|
109
117
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
118
|
+
chunk.each do |item_name, attrs|
|
119
|
+
i += 1
|
120
|
+
params["Item.#{i}.ItemName"] = item_name
|
121
|
+
|
122
|
+
(attrs || []).each do |attr_name, values|
|
123
|
+
[values].flatten.each do |v|
|
124
|
+
j += 1
|
125
|
+
params["Item.#{i}.Attribute.#{j}.Name"] = attr_name
|
126
|
+
params["Item.#{i}.Attribute.#{j}.Value"] = v if v
|
127
|
+
end
|
115
128
|
end
|
116
129
|
end
|
117
|
-
end
|
118
130
|
|
119
|
-
|
131
|
+
@client.batch_delete_attributes(domain_name, params)
|
132
|
+
end
|
120
133
|
end
|
121
134
|
|
122
135
|
def describe(domain_name)
|
@@ -13,9 +13,10 @@ 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', 228)
|
17
17
|
|
18
18
|
KEYWORDS = %w(
|
19
|
+
ADD
|
19
20
|
AND
|
20
21
|
ASC
|
21
22
|
BETWEEN
|
@@ -118,111 +119,141 @@ def self.parse(obj)
|
|
118
119
|
self.new(obj).parse
|
119
120
|
end
|
120
121
|
|
122
|
+
def on_error(error_token_id, error_value, value_stack)
|
123
|
+
if @stmt_with_expr
|
124
|
+
@stmt_with_expr.expr << (error_value + @ss.scan_until(/\Z/))
|
125
|
+
else
|
126
|
+
super
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
121
130
|
...end sdb-parser.y/module_eval...
|
122
131
|
##### State transition tables begin ###
|
123
132
|
|
124
133
|
racc_action_table = [
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
66,
|
131
|
-
76, 77, 78,
|
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 ]
|
132
143
|
|
133
144
|
racc_action_check = [
|
134
|
-
0,
|
135
|
-
|
136
|
-
0, 0,
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
71,
|
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 ]
|
141
154
|
|
142
155
|
racc_action_pointer = [
|
143
|
-
-
|
144
|
-
nil, nil,
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
nil, nil,
|
156
|
+
-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 ]
|
152
166
|
|
153
167
|
racc_action_default = [
|
154
|
-
-
|
155
|
-
-9, -10, -
|
156
|
-
-
|
157
|
-
-
|
158
|
-
-
|
159
|
-
-
|
160
|
-
-
|
161
|
-
-
|
162
|
-
-
|
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 ]
|
163
178
|
|
164
179
|
racc_goto_table = [
|
165
|
-
|
166
|
-
|
167
|
-
2,
|
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 ]
|
168
183
|
|
169
184
|
racc_goto_check = [
|
170
|
-
18,
|
171
|
-
|
172
|
-
2,
|
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 ]
|
173
188
|
|
174
189
|
racc_goto_pointer = [
|
175
|
-
nil,
|
176
|
-
|
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 ]
|
177
193
|
|
178
194
|
racc_goto_default = [
|
179
195
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
180
|
-
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil
|
196
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
197
|
+
54, nil ]
|
181
198
|
|
182
199
|
racc_reduce_table = [
|
183
200
|
0, 0, :racc_error,
|
184
|
-
1,
|
185
|
-
1,
|
186
|
-
1,
|
187
|
-
1,
|
188
|
-
1,
|
189
|
-
1,
|
190
|
-
1,
|
191
|
-
1,
|
192
|
-
1,
|
193
|
-
1,
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
1, 43, :
|
200
|
-
3,
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
3, 47, :_reduce_23,
|
207
|
-
8, 34, :_reduce_24,
|
208
|
-
0, 48, :_reduce_25,
|
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,
|
209
223
|
1, 48, :_reduce_none,
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
1,
|
219
|
-
3,
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
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,
|
247
|
+
2, 42, :_reduce_47,
|
248
|
+
2, 42, :_reduce_48,
|
249
|
+
1, 44, :_reduce_49,
|
250
|
+
3, 44, :_reduce_50,
|
251
|
+
1, 46, :_reduce_51,
|
252
|
+
3, 46, :_reduce_52 ]
|
253
|
+
|
254
|
+
racc_reduce_n = 53
|
255
|
+
|
256
|
+
racc_shift_n = 99
|
226
257
|
|
227
258
|
racc_token_table = {
|
228
259
|
false => 0,
|
@@ -235,27 +266,28 @@ racc_token_table = {
|
|
235
266
|
"=" => 7,
|
236
267
|
:VALUE => 8,
|
237
268
|
"*" => 9,
|
238
|
-
|
239
|
-
|
240
|
-
"
|
241
|
-
|
242
|
-
:
|
243
|
-
|
269
|
+
"(" => 10,
|
270
|
+
")" => 11,
|
271
|
+
"," => 12,
|
272
|
+
:INSERT => 13,
|
273
|
+
:INTO => 14,
|
274
|
+
:VALUES => 15,
|
244
275
|
:UPDATE => 16,
|
245
276
|
:SET => 17,
|
246
|
-
:
|
247
|
-
:
|
248
|
-
:
|
249
|
-
:
|
250
|
-
:
|
251
|
-
:
|
252
|
-
:
|
253
|
-
:
|
254
|
-
:
|
255
|
-
:
|
256
|
-
:
|
257
|
-
|
258
|
-
|
277
|
+
:ADD => 18,
|
278
|
+
:DELETE => 19,
|
279
|
+
: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
|
259
291
|
|
260
292
|
racc_use_result_var = false
|
261
293
|
|
@@ -286,14 +318,15 @@ Racc_token_to_s_table = [
|
|
286
318
|
"\"=\"",
|
287
319
|
"VALUE",
|
288
320
|
"\"*\"",
|
289
|
-
"INSERT",
|
290
|
-
"INTO",
|
291
321
|
"\"(\"",
|
292
322
|
"\")\"",
|
293
|
-
"VALUES",
|
294
323
|
"\",\"",
|
324
|
+
"INSERT",
|
325
|
+
"INTO",
|
326
|
+
"VALUES",
|
295
327
|
"UPDATE",
|
296
328
|
"SET",
|
329
|
+
"ADD",
|
297
330
|
"DELETE",
|
298
331
|
"SELECT",
|
299
332
|
"CREATE",
|
@@ -310,6 +343,7 @@ Racc_token_to_s_table = [
|
|
310
343
|
"get_stmt",
|
311
344
|
"insert_stmt",
|
312
345
|
"update_stmt",
|
346
|
+
"merge_stmt",
|
313
347
|
"delete_stmt",
|
314
348
|
"select_stmt",
|
315
349
|
"create_stmt",
|
@@ -319,8 +353,9 @@ Racc_token_to_s_table = [
|
|
319
353
|
"desc_stmt",
|
320
354
|
"get_output_list",
|
321
355
|
"identifier_list",
|
322
|
-
"
|
356
|
+
"value_list_list",
|
323
357
|
"value_list",
|
358
|
+
"insert_identifier_list",
|
324
359
|
"itemname_identifier",
|
325
360
|
"set_clause_list",
|
326
361
|
"set_clause",
|
@@ -352,196 +387,307 @@ Racc_debug_parser = false
|
|
352
387
|
|
353
388
|
# reduce 10 omitted
|
354
389
|
|
390
|
+
# reduce 11 omitted
|
391
|
+
|
355
392
|
module_eval(<<'.,.,', 'sdb-parser.y', 16)
|
356
|
-
def
|
393
|
+
def _reduce_12(val, _values)
|
394
|
+
@stmt_with_expr
|
395
|
+
|
396
|
+
end
|
397
|
+
.,.,
|
398
|
+
|
399
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 21)
|
400
|
+
def _reduce_13(val, _values)
|
357
401
|
struct(:GET, :domain => val[3], :item_name => val[7], :attr_names => val[1])
|
358
402
|
|
359
403
|
end
|
360
404
|
.,.,
|
361
405
|
|
362
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
363
|
-
def
|
406
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 26)
|
407
|
+
def _reduce_14(val, _values)
|
364
408
|
[]
|
365
409
|
|
366
410
|
end
|
367
411
|
.,.,
|
368
412
|
|
369
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
370
|
-
def
|
413
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 30)
|
414
|
+
def _reduce_15(val, _values)
|
371
415
|
[]
|
372
416
|
|
373
417
|
end
|
374
418
|
.,.,
|
375
419
|
|
376
|
-
# reduce
|
420
|
+
# reduce 16 omitted
|
377
421
|
|
378
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
379
|
-
def
|
380
|
-
|
381
|
-
|
382
|
-
|
422
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 36)
|
423
|
+
def _reduce_17(val, _values)
|
424
|
+
[val[1]]
|
425
|
+
|
426
|
+
end
|
427
|
+
.,.,
|
383
428
|
|
384
|
-
|
385
|
-
|
386
|
-
|
429
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 40)
|
430
|
+
def _reduce_18(val, _values)
|
431
|
+
val[0] + [val[3]]
|
432
|
+
|
433
|
+
end
|
434
|
+
.,.,
|
435
|
+
|
436
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 45)
|
437
|
+
def _reduce_19(val, _values)
|
438
|
+
items = val[7].map do |vals|
|
439
|
+
unless val[4].length == vals.length
|
440
|
+
raise Racc::ParseError, 'The number of an attribute and values differs'
|
441
|
+
end
|
387
442
|
|
388
|
-
|
389
|
-
|
390
|
-
|
443
|
+
attrs = {}
|
444
|
+
val[4].zip(vals).each {|k, v| attrs[k] = v }
|
445
|
+
item_name = attrs.find {|k, v| k =~ /\AitemName\Z/i }
|
391
446
|
|
392
|
-
|
393
|
-
|
447
|
+
unless item_name
|
448
|
+
raise Racc::ParseError,'itemName is not contained in the INSERT statement'
|
449
|
+
end
|
394
450
|
|
395
|
-
|
396
|
-
|
451
|
+
attrs.delete(item_name[0])
|
452
|
+
item_name = item_name[1]
|
453
|
+
|
454
|
+
[item_name, attrs]
|
455
|
+
end
|
456
|
+
|
457
|
+
struct(:INSERT, :domain => val[2], :items => items)
|
458
|
+
|
397
459
|
end
|
398
460
|
.,.,
|
399
461
|
|
400
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
401
|
-
def
|
462
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 69)
|
463
|
+
def _reduce_20(val, _values)
|
402
464
|
[val[0]]
|
403
465
|
|
404
466
|
end
|
405
467
|
.,.,
|
406
468
|
|
407
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
408
|
-
def
|
469
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 73)
|
470
|
+
def _reduce_21(val, _values)
|
409
471
|
val[0] + [val[2]]
|
410
472
|
|
411
473
|
end
|
412
474
|
.,.,
|
413
475
|
|
414
|
-
# reduce
|
476
|
+
# reduce 22 omitted
|
415
477
|
|
416
|
-
# reduce
|
478
|
+
# reduce 23 omitted
|
417
479
|
|
418
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
419
|
-
def
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
480
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 81)
|
481
|
+
def _reduce_24(val, _values)
|
482
|
+
attrs = {}
|
483
|
+
val[3].each {|k, v| attrs[k] = v }
|
484
|
+
struct(:UPDATE, :domain => val[1], :items => [[val[7], attrs]])
|
485
|
+
|
424
486
|
end
|
425
487
|
.,.,
|
426
488
|
|
427
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
428
|
-
def
|
489
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 87)
|
490
|
+
def _reduce_25(val, _values)
|
491
|
+
attrs = {}
|
492
|
+
val[3].each {|k, v| attrs[k] = v }
|
493
|
+
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
494
|
+
|
495
|
+
end
|
496
|
+
.,.,
|
497
|
+
|
498
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 93)
|
499
|
+
def _reduce_26(val, _values)
|
500
|
+
attrs = {}
|
501
|
+
val[3].each {|k, v| attrs[k] = v }
|
502
|
+
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
503
|
+
|
504
|
+
end
|
505
|
+
.,.,
|
506
|
+
|
507
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 99)
|
508
|
+
def _reduce_27(val, _values)
|
509
|
+
attrs = {}
|
510
|
+
val[3].each {|k, v| attrs[k] = v }
|
511
|
+
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
512
|
+
|
513
|
+
end
|
514
|
+
.,.,
|
515
|
+
|
516
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 106)
|
517
|
+
def _reduce_28(val, _values)
|
518
|
+
attrs = {}
|
519
|
+
val[3].each {|k, v| attrs[k] = v }
|
520
|
+
struct(:MERGE, :domain => val[1], :items => [[val[7], attrs]])
|
521
|
+
|
522
|
+
end
|
523
|
+
.,.,
|
524
|
+
|
525
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 112)
|
526
|
+
def _reduce_29(val, _values)
|
527
|
+
attrs = {}
|
528
|
+
val[3].each {|k, v| attrs[k] = v }
|
529
|
+
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
530
|
+
|
531
|
+
end
|
532
|
+
.,.,
|
533
|
+
|
534
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 118)
|
535
|
+
def _reduce_30(val, _values)
|
536
|
+
attrs = {}
|
537
|
+
val[3].each {|k, v| attrs[k] = v }
|
538
|
+
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
539
|
+
|
540
|
+
end
|
541
|
+
.,.,
|
542
|
+
|
543
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 124)
|
544
|
+
def _reduce_31(val, _values)
|
545
|
+
attrs = {}
|
546
|
+
val[3].each {|k, v| attrs[k] = v }
|
547
|
+
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
548
|
+
|
549
|
+
end
|
550
|
+
.,.,
|
551
|
+
|
552
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 131)
|
553
|
+
def _reduce_32(val, _values)
|
429
554
|
[val[0]]
|
430
555
|
|
431
556
|
end
|
432
557
|
.,.,
|
433
558
|
|
434
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
435
|
-
def
|
559
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 135)
|
560
|
+
def _reduce_33(val, _values)
|
436
561
|
val[0] + [val[2]]
|
437
562
|
|
438
563
|
end
|
439
564
|
.,.,
|
440
565
|
|
441
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
442
|
-
def
|
566
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 140)
|
567
|
+
def _reduce_34(val, _values)
|
443
568
|
[val[0], val[2]]
|
444
569
|
|
445
570
|
end
|
446
571
|
.,.,
|
447
572
|
|
448
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
449
|
-
def
|
573
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 145)
|
574
|
+
def _reduce_35(val, _values)
|
450
575
|
struct(:DELETE, :domain => val[3], :items => [[val[7], val[1]]])
|
451
576
|
|
452
577
|
end
|
453
578
|
.,.,
|
454
579
|
|
455
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
456
|
-
def
|
580
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 149)
|
581
|
+
def _reduce_36(val, _values)
|
582
|
+
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => '')
|
583
|
+
|
584
|
+
end
|
585
|
+
.,.,
|
586
|
+
|
587
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 153)
|
588
|
+
def _reduce_37(val, _values)
|
589
|
+
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE ')
|
590
|
+
|
591
|
+
end
|
592
|
+
.,.,
|
593
|
+
|
594
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 157)
|
595
|
+
def _reduce_38(val, _values)
|
596
|
+
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE itemName')
|
597
|
+
|
598
|
+
end
|
599
|
+
.,.,
|
600
|
+
|
601
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 162)
|
602
|
+
def _reduce_39(val, _values)
|
457
603
|
[]
|
458
604
|
|
459
605
|
end
|
460
606
|
.,.,
|
461
607
|
|
462
|
-
# reduce
|
608
|
+
# reduce 40 omitted
|
463
609
|
|
464
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
465
|
-
def
|
610
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 168)
|
611
|
+
def _reduce_41(val, _values)
|
466
612
|
struct(:SELECT, :query => val[0])
|
467
613
|
|
468
614
|
end
|
469
615
|
.,.,
|
470
616
|
|
471
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
472
|
-
def
|
617
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 173)
|
618
|
+
def _reduce_42(val, _values)
|
473
619
|
struct(:CREATE, :domain => val[2])
|
474
620
|
|
475
621
|
end
|
476
622
|
.,.,
|
477
623
|
|
478
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
479
|
-
def
|
624
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 178)
|
625
|
+
def _reduce_43(val, _values)
|
480
626
|
struct(:DROP, :domain => val[2])
|
481
627
|
|
482
628
|
end
|
483
629
|
.,.,
|
484
630
|
|
485
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
486
|
-
def
|
631
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 183)
|
632
|
+
def _reduce_44(val, _values)
|
487
633
|
struct(:SHOW, :operand => :domains)
|
488
634
|
|
489
635
|
end
|
490
636
|
.,.,
|
491
637
|
|
492
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
493
|
-
def
|
638
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 187)
|
639
|
+
def _reduce_45(val, _values)
|
494
640
|
struct(:SHOW, :operand => :regions)
|
495
641
|
|
496
642
|
end
|
497
643
|
.,.,
|
498
644
|
|
499
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
500
|
-
def
|
645
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 191)
|
646
|
+
def _reduce_46(val, _values)
|
501
647
|
struct(:USE, :endpoint => val[1])
|
502
648
|
|
503
649
|
end
|
504
650
|
.,.,
|
505
651
|
|
506
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
507
|
-
def
|
652
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 195)
|
653
|
+
def _reduce_47(val, _values)
|
508
654
|
struct(:DESCRIBE, :domain => val[1])
|
509
655
|
|
510
656
|
end
|
511
657
|
.,.,
|
512
658
|
|
513
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
514
|
-
def
|
659
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 199)
|
660
|
+
def _reduce_48(val, _values)
|
515
661
|
struct(:DESCRIBE, :domain => val[1])
|
516
662
|
|
517
663
|
end
|
518
664
|
.,.,
|
519
665
|
|
520
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
521
|
-
def
|
522
|
-
|
523
|
-
|
666
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 204)
|
667
|
+
def _reduce_49(val, _values)
|
668
|
+
[val[0]]
|
669
|
+
|
524
670
|
end
|
525
671
|
.,.,
|
526
672
|
|
527
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
528
|
-
def
|
529
|
-
|
530
|
-
|
673
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 208)
|
674
|
+
def _reduce_50(val, _values)
|
675
|
+
val[0] + [val[2]]
|
676
|
+
|
531
677
|
end
|
532
678
|
.,.,
|
533
679
|
|
534
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
535
|
-
def
|
536
|
-
|
537
|
-
|
680
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 213)
|
681
|
+
def _reduce_51(val, _values)
|
682
|
+
[val[0]]
|
683
|
+
|
538
684
|
end
|
539
685
|
.,.,
|
540
686
|
|
541
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
542
|
-
def
|
543
|
-
|
544
|
-
|
687
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 217)
|
688
|
+
def _reduce_52(val, _values)
|
689
|
+
[val[0], val[2]].flatten
|
690
|
+
|
545
691
|
end
|
546
692
|
.,.,
|
547
693
|
|
data/lib/sdbcli/sdb-parser.y
CHANGED
@@ -4,6 +4,7 @@ rule
|
|
4
4
|
stmt : get_stmt
|
5
5
|
| insert_stmt
|
6
6
|
| update_stmt
|
7
|
+
| merge_stmt
|
7
8
|
| delete_stmt
|
8
9
|
| select_stmt
|
9
10
|
| create_stmt
|
@@ -11,6 +12,10 @@ rule
|
|
11
12
|
| show_stmt
|
12
13
|
| use_stmt
|
13
14
|
| desc_stmt
|
15
|
+
| error
|
16
|
+
{
|
17
|
+
@stmt_with_expr
|
18
|
+
}
|
14
19
|
|
15
20
|
get_stmt : GET get_output_list FROM IDENTIFIER WHERE ITEMNAME '=' VALUE
|
16
21
|
{
|
@@ -27,26 +32,38 @@ rule
|
|
27
32
|
}
|
28
33
|
| identifier_list
|
29
34
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
value_list_list : '(' value_list ')'
|
36
|
+
{
|
37
|
+
[val[1]]
|
38
|
+
}
|
39
|
+
| value_list_list ',' '(' value_list ')'
|
40
|
+
{
|
41
|
+
val[0] + [val[3]]
|
42
|
+
}
|
35
43
|
|
36
|
-
|
37
|
-
|
38
|
-
|
44
|
+
insert_stmt : INSERT INTO IDENTIFIER '(' insert_identifier_list ')' VALUES value_list_list
|
45
|
+
{
|
46
|
+
items = val[7].map do |vals|
|
47
|
+
unless val[4].length == vals.length
|
48
|
+
raise Racc::ParseError, 'The number of an attribute and values differs'
|
49
|
+
end
|
39
50
|
|
40
|
-
|
41
|
-
|
42
|
-
|
51
|
+
attrs = {}
|
52
|
+
val[4].zip(vals).each {|k, v| attrs[k] = v }
|
53
|
+
item_name = attrs.find {|k, v| k =~ /\AitemName\Z/i }
|
43
54
|
|
44
|
-
|
45
|
-
|
55
|
+
unless item_name
|
56
|
+
raise Racc::ParseError,'itemName is not contained in the INSERT statement'
|
57
|
+
end
|
46
58
|
|
47
|
-
|
48
|
-
|
59
|
+
attrs.delete(item_name[0])
|
60
|
+
item_name = item_name[1]
|
61
|
+
|
62
|
+
[item_name, attrs]
|
63
|
+
end
|
49
64
|
|
65
|
+
struct(:INSERT, :domain => val[2], :items => items)
|
66
|
+
}
|
50
67
|
|
51
68
|
insert_identifier_list : itemname_identifier
|
52
69
|
{
|
@@ -61,11 +78,54 @@ rule
|
|
61
78
|
| IDENTIFIER
|
62
79
|
|
63
80
|
update_stmt : UPDATE IDENTIFIER SET set_clause_list WHERE ITEMNAME '=' VALUE
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
81
|
+
{
|
82
|
+
attrs = {}
|
83
|
+
val[3].each {|k, v| attrs[k] = v }
|
84
|
+
struct(:UPDATE, :domain => val[1], :items => [[val[7], attrs]])
|
85
|
+
}
|
86
|
+
| UPDATE IDENTIFIER SET set_clause_list
|
87
|
+
{
|
88
|
+
attrs = {}
|
89
|
+
val[3].each {|k, v| attrs[k] = v }
|
90
|
+
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
91
|
+
}
|
92
|
+
| UPDATE IDENTIFIER SET set_clause_list WHERE
|
93
|
+
{
|
94
|
+
attrs = {}
|
95
|
+
val[3].each {|k, v| attrs[k] = v }
|
96
|
+
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
97
|
+
}
|
98
|
+
| UPDATE IDENTIFIER SET set_clause_list WHERE ITEMNAME
|
99
|
+
{
|
100
|
+
attrs = {}
|
101
|
+
val[3].each {|k, v| attrs[k] = v }
|
102
|
+
@stmt_with_expr = struct(:UPDATE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
103
|
+
}
|
104
|
+
|
105
|
+
merge_stmt : UPDATE IDENTIFIER ADD set_clause_list WHERE ITEMNAME '=' VALUE
|
106
|
+
{
|
107
|
+
attrs = {}
|
108
|
+
val[3].each {|k, v| attrs[k] = v }
|
109
|
+
struct(:MERGE, :domain => val[1], :items => [[val[7], attrs]])
|
110
|
+
}
|
111
|
+
| UPDATE IDENTIFIER ADD set_clause_list
|
112
|
+
{
|
113
|
+
attrs = {}
|
114
|
+
val[3].each {|k, v| attrs[k] = v }
|
115
|
+
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => '')
|
116
|
+
}
|
117
|
+
| UPDATE IDENTIFIER ADD set_clause_list WHERE
|
118
|
+
{
|
119
|
+
attrs = {}
|
120
|
+
val[3].each {|k, v| attrs[k] = v }
|
121
|
+
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE ')
|
122
|
+
}
|
123
|
+
| UPDATE IDENTIFIER ADD set_clause_list WHERE ITEMNAME
|
124
|
+
{
|
125
|
+
attrs = {}
|
126
|
+
val[3].each {|k, v| attrs[k] = v }
|
127
|
+
@stmt_with_expr = struct(:MERGE_WITH_EXPR, :domain => val[1], :attrs => attrs, :expr => 'WHERE itemName')
|
128
|
+
}
|
69
129
|
|
70
130
|
set_clause_list : set_clause
|
71
131
|
{
|
@@ -85,6 +145,18 @@ rule
|
|
85
145
|
{
|
86
146
|
struct(:DELETE, :domain => val[3], :items => [[val[7], val[1]]])
|
87
147
|
}
|
148
|
+
| DELETE delete_attr_list FROM IDENTIFIER
|
149
|
+
{
|
150
|
+
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => '')
|
151
|
+
}
|
152
|
+
| DELETE delete_attr_list FROM WHERE
|
153
|
+
{
|
154
|
+
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE ')
|
155
|
+
}
|
156
|
+
| DELETE delete_attr_list FROM WHERE ITEMNAME
|
157
|
+
{
|
158
|
+
@stmt_with_expr = struct(:DELETE_WITH_EXPR, :domain => val[3], :attrs => val[1], :expr => 'WHERE itemName')
|
159
|
+
}
|
88
160
|
|
89
161
|
delete_attr_list :
|
90
162
|
{
|
@@ -129,22 +201,22 @@ rule
|
|
129
201
|
}
|
130
202
|
|
131
203
|
identifier_list: IDENTIFIER
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
204
|
+
{
|
205
|
+
[val[0]]
|
206
|
+
}
|
207
|
+
| identifier_list ',' IDENTIFIER
|
208
|
+
{
|
209
|
+
val[0] + [val[2]]
|
210
|
+
}
|
139
211
|
|
140
212
|
value_list : VALUE
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
213
|
+
{
|
214
|
+
[val[0]]
|
215
|
+
}
|
216
|
+
| value_list ',' VALUE
|
217
|
+
{
|
218
|
+
[val[0], val[2]].flatten
|
219
|
+
}
|
148
220
|
|
149
221
|
---- header
|
150
222
|
|
@@ -155,6 +227,7 @@ module SimpleDB
|
|
155
227
|
---- inner
|
156
228
|
|
157
229
|
KEYWORDS = %w(
|
230
|
+
ADD
|
158
231
|
AND
|
159
232
|
ASC
|
160
233
|
BETWEEN
|
@@ -257,6 +330,14 @@ def self.parse(obj)
|
|
257
330
|
self.new(obj).parse
|
258
331
|
end
|
259
332
|
|
333
|
+
def on_error(error_token_id, error_value, value_stack)
|
334
|
+
if @stmt_with_expr
|
335
|
+
@stmt_with_expr.expr << (error_value + @ss.scan_until(/\Z/))
|
336
|
+
else
|
337
|
+
super
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
260
341
|
---- footer
|
261
342
|
|
262
343
|
end # module SimpleDB
|
data/lib/sdbcli/sdb-runner.rb
CHANGED
@@ -48,14 +48,39 @@ module SimpleDB
|
|
48
48
|
|
49
49
|
item
|
50
50
|
when :INSERT
|
51
|
-
|
52
|
-
|
51
|
+
rownum = parsed.items.length
|
52
|
+
@driver.insert(parsed.domain, parsed.items)
|
53
|
+
rownum
|
53
54
|
when :UPDATE
|
55
|
+
rownum = parsed.items.length
|
54
56
|
@driver.update(parsed.domain, parsed.items)
|
55
|
-
|
57
|
+
rownum
|
58
|
+
when :UPDATE_WITH_EXPR
|
59
|
+
query = "SELECT itemName FROM #{parsed.domain} #{parsed.expr}"
|
60
|
+
items = @driver.select(query).map {|i| [i[0], parsed.attrs] }
|
61
|
+
rownum = items.length
|
62
|
+
@driver.update(parsed.domain, items)
|
63
|
+
rownum
|
64
|
+
when :MERGE
|
65
|
+
rownum = parsed.items.length
|
66
|
+
@driver.insert(parsed.domain, parsed.items)
|
67
|
+
rownum
|
68
|
+
when :MERGE_WITH_EXPR
|
69
|
+
query = "SELECT itemName FROM #{parsed.domain} #{parsed.expr}"
|
70
|
+
items = @driver.select(query).map {|i| [i[0], parsed.attrs] }
|
71
|
+
rownum = items.length
|
72
|
+
@driver.insert(parsed.domain, items)
|
73
|
+
rownum
|
56
74
|
when :DELETE
|
75
|
+
rownum = parsed.items.length
|
57
76
|
@driver.delete(parsed.domain, parsed.items)
|
58
|
-
|
77
|
+
rownum
|
78
|
+
when :DELETE_WITH_EXPR
|
79
|
+
query = "SELECT itemName FROM #{parsed.domain} #{parsed.expr}"
|
80
|
+
items = @driver.select(query).map {|i| [i[0], parsed.attrs] }
|
81
|
+
rownum = items.length
|
82
|
+
@driver.delete(parsed.domain, items)
|
83
|
+
rownum
|
59
84
|
when :SELECT
|
60
85
|
items = @driver.select(parsed.query)
|
61
86
|
|
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: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01
|
12
|
+
date: 2013-02-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|