diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2018-08-13 12:15:41 +0200 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2018-08-13 13:01:52 +0200 |
commit | ad712ddb1dba4189c7553f45f22f891f164a2762 (patch) | |
tree | beb06fe86834b7288c4f6640e600e96435e3c402 /lib/mysql_session_options.rb | |
parent | 00c474ae4efd296138598d9fb6609322beb43da9 (diff) | |
download | gitlab-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.rb | 29 |
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? |