Skip to content

Commit 92591eb

Browse files
authored
Merge pull request rails#51429 from fatkodima/fix-pg-include-indexes-with-keywords
Fix PostgreSQL `include` indexes with keyword column names
2 parents c23f7ae + 16d6357 commit 92591eb

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def indexes(table_name) # :nodoc:
112112

113113
orders = {}
114114
opclasses = {}
115-
include_columns = include ? include.split(",").map(&:strip) : []
115+
include_columns = include ? include.split(",").map { |c| Utils.unquote_identifier(c.strip.gsub('""', '"')) } : []
116116

117117
if indkey.include?(0)
118118
columns = expressions

activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,22 @@ def test_include_multiple_columns_index
346346
assert_equal ["number", "data"], index.include
347347
end
348348
end
349+
350+
def test_include_keyword_column_name
351+
with_example_table("id integer, timestamp integer") do
352+
@connection.add_index "ex", :id, name: "include", include: [:timestamp]
353+
index = @connection.indexes("ex").find { |idx| idx.name == "include" }
354+
assert_equal ["timestamp"], index.include
355+
end
356+
end
357+
358+
def test_include_escaped_quotes_column_name
359+
with_example_table(%{id integer, "I""like""quotes" integer}) do
360+
@connection.add_index "ex", :id, name: "include", include: [:"I\"like\"quotes"]
361+
index = @connection.indexes("ex").find { |idx| idx.name == "include" }
362+
assert_equal ["I\"like\"quotes"], index.include
363+
end
364+
end
349365
end
350366

351367
def test_expression_index

0 commit comments

Comments
 (0)