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
}