Skip to content

Commit 9d4a44d

Browse files
committed
Freeze and dedup quote_column_name and quote_table_name caches
Avoid corrupting the cache by mutating the return value, and also sligthly reduce memory usage when the quoting format often return an unmodified string.
1 parent 9c3ffab commit 9d4a44d

File tree

3 files changed

+8
-10
lines changed

3 files changed

+8
-10
lines changed

activerecord/lib/active_record/connection_adapters/mysql/quoting.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ def cast_bound_value(value)
3030
end
3131

3232
def quote_column_name(name)
33-
QUOTED_COLUMN_NAMES[name] ||= "`#{super.gsub('`', '``')}`"
33+
QUOTED_COLUMN_NAMES[name] ||= "`#{super.gsub('`', '``')}`".freeze
3434
end
3535

3636
def quote_table_name(name)
37-
QUOTED_TABLE_NAMES[name] ||= super.gsub(".", "`.`").freeze
37+
QUOTED_TABLE_NAMES[name] ||= -super.gsub(".", "`.`").freeze
3838
end
3939

4040
def unquoted_true

activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,7 @@ def quote_string(s) # :nodoc:
8686
# - "schema.name".table_name
8787
# - "schema.name"."table.name"
8888
def quote_table_name(name) # :nodoc:
89-
QUOTED_TABLE_NAMES[name] ||= Utils.extract_schema_qualified_name(name.to_s).quoted.freeze
90-
end
91-
92-
# Quotes schema names for use in SQL queries.
93-
def quote_schema_name(name)
94-
PG::Connection.quote_ident(name)
89+
QUOTED_TABLE_NAMES[name] ||= -Utils.extract_schema_qualified_name(name.to_s).quoted.freeze
9590
end
9691

9792
def quote_table_name_for_assignment(table, attr)
@@ -103,6 +98,9 @@ def quote_column_name(name) # :nodoc:
10398
QUOTED_COLUMN_NAMES[name] ||= PG::Connection.quote_ident(super).freeze
10499
end
105100

101+
# Quotes schema names for use in SQL queries.
102+
alias_method :quote_schema_name, :quote_column_name
103+
106104
# Quote date/time values for use in SQL input.
107105
def quoted_date(value) # :nodoc:
108106
if value.year <= 0

activerecord/lib/active_record/connection_adapters/sqlite3/quoting.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ def quote_table_name_for_assignment(table, attr)
1616
end
1717

1818
def quote_table_name(name)
19-
QUOTED_TABLE_NAMES[name] ||= super.gsub(".", "\".\"").freeze
19+
QUOTED_TABLE_NAMES[name] ||= -super.gsub(".", "\".\"").freeze
2020
end
2121

2222
def quote_column_name(name)
23-
QUOTED_COLUMN_NAMES[name] ||= %Q("#{super.gsub('"', '""')}")
23+
QUOTED_COLUMN_NAMES[name] ||= %Q("#{super.gsub('"', '""')}").freeze
2424
end
2525

2626
def quoted_time(value)

0 commit comments

Comments
 (0)