sdbcli 1.4.5 → 1.4.6
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 +8 -0
- data/bin/sdbcli +1 -1
- data/lib/sdbcli/sdb-parser.tab.rb +141 -89
- data/lib/sdbcli/sdb-parser.y +68 -16
- data/lib/sdbcli/sdb-runner.rb +14 -7
- metadata +46 -60
data/README
CHANGED
@@ -189,6 +189,14 @@ If '-' is specified as a file name, the input/output of data will become a stand
|
|
189
189
|
|
190
190
|
'sum' method and 'avg' method are added to Array class.
|
191
191
|
|
192
|
+
== Pipe to shell
|
193
|
+
|
194
|
+
ap-northeast-1> select * from employees limit 3 ! awk '{print $1}' ;
|
195
|
+
--- |
|
196
|
+
["100000",
|
197
|
+
["100001",
|
198
|
+
["100002",
|
199
|
+
|
192
200
|
== Group By (Aggregate)
|
193
201
|
|
194
202
|
ap-northeast-1> select * from access_logs limit 30;
|
data/bin/sdbcli
CHANGED
@@ -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', 346)
|
17
17
|
|
18
18
|
KEYWORDS = %w(
|
19
19
|
ADD
|
@@ -89,13 +89,13 @@ def scan
|
|
89
89
|
elsif (tok = @ss.scan /SELECT\b/i)
|
90
90
|
yield [:SELECT, tok + @ss.scan(/.*/)]
|
91
91
|
elsif (tok = @ss.scan /N(EXT)?\b/i)
|
92
|
-
yield [:NEXT, @ss.scan(/\s
|
92
|
+
yield [:NEXT, @ss.scan(/\s*[|!]\s*.*/)]
|
93
93
|
elsif (tok = @ss.scan /C(URRENT)?\b/i)
|
94
|
-
yield [:CURRENT, @ss.scan(/\s
|
94
|
+
yield [:CURRENT, @ss.scan(/\s*[|!]\s*.*/)]
|
95
95
|
elsif (tok = @ss.scan /P(REV)?\b/i)
|
96
|
-
yield [:PREV, @ss.scan(/\s
|
96
|
+
yield [:PREV, @ss.scan(/\s*[|!]\s*.*/)]
|
97
97
|
elsif (tok = @ss.scan /PAGE(\s+\d+)?/i)
|
98
|
-
yield [:PAGE, tok + @ss.scan(/(\s
|
98
|
+
yield [:PAGE, tok + @ss.scan(/(\s*[|!]\s*.*)?/)]
|
99
99
|
elsif (tok = @ss.scan /NULL\b/i)
|
100
100
|
yield [:NULL, nil]
|
101
101
|
elsif (tok = @ss.scan /`([^`]|``)*`/)
|
@@ -143,78 +143,78 @@ end
|
|
143
143
|
##### State transition tables begin ###
|
144
144
|
|
145
145
|
racc_action_table = [
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
64,
|
153
|
-
81,
|
154
|
-
|
155
|
-
106,
|
146
|
+
19, 10, 79, 76, 20, 75, 41, 74, 77, 77,
|
147
|
+
39, 75, 37, 74, 21, 87, 88, 22, 87, 88,
|
148
|
+
23, 24, 25, 26, 27, 28, 62, 29, 30, 31,
|
149
|
+
48, 49, 32, 33, 34, 35, 36, 87, 88, 87,
|
150
|
+
88, 107, 108, 87, 88, 112, 108, 87, 88, 83,
|
151
|
+
84, 57, 58, 87, 88, 87, 88, 69, 70, 63,
|
152
|
+
64, 67, 67, 60, 71, 55, 59, 78, 61, 80,
|
153
|
+
81, 82, 56, 85, 67, 55, 90, 91, 92, 93,
|
154
|
+
54, 95, 96, 97, 53, 99, 52, 51, 50, 47,
|
155
|
+
106, 46, 109, 41, 43, 42 ]
|
156
156
|
|
157
157
|
racc_action_check = [
|
158
|
-
0, 0,
|
159
|
-
20,
|
158
|
+
0, 0, 68, 65, 0, 64, 20, 64, 68, 65,
|
159
|
+
20, 84, 1, 84, 0, 95, 95, 0, 99, 99,
|
160
160
|
0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
56,
|
165
|
-
70,
|
166
|
-
|
167
|
-
|
161
|
+
31, 31, 0, 0, 0, 0, 0, 97, 97, 96,
|
162
|
+
96, 104, 104, 92, 92, 111, 111, 78, 78, 72,
|
163
|
+
72, 43, 43, 108, 108, 109, 109, 59, 59, 55,
|
164
|
+
56, 57, 58, 46, 62, 45, 44, 67, 47, 69,
|
165
|
+
70, 71, 42, 76, 77, 40, 79, 80, 82, 83,
|
166
|
+
38, 85, 90, 91, 37, 93, 34, 33, 32, 30,
|
167
|
+
100, 28, 106, 23, 22, 21 ]
|
168
168
|
|
169
169
|
racc_action_pointer = [
|
170
|
-
-1,
|
171
|
-
nil, nil, nil, nil, nil, nil, nil,
|
172
|
-
-1, nil, nil, nil,
|
173
|
-
|
174
|
-
|
175
|
-
nil,
|
176
|
-
|
177
|
-
61,
|
178
|
-
68, nil,
|
179
|
-
72, 73,
|
180
|
-
|
181
|
-
nil,
|
170
|
+
-1, 12, nil, nil, nil, nil, nil, nil, nil, nil,
|
171
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
172
|
+
-1, 79, 87, 86, nil, nil, nil, nil, 64, nil,
|
173
|
+
62, -1, 81, 80, 79, nil, nil, 84, 74, nil,
|
174
|
+
61, nil, 65, 32, 60, 51, 56, 61, nil, nil,
|
175
|
+
nil, nil, nil, nil, 19, 52, 48, 54, 55, 50,
|
176
|
+
nil, nil, 56, nil, -2, -5, nil, 57, -6, 61,
|
177
|
+
61, 62, 36, nil, nil, nil, 64, 67, 44, 67,
|
178
|
+
68, nil, 68, 62, 4, 71, nil, nil, nil, nil,
|
179
|
+
72, 73, 40, 73, nil, 12, 36, 34, nil, 15,
|
180
|
+
76, nil, nil, nil, 28, nil, 80, nil, 50, 52,
|
181
|
+
nil, 32, nil ]
|
182
182
|
|
183
183
|
racc_action_default = [
|
184
|
-
-67, -67,
|
185
|
-
|
186
|
-
-22, -
|
187
|
-
-
|
188
|
-
-
|
189
|
-
-
|
190
|
-
-
|
191
|
-
-45, -67, -
|
192
|
-
-67, -46, -67, -67, -67, -
|
193
|
-
-39, -67, -67, -
|
194
|
-
-
|
184
|
+
-67, -67, -1, -2, -3, -4, -5, -6, -7, -8,
|
185
|
+
-9, -10, -11, -12, -13, -14, -15, -16, -17, -18,
|
186
|
+
-22, -67, -67, -47, -49, -50, -51, -52, -67, -54,
|
187
|
+
-67, -67, -67, -67, -67, -61, -62, -67, -67, -23,
|
188
|
+
-24, -63, -67, -67, -67, -48, -67, -67, -56, -57,
|
189
|
+
-58, -59, -60, 113, -67, -67, -67, -67, -67, -67,
|
190
|
+
-53, -55, -67, -64, -67, -33, -40, -67, -37, -44,
|
191
|
+
-45, -67, -67, -28, -30, -31, -34, -67, -67, -38,
|
192
|
+
-67, -46, -67, -67, -67, -35, -41, -19, -20, -42,
|
193
|
+
-39, -67, -67, -67, -29, -67, -67, -67, -21, -67,
|
194
|
+
-27, -32, -36, -43, -67, -65, -67, -25, -67, -67,
|
195
195
|
-66, -67, -26 ]
|
196
196
|
|
197
197
|
racc_goto_table = [
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
198
|
+
89, 73, 104, 40, 65, 68, 45, 15, 7, 8,
|
199
|
+
9, 11, 111, 12, 98, 13, 14, 101, 102, 103,
|
200
|
+
6, 94, 16, 17, 18, 1, 38, 5, 100, 4,
|
201
|
+
110, 72, 3, 2, 86, 44 ]
|
202
202
|
|
203
203
|
racc_goto_check = [
|
204
|
-
18, 24,
|
205
|
-
10,
|
206
|
-
|
207
|
-
23, 3,
|
204
|
+
18, 24, 22, 20, 25, 25, 20, 14, 7, 8,
|
205
|
+
9, 10, 22, 11, 18, 12, 13, 18, 18, 18,
|
206
|
+
6, 24, 15, 16, 17, 1, 19, 5, 21, 4,
|
207
|
+
18, 23, 3, 2, 26, 27 ]
|
208
208
|
|
209
209
|
racc_goto_pointer = [
|
210
|
-
nil, 25, 33,
|
211
|
-
|
212
|
-
-
|
210
|
+
nil, 25, 33, 32, 29, 27, 20, 8, 9, 10,
|
211
|
+
11, 13, 15, 16, 7, 22, 23, 24, -78, 6,
|
212
|
+
-17, -65, -97, -33, -63, -53, -43, 12 ]
|
213
213
|
|
214
214
|
racc_goto_default = [
|
215
215
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
216
|
-
nil, nil, nil, nil, nil, nil, nil, nil,
|
217
|
-
nil, nil, nil, nil, nil, nil,
|
216
|
+
nil, nil, nil, nil, nil, nil, nil, nil, 105, nil,
|
217
|
+
nil, nil, nil, nil, nil, nil, 66, nil ]
|
218
218
|
|
219
219
|
racc_reduce_table = [
|
220
220
|
0, 0, :racc_error,
|
@@ -682,12 +682,13 @@ module_eval(<<'.,.,', 'sdb-parser.y', 171)
|
|
682
682
|
module_eval(<<'.,.,', 'sdb-parser.y', 177)
|
683
683
|
def _reduce_49(val, _values)
|
684
684
|
query = ''
|
685
|
-
|
685
|
+
script = nil
|
686
|
+
script_type = nil
|
686
687
|
|
687
688
|
ss = StringScanner.new(val[0])
|
688
689
|
|
689
690
|
until ss.eos?
|
690
|
-
if (tok = ss.scan /[^`'"
|
691
|
+
if (tok = ss.scan /[^`'"|!]+/) #'
|
691
692
|
query << tok
|
692
693
|
elsif (tok = ss.scan /`(?:[^`]|``)*`/)
|
693
694
|
query << tok
|
@@ -696,101 +697,152 @@ module_eval(<<'.,.,', 'sdb-parser.y', 177)
|
|
696
697
|
elsif (tok = ss.scan /"(?:[^"]|"")*"/) #"
|
697
698
|
query << tok
|
698
699
|
elsif (tok = ss.scan /\|/)
|
699
|
-
|
700
|
+
script = ss.scan_until(/\Z/)
|
701
|
+
script_type = :ruby
|
702
|
+
elsif (tok = ss.scan /!/)
|
703
|
+
script = ss.scan_until(/\Z/)
|
704
|
+
script_type = :shell
|
700
705
|
elsif (tok = ss.scan /./)
|
701
706
|
query << tok
|
702
707
|
end
|
703
708
|
end
|
704
709
|
|
705
|
-
struct(:SELECT, :query => query, :
|
710
|
+
struct(:SELECT, :query => query, :script => script, :script_type => script_type)
|
706
711
|
|
707
712
|
end
|
708
713
|
.,.,
|
709
714
|
|
710
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
715
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 208)
|
711
716
|
def _reduce_50(val, _values)
|
712
|
-
|
713
|
-
|
717
|
+
script = nil
|
718
|
+
script_type = nil
|
719
|
+
|
720
|
+
case val[0]
|
721
|
+
when /\A\s*\|\s*/
|
722
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
723
|
+
script_type = :ruby
|
724
|
+
when /\A\s*!\s*/
|
725
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
726
|
+
script_type = :shell
|
727
|
+
end
|
728
|
+
|
729
|
+
struct(:NEXT, :script => script, :script_type => script_type)
|
714
730
|
|
715
731
|
end
|
716
732
|
.,.,
|
717
733
|
|
718
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
734
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 225)
|
719
735
|
def _reduce_51(val, _values)
|
720
|
-
|
721
|
-
|
736
|
+
script = nil
|
737
|
+
script_type = nil
|
738
|
+
|
739
|
+
case val[0]
|
740
|
+
when /\A\s*\|\s*/
|
741
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
742
|
+
script_type = :ruby
|
743
|
+
when /\A\s*!\s*/
|
744
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
745
|
+
script_type = :shell
|
746
|
+
end
|
747
|
+
|
748
|
+
struct(:CURRENT, :script => script, :script_type => script_type)
|
722
749
|
|
723
750
|
end
|
724
751
|
.,.,
|
725
752
|
|
726
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
753
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 242)
|
727
754
|
def _reduce_52(val, _values)
|
728
|
-
|
729
|
-
|
755
|
+
script = nil
|
756
|
+
script_type = nil
|
757
|
+
|
758
|
+
case val[0]
|
759
|
+
when /\A\s*\|\s*/
|
760
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
761
|
+
script_type = :ruby
|
762
|
+
when /\A\s*!\s*/
|
763
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
764
|
+
script_type = :shell
|
765
|
+
end
|
766
|
+
|
767
|
+
struct(:PREV, :script => script, :script_type => script_type)
|
730
768
|
|
731
769
|
end
|
732
770
|
.,.,
|
733
771
|
|
734
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
772
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 259)
|
735
773
|
def _reduce_53(val, _values)
|
736
774
|
struct(:CREATE, :domain => val[2])
|
737
775
|
|
738
776
|
end
|
739
777
|
.,.,
|
740
778
|
|
741
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
779
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 264)
|
742
780
|
def _reduce_54(val, _values)
|
743
|
-
page
|
781
|
+
page = nil
|
782
|
+
script = nil
|
783
|
+
script_type = nil
|
784
|
+
|
785
|
+
case val[0]
|
786
|
+
when /\s*\|\s*/
|
787
|
+
page, script = val[0].split(/\s*\|\s*/, 2)
|
788
|
+
script_type = :ruby
|
789
|
+
when /\s*!\s*/
|
790
|
+
page, script = val[0].split(/\s*!\s*/, 2)
|
791
|
+
script_type = :shell
|
792
|
+
else
|
793
|
+
page = val[0]
|
794
|
+
end
|
795
|
+
|
744
796
|
page = page.split(/\s+/, 2)[1]
|
745
797
|
page = page.strip.to_i if page
|
746
|
-
struct(:PAGE, :page => page, :
|
798
|
+
struct(:PAGE, :page => page, :script => script, :script_type => script_type)
|
747
799
|
|
748
800
|
end
|
749
801
|
.,.,
|
750
802
|
|
751
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
803
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 286)
|
752
804
|
def _reduce_55(val, _values)
|
753
805
|
struct(:DROP, :domain => val[2])
|
754
806
|
|
755
807
|
end
|
756
808
|
.,.,
|
757
809
|
|
758
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
810
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 291)
|
759
811
|
def _reduce_56(val, _values)
|
760
812
|
struct(:SHOW, :operand => :domains)
|
761
813
|
|
762
814
|
end
|
763
815
|
.,.,
|
764
816
|
|
765
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
817
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 295)
|
766
818
|
def _reduce_57(val, _values)
|
767
819
|
struct(:SHOW, :operand => :regions)
|
768
820
|
|
769
821
|
end
|
770
822
|
.,.,
|
771
823
|
|
772
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
824
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 299)
|
773
825
|
def _reduce_58(val, _values)
|
774
826
|
struct(:USE, :endpoint => val[1])
|
775
827
|
|
776
828
|
end
|
777
829
|
.,.,
|
778
830
|
|
779
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
831
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 303)
|
780
832
|
def _reduce_59(val, _values)
|
781
833
|
struct(:DESCRIBE, :domain => val[1])
|
782
834
|
|
783
835
|
end
|
784
836
|
.,.,
|
785
837
|
|
786
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
838
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 307)
|
787
839
|
def _reduce_60(val, _values)
|
788
840
|
struct(:DESCRIBE, :domain => val[1])
|
789
841
|
|
790
842
|
end
|
791
843
|
.,.,
|
792
844
|
|
793
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
845
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 311)
|
794
846
|
def _reduce_61(val, _values)
|
795
847
|
script = val[0].sub(/\A\s*\|\s*/, '')
|
796
848
|
struct(:RUBY, :script => script)
|
@@ -798,7 +850,7 @@ module_eval(<<'.,.,', 'sdb-parser.y', 259)
|
|
798
850
|
end
|
799
851
|
.,.,
|
800
852
|
|
801
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
853
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 316)
|
802
854
|
def _reduce_62(val, _values)
|
803
855
|
script = val[0].sub(/\A\s*!\s*/, '')
|
804
856
|
struct(:EXEC, :script => script)
|
@@ -806,28 +858,28 @@ module_eval(<<'.,.,', 'sdb-parser.y', 264)
|
|
806
858
|
end
|
807
859
|
.,.,
|
808
860
|
|
809
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
861
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 322)
|
810
862
|
def _reduce_63(val, _values)
|
811
863
|
[val[0]]
|
812
864
|
|
813
865
|
end
|
814
866
|
.,.,
|
815
867
|
|
816
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
868
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 326)
|
817
869
|
def _reduce_64(val, _values)
|
818
870
|
val[0] + [val[2]]
|
819
871
|
|
820
872
|
end
|
821
873
|
.,.,
|
822
874
|
|
823
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
875
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 331)
|
824
876
|
def _reduce_65(val, _values)
|
825
877
|
[val[0]]
|
826
878
|
|
827
879
|
end
|
828
880
|
.,.,
|
829
881
|
|
830
|
-
module_eval(<<'.,.,', 'sdb-parser.y',
|
882
|
+
module_eval(<<'.,.,', 'sdb-parser.y', 335)
|
831
883
|
def _reduce_66(val, _values)
|
832
884
|
[val[0], val[2]].flatten
|
833
885
|
|
data/lib/sdbcli/sdb-parser.y
CHANGED
@@ -176,12 +176,13 @@ rule
|
|
176
176
|
select_stmt : SELECT
|
177
177
|
{
|
178
178
|
query = ''
|
179
|
-
|
179
|
+
script = nil
|
180
|
+
script_type = nil
|
180
181
|
|
181
182
|
ss = StringScanner.new(val[0])
|
182
183
|
|
183
184
|
until ss.eos?
|
184
|
-
if (tok = ss.scan /[^`'"
|
185
|
+
if (tok = ss.scan /[^`'"|!]+/) #'
|
185
186
|
query << tok
|
186
187
|
elsif (tok = ss.scan /`(?:[^`]|``)*`/)
|
187
188
|
query << tok
|
@@ -190,31 +191,68 @@ rule
|
|
190
191
|
elsif (tok = ss.scan /"(?:[^"]|"")*"/) #"
|
191
192
|
query << tok
|
192
193
|
elsif (tok = ss.scan /\|/)
|
193
|
-
|
194
|
+
script = ss.scan_until(/\Z/)
|
195
|
+
script_type = :ruby
|
196
|
+
elsif (tok = ss.scan /!/)
|
197
|
+
script = ss.scan_until(/\Z/)
|
198
|
+
script_type = :shell
|
194
199
|
elsif (tok = ss.scan /./)
|
195
200
|
query << tok
|
196
201
|
end
|
197
202
|
end
|
198
203
|
|
199
|
-
struct(:SELECT, :query => query, :
|
204
|
+
struct(:SELECT, :query => query, :script => script, :script_type => script_type)
|
200
205
|
}
|
201
206
|
|
202
207
|
next_stmt : NEXT
|
203
208
|
{
|
204
|
-
|
205
|
-
|
209
|
+
script = nil
|
210
|
+
script_type = nil
|
211
|
+
|
212
|
+
case val[0]
|
213
|
+
when /\A\s*\|\s*/
|
214
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
215
|
+
script_type = :ruby
|
216
|
+
when /\A\s*!\s*/
|
217
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
218
|
+
script_type = :shell
|
219
|
+
end
|
220
|
+
|
221
|
+
struct(:NEXT, :script => script, :script_type => script_type)
|
206
222
|
}
|
207
223
|
|
208
224
|
current_stmt : CURRENT
|
209
225
|
{
|
210
|
-
|
211
|
-
|
226
|
+
script = nil
|
227
|
+
script_type = nil
|
228
|
+
|
229
|
+
case val[0]
|
230
|
+
when /\A\s*\|\s*/
|
231
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
232
|
+
script_type = :ruby
|
233
|
+
when /\A\s*!\s*/
|
234
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
235
|
+
script_type = :shell
|
236
|
+
end
|
237
|
+
|
238
|
+
struct(:CURRENT, :script => script, :script_type => script_type)
|
212
239
|
}
|
213
240
|
|
214
241
|
next_stmt : PREV
|
215
242
|
{
|
216
|
-
|
217
|
-
|
243
|
+
script = nil
|
244
|
+
script_type = nil
|
245
|
+
|
246
|
+
case val[0]
|
247
|
+
when /\A\s*\|\s*/
|
248
|
+
script = val[0].sub(/\A\s*\|\s*/, '')
|
249
|
+
script_type = :ruby
|
250
|
+
when /\A\s*!\s*/
|
251
|
+
script = val[0].sub(/\A\s*!\s*/, '')
|
252
|
+
script_type = :shell
|
253
|
+
end
|
254
|
+
|
255
|
+
struct(:PREV, :script => script, :script_type => script_type)
|
218
256
|
}
|
219
257
|
|
220
258
|
create_stmt : CREATE DOMAIN IDENTIFIER
|
@@ -224,10 +262,24 @@ rule
|
|
224
262
|
|
225
263
|
page_stmt : PAGE
|
226
264
|
{
|
227
|
-
page
|
265
|
+
page = nil
|
266
|
+
script = nil
|
267
|
+
script_type = nil
|
268
|
+
|
269
|
+
case val[0]
|
270
|
+
when /\s*\|\s*/
|
271
|
+
page, script = val[0].split(/\s*\|\s*/, 2)
|
272
|
+
script_type = :ruby
|
273
|
+
when /\s*!\s*/
|
274
|
+
page, script = val[0].split(/\s*!\s*/, 2)
|
275
|
+
script_type = :shell
|
276
|
+
else
|
277
|
+
page = val[0]
|
278
|
+
end
|
279
|
+
|
228
280
|
page = page.split(/\s+/, 2)[1]
|
229
281
|
page = page.strip.to_i if page
|
230
|
-
struct(:PAGE, :page => page, :
|
282
|
+
struct(:PAGE, :page => page, :script => script, :script_type => script_type)
|
231
283
|
}
|
232
284
|
|
233
285
|
drop_stmt : DROP DOMAIN IDENTIFIER
|
@@ -366,13 +418,13 @@ def scan
|
|
366
418
|
elsif (tok = @ss.scan /SELECT\b/i)
|
367
419
|
yield [:SELECT, tok + @ss.scan(/.*/)]
|
368
420
|
elsif (tok = @ss.scan /N(EXT)?\b/i)
|
369
|
-
yield [:NEXT, @ss.scan(/\s
|
421
|
+
yield [:NEXT, @ss.scan(/\s*[|!]\s*.*/)]
|
370
422
|
elsif (tok = @ss.scan /C(URRENT)?\b/i)
|
371
|
-
yield [:CURRENT, @ss.scan(/\s
|
423
|
+
yield [:CURRENT, @ss.scan(/\s*[|!]\s*.*/)]
|
372
424
|
elsif (tok = @ss.scan /P(REV)?\b/i)
|
373
|
-
yield [:PREV, @ss.scan(/\s
|
425
|
+
yield [:PREV, @ss.scan(/\s*[|!]\s*.*/)]
|
374
426
|
elsif (tok = @ss.scan /PAGE(\s+\d+)?/i)
|
375
|
-
yield [:PAGE, tok + @ss.scan(/(\s
|
427
|
+
yield [:PAGE, tok + @ss.scan(/(\s*[|!]\s*.*)?/)]
|
376
428
|
elsif (tok = @ss.scan /NULL\b/i)
|
377
429
|
yield [:NULL, nil]
|
378
430
|
elsif (tok = @ss.scan /`([^`]|``)*`/)
|
data/lib/sdbcli/sdb-runner.rb
CHANGED
@@ -3,10 +3,6 @@ require 'sdbcli/sdb-parser.tab'
|
|
3
3
|
|
4
4
|
# XXX:
|
5
5
|
class Array
|
6
|
-
def to_s
|
7
|
-
self.map {|i| i.to_s }
|
8
|
-
end
|
9
|
-
|
10
6
|
def to_i
|
11
7
|
self.map {|i| i.to_i }
|
12
8
|
end
|
@@ -284,10 +280,21 @@ module SimpleDB
|
|
284
280
|
end
|
285
281
|
end
|
286
282
|
|
287
|
-
if parsed.
|
283
|
+
if parsed.script
|
288
284
|
begin
|
289
|
-
|
290
|
-
|
285
|
+
case parsed.script_type
|
286
|
+
when :ruby
|
287
|
+
items = items.instance_eval(parsed.script.strip)
|
288
|
+
when :shell
|
289
|
+
items = IO.popen(parsed.script.strip, "r+") do |f|
|
290
|
+
f.puts(items.kind_of?(Array) ? items.map {|i| i.to_s }.join("\n") : items.to_s)
|
291
|
+
f.close_write
|
292
|
+
f.read
|
293
|
+
end
|
294
|
+
else
|
295
|
+
raise 'must not happen'
|
296
|
+
end
|
297
|
+
rescue Exception => e
|
291
298
|
raise SimpleDB::Error, e.message
|
292
299
|
end
|
293
300
|
end
|
metadata
CHANGED
@@ -1,59 +1,55 @@
|
|
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
|
+
version: 1.4.6
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 4
|
9
|
-
- 5
|
10
|
-
version: 1.4.5
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- winebarrel
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: nokogiri
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: json
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
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
|
38
33
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
46
38
|
type: :runtime
|
47
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
48
46
|
description:
|
49
47
|
email: sgwr_dts@yahoo.co.jp
|
50
|
-
executables:
|
48
|
+
executables:
|
51
49
|
- sdbcli
|
52
50
|
extensions: []
|
53
|
-
|
54
51
|
extra_rdoc_files: []
|
55
|
-
|
56
|
-
files:
|
52
|
+
files:
|
57
53
|
- README
|
58
54
|
- bin/sdbcli
|
59
55
|
- lib/sdbcli/sdb-client.rb
|
@@ -65,36 +61,26 @@ files:
|
|
65
61
|
- lib/sdbcli.rb
|
66
62
|
homepage: https://bitbucket.org/winebarrel/sdbcli
|
67
63
|
licenses: []
|
68
|
-
|
69
64
|
post_install_message:
|
70
65
|
rdoc_options: []
|
71
|
-
|
72
|
-
require_paths:
|
66
|
+
require_paths:
|
73
67
|
- lib
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
69
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
|
80
|
-
|
81
|
-
- 0
|
82
|
-
version: "0"
|
83
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
75
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
segments:
|
90
|
-
- 0
|
91
|
-
version: "0"
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
92
80
|
requirements: []
|
93
|
-
|
94
81
|
rubyforge_project:
|
95
|
-
rubygems_version: 1.8.
|
82
|
+
rubygems_version: 1.8.23
|
96
83
|
signing_key:
|
97
84
|
specification_version: 3
|
98
85
|
summary: sdbcli is an interactive command-line client of Amazon SimpleDB.
|
99
86
|
test_files: []
|
100
|
-
|