Class: Cequel::Schema::TableUpdater

Inherits:
Object
  • Object
show all
Defined in:
lib/cequel/schema/table_updater.rb

Overview

Encapsulates a series of schema modification statements that can be applied to an existing table

Since:

  • 1.0.0

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(keyspace, table_name) ⇒ TableUpdater

Returns a new instance of TableUpdater.

Parameters:

  • keyspace (Metal::Keyspace)

    keyspace containing the table

  • table_name (Symbol)

    name of the table to modify

Since:

  • 1.0.0



26
27
28
29
# File 'lib/cequel/schema/table_updater.rb', line 26

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.

Parameters:

  • keyspace (Metal::Keyspace)

    keyspace containing the table

  • table_name (Symbol)

    name of the table to modify

Yield Parameters:

  • updater (TableUpdater)

    instance of updater whose modifications will be applied to the named table

Since:

  • 1.0.0



17
18
19
# File 'lib/cequel/schema/table_updater.rb', line 17

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

Parameters:

  • name (Symbol)

    the name of the column

  • type (Symbol, Type)

    the type of the column

Since:

  • 1.0.0



50
51
52
# File 'lib/cequel/schema/table_updater.rb', line 50

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

Parameters:

  • name (Symbol)

    the name of the list

  • type (Symbol, Type)

    the type of the list elements

Since:

  • 1.0.0



61
62
63
# File 'lib/cequel/schema/table_updater.rb', line 61

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

Parameters:

  • name (Symbol)

    the name of the map

  • key_type (Symbol, Type)

    the type of the map’s keys

  • value_type (Symbol, Type)

    the type of the map’s values

Since:

  • 1.0.0



84
85
86
# File 'lib/cequel/schema/table_updater.rb', line 84

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

Parameters:

  • name (Symbol)

    the name of the set

  • type (Symbol, Type)

    the type of the set elements

Since:

  • 1.0.0



72
73
74
# File 'lib/cequel/schema/table_updater.rb', line 72

def add_set(name, type)
  add_data_column(Set.new(name, type(type)))
end

#applyvoid

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

Since:

  • 1.0.0



39
40
41
# File 'lib/cequel/schema/table_updater.rb', line 39

def apply
  statements.each { |statement| keyspace.execute(statement) }
end

#change_column(name, type) ⇒ void

Note:

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

Parameters:

  • name (Symbol)

    the name of the column

  • type (Symbol, Type)

    the new type of the column

Since:

  • 1.0.0



101
102
103
# File 'lib/cequel/schema/table_updater.rb', line 101

def change_column(name, type)
  alter_table("ALTER #{name} TYPE #{type(type).cql_name}")
end

#change_properties(options) ⇒ void

This method returns an undefined value.

Change one or more table storage properties

Parameters:

  • options (Hash)

    map of property names to new values

See Also:

Since:

  • 1.0.0



124
125
126
127
128
# File 'lib/cequel/schema/table_updater.rb', line 124

def change_properties(options)
  properties = options
    .map { |name, value| TableProperty.build(name, value).to_cql }
  alter_table("WITH #{properties.join(' AND ')}")
end

#create_index(column_name, index_name = nil) ⇒ void

This method returns an undefined value.

Create a secondary index

Parameters:

  • column_name (Symbol)

    name of the column to add an index on

  • index_name (Symbol) (defaults to: nil)

    name of the index; will be inferred from convention if nil

Since:

  • 1.0.0



138
139
140
141
142
# File 'lib/cequel/schema/table_updater.rb', line 138

def create_index(column_name, index_name = nil)
  index_name ||= "#{table_name}_#{column_name}_idx"
  statements <<
    "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

Parameters:

  • index_name (Symbol)

    the name of the index to remove

Since:

  • 1.0.0



150
151
152
# File 'lib/cequel/schema/table_updater.rb', line 150

def drop_index(index_name)
  statements << "DROP INDEX #{index_name}"
end

#rename_column(old_name, new_name) ⇒ void

This method returns an undefined value.

Rename a column

Parameters:

  • old_name (Symbol)

    the current name of the column

  • new_name (Symbol)

    the new name of the column

Since:

  • 1.0.0



112
113
114
# File 'lib/cequel/schema/table_updater.rb', line 112

def rename_column(old_name, new_name)
  alter_table(%(RENAME "#{old_name}" TO "#{new_name}"))
end