diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index 7727e94875b3aace72ddd421786aa3cb281717a8..6319163b0d78937cf2b8177420fe61f443e7301d 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -100,7 +100,10 @@ class Runner < Ci::ApplicationRecord scope :with_recent_runner_queue, -> { where('contacted_at > ?', recent_queue_deadline) } scope :with_running_builds, -> do - where('EXISTS(?)', ::Ci::Build.running.select(1).where('ci_builds.runner_id = ci_runners.id')) + where('EXISTS(?)', + ::Ci::Build.running.select(1) + .where("#{::Ci::Build.quoted_table_name}.runner_id = #{quoted_table_name}.id") + ) end # BACKWARD COMPATIBILITY: There are needed to maintain compatibility with `AVAILABLE_SCOPES` used by `lib/api/runners.rb` diff --git a/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric_spec.rb b/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric_spec.rb index 83e24a624cbae676c4c00059885ec82d3639b44d..00404d5a03bc7e240ceb4853d177d4739ceae3a0 100644 --- a/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric_spec.rb +++ b/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric_spec.rb @@ -5,6 +5,7 @@ RSpec.describe Gitlab::Usage::Metrics::Instrumentations::CountCiBuildsMetric do RSpec.shared_examples 'a correct secure type instrumented metric value' do |params| let(:expected_value) { params[:expected_value] } + let(:builds_table_name) { Ci::Build.table_name } before_all do user = create(:user) @@ -92,7 +93,7 @@ end context 'with time_frame all' do - let(:expected_query) { "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = '#{secure_type}'" } + let(:expected_query) { "SELECT COUNT(\"#{builds_table_name}\".\"id\") FROM \"#{builds_table_name}\" WHERE \"#{builds_table_name}\".\"type\" = 'Ci::Build' AND \"#{builds_table_name}\".\"name\" = '#{secure_type}'" } it_behaves_like 'a correct secure type instrumented metric value', { time_frame: 'all', expected_value: 3 } end @@ -100,7 +101,7 @@ context 'with time_frame 28d' do let(:start) { 30.days.ago.to_s(:db) } let(:finish) { 2.days.ago.to_s(:db) } - let(:expected_query) { "SELECT COUNT(\"ci_builds\".\"id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '#{start}' AND '#{finish}' AND \"ci_builds\".\"name\" = '#{secure_type}'" } + let(:expected_query) { "SELECT COUNT(\"#{builds_table_name}\".\"id\") FROM \"#{builds_table_name}\" WHERE \"#{builds_table_name}\".\"type\" = 'Ci::Build' AND \"#{builds_table_name}\".\"created_at\" BETWEEN '#{start}' AND '#{finish}' AND \"#{builds_table_name}\".\"name\" = '#{secure_type}'" } it_behaves_like 'a correct secure type instrumented metric value', { time_frame: '28d', expected_value: 1 } end diff --git a/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric_spec.rb b/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric_spec.rb index abe85abeae58488f38ce35e0a954110af1071461..61f9d76950b9f4a469a72c7a8cf238a36ef14fbe 100644 --- a/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric_spec.rb +++ b/ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric_spec.rb @@ -5,6 +5,7 @@ RSpec.describe Gitlab::Usage::Metrics::Instrumentations::CountUsersCreatingCiBuildsMetric do RSpec.shared_examples 'a correct secure type instrumented metric value' do |params| let(:expected_value) { params[:expected_value] } + let(:builds_table_name) { Ci::Build.table_name } before_all do user = create(:user) @@ -35,9 +36,9 @@ let(:build_names) { "(#{described_class::SECURE_PRODUCT_TYPES.map { |e| "'#{e}'" }.join(', ')})" } let(:expected_query) do if params[:time_frame] == '28d' - %{SELECT COUNT(DISTINCT "ci_builds"."user_id") FROM "ci_builds" WHERE "ci_builds"."type" = 'Ci::Build' AND "ci_builds"."created_at" BETWEEN '#{start}' AND '#{finish}' AND "ci_builds"."name" IN #{build_names}} + %{SELECT COUNT(DISTINCT "#{builds_table_name}"."user_id") FROM "#{builds_table_name}" WHERE "#{builds_table_name}"."type" = 'Ci::Build' AND "#{builds_table_name}"."created_at" BETWEEN '#{start}' AND '#{finish}' AND "#{builds_table_name}"."name" IN #{build_names}} else - %{SELECT COUNT(DISTINCT "ci_builds"."user_id") FROM "ci_builds" WHERE "ci_builds"."type" = 'Ci::Build' AND "ci_builds"."name" IN #{build_names}} + %{SELECT COUNT(DISTINCT "#{builds_table_name}"."user_id") FROM "#{builds_table_name}" WHERE "#{builds_table_name}"."type" = 'Ci::Build' AND "#{builds_table_name}"."name" IN #{build_names}} end end @@ -106,7 +107,7 @@ end context 'with time_frame all' do - let(:expected_query) { "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"name\" = '#{secure_type}'" } + let(:expected_query) { "SELECT COUNT(DISTINCT \"#{builds_table_name}\".\"user_id\") FROM \"#{builds_table_name}\" WHERE \"#{builds_table_name}\".\"type\" = 'Ci::Build' AND \"#{builds_table_name}\".\"name\" = '#{secure_type}'" } it_behaves_like 'a correct secure type instrumented metric value', { time_frame: 'all', expected_value: 2 } end @@ -114,7 +115,7 @@ context 'with time_frame 28d' do let(:start) { 30.days.ago.to_s(:db) } let(:finish) { 2.days.ago.to_s(:db) } - let(:expected_query) { "SELECT COUNT(DISTINCT \"ci_builds\".\"user_id\") FROM \"ci_builds\" WHERE \"ci_builds\".\"type\" = 'Ci::Build' AND \"ci_builds\".\"created_at\" BETWEEN '#{start}' AND '#{finish}' AND \"ci_builds\".\"name\" = '#{secure_type}'" } + let(:expected_query) { "SELECT COUNT(DISTINCT \"#{builds_table_name}\".\"user_id\") FROM \"#{builds_table_name}\" WHERE \"#{builds_table_name}\".\"type\" = 'Ci::Build' AND \"#{builds_table_name}\".\"created_at\" BETWEEN '#{start}' AND '#{finish}' AND \"#{builds_table_name}\".\"name\" = '#{secure_type}'" } it_behaves_like 'a correct secure type instrumented metric value', { time_frame: '28d', expected_value: 1 } end diff --git a/spec/lib/gitlab/utils/usage_data_spec.rb b/spec/lib/gitlab/utils/usage_data_spec.rb index 586ee04a8353a85b43d6917d0e465fbd3b4b7ce1..b4672a9d1c496395f413eba2803f0006dd5534c8 100644 --- a/spec/lib/gitlab/utils/usage_data_spec.rb +++ b/spec/lib/gitlab/utils/usage_data_spec.rb @@ -182,7 +182,7 @@ end it 'counts over joined relations' do - expect(described_class.estimate_batch_distinct_count(model.joins(:build), "ci_builds.name")).to eq(ci_builds_estimated_cardinality) + expect(described_class.estimate_batch_distinct_count(model.joins(:build), "#{Ci::Build.table_name}.name")).to eq(ci_builds_estimated_cardinality) end it 'counts with :column field with batch_size of 50K' do diff --git a/spec/services/ci/unlock_artifacts_service_spec.rb b/spec/services/ci/unlock_artifacts_service_spec.rb index 0d6ac333587d97f66f49c3017a1ce1c9fffc2332..c149eaf41e5ca44b26f365cfaf7fe7ff9d826ccb 100644 --- a/spec/services/ci/unlock_artifacts_service_spec.rb +++ b/spec/services/ci/unlock_artifacts_service_spec.rb @@ -207,6 +207,8 @@ describe '#unlock_job_artifacts_query' do subject { described_class.new(pipeline.project, pipeline.user).unlock_job_artifacts_query(pipeline_ids) } + let(:builds_table) { Ci::Build.quoted_table_name } + context 'when given a single pipeline ID' do let(:pipeline_ids) { [older_pipeline.id] } @@ -219,12 +221,12 @@ WHERE "ci_job_artifacts"."job_id" IN (SELECT - "ci_builds"."id" + #{builds_table}."id" FROM - "ci_builds" + #{builds_table} WHERE - "ci_builds"."type" = 'Ci::Build' - AND "ci_builds"."commit_id" = #{older_pipeline.id}) + #{builds_table}."type" = 'Ci::Build' + AND #{builds_table}."commit_id" = #{older_pipeline.id}) RETURNING ("ci_job_artifacts"."id") SQL @@ -243,12 +245,12 @@ WHERE "ci_job_artifacts"."job_id" IN (SELECT - "ci_builds"."id" + #{builds_table}."id" FROM - "ci_builds" + #{builds_table} WHERE - "ci_builds"."type" = 'Ci::Build' - AND "ci_builds"."commit_id" IN (#{pipeline_ids.join(', ')})) + #{builds_table}."type" = 'Ci::Build' + AND #{builds_table}."commit_id" IN (#{pipeline_ids.join(', ')})) RETURNING ("ci_job_artifacts"."id") SQL