Skip to content

Commit 9ad1aaf

Browse files
committed
Pass latest 3-1-stable with arel 2.1.3.
1 parent f190090 commit 9ad1aaf

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

lib/arel/visitors/sqlserver.rb

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def hash
1111
expr.hash
1212
end
1313
def ==(other)
14-
self.class == other.class && self.expr == other.expr
14+
other.is_a?(Arel::Nodes::Ordering) && self.expr == other.expr
1515
end
1616
def eql?(other)
1717
self == other
@@ -27,26 +27,25 @@ class SelectManager < Arel::TreeManager
2727
# to grouping objects for the inner sql during a select statment with an offset/rownumber. So this
2828
# is here till ActiveRecord & ARel does this for us instead of using SqlLiteral objects.
2929
alias :order_without_sqlserver :order
30-
def order(*exprs)
31-
return order_without_sqlserver(*exprs) unless Arel::Visitors::SQLServer === @visitor
32-
@ast.orders.concat(exprs.map{ |x|
30+
def order(*expr)
31+
return order_without_sqlserver(*expr) unless Arel::Visitors::SQLServer === @visitor
32+
@ast.orders.concat(expr.map{ |x|
3333
case x
3434
when Arel::Attributes::Attribute
3535
table = Arel::Table.new(x.relation.table_alias || x.relation.name)
36-
expr = table[x.name]
37-
Arel::Nodes::Ordering.new expr
36+
e = table[x.name]
37+
Arel::Nodes::Ascending.new e
3838
when Arel::Nodes::Ordering
3939
x
4040
when String
4141
x.split(',').map do |s|
42-
expr, direction = s.split
43-
expr = Arel.sql(expr)
44-
direction = direction =~ /desc/i ? :desc : :asc
45-
Arel::Nodes::Ordering.new expr, direction
42+
e, d = s.split
43+
e = Arel.sql(e)
44+
d =~ /desc/i ? Arel::Nodes::Descending.new(e) : Arel::Nodes::Ascending.new(e)
4645
end
4746
else
48-
expr = Arel.sql(x.to_s)
49-
Arel::Nodes::Ordering.new expr
47+
e = Arel.sql(x.to_s)
48+
Arel::Nodes::Ascending.new e
5049
end
5150
}.flatten)
5251
self
@@ -101,7 +100,17 @@ def visit_Arel_Nodes_Limit(o)
101100
def visit_Arel_Nodes_Lock(o)
102101
visit o.expr
103102
end
104-
103+
104+
# FIXME: Only needed due to this problem found in 2.1.3
105+
# Grepping The AST Can Lead To Problems - https://github.com/rails/arel/issues/66
106+
def visit_Arel_Nodes_Ordering(o)
107+
if o.respond_to?(:direction)
108+
"#{visit o.expr} #{o.ascending? ? 'ASC' : 'DESC'}"
109+
else
110+
visit o.expr
111+
end
112+
end
113+
105114
def visit_Arel_Nodes_Bin(o)
106115
"#{visit o.expr} #{@engine.connection.cs_equality_operator}"
107116
end

test/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ default_connection: dblib
22

33
default_connection_info: &default_connection_info
44
adapter: sqlserver
5-
mode: <%= ENV['ARCONN'] %>
5+
mode: <%= ENV['ARCONN'] || 'dblib' %>
66
host: <%= ENV['ACTIVERECORD_UNITTEST_DATASERVER'] || 'localhost' %>
77
database: activerecord_unittest
88
username: <%= ENV['ACTIVERECORD_UNITTEST_USER'] || 'rails' %>

0 commit comments

Comments
 (0)