Skip to content

Commit 3952f40

Browse files
committed
Try like hell to find a tables PK.
1 parent c7cd293 commit 3952f40

24 files changed

+13
-728
lines changed

lib/arel/visitors/sqlserver.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def visit_Arel_Nodes_SelectStatement_SQLServer_Lock collector, options = {}
8383
def visit_Orders_And_Let_Fetch_Happen o, collector
8484
if (o.limit || o.offset) && o.orders.empty?
8585
table = table_From_Statement o
86-
column = table.primary_key || table.columns.first
86+
column = primary_Key_From_Table(table)
8787
o.orders = [column.asc]
8888
end
8989
unless o.orders.empty?
@@ -122,6 +122,18 @@ def table_From_Statement o
122122
end
123123
end
124124

125+
def primary_Key_From_Table t
126+
return t.primary_key if t.primary_key
127+
if engine_pk = t.engine.primary_key
128+
pk = t.engine.arel_table[engine_pk]
129+
return pk if pk
130+
end
131+
pk = t.engine.connection.schema_cache.primary_keys(t.engine.table_name)
132+
return pk if pk
133+
column_name = t.engine.columns.first.try(:name)
134+
column_name ? t[column_name] : nil
135+
end
136+
125137
end
126138
end
127139
end

test/cases/coerced/associations_test_sqlserver.rb

Lines changed: 0 additions & 16 deletions
This file was deleted.

test/cases/coerced/attribute_methods_test_sqlserver.rb

Lines changed: 0 additions & 41 deletions
This file was deleted.

test/cases/coerced/base_test_sqlserver.rb

Lines changed: 0 additions & 24 deletions
This file was deleted.

test/cases/coerced/batches_test_sqlserver.rb

Lines changed: 0 additions & 28 deletions
This file was deleted.

test/cases/coerced/belongs_to_associations_test_sqlserver.rb

Lines changed: 0 additions & 19 deletions
This file was deleted.

test/cases/coerced/bind_parameter_test_sqlserver.rb

Lines changed: 0 additions & 33 deletions
This file was deleted.

test/cases/coerced/calculations_test_sqlserver.rb

Lines changed: 0 additions & 59 deletions
This file was deleted.

test/cases/coerced/connection_management_test_sqlserver.rb

Lines changed: 0 additions & 38 deletions
This file was deleted.

test/cases/coerced/eager_test_sqlserver.rb

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)