提交 162e1d8d 编写于 作者: A Aaron Patterson

sql literals may be used as column attributes

上级 a75ed569
......@@ -4,6 +4,7 @@
* AST is now Enumerable
* AND nodes are now n-ary nodes
* SQL Literals may be used as Attribute names
* Deprecations
......
......@@ -35,6 +35,10 @@ module Arel
def self.sql raw_sql
Arel::Nodes::SqlLiteral.new raw_sql
end
def self.star
sql '*'
end
## Convenience Alias
Node = Arel::Nodes::Node
end
......@@ -109,7 +109,7 @@ def columns
end
def [] name
::Arel::Attribute.new self, name.to_sym
::Arel::Attribute.new self, name
end
def select_manager
......
......@@ -318,26 +318,29 @@ def visit_Arel_Attributes_Attribute o
alias :visit_Arel_Attributes_Time :visit_Arel_Attributes_Attribute
alias :visit_Arel_Attributes_Boolean :visit_Arel_Attributes_Attribute
def visit_Fixnum o; o end
alias :visit_Arel_Nodes_SqlLiteral :visit_Fixnum
alias :visit_Arel_SqlLiteral :visit_Fixnum # This is deprecated
alias :visit_Bignum :visit_Fixnum
def visit_String o; quote(o, @last_column) end
alias :visit_ActiveSupport_Multibyte_Chars :visit_String
alias :visit_BigDecimal :visit_String
alias :visit_Date :visit_String
alias :visit_DateTime :visit_String
alias :visit_FalseClass :visit_String
alias :visit_Float :visit_String
alias :visit_Hash :visit_String
alias :visit_Symbol :visit_String
alias :visit_Time :visit_String
alias :visit_TrueClass :visit_String
alias :visit_NilClass :visit_String
alias :visit_ActiveSupport_StringInquirer :visit_String
alias :visit_Class :visit_String
def literal o; o end
alias :visit_Arel_Nodes_SqlLiteral :literal
alias :visit_Arel_SqlLiteral :literal # This is deprecated
alias :visit_Bignum :literal
alias :visit_Fixnum :literal
def quoted o; quote(o, @last_column) end
alias :visit_ActiveSupport_Multibyte_Chars :quoted
alias :visit_ActiveSupport_StringInquirer :quoted
alias :visit_BigDecimal :quoted
alias :visit_Class :quoted
alias :visit_Date :quoted
alias :visit_DateTime :quoted
alias :visit_FalseClass :quoted
alias :visit_Float :quoted
alias :visit_Hash :quoted
alias :visit_NilClass :quoted
alias :visit_String :quoted
alias :visit_Symbol :quoted
alias :visit_Time :quoted
alias :visit_TrueClass :quoted
def visit_Array o
o.empty? ? 'NULL' : o.map { |x| visit x }.join(', ')
......@@ -352,7 +355,7 @@ def quote_table_name name
end
def quote_column_name name
@quoted_columns[name] ||= @connection.quote_column_name(name)
@quoted_columns[name] ||= Arel::Nodes::SqlLiteral === name ? name : @connection.quote_column_name(name)
end
end
end
......
......@@ -5,7 +5,14 @@ module Visitors
describe 'the to_sql visitor' do
before do
@visitor = ToSql.new Table.engine
@attr = Table.new(:users)[:id]
@table = Table.new(:users)
@attr = @table[:id]
end
it 'should not quote sql literals' do
node = @table[Arel.star]
sql = @visitor.accept node
sql.must_be_like '"users".*'
end
describe 'equality' do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册