From ad712ddb1dba4189c7553f45f22f891f164a2762 Mon Sep 17 00:00:00 2001 From: Jan Provaznik Date: Mon, 13 Aug 2018 12:15:41 +0200 Subject: Disable ONLY_FULL_GROUP_BY mode for mysql * 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 --- lib/mysql_session_options.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 lib/mysql_session_options.rb (limited to 'lib/mysql_session_options.rb') 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? -- cgit v1.2.1