lib/og/store/psql.rb in og-0.23.0 vs lib/og/store/psql.rb in og-0.24.0

- old
+ new

@@ -57,10 +57,12 @@ "\\#{ b[0].to_s(8).rjust(3, '0') }" end end def parse_blob(val) + return '' unless val + val.gsub(/\\(\\|'|[0-3][0-7][0-7])/) do |s| if s.size == 2 then s[1,1] else s[1,3].oct.chr end end end @@ -124,18 +126,18 @@ @conn.close super end def enchant(klass, manager) - if sclass = klass.metadata.superclass - klass.const_set 'OGSEQ', "#{table(sclass.first)}_oid_seq" + if klass.schema_inheritance_child? + klass.const_set 'OGSEQ', "#{table(klass.schema_inheritance_root_class)}_oid_seq" else klass.const_set 'OGSEQ', "#{table(klass)}_oid_seq" end - if klass.metadata.primary_key.flatten.first == :oid - unless klass.properties.find { |p| p.symbol == :oid } + if klass.ann.this.primary_key.symbol == :oid + unless klass.properties.include? :oid klass.property :oid, Fixnum, :sql => 'serial PRIMARY KEY' end end super end @@ -175,21 +177,21 @@ def create_table(klass) fields = fields_for_class(klass) sql = "CREATE TABLE #{klass::OGTABLE} (#{fields.join(', ')}" - # Create table constrains. + # Create table constraints. - if klass.__meta and constrains = klass.__meta[:sql_constrain] - sql << ", #{constrains.join(', ')}" + if constraints = klass.ann.this[:sql_constraint] + sql << ", #{constraints.join(', ')}" end sql << ") WITHOUT OIDS;" # Create indices. - if klass.__meta and indices = klass.__meta[:index] + if indices = klass.ann.this[:index] for data in indices idx, options = *data idx = idx.to_s pre_sql, post_sql = options[:pre], options[:post] idxname = idx.gsub(/ /, "").gsub(/,/, "_").gsub(/\(.*\)/, "") @@ -211,11 +213,11 @@ end # Create join tables if needed. Join tables are used in # 'many_to_many' relations. - if klass.__meta and join_tables = klass.__meta[:join_tables] + if join_tables = klass.ann.this[:join_tables] for info in join_tables begin create_join_table_sql(info).each do |sql| @conn.exec(sql).clear end @@ -273,15 +275,15 @@ #-- # TODO: create stored procedure. #++ def eval_og_insert(klass) - props = klass.properties.dup + props = klass.properties.values.dup values = props.collect { |p| write_prop(p) }.join(',') - if klass.metadata.superclass or klass.metadata.subclasses - props << Property.new(:ogtype, String) + if klass.schema_inheritance? + props << Property.new(:symbol => :ogtype, :klass => String) values << ", '#{klass}'" end sql = "INSERT INTO #{klass::OGTABLE} (#{props.collect {|p| field_for_property(p)}.join(',')}) VALUES (#{values})" @@ -296,10 +298,10 @@ end } end def eval_og_allocate(klass) - if klass.metadata.subclasses + if klass.ann.this[:subclasses] klass.module_eval %{ def self.og_allocate(res, row = 0) Object.constant(res.getvalue(row, 0)).allocate end }