@@ -4,8 +4,7 @@ module SafePgMigrations
4
4
module IdempotentStatements
5
5
include Helpers ::IndexHelper
6
6
7
- ruby2_keywords def add_index ( table_name , column_name , *args )
8
- options = args . last . is_a? ( Hash ) ? args . last : { }
7
+ def add_index ( table_name , column_name , **options )
9
8
index_definition = index_definition ( table_name , column_name , **options )
10
9
11
10
return super unless index_name_exists? ( index_definition . table , index_definition . name )
@@ -15,42 +14,44 @@ module IdempotentStatements
15
14
return
16
15
end
17
16
18
- remove_index ( table_name , name : index_definition . name )
17
+ remove_index ( table_name , column_name , ** options )
19
18
super
20
19
end
21
20
22
- ruby2_keywords def add_column ( table_name , column_name , type , *)
21
+ def add_column ( table_name , column_name , type , ** options )
23
22
if column_exists? ( table_name , column_name ) && !column_exists? ( table_name , column_name , type )
24
23
error_message = "/!\\ Column '#{ column_name } ' already exists in '#{ table_name } ' with a different type"
25
24
raise error_message
26
25
end
27
26
28
- return super unless column_exists? ( table_name , column_name , type )
27
+ options_without_default_value_backfill = options . except ( :default_value_backfill )
29
28
30
- log_message ( <<~MESSAGE . squish
31
- /!\\ Column '#{ column_name } ' already exists in '#{ table_name } ' with the same type (#{ type } ).
32
- Skipping statement.
33
- MESSAGE
34
- )
29
+ if column_exists? ( table_name , column_name , type )
30
+ log_message ( <<~MESSAGE . squish
31
+ /!\\ Column '#{ column_name } ' already exists in '#{ table_name } ' with the same type (#{ type } ).
32
+ Skipping statement.
33
+ MESSAGE
34
+ )
35
+ else
36
+ super ( table_name , column_name , type , **options_without_default_value_backfill )
37
+ end
35
38
end
36
39
37
- ruby2_keywords def remove_column ( table_name , column_name , type = nil , *)
40
+ def remove_column ( table_name , column_name , type = nil , ** options )
38
41
return super if column_exists? ( table_name , column_name )
39
42
40
43
log_message ( "/!\\ Column '#{ column_name } ' not found on table '#{ table_name } '. Skipping statement." )
41
44
end
42
45
43
- ruby2_keywords def remove_index ( table_name , *args )
44
- options = args . last . is_a? ( Hash ) ? args . last : { }
45
- index_name = options . key? ( :name ) ? options [ :name ] . to_s : index_name ( table_name , options )
46
+ def remove_index ( table_name , column_name = nil , **options )
47
+ index_name = options . key? ( :name ) ? options [ :name ] . to_s : index_name ( table_name , column : column_name )
46
48
47
49
return super if index_name_exists? ( table_name , index_name )
48
50
49
51
log_message ( "/!\\ Index '#{ index_name } ' not found on table '#{ table_name } '. Skipping statement." )
50
52
end
51
53
52
- ruby2_keywords def add_foreign_key ( from_table , to_table , *args )
53
- options = args . last . is_a? ( Hash ) ? args . last : { }
54
+ def add_foreign_key ( from_table , to_table , **options )
54
55
sub_options = options . slice ( :name , :column )
55
56
return super unless foreign_key_exists? ( from_table , sub_options . present? ? nil : to_table , **sub_options )
56
57
@@ -64,13 +65,12 @@ def remove_foreign_key(from_table, to_table = nil, **options)
64
65
log_message ( "/!\\ Foreign key '#{ from_table } ' -> '#{ reference_name } ' does not exist. Skipping statement." )
65
66
end
66
67
67
- ruby2_keywords def create_table ( table_name , *args )
68
- options = args . last . is_a? ( Hash ) ? args . last : { }
68
+ def create_table ( table_name , **options )
69
69
return super if options [ :force ] || !table_exists? ( table_name )
70
70
71
71
Helpers ::Logger . say "/!\\ Table '#{ table_name } ' already exists." , sub_item : true
72
72
73
- td = create_table_definition ( table_name , *args )
73
+ td = create_table_definition ( table_name , ** options )
74
74
75
75
yield td if block_given?
76
76
@@ -82,8 +82,10 @@ def remove_foreign_key(from_table, to_table = nil, **options)
82
82
end
83
83
84
84
def add_check_constraint ( table_name , expression , **options )
85
+ options_without_validate = options . except ( :validate )
85
86
constraint_definition = check_constraint_for table_name ,
86
- **check_constraint_options ( table_name , expression , options )
87
+ **check_constraint_options ( table_name , expression ,
88
+ options_without_validate )
87
89
88
90
return super if constraint_definition . nil?
89
91
@@ -123,7 +125,7 @@ def change_column_default(table_name, column_name, default_or_changes)
123
125
)
124
126
end
125
127
126
- ruby2_keywords def drop_table ( table_name , *)
128
+ def drop_table ( table_name , ** options )
127
129
return super if table_exists? ( table_name )
128
130
129
131
log_message ( "/!\\ Table '#{ table_name } does not exist. Skipping statement." )
0 commit comments