Methods
- add_sql_column
- add_sql_column
- add_sql_field
- evolve_schema
- remove_sql_field
- rename_schema
- rename_sql_table
Public Instance methods
Alias for #add_sql_field
Alias for #add_sql_field
This method is also aliased as
add_sql_column
add_sql_column
[ show source ]
# File lib/og/store/sql/evolution.rb, line 14
14: def add_sql_field(klass, a, anno)
15: Logger.info "Adding field '#{a}' to '#{klass.table}'"
16: query "ALTER TABLE #{klass.table} ADD COLUMN #{field_sql_for_attribute a, anno}"
17: end
Evolve the schema (table in sql stores) for the given class. Compares the fields in the database schema with the serializable attributes of the given class and tries to fix mismatches by adding are droping columns.
Evolution options
- :evolve_schema => :add (only add, dont remove columns)
- :evolve_schema => :full (add and delete columns)
- :evolve_schema => :warn (only emit warnings, DEFAULT_
- :evolve_schema => false (no evolution)
Example
Og.setup(
.. :evolve_schema => :full ..
)
[ show source ]
# File lib/og/store/sql/evolution.rb, line 59
59: def evolve_schema(klass)
60: return unless @options[:evolve_schema]
61: klass = klass.table_class
62: sql_fields = create_field_map(klass).keys
63: attrs = serializable_attributes_for_class(klass)
64:
65: # Add new fields to the table.
66:
67: for field in attrs
68: unless sql_fields.include? field
69: unless @options[:evolve_schema] == :warn
70: add_sql_field klass, field, klass.ann(field)
71: else
72: Logger.warn "Missing field '#{field}' on table '#{klass.table}'!"
73: end
74: end
75: end
76:
77: # Remove obsolete fields from the table.
78:
79: for field in sql_fields
80: unless attrs.include? field
81: if @options[:evolve_schema] == :full
82: remove_sql_field klass, field
83: else
84: Logger.warn "Obsolete field '#{field}' found on table '#{klass.table}'!"
85: end
86: end
87: end
88: end
[ show source ]
# File lib/og/store/sql/evolution.rb, line 24
24: def remove_sql_field(klass, a)
25: Logger.info "Removing field '#{a}' from '#{klass.table}'"
26: query "ALTER TABLE #{klass.table} DROP COLUMN #{a}"
27: end
Renames the schema (table in sql stores) for the given class.
Input
- new_schema = the new schema (Class or table name)
- old_schema = the old schema (Class or table name)
Example
store.rename_schema(TicketArticle, Ticket::Article)
[ show source ]
# File lib/og/store/sql/evolution.rb, line 102
102: def rename_schema(old_schema, new_schema)
103: if old_schema.is_a? Class
104: old_schema = table(old_schema)
105: end
106:
107: if new_schema.is_a? Class
108: new_schema = table(new_schema)
109: end
110:
111: rename_sql_table(old_schema, new_schema)
112: end
[ show source ]
# File lib/og/store/sql/evolution.rb, line 34
34: def rename_sql_table(_old, _new)
35: Logger.info "Rename table '#{_old}' to '#{_new}'"
36: query "ALTER TABLE #{_old} RENAME #{_new}"
37: end