aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorJeremy Daer <jeremydaer@gmail.com>2016-03-23 12:58:41 -0700
committerJeremy Daer <jeremydaer@gmail.com>2016-03-23 13:17:15 -0700
commitbaf8f8eb586e4117e89453e1d2ad8eef7d5f163e (patch)
treed334f2fb93097eb5724827a629c21b14595727ab /activerecord/lib
parentd7647e9a3351c8ee16fa48c03f1c906ad75db3eb (diff)
parent5ad6ed95ce3e2c313f76eb02b23782b04323b8ad (diff)
downloadrails-baf8f8eb586e4117e89453e1d2ad8eef7d5f163e.tar.gz
rails-baf8f8eb586e4117e89453e1d2ad8eef7d5f163e.tar.bz2
rails-baf8f8eb586e4117e89453e1d2ad8eef7d5f163e.zip
Merge pull request #24167 from kamipo/append_sql_mode_instead_of_overwriting_in_strict_mode
Append sql_mode instead of overwriting in strict mode
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index 22b71fbaba..0e22062913 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -846,9 +846,18 @@ module ActiveRecord
# Make MySQL reject illegal values rather than truncating or blanking them, see
# http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_all_tables
# If the user has provided another value for sql_mode, don't replace it.
- unless variables.has_key?('sql_mode') || defaults.include?(@config[:strict])
- variables['sql_mode'] = strict_mode? ? 'STRICT_ALL_TABLES' : ''
+ if sql_mode = variables.delete('sql_mode')
+ sql_mode = quote(sql_mode)
+ elsif !defaults.include?(strict_mode?)
+ if strict_mode?
+ sql_mode = "CONCAT(@@sql_mode, ',STRICT_ALL_TABLES')"
+ else
+ sql_mode = "REPLACE(@@sql_mode, 'STRICT_TRANS_TABLES', '')"
+ sql_mode = "REPLACE(#{sql_mode}, 'STRICT_ALL_TABLES', '')"
+ sql_mode = "REPLACE(#{sql_mode}, 'TRADITIONAL', '')"
+ end
end
+ sql_mode_assignment = "@@SESSION.sql_mode = #{sql_mode}, " if sql_mode
# NAMES does not have an equals sign, see
# http://dev.mysql.com/doc/refman/5.7/en/set-statement.html#id944430
@@ -870,7 +879,7 @@ module ActiveRecord
end.compact.join(', ')
# ...and send them all in one query
- @connection.query "SET #{encoding} #{variable_assignments}"
+ @connection.query "SET #{encoding} #{sql_mode_assignment} #{variable_assignments}"
end
def column_definitions(table_name) # :nodoc: