Skip to content

Includes adds DISTINCT and AS alias_0 to query #1256

@juice

Description

@juice

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions