# File sql-serialize.rb, line 661 def sql_select_from_id (dbi, assoc_id) sql = "SELECT * FROM " + sql_quote_name("sql_ids") + " WHERE " sql << sql_quote_name("id") << " = " << assoc_id.to_s obj = nil # only one row will match but select_one does not work with all DBDs dbi.select_all(sql) { |row| classname = row["class"].dup classname.untaint sql = "SELECT * FROM " + sql_quote_name(classname) + " WHERE " sql << sql_quote_name("sql_assoc_id") << " = " << assoc_id.to_s case (classname) when "Boolean" dbi.select_all(sql) { |row| obj = row["val"] == sql_true ? true : false } when "Bignum" dbi.select_all(sql) { |row| obj = row["val"].to_i } when "Fixnum" dbi.select_all(sql) { |row| obj = row["val"].to_i } when "Float" dbi.select_all(sql) { |row| obj = row["val"].to_f } when "Exception" dbi.select_all(sql) { |row| obj = instance_eval(row["type"] + ".new") obj.set_backtrace = row["backtrace"].split("\n") } when "File" dbi.select_all(sql) { |row| obj = File.new(row["path"], row["mode"]) obj.pos = row["pos"] } when "String" dbi.select_all(sql) { |row| obj = row["val"].to_s } else obj = instance_eval(classname + ".new") columns = Hash.new dbi.columns(obj.type.name.sub(/#<Module .*?>::/, "")).each { |column| columns[column.name] = column.type_name } dbi.execute(sql) { |stm| stm.fetch_hash.each_pair { |key,val| next if val.nil? key = key.dup # this should unfreeze them val = val.dup key.untaint val.untaint obj.sql_set_typecast_value(columns[key],key,val) } } end } return obj end