# 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