lib/og/store/mysql.rb in og-0.29.0 vs lib/og/store/mysql.rb in og-0.30.0
- old
+ new
@@ -212,36 +212,38 @@
fields = fields_for_class(klass)
if @conn.list_tables.include?(klass::OGTABLE)
actual_fields = conn.list_fields(klass::OGTABLE).fetch_fields.map {|f| f.name }
- #Make new ones always - don't destroy by default because it might contain data you want back.
+ # Make new ones always - don't destroy by default because
+ # it might contain data you want back.
+
need_fields = fields.each do |needed_field|
- field_name = needed_field[0..(needed_field.index(' ')-1)]
- next if actual_fields.include?(field_name)
+ field_name = needed_field[0..(needed_field.index(' ')-1)]
+ next if actual_fields.include?(field_name)
- if @options[:evolve_schema] == true
- Logger.debug "Adding field '#{needed_field}' to '#{klass::OGTABLE}'"
- sql = "ALTER TABLE #{klass::OGTABLE} ADD COLUMN #{needed_field}"
- @conn.query(sql)
- else
- Logger.info "WARNING: Table '#{klass::OGTABLE}' is missing field '#{needed_field}' and :evolve_schema is not set to true!"
- end
+ if @options[:evolve_schema] == true
+ Logger.debug "Adding field '#{needed_field}' to '#{klass::OGTABLE}'" if $DBG
+ sql = "ALTER TABLE #{klass::OGTABLE} ADD COLUMN #{needed_field}"
+ @conn.query(sql)
+ else
+ Logger.info "WARNING: Table '#{klass::OGTABLE}' is missing field '#{needed_field}' and :evolve_schema is not set to true!"
+ end
end
#Drop old ones
needed_fields = fields.map {|f| f =~ /^([^ ]+)/; $1}
actual_fields.each do |obsolete_field|
- next if needed_fields.include?(obsolete_field)
- if @options[:evolve_schema] == true and @options[:evolve_schema_cautious] == false
- sql = "ALTER TABLE #{klass::OGTABLE} DROP COLUMN #{obsolete_field}"
- Logger.debug "Removing obsolete field '#{obsolete_field}' from '#{klass::OGTABLE}'"
- @conn.query(sql)
- else
- Logger.info "WARNING: You have an obsolete field '#{obsolete_field}' on table '#{klass::OGTABLE}' and :evolve_schema is not set or is in cautious mode!"
- end
+ next if needed_fields.include?(obsolete_field)
+ if @options[:evolve_schema] == true and @options[:evolve_schema_cautious] == false
+ sql = "ALTER TABLE #{klass::OGTABLE} DROP COLUMN #{obsolete_field}"
+ Logger.debug "Removing obsolete field '#{obsolete_field}' from '#{klass::OGTABLE}'" if $DBG
+ @conn.query(sql)
+ else
+ Logger.info "WARNING: You have an obsolete field '#{obsolete_field}' on table '#{klass::OGTABLE}' and :evolve_schema is not set or is in cautious mode!"
end
+ end
return
end
sql = "CREATE TABLE #{klass::OGTABLE} (#{fields.join(', ')}"
@@ -290,29 +292,36 @@
for info in join_tables
begin
create_join_table_sql(info).each do |sql|
@conn.query sql
end
- Logger.debug "Created jointable '#{info[:table]}'."
+ Logger.debug "Created jointable '#{info[:table]}'." if $DBG
rescue => ex
if ex.respond_to?(:errno) and ex.errno == 1050 # table already exists.
Logger.debug 'Join table already exists' if $DBG
else
raise
end
end
end
end
end
-
+
def create_field_map(klass)
conn.query_with_result = true
res = @conn.query "SELECT * FROM #{klass::OGTABLE} LIMIT 1"
map = {}
+ # Check if the field should be ignored.
+ ignore = klass.ann[:self][:ignore_field] || klass.ann[:self][:ignore_fields] || klass.ann[:self][:ignore_columns]
+
res.num_fields.times do |i|
- map[res.fetch_field.name.intern] = i
+ field_name = res.fetch_field.name.to_sym
+
+ unless (ignore and ignore.include?(field_name))
+ map[field_name] = i
+ end
end
return map
ensure
res.close if res
@@ -350,14 +359,14 @@
sql = "INSERT INTO #{klass::OGTABLE} (#{props.collect {|p| field_for_property(p)}.join(',')}) VALUES (#{values})"
klass.class_eval %{
def og_insert(store)
- #{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
+ #{::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
store.conn.query_with_result = false
store.conn.query "#{sql}"
@#{klass.pk_symbol} = store.conn.insert_id
- #{Glue::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
+ #{::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
end
}
end
end