Commit ec7b3a8d authored by Michael Kozono's avatar Michael Kozono

Fix MySQL schema dump for `timestamp`

parent b367b780
...@@ -45,11 +45,37 @@ if Gitlab::Database.postgresql? ...@@ -45,11 +45,37 @@ if Gitlab::Database.postgresql?
elsif Gitlab::Database.mysql? elsif Gitlab::Database.mysql?
require 'active_record/connection_adapters/mysql2_adapter' require 'active_record/connection_adapters/mysql2_adapter'
module ActiveRecord module RegisterDateTimeWithTimeZone
module ConnectionAdapters # Run original `initialize_type_map` and then register `timestamp` as a
class AbstractMysqlAdapter # `MysqlDateTimeWithTimeZone`.
NATIVE_DATABASE_TYPES[:datetime_with_timezone] = { name: 'timestamp' } #
# When schema dumping, `timestamp` columns will be output as
# `t.datetime_with_timezone`.
def initialize_type_map(mapping)
super mapping
mapping.register_type(%r(timestamp)i) do |sql_type|
precision = extract_precision(sql_type)
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlDateTimeWithTimeZone.new(precision: precision)
end end
end end
end end
class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
prepend RegisterDateTimeWithTimeZone
# Add the class `DateTimeWithTimeZone` so we can map `timestamp` to it.
class MysqlDateTimeWithTimeZone < MysqlDateTime
def type
:datetime_with_timezone
end
end
# Add column type `datetime_with_timezone` so we can do this in
# migrations:
#
# add_column(:users, :datetime_with_timezone)
#
NATIVE_DATABASE_TYPES[:datetime_with_timezone] = { name: 'timestamp' }
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment