Methods
Public Class methods
[ show source ]
# File lib/og/store/sql.rb, line 59
59: def self.included(base)
60: base.extend(SqlEnchantmentNoPolymorphClassMethods)
61: end
Public Instance methods
[ show source ]
# File lib/og/store/sql.rb, line 78
78: def field_for_attribute(a, anno)
79: (f = anno[:field]) ? f : a
80: end
[ show source ]
# File lib/og/store/sql.rb, line 137
137: def field_map
138: raise NotImplementedError, "field_map not set for #{self.class.name}!"
139: end
[ show source ]
# File lib/og/store/sql.rb, line 63
63: def og_create_schema(store)
64: if Og.create_schema
65: unless self.class.schema_inheritance_child?
66: store.create_table(self.class)
67: store.create_table_indices(self.class)
68: store.create_table_joins(self.class)
69: end
70: store.evolve_schema(self.class)
71: end
72: end
[ show source ]
# File lib/og/store/sql.rb, line 121
121: def og_delete(store, cascade = true)
122: pk_field = self.class.primary_key
123: pk_field = self.class.ann(pk_field, :field) || pk_field
124: pk = instance_variable_get("@#{pk_field}")
125: transaction do |tx|
126: tx.exec "DELETE FROM #{self.class.table} WHERE #{pk_field}=#{pk}"
127: if cascade && descendants = self.class.ann(:self, :descendants)
128: #This is only a single cascade - shouldn't a cascade spill all the way
129: #down?
130: descendants.each do |dclass, foreign_key|
131: tx.exec "DELETE FROM #{dclass::table} WHERE #{foreign_key}=#{pk}"
132: end
133: end
134: end
135: end
[ show source ]
# File lib/og/store/sql.rb, line 82
82: def og_insert(store)
83: inserts = {}
84:
85: for a in self.class.serializable_attributes
86: anno = self.class.ann(a)
87: field = field_for_attribute(a, anno)
88: a = instance_variable_get("@#{a}")
89: inserts[field] = store.write_attr(a, anno)
90: end
91:
92: # If the class participates in STI, automatically insert
93: # an ogtype serializable attribute.
94:
95: if self.class.schema_inheritance?
96: inserts[:ogtype] = store.quote(self.class.name)
97: end
98:
99: id = store.insert(self.class, inserts)
100: instance_variable_set("@#{self.class.primary_key}", id)
101: end
[ show source ]
# File lib/og/store/sql.rb, line 142
142: def og_read(res, row = 0, offset = 0)
143: attrs = self.class.attributes
144:
145: for a in attrs
146: anno = self.class.ann(a)
147:
148: f = anno[:field] ? anno[:field] : a
149:
150: if col = field_map[f]
151: instance_variable_set("@#{a}", store.read_attr(anno, res, col, offset))
152: end
153: end
154: end
[ show source ]
# File lib/og/store/sql.rb, line 103
103: def og_update(store, options = nil)
104: updates = {}
105: pk_field = self.class.primary_key
106:
107: self.class.serializable_attributes.reject { |a| a == pk_field }.each do |a|
108: anno = self.class.ann(a)
109: field = field_for_attribute a, anno
110: a = instance_variable_get("@#{a}")
111: updates[field.to_s]=store.write_attr(a, anno)
112: end
113:
114: pk = instance_variable_get("@#{pk_field}")
115: sql = store.update_sql(self.class, pk, updates)
116: sql << " AND #{options[:condition]}" if options and options[:condition]
117: changed = store.sql_update(sql)
118: return changed
119: end
[ show source ]
# File lib/og/store/sql.rb, line 74
74: def store
75: return self.class.store
76: end