aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/engines
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2010-03-10 18:16:07 -0300
committerEmilio Tagua <miloops@gmail.com>2010-03-10 18:16:07 -0300
commitb706f690b611d647aae15a85caa19d167814ae3c (patch)
tree05a17b2e937f894ea03f3fff535fd62cbc31a025 /lib/arel/engines
parentc03d4bb8e4acac95961a1a9eb9578fa33a47da66 (diff)
downloadrails-b706f690b611d647aae15a85caa19d167814ae3c.tar.gz
rails-b706f690b611d647aae15a85caa19d167814ae3c.tar.bz2
rails-b706f690b611d647aae15a85caa19d167814ae3c.zip
Arel doesn't has to know if a table or column exists.
Diffstat (limited to 'lib/arel/engines')
-rw-r--r--lib/arel/engines/sql/relations/table.rb18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/arel/engines/sql/relations/table.rb b/lib/arel/engines/sql/relations/table.rb
index e4b75d6c3d..d10b761ea3 100644
--- a/lib/arel/engines/sql/relations/table.rb
+++ b/lib/arel/engines/sql/relations/table.rb
@@ -2,7 +2,7 @@ module Arel
class Table < Relation
include Recursion::BaseCase
- cattr_accessor :engine
+ cattr_accessor :engine, :tables
attr_reader :name, :engine, :table_alias, :options
def initialize(name, options = {})
@@ -19,6 +19,7 @@ module Arel
if @engine.connection
begin
require "arel/engines/sql/compilers/#{@engine.adapter_name.downcase}_compiler"
+ @@tables ||= engine.tables
rescue LoadError
raise "#{@engine.adapter_name} is not supported by Arel."
end
@@ -29,9 +30,20 @@ module Arel
Table.new(name, options.merge(:as => table_alias))
end
+ def table_exists?
+ if @table_exists
+ true
+ else
+ @table_exists = @@tables.include?(name) || engine.table_exists?(name)
+ end
+ end
+
def attributes
- @attributes ||= columns.collect do |column|
- Attribute.new(self, column.name.to_sym)
+ return @attributes if defined?(@attributes)
+ if table_exists?
+ @attributes = columns.collect { |column| Attribute.new(self, column.name.to_sym) }
+ else
+ []
end
end