# File sql-serialize.rb, line 453 def sql_insert_hash (dbi) instance_variables.each { |var| val = instance_eval(var) if (val.kind_of? Hash) val.each_pair { |k,v| key_id = nil val_id = nil if (k.respond_to? :insert) key_id = val[index].instance_eval("sql_exist_in_db?(ObjectSpace._id2ref(" + dbi.id.to_s + "))") unless key_id key_id = k.insert(dbi, false) # insert but don't start a new transaction end sql_increase_refcount (dbi, key_id) else # use method to insert basic data types such as strings # and numerics key_id = sql_basic_insert (dbi, k) end if (k.respond_to? :insert) val_id = val[index].instance_eval("sql_exist_in_db?(ObjectSpace._id2ref(" + dbi.id.to_s + "))") unless val_id val_id = v.insert(dbi, false) # insert but don't start a new transaction end sql_increase_refcount (dbi, val_id) else # use method to insert basic data types such as strings # and numerics val_id = sql_basic_insert (dbi, v) end sql = "INSERT INTO " + sql_quote_name(self.type.name.sub(/#<Module .*?>::/, "") + "_hash") + " (" sql << sql_quote_name("sql_assoc_id") << ", " << sql_quote_name("key_id") sql << ", " << sql_quote_name("val_id") sql << ", " << sql_quote_name("symbol") << ") VALUES (" sql << sql_assoc_id(dbi).to_s << ", " << key_id.to_s << ", " sql << val_id.to_s << ", " << sql_quote_str(var[1,var.length]) << ")" dbi.do_more(sql) } end } end