Skip to content

Commit 2e12a6d

Browse files
committed
Fix retrieving sqlite3 expression indexes created by sql annotated with trailing comment
1 parent 1c804dc commit 2e12a6d

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def indexes(table_name)
2121
WHERE name = #{quote(row['name'])} AND type = 'index'
2222
SQL
2323

24-
/\bON\b\s*"?(\w+?)"?\s*\((?<expressions>.+?)\)(?:\s*WHERE\b\s*(?<where>.+))?\z/i =~ index_sql
24+
/\bON\b\s*"?(\w+?)"?\s*\((?<expressions>.+?)\)(?:\s*WHERE\b\s*(?<where>.+))?(?:\s*\/\*.*\*\/)?\z/i =~ index_sql
2525

2626
columns = exec_query("PRAGMA index_info(#{quote(row['name'])})", "SCHEMA").map do |col|
2727
col["name"]

activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,14 @@ def test_expression_index
390390
end
391391
end
392392

393+
def test_expression_index_with_trailing_comment
394+
with_example_table do
395+
@conn.execute "CREATE INDEX expression on ex (number % 10) /* comment */"
396+
index = @conn.indexes("ex").find { |idx| idx.name == "expression" }
397+
assert_equal "number % 10", index.columns
398+
end
399+
end
400+
393401
def test_expression_index_with_where
394402
with_example_table do
395403
@conn.add_index "ex", "id % 10, max(id, number)", name: "expression", where: "id > 1000"

0 commit comments

Comments
 (0)