summaryrefslogtreecommitdiff
path: root/lib/mysql_session_options.rb
diff options
context:
space:
mode:
authorJan Provaznik <jprovaznik@gitlab.com>2018-08-13 12:15:41 +0200
committerJan Provaznik <jprovaznik@gitlab.com>2018-08-13 13:01:52 +0200
commitad712ddb1dba4189c7553f45f22f891f164a2762 (patch)
treebeb06fe86834b7288c4f6640e600e96435e3c402 /lib/mysql_session_options.rb
parent00c474ae4efd296138598d9fb6609322beb43da9 (diff)
downloadgitlab-ce-rails5-mysql-group-by.tar.gz
Disable ONLY_FULL_GROUP_BY mode for mysqlrails5-mysql-group-by
* disables ONLY_FULL_GROUP_BY option which is enabled by default in rails 5 * reverts 'uniq' workaround which was necessary only when this option was enabled
Diffstat (limited to 'lib/mysql_session_options.rb')
-rw-r--r--lib/mysql_session_options.rb29
1 files changed, 29 insertions, 0 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?