Skip to content

Commit c54b26d

Browse files
authored
Merge pull request rails#45772 from adrianna-chang-shopify/ac-remove-ddl-from-schema-definitions
Don't store `ddl` on schema definitions
2 parents 8b0499a + 4714126 commit c54b26d

File tree

8 files changed

+23
-66
lines changed

8 files changed

+23
-66
lines changed

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def visit_AlterTable(o)
2626
sql << o.foreign_key_drops.map { |fk| visit_DropForeignKey fk }.join(" ")
2727
sql << o.check_constraint_adds.map { |con| visit_AddCheckConstraint con }.join(" ")
2828
sql << o.check_constraint_drops.map { |con| visit_DropCheckConstraint con }.join(" ")
29-
o.ddl = sql
3029
end
3130

3231
def visit_ColumnDefinition(o)
@@ -67,7 +66,7 @@ def visit_TableDefinition(o)
6766
create_sql << "(#{statements.join(', ')})" if statements.present?
6867
add_table_options!(create_sql, o)
6968
create_sql << " AS #{to_sql(o.as)}" if o.as
70-
o.ddl = create_sql
69+
create_sql
7170
end
7271

7372
def visit_PrimaryKeyDefinition(o)
@@ -107,8 +106,7 @@ def visit_CreateIndexDefinition(o)
107106
sql << "(#{quoted_columns(index)})"
108107
sql << "WHERE #{index.where}" if supports_partial_index? && index.where
109108

110-
sql = sql.join(" ")
111-
o.ddl = sql
109+
sql.join(" ")
112110
end
113111

114112
def visit_CheckConstraintDefinition(o)

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ def aliased_types(name, fallback)
9292

9393
AddColumnDefinition = Struct.new(:column) # :nodoc:
9494

95-
ChangeColumnDefinition = Struct.new(:column, :name, :ddl) # :nodoc:
95+
ChangeColumnDefinition = Struct.new(:column, :name) # :nodoc:
9696

97-
ChangeColumnDefaultDefinition = Struct.new(:column, :default, :ddl) # :nodoc:
97+
ChangeColumnDefaultDefinition = Struct.new(:column, :default) # :nodoc:
9898

99-
CreateIndexDefinition = Struct.new(:index, :algorithm, :if_not_exists, :ddl) # :nodoc:
99+
CreateIndexDefinition = Struct.new(:index, :algorithm, :if_not_exists) # :nodoc:
100100

101101
PrimaryKeyDefinition = Struct.new(:name) # :nodoc:
102102

@@ -335,7 +335,6 @@ class TableDefinition
335335
include ColumnMethods
336336

337337
attr_reader :name, :temporary, :if_not_exists, :options, :as, :comment, :indexes, :foreign_keys, :check_constraints
338-
attr_accessor :ddl
339338

340339
def initialize(
341340
conn,
@@ -582,7 +581,6 @@ class AlterTable # :nodoc:
582581
attr_reader :adds
583582
attr_reader :foreign_key_adds, :foreign_key_drops
584583
attr_reader :check_constraint_adds, :check_constraint_drops
585-
attr_accessor :ddl
586584

587585
def initialize(td)
588586
@td = td

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ def create_table(table_name, id: :primary_key, primary_key: nil, force: nil, **o
299299
schema_cache.clear_data_source_cache!(table_name.to_s)
300300
end
301301

302-
result = execute(td.ddl)
302+
result = execute schema_creation.accept(td)
303303

304304
unless supports_indexes_in_create?
305305
td.indexes.each do |column_name, index_options|
@@ -329,7 +329,6 @@ def build_create_table_definition(table_name, id: :primary_key, primary_key: nil
329329

330330
yield table_definition if block_given?
331331

332-
schema_creation.accept(table_definition)
333332
table_definition
334333
end
335334

@@ -620,7 +619,7 @@ def add_column(table_name, column_name, type, **options)
620619
add_column_def = build_add_column_definition(table_name, column_name, type, **options)
621620
return unless add_column_def
622621

623-
execute(add_column_def.ddl)
622+
execute schema_creation.accept(add_column_def)
624623
end
625624

626625
def add_columns(table_name, *column_names, type:, **options) # :nodoc:
@@ -645,7 +644,6 @@ def build_add_column_definition(table_name, column_name, type, **options) # :nod
645644

646645
alter_table = create_alter_table(table_name)
647646
alter_table.add_column(column_name, type, **options)
648-
schema_creation.accept(alter_table)
649647
alter_table
650648
end
651649

@@ -875,7 +873,7 @@ def rename_column(table_name, column_name, new_column_name)
875873
# For more information see the {"Transactional Migrations" section}[rdoc-ref:Migration].
876874
def add_index(table_name, column_name, **options)
877875
create_index = build_create_index_definition(table_name, column_name, **options)
878-
execute(create_index.ddl)
876+
execute schema_creation.accept(create_index)
879877
end
880878

881879
# Builds a CreateIndexDefinition object.
@@ -885,10 +883,7 @@ def add_index(table_name, column_name, **options)
885883
# passing a +table_name+, +column_name+, and other additional options that can be passed.
886884
def build_create_index_definition(table_name, column_name, **options) # :nodoc:
887885
index, algorithm, if_not_exists = add_index_options(table_name, column_name, **options)
888-
889-
create_index = CreateIndexDefinition.new(index, algorithm, if_not_exists)
890-
schema_creation.accept(create_index)
891-
create_index
886+
CreateIndexDefinition.new(index, algorithm, if_not_exists)
892887
end
893888

894889
# Removes the given index from the table.
@@ -1715,7 +1710,7 @@ def add_column_for_alter(table_name, column_name, type, **options)
17151710

17161711
def change_column_default_for_alter(table_name, column_name, default_or_changes)
17171712
cd = build_change_column_default_definition(table_name, column_name, default_or_changes)
1718-
cd.ddl
1713+
schema_creation.accept(cd)
17191714
end
17201715

17211716
def rename_column_sql(table_name, column_name, new_column_name)

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -355,10 +355,7 @@ def build_change_column_default_definition(table_name, column_name, default_or_c
355355
return unless column
356356

357357
default = extract_new_default_value(default_or_changes)
358-
change_column_default_definition = ChangeColumnDefaultDefinition.new(column, default)
359-
schema_creation.accept(change_column_default_definition)
360-
361-
change_column_default_definition
358+
ChangeColumnDefaultDefinition.new(column, default)
362359
end
363360

364361
def change_column_null(table_name, column_name, null, default = nil) # :nodoc:
@@ -411,10 +408,7 @@ def build_change_column_definition(table_name, column_name, type, **options) # :
411408

412409
td = create_table_definition(table_name)
413410
cd = td.new_column_definition(column.name, type, **options)
414-
change_column_def = ChangeColumnDefinition.new(cd, column.name)
415-
schema_creation.accept(change_column_def)
416-
417-
change_column_def
411+
ChangeColumnDefinition.new(cd, column.name)
418412
end
419413

420414
def rename_column(table_name, column_name, new_column_name) # :nodoc:
@@ -426,17 +420,15 @@ def add_index(table_name, column_name, **options) # :nodoc:
426420
create_index = build_create_index_definition(table_name, column_name, **options)
427421
return unless create_index
428422

429-
execute(create_index.ddl)
423+
execute schema_creation.accept(create_index)
430424
end
431425

432426
def build_create_index_definition(table_name, column_name, **options) # :nodoc:
433427
index, algorithm, if_not_exists = add_index_options(table_name, column_name, **options)
434428

435429
return if if_not_exists && index_exists?(table_name, column_name, name: index.name)
436430

437-
create_index = CreateIndexDefinition.new(index, algorithm)
438-
schema_creation.accept(create_index)
439-
create_index
431+
CreateIndexDefinition.new(index, algorithm)
440432
end
441433

442434
def add_sql_comment!(sql, comment) # :nodoc:
@@ -782,7 +774,7 @@ def translate_exception(exception, message:, sql:, binds:)
782774

783775
def change_column_for_alter(table_name, column_name, type, **options)
784776
cd = build_change_column_definition(table_name, column_name, type, **options)
785-
cd.ddl
777+
schema_creation.accept(cd)
786778
end
787779

788780
def rename_column_for_alter(table_name, column_name, new_column_name)

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def visit_AddColumnDefinition(o)
2121

2222
def visit_ChangeColumnDefinition(o)
2323
change_column_sql = +"CHANGE #{quote_column_name(o.name)} #{accept(o.column)}"
24-
o.ddl = add_column_position!(change_column_sql, column_options(o.column))
24+
add_column_position!(change_column_sql, column_options(o.column))
2525
end
2626

2727
def visit_ChangeColumnDefaultDefinition(o)
@@ -31,13 +31,12 @@ def visit_ChangeColumnDefaultDefinition(o)
3131
else
3232
sql << quote_default_expression(o.default, o.column)
3333
end
34-
o.ddl = sql
3534
end
3635

3736
def visit_CreateIndexDefinition(o)
3837
sql = visit_IndexDefinition(o.index, true)
3938
sql << " #{o.algorithm}" if o.algorithm
40-
o.ddl = sql
39+
sql
4140
end
4241

4342
def visit_IndexDefinition(o, create = false)

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ def visit_AlterTable(o)
1010
sql << o.constraint_validations.map { |fk| visit_ValidateConstraint fk }.join(" ")
1111
sql << o.exclusion_constraint_adds.map { |con| visit_AddExclusionConstraint con }.join(" ")
1212
sql << o.exclusion_constraint_drops.map { |con| visit_DropExclusionConstraint con }.join(" ")
13-
o.ddl = sql
1413
end
1514

1615
def visit_AddForeignKey(o)
@@ -84,7 +83,7 @@ def visit_ChangeColumnDefinition(o)
8483
change_column_sql << ", ALTER COLUMN #{quoted_column_name} #{options[:null] ? 'DROP' : 'SET'} NOT NULL"
8584
end
8685

87-
o.ddl = change_column_sql
86+
change_column_sql
8887
end
8988

9089
def visit_ChangeColumnDefaultDefinition(o)
@@ -94,7 +93,6 @@ def visit_ChangeColumnDefaultDefinition(o)
9493
else
9594
sql << "SET DEFAULT #{quote_default_expression(o.default, o.column)}"
9695
end
97-
o.ddl = sql
9896
end
9997

10098
def add_column_options!(sql, options)

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

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -417,10 +417,7 @@ def change_column(table_name, column_name, type, **options) # :nodoc:
417417
def build_change_column_definition(table_name, column_name, type, **options) # :nodoc:
418418
td = create_table_definition(table_name)
419419
cd = td.new_column_definition(column_name, type, **options)
420-
change_column_def = ChangeColumnDefinition.new(cd, column_name)
421-
schema_creation.accept(change_column_def)
422-
423-
change_column_def
420+
ChangeColumnDefinition.new(cd, column_name)
424421
end
425422

426423
# Changes the default value of a table column.
@@ -433,10 +430,7 @@ def build_change_column_default_definition(table_name, column_name, default_or_c
433430
return unless column
434431

435432
default = extract_new_default_value(default_or_changes)
436-
change_column_default_definition = ChangeColumnDefaultDefinition.new(column, default)
437-
schema_creation.accept(change_column_default_definition)
438-
439-
change_column_default_definition
433+
ChangeColumnDefaultDefinition.new(column, default)
440434
end
441435

442436
def change_column_null(table_name, column_name, null, default = nil) # :nodoc:
@@ -473,7 +467,7 @@ def rename_column(table_name, column_name, new_column_name) # :nodoc:
473467

474468
def add_index(table_name, column_name, **options) # :nodoc:
475469
create_index = build_create_index_definition(table_name, column_name, **options)
476-
result = execute(create_index.ddl)
470+
result = execute schema_creation.accept(create_index)
477471

478472
index = create_index.index
479473
execute "COMMENT ON INDEX #{quote_column_name(index.name)} IS #{quote(index.comment)}" if index.comment
@@ -482,10 +476,7 @@ def add_index(table_name, column_name, **options) # :nodoc:
482476

483477
def build_create_index_definition(table_name, column_name, **options) # :nodoc:
484478
index, algorithm, if_not_exists = add_index_options(table_name, column_name, **options)
485-
486-
create_index = CreateIndexDefinition.new(index, algorithm, if_not_exists)
487-
schema_creation.accept(create_index)
488-
create_index
479+
CreateIndexDefinition.new(index, algorithm, if_not_exists)
489480
end
490481

491482
def remove_index(table_name, column_name = nil, **options) # :nodoc:
@@ -861,7 +852,7 @@ def add_column_for_alter(table_name, column_name, type, **options)
861852

862853
def change_column_for_alter(table_name, column_name, type, **options)
863854
change_col_def = build_change_column_definition(table_name, column_name, type, **options)
864-
sqls = [change_col_def.ddl]
855+
sqls = [schema_creation.accept(change_col_def)]
865856
sqls << Proc.new { change_column_comment(table_name, column_name, options[:comment]) } if options.key?(:comment)
866857
sqls
867858
end

activerecord/test/cases/migration/schema_definitions_test.rb

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,16 @@ def test_build_create_table_definition_with_block
1818

1919
id_column = td.columns.find { |col| col.name == "id" }
2020
assert_predicate id_column, :present?
21-
assert id_column.type
22-
assert id_column.sql_type
2321

2422
foo_column = td.columns.find { |col| col.name == "foo" }
2523
assert_predicate foo_column, :present?
26-
assert foo_column.type
27-
assert foo_column.sql_type
2824
end
2925

3026
def test_build_create_table_definition_without_block
3127
td = connection.build_create_table_definition(:test)
3228

3329
id_column = td.columns.find { |col| col.name == "id" }
3430
assert_predicate id_column, :present?
35-
assert id_column.type
36-
assert id_column.sql_type
3731
end
3832

3933
def test_build_create_join_table_definition_with_block
@@ -64,7 +58,6 @@ def test_build_create_index_definition
6458
end
6559
create_index = connection.build_create_index_definition(:test, :foo)
6660

67-
assert_match "CREATE INDEX", create_index.ddl
6861
assert_equal "index_test_on_foo", create_index.index.name
6962
ensure
7063
connection.drop_table(:test) if connection.table_exists?(:test)
@@ -91,12 +84,8 @@ def test_build_change_column_definition
9184
end
9285

9386
change_cd = connection.build_change_column_definition(:test, :foo, :integer)
94-
assert change_cd.ddl
95-
9687
change_col = change_cd.column
9788
assert_equal "foo", change_col.name.to_s
98-
assert change_col.type
99-
assert change_col.sql_type
10089
ensure
10190
connection.drop_table(:test) if connection.table_exists?(:test)
10291
end
@@ -107,13 +96,10 @@ def test_build_change_column_default_definition
10796
end
10897

10998
change_default_cd = connection.build_change_column_default_definition(:test, :foo, "new")
110-
assert_match "SET DEFAULT 'new'", change_default_cd.ddl
11199
assert_equal "new", change_default_cd.default
112100

113101
change_col = change_default_cd.column
114102
assert_equal "foo", change_col.name.to_s
115-
assert change_col.type
116-
assert change_col.sql_type
117103
ensure
118104
connection.drop_table(:test) if connection.table_exists?(:test)
119105
end

0 commit comments

Comments
 (0)