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