Don't assume postgresql in two initializers
This commit is contained in:
parent
69a3af733e
commit
564306e028
|
@ -1,57 +1,59 @@
|
||||||
raise "Vendored ActiveRecord 5 code! Delete #{__FILE__}!" if ActiveRecord::VERSION::MAJOR >= 5
|
raise "Vendored ActiveRecord 5 code! Delete #{__FILE__}!" if ActiveRecord::VERSION::MAJOR >= 5
|
||||||
|
|
||||||
require 'active_record/connection_adapters/postgresql_adapter'
|
if Gitlab::Database.postgresql?
|
||||||
require 'active_record/connection_adapters/postgresql/schema_statements'
|
require 'active_record/connection_adapters/postgresql_adapter'
|
||||||
|
require 'active_record/connection_adapters/postgresql/schema_statements'
|
||||||
|
|
||||||
#
|
#
|
||||||
# Monkey-patch the refused Rails 4.2 patch at https://github.com/rails/rails/pull/31330
|
# Monkey-patch the refused Rails 4.2 patch at https://github.com/rails/rails/pull/31330
|
||||||
#
|
#
|
||||||
# Updates sequence logic to support PostgreSQL 10.
|
# Updates sequence logic to support PostgreSQL 10.
|
||||||
#
|
#
|
||||||
# rubocop:disable all
|
# rubocop:disable all
|
||||||
module ActiveRecord
|
module ActiveRecord
|
||||||
module ConnectionAdapters
|
module ConnectionAdapters
|
||||||
|
|
||||||
# We need #postgresql_version to be public as in ActiveRecord 5 for seed_fu
|
# We need #postgresql_version to be public as in ActiveRecord 5 for seed_fu
|
||||||
# to work. In ActiveRecord 4, it is protected.
|
# to work. In ActiveRecord 4, it is protected.
|
||||||
# https://github.com/mbleigh/seed-fu/issues/123
|
# https://github.com/mbleigh/seed-fu/issues/123
|
||||||
class PostgreSQLAdapter
|
class PostgreSQLAdapter
|
||||||
public :postgresql_version
|
public :postgresql_version
|
||||||
end
|
end
|
||||||
|
|
||||||
module PostgreSQL
|
module PostgreSQL
|
||||||
module SchemaStatements
|
module SchemaStatements
|
||||||
# Resets the sequence of a table's primary key to the maximum value.
|
# Resets the sequence of a table's primary key to the maximum value.
|
||||||
def reset_pk_sequence!(table, pk = nil, sequence = nil) #:nodoc:
|
def reset_pk_sequence!(table, pk = nil, sequence = nil) #:nodoc:
|
||||||
unless pk and sequence
|
unless pk and sequence
|
||||||
default_pk, default_sequence = pk_and_sequence_for(table)
|
default_pk, default_sequence = pk_and_sequence_for(table)
|
||||||
|
|
||||||
pk ||= default_pk
|
pk ||= default_pk
|
||||||
sequence ||= default_sequence
|
sequence ||= default_sequence
|
||||||
end
|
|
||||||
|
|
||||||
if @logger && pk && !sequence
|
|
||||||
@logger.warn "#{table} has primary key #{pk} with no default sequence"
|
|
||||||
end
|
|
||||||
|
|
||||||
if pk && sequence
|
|
||||||
quoted_sequence = quote_table_name(sequence)
|
|
||||||
max_pk = select_value("SELECT MAX(#{quote_column_name pk}) FROM #{quote_table_name(table)}")
|
|
||||||
if max_pk.nil?
|
|
||||||
if postgresql_version >= 100000
|
|
||||||
minvalue = select_value("SELECT seqmin FROM pg_sequence WHERE seqrelid = #{quote(quoted_sequence)}::regclass")
|
|
||||||
else
|
|
||||||
minvalue = select_value("SELECT min_value FROM #{quoted_sequence}")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
select_value <<-end_sql, 'SCHEMA'
|
if @logger && pk && !sequence
|
||||||
SELECT setval(#{quote(quoted_sequence)}, #{max_pk ? max_pk : minvalue}, #{max_pk ? true : false})
|
@logger.warn "#{table} has primary key #{pk} with no default sequence"
|
||||||
end_sql
|
end
|
||||||
|
|
||||||
|
if pk && sequence
|
||||||
|
quoted_sequence = quote_table_name(sequence)
|
||||||
|
max_pk = select_value("SELECT MAX(#{quote_column_name pk}) FROM #{quote_table_name(table)}")
|
||||||
|
if max_pk.nil?
|
||||||
|
if postgresql_version >= 100000
|
||||||
|
minvalue = select_value("SELECT seqmin FROM pg_sequence WHERE seqrelid = #{quote(quoted_sequence)}::regclass")
|
||||||
|
else
|
||||||
|
minvalue = select_value("SELECT min_value FROM #{quoted_sequence}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
select_value <<-end_sql, 'SCHEMA'
|
||||||
|
SELECT setval(#{quote(quoted_sequence)}, #{max_pk ? max_pk : minvalue}, #{max_pk ? true : false})
|
||||||
|
end_sql
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
# rubocop:enable all
|
||||||
end
|
end
|
||||||
# rubocop:enable all
|
|
||||||
|
|
|
@ -7,10 +7,12 @@ if Gitlab::Database.mysql?
|
||||||
require 'peek-mysql2'
|
require 'peek-mysql2'
|
||||||
PEEK_DB_CLIENT = ::Mysql2::Client
|
PEEK_DB_CLIENT = ::Mysql2::Client
|
||||||
PEEK_DB_VIEW = Peek::Views::Mysql2
|
PEEK_DB_VIEW = Peek::Views::Mysql2
|
||||||
else
|
elsif Gitlab::Database.postgresql?
|
||||||
require 'peek-pg'
|
require 'peek-pg'
|
||||||
PEEK_DB_CLIENT = ::PG::Connection
|
PEEK_DB_CLIENT = ::PG::Connection
|
||||||
PEEK_DB_VIEW = Peek::Views::PG
|
PEEK_DB_VIEW = Peek::Views::PG
|
||||||
|
else
|
||||||
|
raise "Unsupported database adapter for peek!"
|
||||||
end
|
end
|
||||||
|
|
||||||
Peek.into PEEK_DB_VIEW
|
Peek.into PEEK_DB_VIEW
|
||||||
|
|
Loading…
Reference in New Issue