ddbcli 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,128 @@
1
+ describe 'ddbcli' do
2
+ context 'delete' do
3
+ before do
4
+ ddbcli(<<-'EOS')
5
+ CREATE TABLE `employees` (
6
+ `emp_no` NUMBER HASH,
7
+ `birth_date` STRING RANGE
8
+ ) read=2 write=2;
9
+
10
+ INSERT INTO `employees`
11
+ (`birth_date`, `emp_no`, `first_name`, `gender`, `hire_date`, `last_name`)
12
+ VALUES
13
+ ("1956-05-15",2,"Cathie","M","1997-04-11","Keohane"),
14
+ ("1957-09-16",4,"Aemilian","M","1990-09-25","Roccetti"),
15
+ ("1959-07-01",4,"Dayanand","M","1989-09-01","Waterhouse"),
16
+ ("1964-12-29",7,"Mack","F","1988-02-25","Hambrick"),
17
+ ("1962-07-06",4,"Tristan","M","1985-07-20","Biran"),
18
+ ("1964-04-30",2,"Akhilish","F","1985-03-21","Isaak"),
19
+ ("1963-07-14",1,"Katsuyuki","F","1989-12-28","Weedon"),
20
+ ("1961-10-19",2,"Collette","M","1993-02-26","Ghemri"),
21
+ ("1955-04-26",4,"Zine","M","1991-06-19","Butner"),
22
+ ("1961-04-28",4,"Selwyn","F","1994-08-12","Parascandalo");
23
+ EOS
24
+ end
25
+
26
+ it 'delete by pk' do
27
+ ddbcli('delete from employees where emp_no = 4 and birth_date = "1961-04-28"')
28
+ out = ddbcli('select all * from employees')
29
+ out = JSON.parse(out)
30
+
31
+ expect(out).to eq(
32
+ [{"birth_date"=>"1956-05-15",
33
+ "emp_no"=>2,
34
+ "first_name"=>"Cathie",
35
+ "gender"=>"M",
36
+ "hire_date"=>"1997-04-11",
37
+ "last_name"=>"Keohane"},
38
+ {"birth_date"=>"1961-10-19",
39
+ "emp_no"=>2,
40
+ "first_name"=>"Collette",
41
+ "gender"=>"M",
42
+ "hire_date"=>"1993-02-26",
43
+ "last_name"=>"Ghemri"},
44
+ {"birth_date"=>"1964-04-30",
45
+ "emp_no"=>2,
46
+ "first_name"=>"Akhilish",
47
+ "gender"=>"F",
48
+ "hire_date"=>"1985-03-21",
49
+ "last_name"=>"Isaak"},
50
+ {"birth_date"=>"1963-07-14",
51
+ "emp_no"=>1,
52
+ "first_name"=>"Katsuyuki",
53
+ "gender"=>"F",
54
+ "hire_date"=>"1989-12-28",
55
+ "last_name"=>"Weedon"},
56
+ {"birth_date"=>"1964-12-29",
57
+ "emp_no"=>7,
58
+ "first_name"=>"Mack",
59
+ "gender"=>"F",
60
+ "hire_date"=>"1988-02-25",
61
+ "last_name"=>"Hambrick"},
62
+ {"birth_date"=>"1955-04-26",
63
+ "emp_no"=>4,
64
+ "first_name"=>"Zine",
65
+ "gender"=>"M",
66
+ "hire_date"=>"1991-06-19",
67
+ "last_name"=>"Butner"},
68
+ {"birth_date"=>"1957-09-16",
69
+ "emp_no"=>4,
70
+ "first_name"=>"Aemilian",
71
+ "gender"=>"M",
72
+ "hire_date"=>"1990-09-25",
73
+ "last_name"=>"Roccetti"},
74
+ {"birth_date"=>"1959-07-01",
75
+ "emp_no"=>4,
76
+ "first_name"=>"Dayanand",
77
+ "gender"=>"M",
78
+ "hire_date"=>"1989-09-01",
79
+ "last_name"=>"Waterhouse"},
80
+ {"birth_date"=>"1962-07-06",
81
+ "emp_no"=>4,
82
+ "first_name"=>"Tristan",
83
+ "gender"=>"M",
84
+ "hire_date"=>"1985-07-20",
85
+ "last_name"=>"Biran"}]
86
+ )
87
+ end
88
+
89
+ it 'delete all' do
90
+ ddbcli('delete all from employees where hire_date <= "1990-01-01"')
91
+ out = ddbcli('select all * from employees')
92
+ out = JSON.parse(out)
93
+
94
+ expect(out).to eq(
95
+ [{"birth_date"=>"1956-05-15",
96
+ "emp_no"=>2,
97
+ "first_name"=>"Cathie",
98
+ "gender"=>"M",
99
+ "hire_date"=>"1997-04-11",
100
+ "last_name"=>"Keohane"},
101
+ {"birth_date"=>"1961-10-19",
102
+ "emp_no"=>2,
103
+ "first_name"=>"Collette",
104
+ "gender"=>"M",
105
+ "hire_date"=>"1993-02-26",
106
+ "last_name"=>"Ghemri"},
107
+ {"birth_date"=>"1955-04-26",
108
+ "emp_no"=>4,
109
+ "first_name"=>"Zine",
110
+ "gender"=>"M",
111
+ "hire_date"=>"1991-06-19",
112
+ "last_name"=>"Butner"},
113
+ {"birth_date"=>"1957-09-16",
114
+ "emp_no"=>4,
115
+ "first_name"=>"Aemilian",
116
+ "gender"=>"M",
117
+ "hire_date"=>"1990-09-25",
118
+ "last_name"=>"Roccetti"},
119
+ {"birth_date"=>"1961-04-28",
120
+ "emp_no"=>4,
121
+ "first_name"=>"Selwyn",
122
+ "gender"=>"F",
123
+ "hire_date"=>"1994-08-12",
124
+ "last_name"=>"Parascandalo"}]
125
+ )
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,50 @@
1
+ describe 'ddbcli' do
2
+ context 'insert' do
3
+ before do
4
+ ddbcli(<<-'EOS')
5
+ CREATE TABLE `employees` (
6
+ `emp_no` NUMBER HASH,
7
+ `birth_date` STRING RANGE
8
+ ) read=2 write=2;
9
+ EOS
10
+ end
11
+
12
+ it 'insert array' do
13
+ ddbcli(<<-'EOS')
14
+ insert into employees (
15
+ emp_no,
16
+ birth_date,
17
+ num,
18
+ str,
19
+ bin,
20
+ num_array,
21
+ str_array,
22
+ bin_array
23
+ ) values (
24
+ 1,
25
+ '1977-11-11',
26
+ 2,
27
+ 'XXX',
28
+ x'cafebabe',
29
+ (1, 2, 3),
30
+ ("A", "B", "C"),
31
+ (x"aa", x"bb", x"cc")
32
+ )
33
+ EOS
34
+
35
+ out = ddbcli('select all * from employees')
36
+ out = JSON.parse(out)
37
+
38
+ expect(out).to eq(
39
+ [{"bin"=>"yv66vg==",
40
+ "bin_array"=>["qg==", "uw==", "zA=="],
41
+ "birth_date"=>"1977-11-11",
42
+ "emp_no"=>1,
43
+ "num"=>2,
44
+ "num_array"=>[1, 2, 3],
45
+ "str"=>"XXX",
46
+ "str_array"=>["A", "B", "C"]}]
47
+ )
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,246 @@
1
+ describe 'ddbcli' do
2
+ context 'select' do
3
+ before do
4
+ ddbcli(<<-'EOS')
5
+ CREATE TABLE `employees` (
6
+ `emp_no` NUMBER HASH,
7
+ `birth_date` STRING RANGE,
8
+ INDEX `local_idx` (`gender` STRING) ALL,
9
+ GLOBAL INDEX `global_idx` (`gender` STRING, `hire_date` STRING) ALL
10
+ ) read=2 write=2;
11
+
12
+ INSERT INTO `employees`
13
+ (`birth_date`, `emp_no`, `first_name`, `gender`, `hire_date`, `last_name`)
14
+ VALUES
15
+ ("1956-05-15",2,"Cathie","M","1997-04-11","Keohane"),
16
+ ("1957-09-16",4,"Aemilian","M","1990-09-25","Roccetti"),
17
+ ("1959-07-01",4,"Dayanand","M","1989-09-01","Waterhouse"),
18
+ ("1964-12-29",7,"Mack","F","1988-02-25","Hambrick"),
19
+ ("1962-07-06",4,"Tristan","M","1985-07-20","Biran"),
20
+ ("1964-04-30",2,"Akhilish","F","1985-03-21","Isaak"),
21
+ ("1963-07-14",1,"Katsuyuki","F","1989-12-28","Weedon"),
22
+ ("1961-10-19",2,"Collette","M","1993-02-26","Ghemri"),
23
+ ("1955-04-26",4,"Zine","M","1991-06-19","Butner"),
24
+ ("1961-04-28",4,"Selwyn","F","1994-08-12","Parascandalo");
25
+ EOS
26
+ end
27
+
28
+ it 'select using GSI' do
29
+ pending('GSI does not work in DynamoDB Local')
30
+
31
+ out = ddbcli('select * from employees use index (global_idx) where gender = "M" and hire_date < "1990-01-01"')
32
+ out = JSON.parse(out)
33
+
34
+ expect(out).to eq(
35
+ [{"birth_date"=>"1962-07-06",
36
+ "emp_no"=>4,
37
+ "first_name"=>"Tristan",
38
+ "gender"=>"M",
39
+ "hire_date"=>"1985-07-20",
40
+ "last_name"=>"Biran"},
41
+ {"birth_date"=>"1959-07-01",
42
+ "emp_no"=>4,
43
+ "first_name"=>"Dayanand",
44
+ "gender"=>"M",
45
+ "hire_date"=>"1989-09-01",
46
+ "last_name"=>"Waterhouse"}]
47
+ )
48
+ end
49
+
50
+ it 'select using LSI' do
51
+ out = ddbcli('select * from employees use index (local_idx) where emp_no = 4 and gender = "M"')
52
+ out = JSON.parse(out)
53
+
54
+ expect(out).to eq(
55
+ [{"birth_date"=>"1962-07-06",
56
+ "emp_no"=>4,
57
+ "first_name"=>"Tristan",
58
+ "gender"=>"M",
59
+ "hire_date"=>"1985-07-20",
60
+ "last_name"=>"Biran"},
61
+ {"birth_date"=>"1959-07-01",
62
+ "emp_no"=>4,
63
+ "first_name"=>"Dayanand",
64
+ "gender"=>"M",
65
+ "hire_date"=>"1989-09-01",
66
+ "last_name"=>"Waterhouse"},
67
+ {"birth_date"=>"1957-09-16",
68
+ "emp_no"=>4,
69
+ "first_name"=>"Aemilian",
70
+ "gender"=>"M",
71
+ "hire_date"=>"1990-09-25",
72
+ "last_name"=>"Roccetti"},
73
+ {"birth_date"=>"1955-04-26",
74
+ "emp_no"=>4,
75
+ "first_name"=>"Zine",
76
+ "gender"=>"M",
77
+ "hire_date"=>"1991-06-19",
78
+ "last_name"=>"Butner"}]
79
+ )
80
+ end
81
+
82
+ it 'select by hash and range key' do
83
+ out = ddbcli('select * from employees where emp_no = 4 and birth_date >= "1961-01-01"')
84
+ out = JSON.parse(out)
85
+
86
+ expect(out).to eq(
87
+ [{"birth_date"=>"1961-04-28",
88
+ "emp_no"=>4,
89
+ "first_name"=>"Selwyn",
90
+ "gender"=>"F",
91
+ "hire_date"=>"1994-08-12",
92
+ "last_name"=>"Parascandalo"},
93
+ {"birth_date"=>"1962-07-06",
94
+ "emp_no"=>4,
95
+ "first_name"=>"Tristan",
96
+ "gender"=>"M",
97
+ "hire_date"=>"1985-07-20",
98
+ "last_name"=>"Biran"}]
99
+ )
100
+ end
101
+
102
+ it 'select by hash key' do
103
+ out = ddbcli('select * from employees where emp_no = 4')
104
+ out = JSON.parse(out)
105
+
106
+ expect(out).to eq(
107
+ [{"birth_date"=>"1955-04-26",
108
+ "emp_no"=>4,
109
+ "first_name"=>"Zine",
110
+ "gender"=>"M",
111
+ "hire_date"=>"1991-06-19",
112
+ "last_name"=>"Butner"},
113
+ {"birth_date"=>"1957-09-16",
114
+ "emp_no"=>4,
115
+ "first_name"=>"Aemilian",
116
+ "gender"=>"M",
117
+ "hire_date"=>"1990-09-25",
118
+ "last_name"=>"Roccetti"},
119
+ {"birth_date"=>"1959-07-01",
120
+ "emp_no"=>4,
121
+ "first_name"=>"Dayanand",
122
+ "gender"=>"M",
123
+ "hire_date"=>"1989-09-01",
124
+ "last_name"=>"Waterhouse"},
125
+ {"birth_date"=>"1961-04-28",
126
+ "emp_no"=>4,
127
+ "first_name"=>"Selwyn",
128
+ "gender"=>"F",
129
+ "hire_date"=>"1994-08-12",
130
+ "last_name"=>"Parascandalo"},
131
+ {"birth_date"=>"1962-07-06",
132
+ "emp_no"=>4,
133
+ "first_name"=>"Tristan",
134
+ "gender"=>"M",
135
+ "hire_date"=>"1985-07-20",
136
+ "last_name"=>"Biran"}]
137
+ )
138
+ end
139
+
140
+ it 'scan all' do
141
+ out = ddbcli('select all * from employees')
142
+ out = JSON.parse(out)
143
+
144
+ expect(out).to eq(
145
+ [{"birth_date"=>"1956-05-15",
146
+ "emp_no"=>2,
147
+ "first_name"=>"Cathie",
148
+ "gender"=>"M",
149
+ "hire_date"=>"1997-04-11",
150
+ "last_name"=>"Keohane"},
151
+ {"birth_date"=>"1961-10-19",
152
+ "emp_no"=>2,
153
+ "first_name"=>"Collette",
154
+ "gender"=>"M",
155
+ "hire_date"=>"1993-02-26",
156
+ "last_name"=>"Ghemri"},
157
+ {"birth_date"=>"1964-04-30",
158
+ "emp_no"=>2,
159
+ "first_name"=>"Akhilish",
160
+ "gender"=>"F",
161
+ "hire_date"=>"1985-03-21",
162
+ "last_name"=>"Isaak"},
163
+ {"birth_date"=>"1963-07-14",
164
+ "emp_no"=>1,
165
+ "first_name"=>"Katsuyuki",
166
+ "gender"=>"F",
167
+ "hire_date"=>"1989-12-28",
168
+ "last_name"=>"Weedon"},
169
+ {"birth_date"=>"1964-12-29",
170
+ "emp_no"=>7,
171
+ "first_name"=>"Mack",
172
+ "gender"=>"F",
173
+ "hire_date"=>"1988-02-25",
174
+ "last_name"=>"Hambrick"},
175
+ {"birth_date"=>"1955-04-26",
176
+ "emp_no"=>4,
177
+ "first_name"=>"Zine",
178
+ "gender"=>"M",
179
+ "hire_date"=>"1991-06-19",
180
+ "last_name"=>"Butner"},
181
+ {"birth_date"=>"1957-09-16",
182
+ "emp_no"=>4,
183
+ "first_name"=>"Aemilian",
184
+ "gender"=>"M",
185
+ "hire_date"=>"1990-09-25",
186
+ "last_name"=>"Roccetti"},
187
+ {"birth_date"=>"1959-07-01",
188
+ "emp_no"=>4,
189
+ "first_name"=>"Dayanand",
190
+ "gender"=>"M",
191
+ "hire_date"=>"1989-09-01",
192
+ "last_name"=>"Waterhouse"},
193
+ {"birth_date"=>"1961-04-28",
194
+ "emp_no"=>4,
195
+ "first_name"=>"Selwyn",
196
+ "gender"=>"F",
197
+ "hire_date"=>"1994-08-12",
198
+ "last_name"=>"Parascandalo"},
199
+ {"birth_date"=>"1962-07-06",
200
+ "emp_no"=>4,
201
+ "first_name"=>"Tristan",
202
+ "gender"=>"M",
203
+ "hire_date"=>"1985-07-20",
204
+ "last_name"=>"Biran"}]
205
+ )
206
+ end
207
+
208
+ it 'scan which condition' do
209
+ out = ddbcli('select all * from employees where hire_date >= "1990-01-01"')
210
+ out = JSON.parse(out)
211
+
212
+ expect(out).to eq(
213
+ [{"birth_date"=>"1956-05-15",
214
+ "emp_no"=>2,
215
+ "first_name"=>"Cathie",
216
+ "gender"=>"M",
217
+ "hire_date"=>"1997-04-11",
218
+ "last_name"=>"Keohane"},
219
+ {"birth_date"=>"1961-10-19",
220
+ "emp_no"=>2,
221
+ "first_name"=>"Collette",
222
+ "gender"=>"M",
223
+ "hire_date"=>"1993-02-26",
224
+ "last_name"=>"Ghemri"},
225
+ {"birth_date"=>"1955-04-26",
226
+ "emp_no"=>4,
227
+ "first_name"=>"Zine",
228
+ "gender"=>"M",
229
+ "hire_date"=>"1991-06-19",
230
+ "last_name"=>"Butner"},
231
+ {"birth_date"=>"1957-09-16",
232
+ "emp_no"=>4,
233
+ "first_name"=>"Aemilian",
234
+ "gender"=>"M",
235
+ "hire_date"=>"1990-09-25",
236
+ "last_name"=>"Roccetti"},
237
+ {"birth_date"=>"1961-04-28",
238
+ "emp_no"=>4,
239
+ "first_name"=>"Selwyn",
240
+ "gender"=>"F",
241
+ "hire_date"=>"1994-08-12",
242
+ "last_name"=>"Parascandalo"}]
243
+ )
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,52 @@
1
+ require 'json'
2
+ require 'pp'
3
+ require 'tempfile'
4
+
5
+ %w(AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION).each do |name|
6
+ ENV[name] = ENV["DDBCLI_TEST_#{name}"] || '(empty)'
7
+ end
8
+
9
+ def ddbcli(input = nil, args = [])
10
+ if input
11
+ Tempfile.open('ddbcli') do |f|
12
+ f << input
13
+ input = f.path
14
+ end
15
+ end
16
+
17
+ cmd = File.expand_path(File.dirname(__FILE__) + '/../bin/ddbcli')
18
+ out = nil
19
+
20
+ args = ['--url', 'localhost:8000'] + args
21
+
22
+ if input
23
+ out = `cat #{input} | #{cmd} #{args.join(' ')} 2>&1`
24
+ else
25
+ out = `#{cmd} #{args.join(' ')} 2>&1`
26
+ end
27
+
28
+ raise out unless $?.success?
29
+
30
+ out.strip
31
+ end
32
+
33
+ def clean_tables
34
+ show_tables = lambda do
35
+ out = ddbcli('show tables')
36
+ JSON.parse(out)
37
+ end
38
+
39
+ show_tables.call.each do |name|
40
+ ddbcli("drop table #{name}")
41
+ end
42
+
43
+ until show_tables.call.empty?
44
+ sleep 1
45
+ end
46
+ end
47
+
48
+ RSpec.configure do |config|
49
+ config.before(:each) do
50
+ clean_tables
51
+ end
52
+ end