Sha256: a75d15edb96152355e82b2d6038c3a278bb81af494809b59be482c6cb639f304

Contents?: true

Size: 1.67 KB

Versions: 33

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

require "cases/helper_sqlserver"
require "models/post"
require "models/author"

class LateralTestSQLServer < ActiveRecord::TestCase
  fixtures :posts, :authors

  it 'uses OUTER APPLY for OUTER JOIN LATERAL' do
    post = Arel::Table.new(:posts)
    author = Arel::Table.new(:authors)
    subselect = post.project(Arel.star).take(1).where(post[:author_id].eq(author[:id])).where(post[:id].eq(42))

    one = Arel::Nodes::Quoted.new(1)
    eq = Arel::Nodes::Equality.new(one, one)

    sql = author.project(Arel.star).where(author[:name].matches("David")).outer_join(subselect.lateral.as("bar")).on(eq).to_sql
    results = ActiveRecord::Base.connection.exec_query sql
    assert_equal sql, "SELECT * FROM [authors] OUTER APPLY (SELECT * FROM [posts] WHERE [posts].[author_id] = [authors].[id] AND [posts].[id] = 42 ORDER BY [posts].[id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY) AS bar WHERE [authors].[name] LIKE N'David'"
    assert_equal results.length, 1
  end

  it 'uses CROSS APPLY for INNER JOIN LATERAL' do
    post = Arel::Table.new(:posts)
    author = Arel::Table.new(:authors)
    subselect = post.project(Arel.star).take(1).where(post[:author_id].eq(author[:id])).where(post[:id].eq(42))

    sql = author.project(Arel.star).where(author[:name].matches("David")).join(subselect.lateral.as("bar")).to_sql
    results = ActiveRecord::Base.connection.exec_query sql

    assert_equal sql, "SELECT * FROM [authors] CROSS APPLY (SELECT * FROM [posts] WHERE [posts].[author_id] = [authors].[id] AND [posts].[id] = 42 ORDER BY [posts].[id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY) AS bar WHERE [authors].[name] LIKE N'David'"
    assert_equal results.length, 0
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
activerecord-sqlserver-adapter-7.1.11 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.10 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.9 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.8 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.7 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.6 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.5 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.4 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.0.7 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.3 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.2 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.1 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.0 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.0.6 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.0.rc2 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.0.rc1 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.0.5.1 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.1.0.beta1 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.0.5.0 test/cases/lateral_test_sqlserver.rb
activerecord-sqlserver-adapter-7.0.4.0 test/cases/lateral_test_sqlserver.rb