From 9dc93a4519d9d5d7be48ff274127136236a3adb3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 20 Apr 2021 23:50:22 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-11-stable-ee --- spec/lib/gitlab/sql/cte_spec.rb | 20 +++++++++++++++++++- spec/lib/gitlab/sql/recursive_cte_spec.rb | 13 +++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'spec/lib/gitlab/sql') diff --git a/spec/lib/gitlab/sql/cte_spec.rb b/spec/lib/gitlab/sql/cte_spec.rb index fdc150cd4b9..4cf94f4dcab 100644 --- a/spec/lib/gitlab/sql/cte_spec.rb +++ b/spec/lib/gitlab/sql/cte_spec.rb @@ -14,7 +14,14 @@ RSpec.describe Gitlab::SQL::CTE do relation.except(:order).to_sql end - expect(sql).to eq("#{name} AS (#{sql1})") + expected = [ + "#{name} AS ", + Gitlab::Database::AsWithMaterialized.materialized_if_supported, + (' ' unless Gitlab::Database::AsWithMaterialized.materialized_if_supported.blank?), + "(#{sql1})" + ].join + + expect(sql).to eq(expected) end end @@ -41,4 +48,15 @@ RSpec.describe Gitlab::SQL::CTE do expect(relation.to_a).to eq(User.where(id: user.id).to_a) end end + + it_behaves_like 'CTE with MATERIALIZED keyword examples' do + let(:expected_query_block_with_materialized) { 'WITH "some_cte" AS MATERIALIZED (' } + let(:expected_query_block_without_materialized) { 'WITH "some_cte" AS (' } + + let(:query) do + cte = described_class.new(:some_cte, User.active, **options) + + User.with(cte.to_arel).to_sql + end + end end diff --git a/spec/lib/gitlab/sql/recursive_cte_spec.rb b/spec/lib/gitlab/sql/recursive_cte_spec.rb index 02611620989..edcacd404c2 100644 --- a/spec/lib/gitlab/sql/recursive_cte_spec.rb +++ b/spec/lib/gitlab/sql/recursive_cte_spec.rb @@ -57,4 +57,17 @@ RSpec.describe Gitlab::SQL::RecursiveCTE do expect(relation.to_a).to eq(User.where(id: user.id).to_a) end end + + it_behaves_like 'CTE with MATERIALIZED keyword examples' do + # MATERIALIZED keyword is not needed for recursive queries + let(:expected_query_block_with_materialized) { 'WITH RECURSIVE "some_cte" AS (' } + let(:expected_query_block_without_materialized) { 'WITH RECURSIVE "some_cte" AS (' } + + let(:query) do + recursive_cte = described_class.new(:some_cte) + recursive_cte << User.active + + User.with.recursive(recursive_cte.to_arel).to_sql + end + end end -- cgit v1.2.3