-
Notifications
You must be signed in to change notification settings - Fork 564
Closed
Description
Issue
With Rails 7.2 and above a query with includes gives us a Incorrect syntax near '`'.
3.3.5 :040 > TestTable.includes(:test_table_groups).where(id: 111000).first
SQL (2.1ms) EXEC sp_executesql N'SELECT DISTINCT `TestTable`.`id` AS alias_0, [TestTable].[id] FROM [TestTable] LEFT OUTER JOIN [TestTableGroup] ON [TestTableGroup].[id] = [TestTable].[id] WHERE [TestTable].[id] = @0 ORDER BY [TestTable].[id] ASC OFFSET 0 ROWS FETCH NEXT @1 ROWS ONLY', N'@0 int, @1 int', @0 = 111000, @1 = 1 [["id", 111000], ["LIMIT", 1]]
(test):40:in `<main>': TinyTds::Error: Incorrect syntax near '`'. (ActiveRecord::StatementInvalid)
/Users/test/.rvm/gems/ruby-3.3.5/bundler/gems/activerecord-sqlserver-adapter-8bf060f7ad4b/lib/active_record/connection_adapters/sqlserver/database_statements.rb:433:in `each': Incorrect syntax near '`'. (TinyTds::Error)
from /Users/test/.rvm/gems/ruby-3.3.5/bundler/gems/activerecord-sqlserver-adapter-8bf060f7ad4b/lib/active_record/connection_adapters/sqlserver/database_statements.rb:433:in `handle_to_names_and_values'
from /Users/test/.rvm/gems/ruby-3.3.5/bundler/gems/activerecord-sqlserver-adapter-8bf060f7ad4b/lib/active_record/connection_adapters/sqlserver/database_statements.rb:56:in `internal_exec_sql_query'
Expected behavior
The query in Rails 7.1 looked like this:
EXEC sp_executesql N'SELECT [TestTable].[id],...
Actual behavior
The query adds a distinct AS alias after select
How to reproduce
TestTable.includes(:test_table_groups).where(id: 111000).first
Details
- Rails version:
7.2-8.0rc2 - SQL Server adapter version:
7.2.1n - TinyTDS version:
2.1.7