summaryrefslogtreecommitdiff
path: root/lib/mysql_session_options.rb
blob: 9ba1e5082183aad74f4a74a7677ab6b28a3e9673 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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?