cassanity 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +10 -0
- data/Gemfile +5 -3
- data/README.md +22 -15
- data/examples/_shared.rb +5 -1
- data/examples/batch.rb +17 -23
- data/examples/column_families.rb +12 -13
- data/examples/counters.rb +10 -18
- data/examples/keyspaces.rb +12 -17
- data/examples/select_range.rb +29 -19
- data/lib/cassanity/argument_generators/batch.rb +8 -0
- data/lib/cassanity/argument_generators/column_family_alter.rb +1 -1
- data/lib/cassanity/argument_generators/column_family_create.rb +1 -1
- data/lib/cassanity/argument_generators/column_family_delete.rb +2 -22
- data/lib/cassanity/argument_generators/column_family_drop.rb +1 -1
- data/lib/cassanity/argument_generators/column_family_insert.rb +2 -24
- data/lib/cassanity/argument_generators/column_family_select.rb +1 -1
- data/lib/cassanity/argument_generators/column_family_truncate.rb +1 -1
- data/lib/cassanity/argument_generators/column_family_update.rb +2 -24
- data/lib/cassanity/argument_generators/keyspace_create.rb +1 -1
- data/lib/cassanity/argument_generators/keyspace_drop.rb +1 -1
- data/lib/cassanity/argument_generators/keyspace_use.rb +1 -1
- data/lib/cassanity/argument_generators/where_clause.rb +1 -0
- data/lib/cassanity/argument_generators/with_clause.rb +12 -6
- data/lib/cassanity/client.rb +65 -0
- data/lib/cassanity/column_family.rb +70 -17
- data/lib/cassanity/connection.rb +8 -0
- data/lib/cassanity/decrement.rb +2 -15
- data/lib/cassanity/executors/cassandra_cql.rb +37 -11
- data/lib/cassanity/increment.rb +2 -15
- data/lib/cassanity/instrumentation/log_subscriber.rb +27 -0
- data/lib/cassanity/instrumenters/memory.rb +27 -0
- data/lib/cassanity/instrumenters/noop.rb +9 -0
- data/lib/cassanity/keyspace.rb +42 -6
- data/lib/cassanity/operator.rb +9 -0
- data/lib/cassanity/range.rb +4 -0
- data/lib/cassanity/schema.rb +21 -0
- data/lib/cassanity/version.rb +1 -1
- data/lib/cassanity.rb +16 -2
- data/spec/integration/cassanity/column_family_spec.rb +59 -78
- data/spec/integration/cassanity/connection_spec.rb +18 -34
- data/spec/integration/cassanity/keyspace_spec.rb +24 -34
- data/spec/unit/cassanity/argument_generators/batch_spec.rb +51 -3
- data/spec/unit/cassanity/argument_generators/column_family_alter_spec.rb +6 -6
- data/spec/unit/cassanity/argument_generators/column_family_create_spec.rb +6 -6
- data/spec/unit/cassanity/argument_generators/column_family_delete_spec.rb +5 -5
- data/spec/unit/cassanity/argument_generators/column_family_drop_spec.rb +2 -2
- data/spec/unit/cassanity/argument_generators/column_family_insert_spec.rb +5 -5
- data/spec/unit/cassanity/argument_generators/column_family_select_spec.rb +12 -12
- data/spec/unit/cassanity/argument_generators/column_family_truncate_spec.rb +2 -2
- data/spec/unit/cassanity/argument_generators/column_family_update_spec.rb +5 -5
- data/spec/unit/cassanity/argument_generators/keyspace_create_spec.rb +4 -4
- data/spec/unit/cassanity/argument_generators/keyspace_drop_spec.rb +1 -1
- data/spec/unit/cassanity/argument_generators/keyspace_use_spec.rb +1 -1
- data/spec/unit/cassanity/argument_generators/where_clause_spec.rb +26 -0
- data/spec/unit/cassanity/argument_generators/with_clause_spec.rb +26 -0
- data/spec/unit/cassanity/client_spec.rb +159 -0
- data/spec/unit/cassanity/column_family_spec.rb +64 -17
- data/spec/unit/cassanity/connection_spec.rb +8 -0
- data/spec/unit/cassanity/executors/cassandra_cql_spec.rb +35 -19
- data/spec/unit/cassanity/instrumentors/memory_spec.rb +26 -0
- data/spec/unit/cassanity/instrumentors/noop_spec.rb +22 -0
- data/spec/unit/cassanity/keyspace_spec.rb +25 -3
- data/spec/unit/cassanity/operator_spec.rb +10 -0
- data/spec/unit/cassanity/schema_spec.rb +6 -0
- data/spec/unit/cassanity_spec.rb +6 -0
- metadata +15 -4
@@ -1,49 +1,30 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'cassanity/keyspace'
|
3
|
-
require 'cassanity/executors/cassandra_cql'
|
4
3
|
|
5
4
|
describe Cassanity::ColumnFamily do
|
6
5
|
let(:keyspace_name) { 'cassanity_test' }
|
7
6
|
let(:column_family_name) { 'apps' }
|
8
7
|
let(:counters_column_family_name) { 'counters' }
|
9
8
|
|
10
|
-
let(:client) {
|
11
|
-
|
12
|
-
cql_version: '3.0.0',
|
13
|
-
})
|
14
|
-
}
|
9
|
+
let(:client) { Cassanity::Client.new }
|
10
|
+
let(:driver) { client.driver }
|
15
11
|
|
16
|
-
let(:keyspace) {
|
17
|
-
Cassanity::Keyspace.new({
|
18
|
-
name: keyspace_name,
|
19
|
-
executor: executor,
|
20
|
-
})
|
21
|
-
}
|
22
|
-
|
23
|
-
let(:executor) {
|
24
|
-
Cassanity::Executors::CassandraCql.new({
|
25
|
-
client: client,
|
26
|
-
})
|
27
|
-
}
|
28
|
-
|
29
|
-
let(:schema) {
|
30
|
-
Cassanity::Schema.new({
|
31
|
-
primary_key: :id,
|
32
|
-
columns: {
|
33
|
-
id: :timeuuid,
|
34
|
-
name: :text,
|
35
|
-
},
|
36
|
-
with: {
|
37
|
-
comment: 'For storing things',
|
38
|
-
}
|
39
|
-
})
|
40
|
-
}
|
12
|
+
let(:keyspace) { client[keyspace_name] }
|
41
13
|
|
42
14
|
let(:arguments) {
|
43
15
|
{
|
44
16
|
keyspace: keyspace,
|
45
17
|
name: column_family_name,
|
46
|
-
schema:
|
18
|
+
schema: {
|
19
|
+
primary_key: :id,
|
20
|
+
columns: {
|
21
|
+
id: :timeuuid,
|
22
|
+
name: :text,
|
23
|
+
},
|
24
|
+
with: {
|
25
|
+
comment: 'For storing things',
|
26
|
+
}
|
27
|
+
},
|
47
28
|
}
|
48
29
|
}
|
49
30
|
|
@@ -52,40 +33,40 @@ describe Cassanity::ColumnFamily do
|
|
52
33
|
}
|
53
34
|
|
54
35
|
before do
|
55
|
-
client_drop_keyspace(
|
56
|
-
client_create_keyspace(
|
57
|
-
client_create_column_family(
|
58
|
-
client_create_column_family(
|
36
|
+
client_drop_keyspace(driver, keyspace_name)
|
37
|
+
client_create_keyspace(driver, keyspace_name)
|
38
|
+
client_create_column_family(driver, column_family_name, "id text PRIMARY KEY, name text")
|
39
|
+
client_create_column_family(driver, counters_column_family_name, "id text PRIMARY KEY, views counter")
|
59
40
|
end
|
60
41
|
|
61
42
|
after do
|
62
|
-
client_drop_keyspace(
|
43
|
+
client_drop_keyspace(driver, keyspace_name)
|
63
44
|
end
|
64
45
|
|
65
46
|
it "knows if it exists" do
|
66
47
|
subject.exists?.should be_true
|
67
|
-
client_drop_column_family(
|
48
|
+
client_drop_column_family(driver, column_family_name)
|
68
49
|
subject.exists?.should be_false
|
69
50
|
end
|
70
51
|
|
71
52
|
it "can recreate when not created" do
|
72
|
-
client_drop_column_family(
|
73
|
-
client_column_family?(
|
53
|
+
client_drop_column_family(driver, column_family_name)
|
54
|
+
client_column_family?(driver, column_family_name).should be_false
|
74
55
|
subject.recreate
|
75
|
-
client_column_family?(
|
56
|
+
client_column_family?(driver, column_family_name).should be_true
|
76
57
|
end
|
77
58
|
|
78
59
|
it "can recreate when already created" do
|
79
|
-
client_column_family?(
|
60
|
+
client_column_family?(driver, column_family_name).should be_true
|
80
61
|
subject.recreate
|
81
|
-
client_column_family?(
|
62
|
+
client_column_family?(driver, column_family_name).should be_true
|
82
63
|
end
|
83
64
|
|
84
65
|
it "can create itself" do
|
85
66
|
column_family = described_class.new(arguments.merge(name: 'people'))
|
86
67
|
column_family.create
|
87
68
|
|
88
|
-
apps_column_family =
|
69
|
+
apps_column_family = driver.schema.column_families.fetch(column_family.name)
|
89
70
|
apps_column_family.comment.should eq('For storing things')
|
90
71
|
|
91
72
|
columns = apps_column_family.columns
|
@@ -96,53 +77,53 @@ describe Cassanity::ColumnFamily do
|
|
96
77
|
end
|
97
78
|
|
98
79
|
it "can truncate" do
|
99
|
-
|
100
|
-
|
101
|
-
result =
|
80
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
|
81
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
|
82
|
+
result = driver.execute("SELECT * FROM #{column_family_name}")
|
102
83
|
result.rows.should eq(2)
|
103
84
|
|
104
85
|
subject.truncate
|
105
86
|
|
106
|
-
result =
|
87
|
+
result = driver.execute("SELECT * FROM #{column_family_name}")
|
107
88
|
result.rows.should eq(0)
|
108
89
|
end
|
109
90
|
|
110
91
|
it "can drop" do
|
111
|
-
client_column_family?(
|
92
|
+
client_column_family?(driver, column_family_name).should be_true
|
112
93
|
subject.drop
|
113
|
-
client_column_family?(
|
94
|
+
client_column_family?(driver, column_family_name).should be_false
|
114
95
|
end
|
115
96
|
|
116
97
|
it "can drop when using a different keyspace" do
|
117
|
-
client_column_family?(
|
118
|
-
|
98
|
+
client_column_family?(driver, column_family_name).should be_true
|
99
|
+
driver.execute('USE system')
|
119
100
|
subject.drop
|
120
|
-
client_column_family?(
|
101
|
+
client_column_family?(driver, column_family_name).should be_false
|
121
102
|
end
|
122
103
|
|
123
104
|
it "can alter" do
|
124
105
|
subject.alter(add: {created_at: :timestamp})
|
125
106
|
|
126
|
-
apps_column_family =
|
107
|
+
apps_column_family = driver.schema.column_families.fetch(column_family_name)
|
127
108
|
columns = apps_column_family.columns
|
128
109
|
columns.should have_key('created_at')
|
129
110
|
columns['created_at'].should eq('org.apache.cassandra.db.marshal.DateType')
|
130
111
|
|
131
112
|
subject.alter(alter: {created_at: :timeuuid})
|
132
113
|
|
133
|
-
apps_column_family =
|
114
|
+
apps_column_family = driver.schema.column_families.fetch(column_family_name)
|
134
115
|
columns = apps_column_family.columns
|
135
116
|
columns.should have_key('created_at')
|
136
117
|
columns['created_at'].should eq('org.apache.cassandra.db.marshal.TimeUUIDType')
|
137
118
|
|
138
119
|
subject.alter(drop: :created_at)
|
139
120
|
|
140
|
-
apps_column_family =
|
121
|
+
apps_column_family = driver.schema.column_families.fetch(column_family_name)
|
141
122
|
columns = apps_column_family.columns
|
142
123
|
columns.should_not have_key('created_at')
|
143
124
|
|
144
125
|
subject.alter(with: {comment: 'Some new comment'})
|
145
|
-
apps_column_family =
|
126
|
+
apps_column_family = driver.schema.column_families.fetch(column_family_name)
|
146
127
|
apps_column_family.comment.should eq('Some new comment')
|
147
128
|
end
|
148
129
|
|
@@ -152,7 +133,7 @@ describe Cassanity::ColumnFamily do
|
|
152
133
|
column_name: :name,
|
153
134
|
})
|
154
135
|
|
155
|
-
apps =
|
136
|
+
apps = driver.schema.column_families['apps']
|
156
137
|
apps_meta = apps.column_metadata
|
157
138
|
index = apps_meta.detect { |c| c.index_name == 'apps_name_index' }
|
158
139
|
index.should_not be_nil
|
@@ -161,15 +142,15 @@ describe Cassanity::ColumnFamily do
|
|
161
142
|
name: :apps_name_index,
|
162
143
|
})
|
163
144
|
|
164
|
-
apps =
|
145
|
+
apps = driver.schema.column_families['apps']
|
165
146
|
apps_meta = apps.column_metadata
|
166
147
|
index = apps_meta.detect { |c| c.index_name == 'apps_name_index' }
|
167
148
|
index.should be_nil
|
168
149
|
end
|
169
150
|
|
170
151
|
it "can select data" do
|
171
|
-
|
172
|
-
|
152
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
|
153
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
|
173
154
|
result = subject.select({
|
174
155
|
select: :name,
|
175
156
|
where: {
|
@@ -192,12 +173,12 @@ describe Cassanity::ColumnFamily do
|
|
192
173
|
}
|
193
174
|
|
194
175
|
before do
|
195
|
-
|
176
|
+
driver.execute("CREATE COLUMNFAMILY #{name} (id text, ts int, value counter, PRIMARY KEY(id, ts))")
|
196
177
|
@id = 'foo'
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
178
|
+
driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 1)
|
179
|
+
driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 2)
|
180
|
+
driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 3)
|
181
|
+
driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 4)
|
201
182
|
end
|
202
183
|
|
203
184
|
it "works including end" do
|
@@ -234,7 +215,7 @@ describe Cassanity::ColumnFamily do
|
|
234
215
|
},
|
235
216
|
})
|
236
217
|
|
237
|
-
result =
|
218
|
+
result = driver.execute("SELECT * FROM #{column_family_name}")
|
238
219
|
result.rows.should eq(1)
|
239
220
|
row = result.fetch_hash
|
240
221
|
row['id'].should eq('1')
|
@@ -242,22 +223,22 @@ describe Cassanity::ColumnFamily do
|
|
242
223
|
end
|
243
224
|
|
244
225
|
it "can update data" do
|
245
|
-
|
246
|
-
|
226
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
|
227
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
|
247
228
|
|
248
229
|
subject.update({
|
249
230
|
set: {name: 'New Name'},
|
250
231
|
where: {id: '1'},
|
251
232
|
})
|
252
233
|
|
253
|
-
result =
|
234
|
+
result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '1'")
|
254
235
|
result.rows.should eq(1)
|
255
236
|
row = result.fetch_hash
|
256
237
|
row['id'].should eq('1')
|
257
238
|
row['name'].should eq('New Name')
|
258
239
|
|
259
240
|
# does not update other rows
|
260
|
-
result =
|
241
|
+
result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '2'")
|
261
242
|
result.rows.should eq(1)
|
262
243
|
row = result.fetch_hash
|
263
244
|
row['id'].should eq('2')
|
@@ -278,7 +259,7 @@ describe Cassanity::ColumnFamily do
|
|
278
259
|
where: {id: '1'},
|
279
260
|
})
|
280
261
|
|
281
|
-
result =
|
262
|
+
result = driver.execute("SELECT * FROM #{counters_column_family_name} WHERE id = '1'")
|
282
263
|
result.rows.should eq(1)
|
283
264
|
row = result.fetch_hash
|
284
265
|
row['id'].should eq('1')
|
@@ -300,7 +281,7 @@ describe Cassanity::ColumnFamily do
|
|
300
281
|
where: {id: '1'},
|
301
282
|
})
|
302
283
|
|
303
|
-
result =
|
284
|
+
result = driver.execute("SELECT * FROM #{counters_column_family_name} WHERE id = '1'")
|
304
285
|
result.rows.should eq(1)
|
305
286
|
row = result.fetch_hash
|
306
287
|
row['id'].should eq('1')
|
@@ -309,21 +290,21 @@ describe Cassanity::ColumnFamily do
|
|
309
290
|
end
|
310
291
|
|
311
292
|
it "can delete data" do
|
312
|
-
|
313
|
-
|
293
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
|
294
|
+
driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
|
314
295
|
|
315
|
-
result =
|
296
|
+
result = driver.execute("SELECT * FROM #{column_family_name}")
|
316
297
|
result.rows.should eq(2)
|
317
298
|
|
318
299
|
subject.delete({
|
319
300
|
where: {id: '1'},
|
320
301
|
})
|
321
302
|
|
322
|
-
result =
|
303
|
+
result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '1'")
|
323
304
|
result.rows.should eq(0)
|
324
305
|
|
325
306
|
# does not delete other rows
|
326
|
-
result =
|
307
|
+
result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '2'")
|
327
308
|
result.rows.should eq(1)
|
328
309
|
end
|
329
310
|
end
|
@@ -6,51 +6,35 @@ describe Cassanity::Connection do
|
|
6
6
|
let(:keyspace_name) { 'cassanity_test' }
|
7
7
|
let(:column_family_name) { 'apps' }
|
8
8
|
|
9
|
-
let(:client) {
|
10
|
-
|
11
|
-
cql_version: '3.0.0',
|
12
|
-
})
|
13
|
-
}
|
14
|
-
|
15
|
-
let(:executor) {
|
16
|
-
Cassanity::Executors::CassandraCql.new({
|
17
|
-
client: client,
|
18
|
-
})
|
19
|
-
}
|
9
|
+
let(:client) { Cassanity::Client.new }
|
10
|
+
let(:driver) { client.driver }
|
20
11
|
|
21
|
-
subject {
|
22
|
-
described_class.new({
|
23
|
-
executor: executor,
|
24
|
-
})
|
25
|
-
}
|
12
|
+
subject { client.connection }
|
26
13
|
|
27
14
|
before do
|
28
|
-
client_drop_keyspace(
|
15
|
+
client_drop_keyspace(driver, keyspace_name)
|
29
16
|
end
|
30
17
|
|
31
18
|
after do
|
32
|
-
client_drop_keyspace(
|
19
|
+
client_drop_keyspace(driver, keyspace_name)
|
33
20
|
end
|
34
21
|
|
35
22
|
it "can batch" do
|
36
|
-
client_create_keyspace(
|
37
|
-
client_create_column_family(
|
38
|
-
|
39
|
-
default_arguments = {
|
40
|
-
keyspace_name: keyspace_name,
|
41
|
-
name: column_family_name,
|
42
|
-
}
|
23
|
+
client_create_keyspace(driver, keyspace_name)
|
24
|
+
client_create_column_family(driver, column_family_name, "id text PRIMARY KEY, name text")
|
43
25
|
|
44
26
|
subject.batch({
|
27
|
+
keyspace_name: keyspace_name,
|
28
|
+
column_family_name: column_family_name,
|
45
29
|
:modifications => [
|
46
|
-
[:insert,
|
47
|
-
[:insert,
|
48
|
-
[:update,
|
49
|
-
[:delete,
|
30
|
+
[:insert, data: {id: '1', name: 'github'}],
|
31
|
+
[:insert, data: {id: '2', name: 'gist'}],
|
32
|
+
[:update, set: {name: 'github.com'}, where: {id: '1'}],
|
33
|
+
[:delete, where: {id: '2'}],
|
50
34
|
]
|
51
35
|
})
|
52
36
|
|
53
|
-
result =
|
37
|
+
result = driver.execute("SELECT * FROM apps")
|
54
38
|
result.rows.should be(1)
|
55
39
|
|
56
40
|
rows = []
|
@@ -62,8 +46,8 @@ describe Cassanity::Connection do
|
|
62
46
|
end
|
63
47
|
|
64
48
|
it "knows keyspaces" do
|
65
|
-
client_create_keyspace(
|
66
|
-
client_create_keyspace(
|
49
|
+
client_create_keyspace(driver, 'something1')
|
50
|
+
client_create_keyspace(driver, 'something2')
|
67
51
|
|
68
52
|
result = subject.keyspaces
|
69
53
|
result.each do |keyspace|
|
@@ -75,7 +59,7 @@ describe Cassanity::Connection do
|
|
75
59
|
names.should include('something1')
|
76
60
|
names.should include('something2')
|
77
61
|
|
78
|
-
client_drop_keyspace(
|
79
|
-
client_drop_keyspace(
|
62
|
+
client_drop_keyspace(driver, 'something1')
|
63
|
+
client_drop_keyspace(driver, 'something2')
|
80
64
|
end
|
81
65
|
end
|
@@ -1,28 +1,18 @@
|
|
1
1
|
require 'helper'
|
2
2
|
require 'cassanity/keyspace'
|
3
|
-
require 'cassanity/executors/cassandra_cql'
|
4
3
|
|
5
4
|
describe Cassanity::Keyspace do
|
6
5
|
let(:keyspace_name) { 'cassanity_test' }
|
7
6
|
let(:self_created_keyspace_name) { 'self_created' }
|
8
7
|
let(:column_family_name) { 'apps' }
|
9
8
|
|
10
|
-
let(:client) {
|
11
|
-
|
12
|
-
cql_version: '3.0.0',
|
13
|
-
})
|
14
|
-
}
|
15
|
-
|
16
|
-
let(:executor) {
|
17
|
-
Cassanity::Executors::CassandraCql.new({
|
18
|
-
client: client,
|
19
|
-
})
|
20
|
-
}
|
9
|
+
let(:client) { Cassanity::Client.new }
|
10
|
+
let(:driver) { client.driver }
|
21
11
|
|
22
12
|
let(:required_arguments) {
|
23
13
|
{
|
24
14
|
name: keyspace_name,
|
25
|
-
executor: executor,
|
15
|
+
executor: client.executor,
|
26
16
|
}
|
27
17
|
}
|
28
18
|
|
@@ -31,59 +21,59 @@ describe Cassanity::Keyspace do
|
|
31
21
|
}
|
32
22
|
|
33
23
|
before do
|
34
|
-
client_drop_keyspace(
|
35
|
-
client_create_keyspace(
|
24
|
+
client_drop_keyspace(driver, keyspace_name)
|
25
|
+
client_create_keyspace(driver, keyspace_name)
|
36
26
|
end
|
37
27
|
|
38
28
|
after do
|
39
|
-
client_drop_keyspace(
|
40
|
-
client_drop_keyspace(
|
29
|
+
client_drop_keyspace(driver, keyspace_name)
|
30
|
+
client_drop_keyspace(driver, self_created_keyspace_name)
|
41
31
|
end
|
42
32
|
|
43
33
|
it "can create" do
|
44
|
-
client_keyspace?(
|
34
|
+
client_keyspace?(driver, self_created_keyspace_name).should be_false
|
45
35
|
instance = described_class.new(required_arguments.merge({
|
46
36
|
name: self_created_keyspace_name,
|
47
37
|
}))
|
48
38
|
instance.create
|
49
|
-
client_keyspace?(
|
39
|
+
client_keyspace?(driver, self_created_keyspace_name).should be_true
|
50
40
|
end
|
51
41
|
|
52
42
|
it "knows if it exists" do
|
53
43
|
subject.exists?.should be_true
|
54
|
-
client_drop_keyspace(
|
44
|
+
client_drop_keyspace(driver, keyspace_name)
|
55
45
|
subject.exists?.should be_false
|
56
46
|
end
|
57
47
|
|
58
48
|
it "can recreate when not created" do
|
59
|
-
client_drop_keyspace(
|
60
|
-
client_keyspace?(
|
49
|
+
client_drop_keyspace(driver, keyspace_name)
|
50
|
+
client_keyspace?(driver, keyspace_name).should be_false
|
61
51
|
subject.recreate
|
62
|
-
client_keyspace?(
|
52
|
+
client_keyspace?(driver, keyspace_name).should be_true
|
63
53
|
end
|
64
54
|
|
65
55
|
it "can recreate when already created" do
|
66
|
-
client_keyspace?(
|
56
|
+
client_keyspace?(driver, keyspace_name).should be_true
|
67
57
|
subject.recreate
|
68
|
-
client_keyspace?(
|
58
|
+
client_keyspace?(driver, keyspace_name).should be_true
|
69
59
|
end
|
70
60
|
|
71
61
|
it "can use" do
|
72
|
-
|
73
|
-
|
62
|
+
driver.execute("USE system")
|
63
|
+
driver.keyspace.should_not eq(keyspace_name)
|
74
64
|
subject.use
|
75
|
-
|
65
|
+
driver.keyspace.should eq(keyspace_name)
|
76
66
|
end
|
77
67
|
|
78
68
|
it "can drop" do
|
79
|
-
client_keyspace?(
|
69
|
+
client_keyspace?(driver, keyspace_name).should be_true
|
80
70
|
subject.drop
|
81
|
-
client_keyspace?(
|
71
|
+
client_keyspace?(driver, keyspace_name).should be_false
|
82
72
|
end
|
83
73
|
|
84
74
|
it "knows column families" do
|
85
|
-
client_create_column_family(
|
86
|
-
client_create_column_family(
|
75
|
+
client_create_column_family(driver, 'something1')
|
76
|
+
client_create_column_family(driver, 'something2')
|
87
77
|
|
88
78
|
result = subject.column_families
|
89
79
|
result.each do |column_family|
|
@@ -95,7 +85,7 @@ describe Cassanity::Keyspace do
|
|
95
85
|
names.should include('something1')
|
96
86
|
names.should include('something2')
|
97
87
|
|
98
|
-
client_drop_column_family(
|
99
|
-
client_drop_column_family(
|
88
|
+
client_drop_column_family(driver, 'something1')
|
89
|
+
client_drop_column_family(driver, 'something2')
|
100
90
|
end
|
101
91
|
end
|
@@ -7,13 +7,61 @@ describe Cassanity::ArgumentGenerators::Batch do
|
|
7
7
|
cql = "BEGIN BATCH INSERT INTO users (id) VALUES (?) UPDATE users SET name = ? WHERE id = ? DELETE FROM users WHERE id = ? APPLY BATCH"
|
8
8
|
subject.call({
|
9
9
|
modifications: [
|
10
|
-
[:insert,
|
11
|
-
[:update,
|
12
|
-
[:delete,
|
10
|
+
[:insert, column_family_name: :users, data: {id: '1'}],
|
11
|
+
[:update, column_family_name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
|
12
|
+
[:delete, column_family_name: :users, where: {id: '1'}],
|
13
13
|
],
|
14
14
|
}).should eq([cql, '1', 'GitHub', '1', '1'])
|
15
15
|
end
|
16
16
|
|
17
|
+
context "with :column_family_name" do
|
18
|
+
it "merges column_family_name with each set of modifications" do
|
19
|
+
cql = "BEGIN BATCH INSERT INTO users (id) VALUES (?) UPDATE users SET name = ? WHERE id = ? APPLY BATCH"
|
20
|
+
subject.call({
|
21
|
+
column_family_name: :users,
|
22
|
+
modifications: [
|
23
|
+
[:insert, data: {id: '1'}],
|
24
|
+
[:update, set: {name: 'GitHub'}, where: {id: '1'}],
|
25
|
+
],
|
26
|
+
}).should eq([cql, '1', 'GitHub', '1'])
|
27
|
+
end
|
28
|
+
|
29
|
+
it "does not override command argument name" do
|
30
|
+
cql = "BEGIN BATCH INSERT INTO users (id) VALUES (?) UPDATE other_column_family SET name = ? WHERE id = ? APPLY BATCH"
|
31
|
+
subject.call({
|
32
|
+
column_family_name: :users,
|
33
|
+
modifications: [
|
34
|
+
[:insert, data: {id: '1'}],
|
35
|
+
[:update, column_family_name: :other_column_family, set: {name: 'GitHub'}, where: {id: '1'}],
|
36
|
+
],
|
37
|
+
}).should eq([cql, '1', 'GitHub', '1'])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "with :keyspace_name" do
|
42
|
+
it "merges column_family_name with each set of modifications" do
|
43
|
+
cql = "BEGIN BATCH INSERT INTO analytics.users (id) VALUES (?) UPDATE analytics.users SET name = ? WHERE id = ? APPLY BATCH"
|
44
|
+
subject.call({
|
45
|
+
keyspace_name: :analytics,
|
46
|
+
modifications: [
|
47
|
+
[:insert, column_family_name: :users, data: {id: '1'}],
|
48
|
+
[:update, column_family_name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
|
49
|
+
],
|
50
|
+
}).should eq([cql, '1', 'GitHub', '1'])
|
51
|
+
end
|
52
|
+
|
53
|
+
it "does not override command argument keyspace_name" do
|
54
|
+
cql = "BEGIN BATCH INSERT INTO other_keyspace_name.users (id) VALUES (?) UPDATE analytics.users SET name = ? WHERE id = ? APPLY BATCH"
|
55
|
+
subject.call({
|
56
|
+
keyspace_name: :analytics,
|
57
|
+
modifications: [
|
58
|
+
[:insert, keyspace_name: :other_keyspace_name, column_family_name: :users, data: {id: '1'}],
|
59
|
+
[:update, column_family_name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
|
60
|
+
],
|
61
|
+
}).should eq([cql, '1', 'GitHub', '1'])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
17
65
|
context "with :using key" do
|
18
66
|
subject {
|
19
67
|
described_class.new({
|
@@ -7,7 +7,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
|
|
7
7
|
cql = "ALTER COLUMNFAMILY apps"
|
8
8
|
expected = [cql]
|
9
9
|
subject.call({
|
10
|
-
|
10
|
+
column_family_name: :apps,
|
11
11
|
}).should eq(expected)
|
12
12
|
end
|
13
13
|
|
@@ -16,7 +16,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
|
|
16
16
|
cql = "ALTER COLUMNFAMILY foo.apps"
|
17
17
|
expected = [cql]
|
18
18
|
subject.call({
|
19
|
-
|
19
|
+
column_family_name: :apps,
|
20
20
|
keyspace_name: 'foo',
|
21
21
|
}).should eq(expected)
|
22
22
|
end
|
@@ -27,7 +27,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
|
|
27
27
|
cql = "ALTER COLUMNFAMILY apps ALTER created_at TYPE timestamp"
|
28
28
|
expected = [cql]
|
29
29
|
subject.call({
|
30
|
-
|
30
|
+
column_family_name: :apps,
|
31
31
|
alter: {
|
32
32
|
created_at: :timestamp,
|
33
33
|
},
|
@@ -40,7 +40,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
|
|
40
40
|
cql = "ALTER COLUMNFAMILY apps ADD created_at timestamp"
|
41
41
|
expected = [cql]
|
42
42
|
subject.call({
|
43
|
-
|
43
|
+
column_family_name: :apps,
|
44
44
|
add: {
|
45
45
|
created_at: :timestamp,
|
46
46
|
},
|
@@ -53,7 +53,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
|
|
53
53
|
cql = "ALTER COLUMNFAMILY apps DROP created_at"
|
54
54
|
expected = [cql]
|
55
55
|
subject.call({
|
56
|
-
|
56
|
+
column_family_name: :apps,
|
57
57
|
drop: :created_at,
|
58
58
|
}).should eq(expected)
|
59
59
|
end
|
@@ -74,7 +74,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
|
|
74
74
|
cql = "ALTER COLUMNFAMILY apps WITH comment = ?"
|
75
75
|
expected = [cql, 'Testing']
|
76
76
|
subject.call({
|
77
|
-
|
77
|
+
column_family_name: :apps,
|
78
78
|
with: {
|
79
79
|
comment: 'Testing',
|
80
80
|
}
|