Methods
Public Instance methods
add_sql_column(klass, a, anno)

Alias for #add_sql_field

add_sql_column(klass, a, anno)

Alias for #add_sql_field

add_sql_field(klass, a, anno)
This method is also aliased as add_sql_column add_sql_column
    # 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_schema(klass)

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

Example

Og.setup(

  ..
  :evolve_schema => :full
  ..

)

    # 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
remove_sql_field(klass, a)
    # 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
rename_schema(old_schema, new_schema)

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)

     # 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
rename_sql_table(_old, _new)
    # 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