ddbcli 0.3.0 → 0.3.1

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.
@@ -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