From b94efe9f1be6f8f9df9f286441c3fdd6b8804714 Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Thu, 12 Sep 2019 15:11:02 -0400 Subject: [PATCH] activerecord: Allow comment prefix in queries when preventing writes --- .../active_record/connection_adapters/abstract_adapter.rb | 5 +++-- .../test/cases/adapters/mysql2/mysql2_adapter_test.rb | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index 91d5d08121544..5be6d82138627 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -76,6 +76,7 @@ class AbstractAdapter include Savepoints SIMPLE_INT = /\A\d+\z/ + COMMENT_REGEX = %r{/\*(?:[^\*]|\*[^/])*\*/}m attr_accessor :pool attr_reader :visitor, :owner, :logger, :lock @@ -102,8 +103,8 @@ def self.type_cast_config_to_boolean(config) end def self.build_read_query_regexp(*parts) # :nodoc: - parts = parts.map { |part| /\A[\(\s]*#{part}/i } - Regexp.union(*parts) + parts = parts.map { |part| /#{part}/i } + /\A(?:[\(\s]|#{COMMENT_REGEX})*#{Regexp.union(*parts)}/ end def self.quoted_column_names # :nodoc: diff --git a/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb b/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb index 189d5e0bb9dc6..76ddab5ccc221 100644 --- a/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb +++ b/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb @@ -221,7 +221,7 @@ def test_doesnt_error_when_a_read_query_with_leading_chars_is_called_while_preve @conn.execute("INSERT INTO `engines` (`car_id`) VALUES ('138853948594')") @connection_handler.while_preventing_writes do - assert_equal 1, @conn.execute("(\n( SELECT `engines`.* FROM `engines` WHERE `engines`.`car_id` = '138853948594' ) )").entries.count + assert_equal 1, @conn.execute("/*action:index*/(\n( SELECT `engines`.* FROM `engines` WHERE `engines`.`car_id` = '138853948594' ) )").entries.count end end