Backport various EE changes to Gitlab::Database
These changes are useful for CE as well. For example, the MR https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20720 can make use of some of the backported methods.
This commit is contained in:
parent
1c24eafb41
commit
2ade035eb2
|
@ -61,6 +61,10 @@ module Gitlab
|
|||
@version ||= database_version.match(/\A(?:PostgreSQL |)([^\s]+).*\z/)[1]
|
||||
end
|
||||
|
||||
def self.postgresql_9_or_less?
|
||||
postgresql? && version.to_f < 10
|
||||
end
|
||||
|
||||
def self.join_lateral_supported?
|
||||
postgresql? && version.to_f >= 9.3
|
||||
end
|
||||
|
@ -69,6 +73,28 @@ module Gitlab
|
|||
postgresql? && version.to_f >= 9.4
|
||||
end
|
||||
|
||||
def self.pg_stat_wal_receiver_supported?
|
||||
postgresql? && version.to_f >= 9.6
|
||||
end
|
||||
|
||||
# map some of the function names that changed between PostgreSQL 9 and 10
|
||||
# https://wiki.postgresql.org/wiki/New_in_postgres_10
|
||||
def self.pg_wal_lsn_diff
|
||||
Gitlab::Database.postgresql_9_or_less? ? 'pg_xlog_location_diff' : 'pg_wal_lsn_diff'
|
||||
end
|
||||
|
||||
def self.pg_current_wal_insert_lsn
|
||||
Gitlab::Database.postgresql_9_or_less? ? 'pg_current_xlog_insert_location' : 'pg_current_wal_insert_lsn'
|
||||
end
|
||||
|
||||
def self.pg_last_wal_receive_lsn
|
||||
Gitlab::Database.postgresql_9_or_less? ? 'pg_last_xlog_receive_location' : 'pg_last_wal_receive_lsn'
|
||||
end
|
||||
|
||||
def self.pg_last_wal_replay_lsn
|
||||
Gitlab::Database.postgresql_9_or_less? ? 'pg_last_xlog_replay_location' : 'pg_last_wal_replay_lsn'
|
||||
end
|
||||
|
||||
def self.nulls_last_order(field, direction = 'ASC')
|
||||
order = "#{field} #{direction}"
|
||||
|
||||
|
|
|
@ -65,6 +65,28 @@ describe Gitlab::Database do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.postgresql_9_or_less?' do
|
||||
it 'returns false when using MySQL' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(false)
|
||||
|
||||
expect(described_class.postgresql_9_or_less?).to eq(false)
|
||||
end
|
||||
|
||||
it 'returns true when using PostgreSQL 9.6' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('9.6')
|
||||
|
||||
expect(described_class.postgresql_9_or_less?).to eq(true)
|
||||
end
|
||||
|
||||
it 'returns false when using PostgreSQL 10 or newer' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('10')
|
||||
|
||||
expect(described_class.postgresql_9_or_less?).to eq(false)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.join_lateral_supported?' do
|
||||
it 'returns false when using MySQL' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(false)
|
||||
|
@ -109,6 +131,70 @@ describe Gitlab::Database do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.pg_wal_lsn_diff' do
|
||||
it 'returns old name when using PostgreSQL 9.6' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('9.6')
|
||||
|
||||
expect(described_class.pg_wal_lsn_diff).to eq('pg_xlog_location_diff')
|
||||
end
|
||||
|
||||
it 'returns new name when using PostgreSQL 10 or newer' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('10')
|
||||
|
||||
expect(described_class.pg_wal_lsn_diff).to eq('pg_wal_lsn_diff')
|
||||
end
|
||||
end
|
||||
|
||||
describe '.pg_current_wal_insert_lsn' do
|
||||
it 'returns old name when using PostgreSQL 9.6' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('9.6')
|
||||
|
||||
expect(described_class.pg_current_wal_insert_lsn).to eq('pg_current_xlog_insert_location')
|
||||
end
|
||||
|
||||
it 'returns new name when using PostgreSQL 10 or newer' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('10')
|
||||
|
||||
expect(described_class.pg_current_wal_insert_lsn).to eq('pg_current_wal_insert_lsn')
|
||||
end
|
||||
end
|
||||
|
||||
describe '.pg_last_wal_receive_lsn' do
|
||||
it 'returns old name when using PostgreSQL 9.6' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('9.6')
|
||||
|
||||
expect(described_class.pg_last_wal_receive_lsn).to eq('pg_last_xlog_receive_location')
|
||||
end
|
||||
|
||||
it 'returns new name when using PostgreSQL 10 or newer' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('10')
|
||||
|
||||
expect(described_class.pg_last_wal_receive_lsn).to eq('pg_last_wal_receive_lsn')
|
||||
end
|
||||
end
|
||||
|
||||
describe '.pg_last_wal_replay_lsn' do
|
||||
it 'returns old name when using PostgreSQL 9.6' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('9.6')
|
||||
|
||||
expect(described_class.pg_last_wal_replay_lsn).to eq('pg_last_xlog_replay_location')
|
||||
end
|
||||
|
||||
it 'returns new name when using PostgreSQL 10 or newer' do
|
||||
allow(described_class).to receive(:postgresql?).and_return(true)
|
||||
allow(described_class).to receive(:version).and_return('10')
|
||||
|
||||
expect(described_class.pg_last_wal_replay_lsn).to eq('pg_last_wal_replay_lsn')
|
||||
end
|
||||
end
|
||||
|
||||
describe '.nulls_last_order' do
|
||||
context 'when using PostgreSQL' do
|
||||
before do
|
||||
|
|
Loading…
Reference in New Issue