summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mysql_session_options.rb29
-rw-r--r--lib/mysql_zero_date.rb18
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?