Skip to content
Snippets Groups Projects
Commit 93e38113 authored by Max Woolf's avatar Max Woolf
Browse files

Merge branch '382033-replace-hardcoded-table-name' into 'master'

Replace hardcoded table names for ci_builds

See merge request !123118



Merged-by: Max Woolf's avatarMax Woolf <mwoolf@gitlab.com>
Approved-by: Max Woolf's avatarMax Woolf <mwoolf@gitlab.com>
Approved-by: Sebastian Rehm's avatarSebastian Rehm <srehm@gitlab.com>
Approved-by: default avatarMax Orefice <morefice@gitlab.com>
Reviewed-by: default avatarMax Orefice <morefice@gitlab.com>
Co-authored-by: default avatarMarius Bobin <mbobin@gitlab.com>
parents ecc8a61e 36bc23b6
No related branches found
No related tags found
2 merge requests!123118Replace hardcoded table names for ci_builds,!119439Draft: Prevent file variable content expansion in downstream pipeline
Pipeline #894936585 passed
......@@ -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`
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment