cassanity 0.3.0 → 0.4.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/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
|
}
|