cequel 2.1.0 → 3.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +2 -2
- data/README.md +8 -0
- data/lib/cequel/errors.rb +2 -0
- data/lib/cequel/metal/new_relic_instrumentation.rb +2 -1
- data/lib/cequel/record.rb +8 -0
- data/lib/cequel/record/schema.rb +30 -23
- data/lib/cequel/schema.rb +3 -2
- data/lib/cequel/schema/column.rb +11 -1
- data/lib/cequel/schema/keyspace.rb +18 -7
- data/lib/cequel/schema/patch.rb +152 -0
- data/lib/cequel/schema/table.rb +55 -137
- data/lib/cequel/schema/table_desc_dsl.rb +196 -0
- data/lib/cequel/schema/table_differ.rb +112 -0
- data/lib/cequel/schema/table_property.rb +14 -0
- data/lib/cequel/schema/table_reader.rb +81 -85
- data/lib/cequel/schema/table_updater.rb +0 -17
- data/lib/cequel/schema/table_writer.rb +10 -9
- data/lib/cequel/version.rb +1 -1
- data/spec/examples/metal/data_set_spec.rb +156 -153
- data/spec/examples/metal/keyspace_spec.rb +4 -4
- data/spec/examples/record/associations_spec.rb +6 -0
- data/spec/examples/record/mass_assignment_spec.rb +2 -2
- data/spec/examples/record/properties_spec.rb +1 -0
- data/spec/examples/record/record_set_spec.rb +1 -1
- data/spec/examples/schema/patch_spec.rb +190 -0
- data/spec/examples/schema/table_differ_spec.rb +280 -0
- data/spec/examples/schema/table_reader_spec.rb +379 -354
- data/spec/examples/schema/table_updater_spec.rb +0 -12
- data/spec/examples/spec_helper.rb +5 -5
- data/spec/examples/spec_support/preparation_spec.rb +4 -0
- data/spec/support/helpers.rb +23 -0
- metadata +9 -6
- data/lib/cequel/schema/create_table_dsl.rb +0 -88
- data/lib/cequel/schema/table_synchronizer.rb +0 -180
- data/spec/examples/schema/table_synchronizer_spec.rb +0 -200
@@ -83,18 +83,6 @@ describe Cequel::Schema::TableUpdater do
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
describe '#change_column' do
|
87
|
-
before do
|
88
|
-
cequel.schema.alter_table(table_name) do
|
89
|
-
change_column :title, :text
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should change the type' do
|
94
|
-
expect(table.data_column(:title).type).to eq(Cequel::Type[:text])
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
86
|
describe '#rename_column' do
|
99
87
|
before do
|
100
88
|
cequel.schema.alter_table(table_name) do
|
@@ -17,11 +17,11 @@ RSpec.configure do |config|
|
|
17
17
|
|
18
18
|
{
|
19
19
|
rails: ActiveSupport::VERSION::STRING,
|
20
|
-
|
21
|
-
}.each do |tag,
|
22
|
-
config.filter_run_excluding tag => ->(
|
23
|
-
!Gem::Requirement.new(
|
24
|
-
satisfied_by?(Gem::Version.new(
|
20
|
+
cql: Cequel::SpecSupport::Helpers.cql_version,
|
21
|
+
}.each do |tag, actual_version|
|
22
|
+
config.filter_run_excluding tag => ->(required_version) {
|
23
|
+
!Gem::Requirement.new(required_version).
|
24
|
+
satisfied_by?(Gem::Version.new(actual_version))
|
25
25
|
}
|
26
26
|
end
|
27
27
|
|
data/spec/support/helpers.rb
CHANGED
@@ -51,6 +51,14 @@ module Cequel
|
|
51
51
|
|
52
52
|
module Helpers
|
53
53
|
|
54
|
+
def self.cql_version
|
55
|
+
Cequel.connect(host: host,
|
56
|
+
port: port,
|
57
|
+
keyspace: "system")
|
58
|
+
.execute("SELECT cql_version FROM system.local")
|
59
|
+
.first["cql_version"]
|
60
|
+
end
|
61
|
+
|
54
62
|
def self.cequel
|
55
63
|
@cequel ||= Cequel.connect(
|
56
64
|
host: host,
|
@@ -151,6 +159,21 @@ module Cequel
|
|
151
159
|
0.001
|
152
160
|
end
|
153
161
|
|
162
|
+
def example_slug(example, max_length=1000)
|
163
|
+
example.description.downcase.gsub(/[^a-z]+/, '_')[/.{1,#{max_length}}$/]
|
164
|
+
end
|
165
|
+
|
166
|
+
# figures a table name starting with `base_name` that is unique to the
|
167
|
+
# specified example
|
168
|
+
#
|
169
|
+
# Examples
|
170
|
+
#
|
171
|
+
# let(:table_name) { |ex| unique_table_name("posts", ex) }
|
172
|
+
#
|
173
|
+
def unique_table_name(base_name, example)
|
174
|
+
max_suffix = 45 - base_name.size
|
175
|
+
:"#{base_name}_#{example_slug(example, max_suffix)}"
|
176
|
+
end
|
154
177
|
end
|
155
178
|
end
|
156
179
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mat Brown
|
@@ -29,7 +29,7 @@ authors:
|
|
29
29
|
autorequire:
|
30
30
|
bindir: bin
|
31
31
|
cert_chain: []
|
32
|
-
date: 2017-
|
32
|
+
date: 2017-03-15 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: activemodel
|
@@ -269,13 +269,14 @@ files:
|
|
269
269
|
- lib/cequel/record/validations.rb
|
270
270
|
- lib/cequel/schema.rb
|
271
271
|
- lib/cequel/schema/column.rb
|
272
|
-
- lib/cequel/schema/create_table_dsl.rb
|
273
272
|
- lib/cequel/schema/keyspace.rb
|
274
273
|
- lib/cequel/schema/migration_validator.rb
|
274
|
+
- lib/cequel/schema/patch.rb
|
275
275
|
- lib/cequel/schema/table.rb
|
276
|
+
- lib/cequel/schema/table_desc_dsl.rb
|
277
|
+
- lib/cequel/schema/table_differ.rb
|
276
278
|
- lib/cequel/schema/table_property.rb
|
277
279
|
- lib/cequel/schema/table_reader.rb
|
278
|
-
- lib/cequel/schema/table_synchronizer.rb
|
279
280
|
- lib/cequel/schema/table_updater.rb
|
280
281
|
- lib/cequel/schema/table_writer.rb
|
281
282
|
- lib/cequel/schema/update_table_dsl.rb
|
@@ -308,8 +309,9 @@ files:
|
|
308
309
|
- spec/examples/record/timestamps_spec.rb
|
309
310
|
- spec/examples/record/validations_spec.rb
|
310
311
|
- spec/examples/schema/keyspace_spec.rb
|
312
|
+
- spec/examples/schema/patch_spec.rb
|
313
|
+
- spec/examples/schema/table_differ_spec.rb
|
311
314
|
- spec/examples/schema/table_reader_spec.rb
|
312
|
-
- spec/examples/schema/table_synchronizer_spec.rb
|
313
315
|
- spec/examples/schema/table_updater_spec.rb
|
314
316
|
- spec/examples/schema/table_writer_spec.rb
|
315
317
|
- spec/examples/spec_helper.rb
|
@@ -368,8 +370,9 @@ test_files:
|
|
368
370
|
- spec/examples/record/timestamps_spec.rb
|
369
371
|
- spec/examples/record/validations_spec.rb
|
370
372
|
- spec/examples/schema/keyspace_spec.rb
|
373
|
+
- spec/examples/schema/patch_spec.rb
|
374
|
+
- spec/examples/schema/table_differ_spec.rb
|
371
375
|
- spec/examples/schema/table_reader_spec.rb
|
372
|
-
- spec/examples/schema/table_synchronizer_spec.rb
|
373
376
|
- spec/examples/schema/table_updater_spec.rb
|
374
377
|
- spec/examples/schema/table_writer_spec.rb
|
375
378
|
- spec/examples/spec_helper.rb
|
@@ -1,88 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module Cequel
|
3
|
-
module Schema
|
4
|
-
#
|
5
|
-
# Implements a DSL that can be used to define a table schema
|
6
|
-
#
|
7
|
-
# @see Keyspace#create_table
|
8
|
-
#
|
9
|
-
class CreateTableDSL < BasicObject
|
10
|
-
extend ::Cequel::Util::Forwardable
|
11
|
-
#
|
12
|
-
# Evaluate `block` in the context of this DSL, and apply directives to
|
13
|
-
# `table`
|
14
|
-
#
|
15
|
-
# @param table [Table] a table
|
16
|
-
# @yield block evaluated in the context of the create table DSL
|
17
|
-
# @return [void]
|
18
|
-
#
|
19
|
-
# @api private
|
20
|
-
#
|
21
|
-
def self.apply(table, &block)
|
22
|
-
dsl = new(table)
|
23
|
-
dsl.instance_eval(&block)
|
24
|
-
end
|
25
|
-
|
26
|
-
#
|
27
|
-
# @param table [Table] table to apply directives to
|
28
|
-
#
|
29
|
-
# @api private
|
30
|
-
#
|
31
|
-
def initialize(table)
|
32
|
-
@table = table
|
33
|
-
end
|
34
|
-
|
35
|
-
#
|
36
|
-
# @!method partition_key(name, type)
|
37
|
-
# (see Cequel::Schema::Table#add_partition_key)
|
38
|
-
#
|
39
|
-
def_delegator :@table, :add_partition_key, :partition_key
|
40
|
-
|
41
|
-
#
|
42
|
-
# @!method key(name, type, clustering_order = nil)
|
43
|
-
# (see Cequel::Schema::Table#add_key)
|
44
|
-
#
|
45
|
-
def_delegator :@table, :add_key, :key
|
46
|
-
|
47
|
-
#
|
48
|
-
# @!method column(name, type, options = {})
|
49
|
-
# (see Cequel::Schema::Table#add_data_column)
|
50
|
-
#
|
51
|
-
def_delegator :@table, :add_data_column, :column
|
52
|
-
|
53
|
-
#
|
54
|
-
# @!method list(name, type)
|
55
|
-
# (see Cequel::Schema::Table#add_list)
|
56
|
-
#
|
57
|
-
def_delegator :@table, :add_list, :list
|
58
|
-
|
59
|
-
#
|
60
|
-
# @!method set(name, type)
|
61
|
-
# (see Cequel::Schema::Table#add_set)
|
62
|
-
#
|
63
|
-
def_delegator :@table, :add_set, :set
|
64
|
-
|
65
|
-
#
|
66
|
-
# @!method map(name, key_type, value_type)
|
67
|
-
# (see Cequel::Schema::Table#add_map)
|
68
|
-
#
|
69
|
-
def_delegator :@table, :add_map, :map
|
70
|
-
|
71
|
-
#
|
72
|
-
# @!method with(name, value)
|
73
|
-
# (see Cequel::Schema::Table#add_property)
|
74
|
-
#
|
75
|
-
def_delegator :@table, :add_property, :with
|
76
|
-
|
77
|
-
#
|
78
|
-
# Direct that this table use "compact storage". This is primarily useful
|
79
|
-
# for backwards compatibility with legacy CQL2 table schemas.
|
80
|
-
#
|
81
|
-
# @return [void]
|
82
|
-
#
|
83
|
-
def compact_storage
|
84
|
-
@table.compact_storage = true
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,180 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module Cequel
|
3
|
-
module Schema
|
4
|
-
#
|
5
|
-
# Synchronize a table schema in the database with a desired table schema
|
6
|
-
#
|
7
|
-
# @see .apply
|
8
|
-
# @see Keyspace#synchronize_table
|
9
|
-
#
|
10
|
-
class TableSynchronizer
|
11
|
-
# @return [Table] table as it is currently defined
|
12
|
-
# @api private
|
13
|
-
attr_reader :existing
|
14
|
-
# @return [Table] table schema as it is desired
|
15
|
-
# @api private
|
16
|
-
attr_reader :updated
|
17
|
-
#
|
18
|
-
# Takes an existing table schema read from the database, and a desired
|
19
|
-
# schema for that table. Modifies the table schema in the database to
|
20
|
-
# match the desired schema, or creates the table as specified if it does
|
21
|
-
# not yet exist
|
22
|
-
#
|
23
|
-
# @param keyspace [Metal::Keyspace] keyspace that contains table
|
24
|
-
# @param existing [Table] table schema as it is currently defined
|
25
|
-
# @param updated [Table] table schema as it is desired
|
26
|
-
# @return [void]
|
27
|
-
# @raise (see #apply)
|
28
|
-
#
|
29
|
-
def self.apply(keyspace, existing, updated)
|
30
|
-
if existing
|
31
|
-
TableUpdater.apply(keyspace, existing.name) do |updater|
|
32
|
-
new(updater, existing, updated).apply
|
33
|
-
end
|
34
|
-
else
|
35
|
-
TableWriter.apply(keyspace, updated)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
#
|
40
|
-
# @param updater [TableUpdater] table updater to hold schema
|
41
|
-
# modifications
|
42
|
-
# @param existing [Table] table schema as it is currently defined
|
43
|
-
# @param updated [Table] table schema as it is desired
|
44
|
-
# @return [void]
|
45
|
-
# @private
|
46
|
-
#
|
47
|
-
def initialize(updater, existing, updated)
|
48
|
-
@updater, @existing, @updated = updater, existing, updated
|
49
|
-
end
|
50
|
-
private_class_method :new
|
51
|
-
|
52
|
-
#
|
53
|
-
# Apply the changes needed to synchronize the schema in the database with
|
54
|
-
# the desired schema
|
55
|
-
#
|
56
|
-
# @return [void]
|
57
|
-
# @raise (see MigrationValidator#validate!)
|
58
|
-
#
|
59
|
-
# @api private
|
60
|
-
#
|
61
|
-
def apply
|
62
|
-
validate!
|
63
|
-
update_keys
|
64
|
-
update_columns
|
65
|
-
update_properties
|
66
|
-
end
|
67
|
-
|
68
|
-
#
|
69
|
-
# Iterate over pairs of (old_key, new_key)
|
70
|
-
#
|
71
|
-
# @yieldparam old_key [Column] key in existing schema
|
72
|
-
# @yieldparam new_key [Column] corresponding key in updated schema
|
73
|
-
# @return [void]
|
74
|
-
#
|
75
|
-
# @api private
|
76
|
-
#
|
77
|
-
def each_key_pair(&block)
|
78
|
-
existing.key_columns.zip(updated.key_columns, &block)
|
79
|
-
end
|
80
|
-
|
81
|
-
#
|
82
|
-
# Iterate over pairs of (old_column, new_column)
|
83
|
-
#
|
84
|
-
# @yieldparam old_column [Column] column in existing schema
|
85
|
-
# @yieldparam new_column [Column] corresponding column in updated schema
|
86
|
-
# @return [void]
|
87
|
-
#
|
88
|
-
# @api private
|
89
|
-
#
|
90
|
-
def each_data_column_pair(&block)
|
91
|
-
if existing.compact_storage? && existing.clustering_columns.any?
|
92
|
-
yield existing.data_columns.first, updated.data_columns.first
|
93
|
-
else
|
94
|
-
old_columns = existing.data_columns.index_by { |col| col.name }
|
95
|
-
new_columns = updated.data_columns.index_by { |col| col.name }
|
96
|
-
all_column_names = (old_columns.keys + new_columns.keys).tap(&:uniq!)
|
97
|
-
all_column_names.each do |name|
|
98
|
-
yield old_columns[name], new_columns[name]
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
#
|
104
|
-
# Iterate over pairs of (old_clustering_column, new_clustering_column)
|
105
|
-
#
|
106
|
-
# @yieldparam old_clustering_column [Column] key in existing schema
|
107
|
-
# @yieldparam new_clustering_column [Column] corresponding key in updated
|
108
|
-
# schema
|
109
|
-
# @return [void]
|
110
|
-
#
|
111
|
-
# @api private
|
112
|
-
#
|
113
|
-
def each_clustering_column_pair(&block)
|
114
|
-
existing.clustering_columns.zip(updated.clustering_columns, &block)
|
115
|
-
end
|
116
|
-
|
117
|
-
protected
|
118
|
-
|
119
|
-
attr_reader :updater
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
def update_keys
|
124
|
-
each_key_pair do |old_key, new_key|
|
125
|
-
if old_key.name != new_key.name
|
126
|
-
updater.rename_column(old_key.name || :column1, new_key.name)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def update_columns
|
132
|
-
each_data_column_pair do |old_column, new_column|
|
133
|
-
if old_column.nil?
|
134
|
-
add_column(new_column)
|
135
|
-
elsif new_column
|
136
|
-
update_column(old_column, new_column)
|
137
|
-
update_index(old_column, new_column)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def add_column(column)
|
143
|
-
updater.add_data_column(column)
|
144
|
-
updater.create_index(column.name, column.index_name) if column.indexed?
|
145
|
-
end
|
146
|
-
|
147
|
-
def update_column(old_column, new_column)
|
148
|
-
if old_column.name != new_column.name
|
149
|
-
updater.rename_column(old_column.name || :value, new_column.name)
|
150
|
-
end
|
151
|
-
if old_column.type != new_column.type
|
152
|
-
updater.change_column(new_column.name, new_column.type)
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
def update_index(old_column, new_column)
|
157
|
-
if !old_column.indexed? && new_column.indexed?
|
158
|
-
updater.create_index(new_column.name, new_column.index_name)
|
159
|
-
elsif old_column.indexed? && !new_column.indexed?
|
160
|
-
updater.drop_index(old_column.index_name)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def update_properties
|
165
|
-
changes = {}
|
166
|
-
updated.properties.each_pair do |name, new_property|
|
167
|
-
old_property = existing.property(name)
|
168
|
-
if old_property != new_property.value
|
169
|
-
changes[name] = new_property.value
|
170
|
-
end
|
171
|
-
end
|
172
|
-
updater.change_properties(changes) if changes.any?
|
173
|
-
end
|
174
|
-
|
175
|
-
def validate!
|
176
|
-
MigrationValidator.validate!(self)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
@@ -1,200 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
3
|
-
|
4
|
-
describe Cequel::Schema::TableSynchronizer do
|
5
|
-
let(:table_name) { :"posts_#{SecureRandom.hex(4)}" }
|
6
|
-
|
7
|
-
let(:table) { cequel.schema.read_table(table_name) }
|
8
|
-
|
9
|
-
context 'with no existing table' do
|
10
|
-
before do
|
11
|
-
cequel.schema.sync_table table_name do
|
12
|
-
key :blog_subdomain, :text
|
13
|
-
key :permalink, :text
|
14
|
-
column :title, :text
|
15
|
-
column :body, :text
|
16
|
-
column :created_at, :timestamp
|
17
|
-
set :author_names, :text
|
18
|
-
with :comment, 'Test Table'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
after { cequel.schema.drop_table(table_name) }
|
23
|
-
|
24
|
-
it 'should create table' do
|
25
|
-
expect(table.column(:title).type).to eq(Cequel::Type[:text]) #etc.
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'with an existing table' do
|
30
|
-
before do
|
31
|
-
cequel.schema.create_table table_name do
|
32
|
-
key :blog_subdomain, :text
|
33
|
-
key :permalink, :text
|
34
|
-
column :title, :ascii, :index => true
|
35
|
-
column :body, :ascii
|
36
|
-
column :created_at, :timestamp
|
37
|
-
set :author_names, :text
|
38
|
-
with :comment, 'Test Table'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
after { cequel.schema.drop_table(table_name) }
|
43
|
-
|
44
|
-
context 'with valid changes' do
|
45
|
-
|
46
|
-
before do
|
47
|
-
cequel.schema.sync_table table_name do
|
48
|
-
key :blog_subdomain, :text
|
49
|
-
key :post_permalink, :text
|
50
|
-
column :title, :ascii
|
51
|
-
column :body, :text
|
52
|
-
column :primary_author_id, :uuid, :index => true
|
53
|
-
column :created_at, :timestamp, :index => true
|
54
|
-
column :published_at, :timestamp
|
55
|
-
set :author_names, :text
|
56
|
-
list :categories, :text
|
57
|
-
with :comment, 'Test Table 2.0'
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should rename keys' do
|
62
|
-
expect(table.clustering_columns.first.name).to eq(:post_permalink)
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'should add new columns' do
|
66
|
-
expect(table.column(:published_at).type).to eq(Cequel::Type[:timestamp])
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'should add new collections' do
|
70
|
-
expect(table.column(:categories)).to be_a(Cequel::Schema::List)
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'should add new column with index' do
|
74
|
-
expect(table.column(:primary_author_id)).to be_indexed
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'should add index to existing columns' do
|
78
|
-
expect(table.column(:created_at)).to be_indexed
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'should drop index from existing columns' do
|
82
|
-
expect(table.column(:title)).not_to be_indexed
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'should change column type' do
|
86
|
-
expect(table.column(:body).type).to eq(Cequel::Type[:text])
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'should change properties' do
|
90
|
-
expect(table.property(:comment)).to eq('Test Table 2.0')
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'invalid migrations' do
|
96
|
-
|
97
|
-
it 'should not allow changing type of key' do
|
98
|
-
expect {
|
99
|
-
cequel.schema.sync_table table_name do
|
100
|
-
key :blog_subdomain, :text
|
101
|
-
key :permalink, :ascii
|
102
|
-
column :title, :ascii
|
103
|
-
column :body, :text
|
104
|
-
column :created_at, :timestamp
|
105
|
-
set :author_names, :text
|
106
|
-
with :comment, 'Test Table'
|
107
|
-
end
|
108
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'should not allow adding a key' do
|
112
|
-
expect {
|
113
|
-
cequel.schema.sync_table table_name do
|
114
|
-
key :blog_subdomain, :text
|
115
|
-
key :permalink, :text
|
116
|
-
key :year, :int
|
117
|
-
column :title, :ascii
|
118
|
-
column :body, :text
|
119
|
-
column :created_at, :timestamp
|
120
|
-
set :author_names, :text
|
121
|
-
with :comment, 'Test Table'
|
122
|
-
end
|
123
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'should not allow removing a key' do
|
127
|
-
expect {
|
128
|
-
cequel.schema.sync_table table_name do
|
129
|
-
key :blog_subdomain, :text
|
130
|
-
column :title, :ascii
|
131
|
-
column :body, :text
|
132
|
-
column :created_at, :timestamp
|
133
|
-
set :author_names, :text
|
134
|
-
with :comment, 'Test Table'
|
135
|
-
end
|
136
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'should not allow changing the partition status of a key' do
|
140
|
-
expect {
|
141
|
-
cequel.schema.sync_table table_name do
|
142
|
-
key :blog_subdomain, :text
|
143
|
-
partition_key :permalink, :text
|
144
|
-
column :title, :ascii
|
145
|
-
column :body, :text
|
146
|
-
column :created_at, :timestamp
|
147
|
-
set :author_names, :text
|
148
|
-
with :comment, 'Test Table'
|
149
|
-
end
|
150
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
151
|
-
end
|
152
|
-
|
153
|
-
it 'should not allow changing the data structure of a column' do
|
154
|
-
expect {
|
155
|
-
cequel.schema.sync_table table_name do
|
156
|
-
key :blog_subdomain, :text
|
157
|
-
key :permalink, :text
|
158
|
-
column :title, :ascii
|
159
|
-
column :body, :text
|
160
|
-
column :created_at, :timestamp
|
161
|
-
list :author_names, :text
|
162
|
-
with :comment, 'Test Table'
|
163
|
-
end
|
164
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'should not allow invalid type transitions of a data column' do
|
168
|
-
expect {
|
169
|
-
cequel.schema.sync_table table_name do
|
170
|
-
key :blog_subdomain, :text
|
171
|
-
key :permalink, :text
|
172
|
-
column :title, :ascii, :index => true
|
173
|
-
column :body, :int
|
174
|
-
column :created_at, :timestamp
|
175
|
-
set :author_names, :text
|
176
|
-
with :comment, 'Test Table'
|
177
|
-
end
|
178
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
179
|
-
end
|
180
|
-
|
181
|
-
it 'should not allow changing clustering order' do
|
182
|
-
expect {
|
183
|
-
cequel.schema.sync_table table_name do
|
184
|
-
key :blog_subdomain, :text
|
185
|
-
key :permalink, :text, :desc
|
186
|
-
column :title, :ascii, :index => true
|
187
|
-
column :body, :ascii
|
188
|
-
column :created_at, :timestamp
|
189
|
-
set :author_names, :text
|
190
|
-
with :comment, 'Test Table'
|
191
|
-
end
|
192
|
-
}.to raise_error(Cequel::InvalidSchemaMigration)
|
193
|
-
end
|
194
|
-
|
195
|
-
end
|
196
|
-
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
end
|