未验证 提交 15748f6a 编写于 作者: R Ryuta Kamizono 提交者: GitHub

Merge pull request #36637 from Shopify/share-quote-cache

Share the column and table name quote cache between connections
......@@ -106,6 +106,14 @@ def self.build_read_query_regexp(*parts) # :nodoc:
Regexp.union(*parts)
end
def self.quoted_column_names # :nodoc:
@quoted_column_names ||= {}
end
def self.quoted_table_names # :nodoc:
@quoted_table_names ||= {}
end
def initialize(connection, logger = nil, config = {}) # :nodoc:
super()
......@@ -116,7 +124,6 @@ def initialize(connection, logger = nil, config = {}) # :nodoc:
@config = config
@pool = ActiveRecord::ConnectionAdapters::NullPool.new
@idle_since = Concurrent.monotonic_time
@quoted_column_names, @quoted_table_names = {}, {}
@visitor = arel_visitor
@statements = build_statement_pool
@lock = ActiveSupport::Concurrency::LoadInterlockAwareMonitor.new
......
......@@ -5,11 +5,11 @@ module ConnectionAdapters
module MySQL
module Quoting # :nodoc:
def quote_column_name(name)
@quoted_column_names[name] ||= "`#{super.gsub('`', '``')}`"
self.class.quoted_column_names[name] ||= "`#{super.gsub('`', '``')}`"
end
def quote_table_name(name)
@quoted_table_names[name] ||= super.gsub(".", "`.`").freeze
self.class.quoted_table_names[name] ||= super.gsub(".", "`.`").freeze
end
def unquoted_true
......
......@@ -30,7 +30,7 @@ def quote_string(s) #:nodoc:
# - "schema.name".table_name
# - "schema.name"."table.name"
def quote_table_name(name) # :nodoc:
@quoted_table_names[name] ||= Utils.extract_schema_qualified_name(name.to_s).quoted.freeze
self.class.quoted_table_names[name] ||= Utils.extract_schema_qualified_name(name.to_s).quoted.freeze
end
# Quotes schema names for use in SQL queries.
......@@ -44,7 +44,7 @@ def quote_table_name_for_assignment(table, attr)
# Quotes column names for use in SQL queries.
def quote_column_name(name) # :nodoc:
@quoted_column_names[name] ||= PG::Connection.quote_ident(super).freeze
self.class.quoted_column_names[name] ||= PG::Connection.quote_ident(super).freeze
end
# Quote date/time values for use in SQL input.
......
......@@ -13,11 +13,11 @@ def quote_table_name_for_assignment(table, attr)
end
def quote_table_name(name)
@quoted_table_names[name] ||= super.gsub(".", "\".\"").freeze
self.class.quoted_table_names[name] ||= super.gsub(".", "\".\"").freeze
end
def quote_column_name(name)
@quoted_column_names[name] ||= %Q("#{super.gsub('"', '""')}")
self.class.quoted_column_names[name] ||= %Q("#{super.gsub('"', '""')}")
end
def quoted_time(value)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册