Skip to content

Commit 0a1debe

Browse files
committed
[Rails3] Fix aggregate select with limit/offset.
1 parent 38d87f0 commit 0a1debe

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

lib/arel/engines/sql/compilers/sqlserver_compiler.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ def taken_clause
4545
"TOP (#{relation.taken.to_i}) "
4646
end
4747

48+
def expression_select?
49+
relation.select_clauses.any? { |sc| sc.match /(COUNT|SUM|MAX|MIN|AVG)\s*\(.*\)/ }
50+
end
51+
4852
def eager_limiting_select?
4953
single_distinct_select? && taken_only? && relation.group_clauses.blank?
5054
end
@@ -92,7 +96,7 @@ def select_sql_without_skipped(windowed=false)
9296
havings = relation.having_clauses
9397
orders = relation.order_clauses
9498
if windowed
95-
selects = selects.map{ |sc| clause_without_expression(sc) }
99+
selects = expression_select? ? selects : selects.map{ |sc| clause_without_expression(sc) }
96100
elsif eager_limiting_select?
97101
groups = selects.map { |sc| clause_without_expression(sc) }
98102
selects = selects.map { |sc| "#{taken_clause}#{clause_without_expression(sc)}" }
@@ -140,6 +144,8 @@ def rowtable_select_clauses
140144
relation.select_clauses.map do |sc|
141145
sc.split(',').map { |c| c.split(' AS ').last.strip }.join(', ')
142146
end
147+
elsif expression_select?
148+
['*']
143149
else
144150
relation.select_clauses.map do |sc|
145151
sc.gsub /\[#{relation.table.name}\]\./, '[__rnt].'

0 commit comments

Comments
 (0)