sdbcli 0.4.3 → 1.0.0
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 +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
|