def self.create_temporary_table( options={} )
options[:table_name] = "temp_#{self.table_name}" unless options[:table_name]
options[:like] = self unless options[:like]
options[:temporary] = true if not options[:permanent] and not options.has_key?( :temporary )
table_name = options[:table_name]
model_name = options[:model_name] || ActiveSupport::Inflector.classify( table_name )
raise Exception.new( "Model #{model_name} already exists! \n" ) if Object.const_defined? model_name
like_table_name = options[:like].table_name || self.table_name
sql = "CREATE #{options[:temporary] ? 'TEMPORARY' : ''} TABLE #{table_name} LIKE #{like_table_name}"
connection.execute( sql )
eval "class ::#{model_name} < #{ActiveRecord::TemporaryTable.name}
set_table_name :#{table_name}
end"
@@temporary_table_hsh[ model = Object.const_get( model_name ) ] = true
if block_given?
yield model
model.drop
nil
else
model
end
end