diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mysql_session_options.rb | 29 | ||||
-rw-r--r-- | lib/mysql_zero_date.rb | 18 |
2 files changed, 29 insertions, 18 deletions
diff --git a/lib/mysql_session_options.rb b/lib/mysql_session_options.rb new file mode 100644 index 00000000000..9ba1e508218 --- /dev/null +++ b/lib/mysql_session_options.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'active_record/connection_adapters/abstract_mysql_adapter' + +module MysqlSessionOptions + def configure_connection + super + + # Disable NO_ZERO_DATE mode for mysql. + # We use zero date as a default value + # (config/initializers/active_record_mysql_timestamp.rb), in + # Rails 5 using zero date fails by default (https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/75450216) + # and NO_ZERO_DATE has to be explicitly disabled. Disabling strict mode + # is not sufficient. + sql_mode = "REPLACE(@@sql_mode, 'NO_ZERO_DATE', '')" + + # Disable ONLY_FULL_GROUP_BY for mysql. + # If ONLY_FULL_GROUP_BY is enabled then GROUP BY clause + # must include all columns used in SELECT, HAVING and ORDER BY. + # This causes that "duplicit" records are then returned in + # some of our queries and these have to be filtered-out + # on rails side. + sql_mode = "REPLACE(#{sql_mode}, 'ONLY_FULL_GROUP_BY', '')" + + @connection.query "SET @@SESSION.sql_mode = #{sql_mode};" # rubocop:disable Gitlab/ModuleWithInstanceVariables + end +end + +ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend(MysqlSessionOptions) if Gitlab.rails5? diff --git a/lib/mysql_zero_date.rb b/lib/mysql_zero_date.rb deleted file mode 100644 index 64634f789da..00000000000 --- a/lib/mysql_zero_date.rb +++ /dev/null @@ -1,18 +0,0 @@ -# Disable NO_ZERO_DATE mode for mysql in rails 5. -# We use zero date as a default value -# (config/initializers/active_record_mysql_timestamp.rb), in -# Rails 5 using zero date fails by default (https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/75450216) -# and NO_ZERO_DATE has to be explicitly disabled. Disabling strict mode -# is not sufficient. - -require 'active_record/connection_adapters/abstract_mysql_adapter' - -module MysqlZeroDate - def configure_connection - super - - @connection.query "SET @@SESSION.sql_mode = REPLACE(@@SESSION.sql_mode, 'NO_ZERO_DATE', '');" # rubocop:disable Gitlab/ModuleWithInstanceVariables - end -end - -ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend(MysqlZeroDate) if Gitlab.rails5? |