Class: Cequel::Schema::TableUpdater
- Inherits:
-
Object
- Object
- Cequel::Schema::TableUpdater
- Defined in:
- lib/cequel/schema/table_updater.rb
Overview
Encapsulates a series of schema modification statements that can be applied to an existing table
Class Method Summary collapse
-
.apply(keyspace, table_name) {|updater| ... } ⇒ void
Construct a table updater and apply the schema modifications to the given table.
Instance Method Summary collapse
-
#add_column(name, type) ⇒ void
Add a column to the table.
-
#add_list(name, type) ⇒ void
Add a list to the table.
-
#add_map(name, key_type, value_type) ⇒ void
Add a map to the table.
-
#add_set(name, type) ⇒ void
Add a set to the table.
-
#apply ⇒ void
private
Apply the schema modifications to the table schema in the database.
-
#change_column(name, type) ⇒ void
Change an existing column’s type.
-
#change_properties(options) ⇒ void
Change one or more table storage properties.
-
#create_index(column_name, index_name = "#{table_name}_#{column_name}_idx") ⇒ void
Create a secondary index.
-
#drop_index(index_name) ⇒ void
Remove a secondary index.
-
#initialize(keyspace, table_name) ⇒ TableUpdater
constructor
A new instance of TableUpdater.
-
#rename_column(old_name, new_name) ⇒ void
Rename a column.
Constructor Details
#initialize(keyspace, table_name) ⇒ TableUpdater
Returns a new instance of TableUpdater.
27 28 29 30 |
# File 'lib/cequel/schema/table_updater.rb', line 27 def initialize(keyspace, table_name) @keyspace, @table_name = keyspace, table_name @statements = [] end |
Class Method Details
.apply(keyspace, table_name) {|updater| ... } ⇒ void
This method returns an undefined value.
Construct a table updater and apply the schema modifications to the given table.
18 19 20 |
# File 'lib/cequel/schema/table_updater.rb', line 18 def self.apply(keyspace, table_name, &block) new(keyspace, table_name).tap(&block).apply end |
Instance Method Details
#add_column(name, type) ⇒ void
This method returns an undefined value.
Add a column to the table
51 52 53 |
# File 'lib/cequel/schema/table_updater.rb', line 51 def add_column(name, type) add_data_column(Column.new(name, type(type))) end |
#add_list(name, type) ⇒ void
This method returns an undefined value.
Add a list to the table
62 63 64 |
# File 'lib/cequel/schema/table_updater.rb', line 62 def add_list(name, type) add_data_column(List.new(name, type(type))) end |
#add_map(name, key_type, value_type) ⇒ void
This method returns an undefined value.
Add a map to the table
85 86 87 |
# File 'lib/cequel/schema/table_updater.rb', line 85 def add_map(name, key_type, value_type) add_data_column(Map.new(name, type(key_type), type(value_type))) end |
#add_set(name, type) ⇒ void
This method returns an undefined value.
Add a set to the table
73 74 75 |
# File 'lib/cequel/schema/table_updater.rb', line 73 def add_set(name, type) add_data_column(Set.new(name, type(type))) end |
#apply ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Apply the schema modifications to the table schema in the database
40 41 42 |
# File 'lib/cequel/schema/table_updater.rb', line 40 def apply statements.each { |statement| keyspace.execute(statement) } end |
#change_column(name, type) ⇒ void
Changing the type of a CQL column does not modify the data currently stored in the column. Thus, client-side handling is needed to convert old values to the new type at read time. Cequel does not currently support this functionality, although it may in the future. Altering column types is not recommended.
This method returns an undefined value.
Change an existing column’s type
102 103 104 |
# File 'lib/cequel/schema/table_updater.rb', line 102 def change_column(name, type) add_stmt %Q|ALTER TABLE "#{table_name}" ALTER "#{name}" TYPE #{type}| end |
#change_properties(options) ⇒ void
This method returns an undefined value.
Change one or more table storage properties
125 126 127 128 129 |
# File 'lib/cequel/schema/table_updater.rb', line 125 def change_properties() properties = .map { |name, value| TableProperty.build(name, value).to_cql } add_stmt %Q|ALTER TABLE "#{table_name}" WITH #{properties.join(' AND ')}| end |
#create_index(column_name, index_name = "#{table_name}_#{column_name}_idx") ⇒ void
This method returns an undefined value.
Create a secondary index
139 140 141 |
# File 'lib/cequel/schema/table_updater.rb', line 139 def create_index(column_name, index_name = "#{table_name}_#{column_name}_idx") add_stmt %Q|CREATE INDEX "#{index_name}" ON "#{table_name}" ("#{column_name}")| end |
#drop_index(index_name) ⇒ void
This method returns an undefined value.
Remove a secondary index
149 150 151 |
# File 'lib/cequel/schema/table_updater.rb', line 149 def drop_index(index_name) add_stmt %Q|DROP INDEX IF EXISTS "#{index_name}"| end |
#rename_column(old_name, new_name) ⇒ void
This method returns an undefined value.
Rename a column
113 114 115 |
# File 'lib/cequel/schema/table_updater.rb', line 113 def rename_column(old_name, new_name) add_stmt %Q|ALTER TABLE "#{table_name}" RENAME "#{old_name}" TO "#{new_name}"| end |