Skip to content

Commit e0d0dc6

Browse files
authored
Merge pull request rails#26930 from kamipo/index_name_exists_default
The `default` arg of `index_name_exists?` makes to optional
2 parents 2f60a75 + 28dc6d7 commit e0d0dc6

File tree

6 files changed

+37
-27
lines changed

6 files changed

+37
-27
lines changed

activerecord/CHANGELOG.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Deprecate passing `default` to `index_name_exists?`.
2+
3+
*Ryuta Kamizono*
4+
15
* PostgreSQL: schema dumping support for interval and OID columns.
26

37
*Ryuta Kamizono*
@@ -12,7 +16,7 @@
1216

1317
*namusyaka*
1418

15-
* Allow ActiveRecord::Base#as_json to be passed a frozen Hash.
19+
* Allow `ActiveRecord::Base#as_json` to be passed a frozen Hash.
1620

1721
*Isaac Betesh*
1822

@@ -32,9 +36,9 @@
3236

3337
*Ryuta Kamizono*
3438

35-
* Fix `association_primary_key_type` for reflections with symbol primary key
39+
* Fix `association_primary_key_type` for reflections with symbol primary key.
3640

37-
Fixes #27864
41+
Fixes #27864.
3842

3943
*Daniel Colson*
4044

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -773,11 +773,12 @@ def index_name(table_name, options) #:nodoc:
773773
end
774774

775775
# Verifies the existence of an index with a given name.
776-
#
777-
# The default argument is returned if the underlying implementation does not define the indexes method,
778-
# as there's no way to determine the correct answer in that case.
779-
def index_name_exists?(table_name, index_name, default)
780-
return default unless respond_to?(:indexes)
776+
def index_name_exists?(table_name, index_name, default = nil)
777+
unless default.nil?
778+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
779+
Passing default to #index_name_exists? is deprecated without replacement.
780+
MSG
781+
end
781782
index_name = index_name.to_s
782783
indexes(table_name).detect { |i| i.name == index_name }
783784
end
@@ -1149,7 +1150,7 @@ def add_index_options(table_name, column_name, comment: nil, **options) # :nodoc
11491150

11501151
validate_index_length!(table_name, index_name, options.fetch(:internal, false))
11511152

1152-
if data_source_exists?(table_name) && index_name_exists?(table_name, index_name, false)
1153+
if data_source_exists?(table_name) && index_name_exists?(table_name, index_name)
11531154
raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' already exists"
11541155
end
11551156
index_columns = quoted_columns_for_index(column_names, options).join(", ")

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,12 @@ def schema_exists?(name)
132132
end
133133

134134
# Verifies existence of an index with a given name.
135-
def index_name_exists?(table_name, index_name, default)
135+
def index_name_exists?(table_name, index_name, default = nil)
136+
unless default.nil?
137+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
138+
Passing default to #index_name_exists? is deprecated without replacement.
139+
MSG
140+
end
136141
table = Utils.extract_schema_qualified_name(table_name.to_s)
137142
index = Utils.extract_schema_qualified_name(index_name.to_s)
138143

activerecord/lib/active_record/migration/compatibility.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,13 @@ def remove_index(table_name, options = {})
145145
def index_name_for_remove(table_name, options = {})
146146
index_name = index_name(table_name, options)
147147

148-
unless index_name_exists?(table_name, index_name, true)
148+
unless index_name_exists?(table_name, index_name)
149149
if options.is_a?(Hash) && options.has_key?(:name)
150150
options_without_column = options.dup
151151
options_without_column.delete :column
152152
index_name_without_column = index_name(table_name, options_without_column)
153153

154-
return index_name_without_column if index_name_exists?(table_name, index_name_without_column, false)
154+
return index_name_without_column if index_name_exists?(table_name, index_name_without_column)
155155
end
156156

157157
raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' does not exist"

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -301,13 +301,13 @@ def test_ignore_nil_schema_search_path
301301

302302
def test_index_name_exists
303303
with_schema_search_path(SCHEMA_NAME) do
304-
assert @connection.index_name_exists?(TABLE_NAME, INDEX_A_NAME, true)
305-
assert @connection.index_name_exists?(TABLE_NAME, INDEX_B_NAME, true)
306-
assert @connection.index_name_exists?(TABLE_NAME, INDEX_C_NAME, true)
307-
assert @connection.index_name_exists?(TABLE_NAME, INDEX_D_NAME, true)
308-
assert @connection.index_name_exists?(TABLE_NAME, INDEX_E_NAME, true)
309-
assert @connection.index_name_exists?(TABLE_NAME, INDEX_E_NAME, true)
310-
assert_not @connection.index_name_exists?(TABLE_NAME, "missing_index", true)
304+
assert @connection.index_name_exists?(TABLE_NAME, INDEX_A_NAME)
305+
assert @connection.index_name_exists?(TABLE_NAME, INDEX_B_NAME)
306+
assert @connection.index_name_exists?(TABLE_NAME, INDEX_C_NAME)
307+
assert @connection.index_name_exists?(TABLE_NAME, INDEX_D_NAME)
308+
assert @connection.index_name_exists?(TABLE_NAME, INDEX_E_NAME)
309+
assert @connection.index_name_exists?(TABLE_NAME, INDEX_E_NAME)
310+
assert_not @connection.index_name_exists?(TABLE_NAME, "missing_index")
311311
end
312312
end
313313

activerecord/test/cases/migration/index_test.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ def test_rename_index
3131
connection.add_index(table_name, [:foo], name: "old_idx")
3232
connection.rename_index(table_name, "old_idx", "new_idx")
3333

34-
# if the adapter doesn't support the indexes call, pick defaults that let the test pass
35-
assert_not connection.index_name_exists?(table_name, "old_idx", false)
36-
assert connection.index_name_exists?(table_name, "new_idx", true)
34+
assert_deprecated do
35+
assert_not connection.index_name_exists?(table_name, "old_idx", false)
36+
assert connection.index_name_exists?(table_name, "new_idx", true)
37+
end
3738
end
3839

3940
def test_rename_index_too_long
@@ -45,8 +46,7 @@ def test_rename_index_too_long
4546
}
4647
assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
4748

48-
# if the adapter doesn't support the indexes call, pick defaults that let the test pass
49-
assert connection.index_name_exists?(table_name, "old_idx", false)
49+
assert connection.index_name_exists?(table_name, "old_idx")
5050
end
5151

5252
def test_double_add_index
@@ -63,7 +63,7 @@ def test_remove_nonexistent_index
6363
def test_add_index_works_with_long_index_names
6464
connection.add_index(table_name, "foo", name: good_index_name)
6565

66-
assert connection.index_name_exists?(table_name, good_index_name, false)
66+
assert connection.index_name_exists?(table_name, good_index_name)
6767
connection.remove_index(table_name, name: good_index_name)
6868
end
6969

@@ -75,15 +75,15 @@ def test_add_index_does_not_accept_too_long_index_names
7575
}
7676
assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
7777

78-
assert_not connection.index_name_exists?(table_name, too_long_index_name, false)
78+
assert_not connection.index_name_exists?(table_name, too_long_index_name)
7979
connection.add_index(table_name, "foo", name: good_index_name)
8080
end
8181

8282
def test_internal_index_with_name_matching_database_limit
8383
good_index_name = "x" * connection.index_name_length
8484
connection.add_index(table_name, "foo", name: good_index_name, internal: true)
8585

86-
assert connection.index_name_exists?(table_name, good_index_name, false)
86+
assert connection.index_name_exists?(table_name, good_index_name)
8787
connection.remove_index(table_name, name: good_index_name)
8888
end
8989

0 commit comments

Comments
 (0)