activerecord 5.0.7 → 5.1.7
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CHANGELOG.md +657 -2080
- data/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/examples/performance.rb +28 -28
- data/examples/simple.rb +3 -3
- data/lib/active_record/aggregations.rb +244 -244
- data/lib/active_record/association_relation.rb +5 -5
- data/lib/active_record/associations/alias_tracker.rb +10 -11
- data/lib/active_record/associations/association.rb +23 -5
- data/lib/active_record/associations/association_scope.rb +95 -81
- data/lib/active_record/associations/belongs_to_association.rb +7 -4
- data/lib/active_record/associations/builder/belongs_to.rb +30 -16
- data/lib/active_record/associations/builder/collection_association.rb +1 -2
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +27 -27
- data/lib/active_record/associations/collection_association.rb +36 -205
- data/lib/active_record/associations/collection_proxy.rb +132 -63
- data/lib/active_record/associations/has_many_association.rb +10 -19
- data/lib/active_record/associations/has_many_through_association.rb +12 -4
- data/lib/active_record/associations/has_one_association.rb +24 -28
- data/lib/active_record/associations/has_one_through_association.rb +5 -1
- data/lib/active_record/associations/join_dependency/join_association.rb +4 -28
- data/lib/active_record/associations/join_dependency/join_base.rb +1 -1
- data/lib/active_record/associations/join_dependency/join_part.rb +1 -1
- data/lib/active_record/associations/join_dependency.rb +121 -118
- data/lib/active_record/associations/preloader/association.rb +64 -64
- data/lib/active_record/associations/preloader/belongs_to.rb +0 -2
- data/lib/active_record/associations/preloader/collection_association.rb +6 -6
- data/lib/active_record/associations/preloader/has_many.rb +0 -2
- data/lib/active_record/associations/preloader/singular_association.rb +6 -8
- data/lib/active_record/associations/preloader/through_association.rb +41 -41
- data/lib/active_record/associations/preloader.rb +94 -94
- data/lib/active_record/associations/singular_association.rb +8 -25
- data/lib/active_record/associations/through_association.rb +2 -5
- data/lib/active_record/associations.rb +1591 -1562
- data/lib/active_record/attribute/user_provided_default.rb +4 -2
- data/lib/active_record/attribute.rb +98 -71
- data/lib/active_record/attribute_assignment.rb +61 -61
- data/lib/active_record/attribute_decorators.rb +35 -13
- data/lib/active_record/attribute_methods/before_type_cast.rb +7 -7
- data/lib/active_record/attribute_methods/dirty.rb +229 -46
- data/lib/active_record/attribute_methods/primary_key.rb +74 -73
- data/lib/active_record/attribute_methods/read.rb +39 -35
- data/lib/active_record/attribute_methods/serialization.rb +7 -7
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +35 -58
- data/lib/active_record/attribute_methods/write.rb +30 -33
- data/lib/active_record/attribute_methods.rb +56 -65
- data/lib/active_record/attribute_mutation_tracker.rb +63 -11
- data/lib/active_record/attribute_set/builder.rb +27 -33
- data/lib/active_record/attribute_set/yaml_encoder.rb +41 -0
- data/lib/active_record/attribute_set.rb +9 -6
- data/lib/active_record/attributes.rb +22 -22
- data/lib/active_record/autosave_association.rb +18 -13
- data/lib/active_record/base.rb +24 -22
- data/lib/active_record/callbacks.rb +56 -14
- data/lib/active_record/coders/yaml_column.rb +9 -11
- data/lib/active_record/collection_cache_key.rb +3 -4
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +330 -284
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +1 -3
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +39 -37
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +32 -27
- data/lib/active_record/connection_adapters/abstract/quoting.rb +62 -51
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +10 -20
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +74 -79
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +53 -41
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +120 -100
- data/lib/active_record/connection_adapters/abstract/transaction.rb +49 -43
- data/lib/active_record/connection_adapters/abstract_adapter.rb +165 -135
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +404 -424
- data/lib/active_record/connection_adapters/column.rb +26 -4
- data/lib/active_record/connection_adapters/connection_specification.rb +128 -118
- data/lib/active_record/connection_adapters/mysql/column.rb +6 -31
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +36 -49
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +22 -22
- data/lib/active_record/connection_adapters/mysql/quoting.rb +6 -12
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +49 -45
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +16 -19
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +54 -28
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +43 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +7 -6
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +23 -27
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +32 -53
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +3 -3
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +19 -9
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +5 -3
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +3 -3
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +16 -16
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +0 -10
- data/lib/active_record/connection_adapters/postgresql/oid/{rails_5_1_point.rb → legacy_point.rb} +9 -16
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +13 -0
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +28 -8
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +32 -30
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +2 -1
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +51 -51
- data/lib/active_record/connection_adapters/postgresql/oid.rb +22 -21
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +40 -35
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +37 -24
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +19 -23
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +182 -222
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +6 -4
- data/lib/active_record/connection_adapters/postgresql/utils.rb +7 -5
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +198 -167
- data/lib/active_record/connection_adapters/schema_cache.rb +16 -7
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +3 -3
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +1 -1
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +16 -19
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +1 -8
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +28 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +17 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +32 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +184 -167
- data/lib/active_record/connection_adapters/statement_pool.rb +7 -7
- data/lib/active_record/connection_handling.rb +14 -26
- data/lib/active_record/core.rb +109 -93
- data/lib/active_record/counter_cache.rb +60 -13
- data/lib/active_record/define_callbacks.rb +20 -0
- data/lib/active_record/dynamic_matchers.rb +80 -79
- data/lib/active_record/enum.rb +8 -6
- data/lib/active_record/errors.rb +64 -15
- data/lib/active_record/explain.rb +1 -2
- data/lib/active_record/explain_registry.rb +1 -1
- data/lib/active_record/explain_subscriber.rb +7 -4
- data/lib/active_record/fixture_set/file.rb +11 -8
- data/lib/active_record/fixtures.rb +66 -53
- data/lib/active_record/gem_version.rb +1 -1
- data/lib/active_record/inheritance.rb +93 -79
- data/lib/active_record/integration.rb +7 -7
- data/lib/active_record/internal_metadata.rb +3 -16
- data/lib/active_record/legacy_yaml_adapter.rb +1 -1
- data/lib/active_record/locking/optimistic.rb +69 -74
- data/lib/active_record/locking/pessimistic.rb +10 -1
- data/lib/active_record/log_subscriber.rb +23 -28
- data/lib/active_record/migration/command_recorder.rb +94 -94
- data/lib/active_record/migration/compatibility.rb +100 -47
- data/lib/active_record/migration/join_table.rb +6 -6
- data/lib/active_record/migration.rb +153 -155
- data/lib/active_record/model_schema.rb +94 -107
- data/lib/active_record/nested_attributes.rb +200 -199
- data/lib/active_record/null_relation.rb +11 -34
- data/lib/active_record/persistence.rb +65 -50
- data/lib/active_record/query_cache.rb +2 -6
- data/lib/active_record/querying.rb +3 -4
- data/lib/active_record/railtie.rb +16 -17
- data/lib/active_record/railties/controller_runtime.rb +6 -2
- data/lib/active_record/railties/databases.rake +105 -133
- data/lib/active_record/railties/jdbcmysql_error.rb +1 -1
- data/lib/active_record/readonly_attributes.rb +2 -2
- data/lib/active_record/reflection.rb +154 -108
- data/lib/active_record/relation/batches/batch_enumerator.rb +1 -1
- data/lib/active_record/relation/batches.rb +80 -51
- data/lib/active_record/relation/calculations.rb +169 -162
- data/lib/active_record/relation/delegation.rb +32 -31
- data/lib/active_record/relation/finder_methods.rb +197 -231
- data/lib/active_record/relation/merger.rb +58 -62
- data/lib/active_record/relation/predicate_builder/array_handler.rb +7 -5
- data/lib/active_record/relation/predicate_builder/association_query_handler.rb +23 -23
- data/lib/active_record/relation/predicate_builder/base_handler.rb +3 -1
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +0 -8
- data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +12 -10
- data/lib/active_record/relation/predicate_builder/range_handler.rb +0 -8
- data/lib/active_record/relation/predicate_builder.rb +92 -89
- data/lib/active_record/relation/query_attribute.rb +1 -1
- data/lib/active_record/relation/query_methods.rb +255 -293
- data/lib/active_record/relation/record_fetch_warning.rb +3 -3
- data/lib/active_record/relation/spawn_methods.rb +4 -5
- data/lib/active_record/relation/where_clause.rb +80 -65
- data/lib/active_record/relation/where_clause_factory.rb +47 -8
- data/lib/active_record/relation.rb +93 -119
- data/lib/active_record/result.rb +41 -32
- data/lib/active_record/runtime_registry.rb +3 -3
- data/lib/active_record/sanitization.rb +176 -192
- data/lib/active_record/schema.rb +3 -3
- data/lib/active_record/schema_dumper.rb +15 -38
- data/lib/active_record/schema_migration.rb +8 -4
- data/lib/active_record/scoping/default.rb +90 -90
- data/lib/active_record/scoping/named.rb +11 -11
- data/lib/active_record/scoping.rb +6 -6
- data/lib/active_record/secure_token.rb +2 -2
- data/lib/active_record/statement_cache.rb +13 -15
- data/lib/active_record/store.rb +31 -32
- data/lib/active_record/suppressor.rb +2 -1
- data/lib/active_record/table_metadata.rb +9 -5
- data/lib/active_record/tasks/database_tasks.rb +65 -55
- data/lib/active_record/tasks/mysql_database_tasks.rb +76 -73
- data/lib/active_record/tasks/postgresql_database_tasks.rb +72 -47
- data/lib/active_record/tasks/sqlite_database_tasks.rb +18 -16
- data/lib/active_record/timestamp.rb +46 -25
- data/lib/active_record/touch_later.rb +1 -2
- data/lib/active_record/transactions.rb +97 -109
- data/lib/active_record/type/adapter_specific_registry.rb +46 -42
- data/lib/active_record/type/decimal_without_scale.rb +13 -0
- data/lib/active_record/type/hash_lookup_type_map.rb +3 -3
- data/lib/active_record/type/internal/abstract_json.rb +4 -0
- data/lib/active_record/type/serialized.rb +14 -8
- data/lib/active_record/type/text.rb +9 -0
- data/lib/active_record/type/time.rb +0 -1
- data/lib/active_record/type/type_map.rb +11 -15
- data/lib/active_record/type/unsigned_integer.rb +15 -0
- data/lib/active_record/type.rb +17 -13
- data/lib/active_record/type_caster/connection.rb +8 -6
- data/lib/active_record/type_caster/map.rb +3 -1
- data/lib/active_record/type_caster.rb +2 -2
- data/lib/active_record/validations/associated.rb +1 -1
- data/lib/active_record/validations/presence.rb +2 -2
- data/lib/active_record/validations/uniqueness.rb +8 -39
- data/lib/active_record/validations.rb +4 -4
- data/lib/active_record/version.rb +1 -1
- data/lib/active_record.rb +20 -20
- data/lib/rails/generators/active_record/migration/migration_generator.rb +37 -34
- data/lib/rails/generators/active_record/migration.rb +1 -1
- data/lib/rails/generators/active_record/model/model_generator.rb +9 -9
- data/lib/rails/generators/active_record.rb +4 -4
- metadata +24 -13
- data/lib/active_record/relation/predicate_builder/class_handler.rb +0 -27
@@ -3,30 +3,37 @@ module ActiveRecord
|
|
3
3
|
# Abstract representation of an index definition on a table. Instances of
|
4
4
|
# this type are typically created and returned by methods in database
|
5
5
|
# adapters. e.g. ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#indexes
|
6
|
-
|
7
|
-
end
|
6
|
+
IndexDefinition = Struct.new(:table, :name, :unique, :columns, :lengths, :orders, :where, :type, :using, :comment) #:nodoc:
|
8
7
|
|
9
8
|
# Abstract representation of a column definition. Instances of this type
|
10
9
|
# are typically created by methods in TableDefinition, and added to the
|
11
10
|
# +columns+ attribute of said TableDefinition object, in order to be used
|
12
11
|
# for generating a number of table creation or table changing SQL statements.
|
13
|
-
|
14
|
-
|
12
|
+
ColumnDefinition = Struct.new(:name, :type, :options, :sql_type) do # :nodoc:
|
15
13
|
def primary_key?
|
16
|
-
|
14
|
+
options[:primary_key]
|
17
15
|
end
|
18
|
-
end
|
19
16
|
|
20
|
-
|
21
|
-
|
17
|
+
[:limit, :precision, :scale, :default, :null, :collation, :comment].each do |option_name|
|
18
|
+
module_eval <<-CODE, __FILE__, __LINE__ + 1
|
19
|
+
def #{option_name}
|
20
|
+
options[:#{option_name}]
|
21
|
+
end
|
22
22
|
|
23
|
-
|
23
|
+
def #{option_name}=(value)
|
24
|
+
options[:#{option_name}] = value
|
25
|
+
end
|
26
|
+
CODE
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
|
-
|
27
|
-
end
|
30
|
+
AddColumnDefinition = Struct.new(:column) # :nodoc:
|
28
31
|
|
29
|
-
|
32
|
+
ChangeColumnDefinition = Struct.new(:column, :name) #:nodoc:
|
33
|
+
|
34
|
+
PrimaryKeyDefinition = Struct.new(:name) # :nodoc:
|
35
|
+
|
36
|
+
ForeignKeyDefinition = Struct.new(:from_table, :to_table, :options) do #:nodoc:
|
30
37
|
def name
|
31
38
|
options[:name]
|
32
39
|
end
|
@@ -61,9 +68,9 @@ module ActiveRecord
|
|
61
68
|
end
|
62
69
|
|
63
70
|
private
|
64
|
-
|
65
|
-
|
66
|
-
|
71
|
+
def default_primary_key
|
72
|
+
"id"
|
73
|
+
end
|
67
74
|
end
|
68
75
|
|
69
76
|
class ReferenceDefinition # :nodoc:
|
@@ -72,7 +79,7 @@ module ActiveRecord
|
|
72
79
|
polymorphic: false,
|
73
80
|
index: true,
|
74
81
|
foreign_key: false,
|
75
|
-
type: :
|
82
|
+
type: :bigint,
|
76
83
|
**options
|
77
84
|
)
|
78
85
|
@name = name
|
@@ -101,49 +108,51 @@ module ActiveRecord
|
|
101
108
|
end
|
102
109
|
end
|
103
110
|
|
111
|
+
# TODO Change this to private once we've dropped Ruby 2.2 support.
|
112
|
+
# Workaround for Ruby 2.2 "private attribute?" warning.
|
104
113
|
protected
|
105
114
|
|
106
|
-
|
115
|
+
attr_reader :name, :polymorphic, :index, :foreign_key, :type, :options
|
107
116
|
|
108
117
|
private
|
109
118
|
|
110
|
-
|
111
|
-
|
112
|
-
|
119
|
+
def as_options(value)
|
120
|
+
value.is_a?(Hash) ? value : {}
|
121
|
+
end
|
113
122
|
|
114
|
-
|
115
|
-
|
116
|
-
|
123
|
+
def polymorphic_options
|
124
|
+
as_options(polymorphic).merge(options.slice(:null, :first, :after))
|
125
|
+
end
|
117
126
|
|
118
|
-
|
119
|
-
|
120
|
-
|
127
|
+
def index_options
|
128
|
+
as_options(index)
|
129
|
+
end
|
121
130
|
|
122
|
-
|
123
|
-
|
124
|
-
|
131
|
+
def foreign_key_options
|
132
|
+
as_options(foreign_key).merge(column: column_name)
|
133
|
+
end
|
125
134
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
135
|
+
def columns
|
136
|
+
result = [[column_name, type, options]]
|
137
|
+
if polymorphic
|
138
|
+
result.unshift(["#{name}_type", :string, polymorphic_options])
|
139
|
+
end
|
140
|
+
result
|
130
141
|
end
|
131
|
-
result
|
132
|
-
end
|
133
142
|
|
134
|
-
|
135
|
-
|
136
|
-
|
143
|
+
def column_name
|
144
|
+
"#{name}_id"
|
145
|
+
end
|
137
146
|
|
138
|
-
|
139
|
-
|
140
|
-
|
147
|
+
def column_names
|
148
|
+
columns.map(&:first)
|
149
|
+
end
|
141
150
|
|
142
|
-
|
143
|
-
|
144
|
-
|
151
|
+
def foreign_table_name
|
152
|
+
foreign_key_options.fetch(:to_table) do
|
153
|
+
Base.pluralize_table_names ? name.to_s.pluralize : name
|
154
|
+
end
|
145
155
|
end
|
146
|
-
end
|
147
156
|
end
|
148
157
|
|
149
158
|
module ColumnMethods
|
@@ -172,6 +181,7 @@ module ActiveRecord
|
|
172
181
|
:text,
|
173
182
|
:time,
|
174
183
|
:timestamp,
|
184
|
+
:virtual,
|
175
185
|
].each do |column_type|
|
176
186
|
module_eval <<-CODE, __FILE__, __LINE__ + 1
|
177
187
|
def #{column_type}(*args, **options)
|
@@ -338,9 +348,7 @@ module ActiveRecord
|
|
338
348
|
# <tt>:updated_at</tt> to the table. See {connection.add_timestamps}[rdoc-ref:SchemaStatements#add_timestamps]
|
339
349
|
#
|
340
350
|
# t.timestamps null: false
|
341
|
-
def timestamps(
|
342
|
-
options = args.extract_options!
|
343
|
-
|
351
|
+
def timestamps(**options)
|
344
352
|
options[:null] = false if options[:null].nil?
|
345
353
|
|
346
354
|
column(:created_at, :datetime, options)
|
@@ -354,38 +362,27 @@ module ActiveRecord
|
|
354
362
|
#
|
355
363
|
# See {connection.add_reference}[rdoc-ref:SchemaStatements#add_reference] for details of the options you can use.
|
356
364
|
def references(*args, **options)
|
357
|
-
args.each do |
|
358
|
-
ReferenceDefinition.new(
|
365
|
+
args.each do |ref_name|
|
366
|
+
ReferenceDefinition.new(ref_name, options).add_to(self)
|
359
367
|
end
|
360
368
|
end
|
361
369
|
alias :belongs_to :references
|
362
370
|
|
363
|
-
def new_column_definition(name, type, options) # :nodoc:
|
371
|
+
def new_column_definition(name, type, **options) # :nodoc:
|
364
372
|
type = aliased_types(type.to_s, type)
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
column.precision = options[:precision]
|
369
|
-
column.scale = options[:scale]
|
370
|
-
column.default = options[:default]
|
371
|
-
column.null = options[:null]
|
372
|
-
column.first = options[:first]
|
373
|
-
column.after = options[:after]
|
374
|
-
column.auto_increment = options[:auto_increment]
|
375
|
-
column.primary_key = type == :primary_key || options[:primary_key]
|
376
|
-
column.collation = options[:collation]
|
377
|
-
column.comment = options[:comment]
|
378
|
-
column
|
373
|
+
options[:primary_key] ||= type == :primary_key
|
374
|
+
options[:null] = false if options[:primary_key]
|
375
|
+
create_column_definition(name, type, options)
|
379
376
|
end
|
380
377
|
|
381
378
|
private
|
382
|
-
|
383
|
-
|
384
|
-
|
379
|
+
def create_column_definition(name, type, options)
|
380
|
+
ColumnDefinition.new(name, type, options)
|
381
|
+
end
|
385
382
|
|
386
|
-
|
387
|
-
|
388
|
-
|
383
|
+
def aliased_types(name, fallback)
|
384
|
+
"timestamp" == name ? :datetime : fallback
|
385
|
+
end
|
389
386
|
end
|
390
387
|
|
391
388
|
class AlterTable # :nodoc:
|
@@ -474,7 +471,7 @@ module ActiveRecord
|
|
474
471
|
|
475
472
|
# Checks to see if a column exists.
|
476
473
|
#
|
477
|
-
#
|
474
|
+
# t.string(:name) unless t.column_exists?(:name, :string)
|
478
475
|
#
|
479
476
|
# See {connection.column_exists?}[rdoc-ref:SchemaStatements#column_exists?]
|
480
477
|
def column_exists?(column_name, type = nil, options = {})
|
@@ -495,9 +492,9 @@ module ActiveRecord
|
|
495
492
|
|
496
493
|
# Checks to see if an index exists.
|
497
494
|
#
|
498
|
-
#
|
499
|
-
#
|
500
|
-
#
|
495
|
+
# unless t.index_exists?(:branch_id)
|
496
|
+
# t.index(:branch_id)
|
497
|
+
# end
|
501
498
|
#
|
502
499
|
# See {connection.index_exists?}[rdoc-ref:SchemaStatements#index_exists?]
|
503
500
|
def index_exists?(column_name, options = {})
|
@@ -588,8 +585,7 @@ module ActiveRecord
|
|
588
585
|
# t.belongs_to(:supplier, foreign_key: true)
|
589
586
|
#
|
590
587
|
# See {connection.add_reference}[rdoc-ref:SchemaStatements#add_reference] for details of the options you can use.
|
591
|
-
def references(*args)
|
592
|
-
options = args.extract_options!
|
588
|
+
def references(*args, **options)
|
593
589
|
args.each do |ref_name|
|
594
590
|
@base.add_reference(name, ref_name, options)
|
595
591
|
end
|
@@ -602,8 +598,7 @@ module ActiveRecord
|
|
602
598
|
# t.remove_belongs_to(:supplier, polymorphic: true)
|
603
599
|
#
|
604
600
|
# See {connection.remove_reference}[rdoc-ref:SchemaStatements#remove_reference]
|
605
|
-
def remove_references(*args)
|
606
|
-
options = args.extract_options!
|
601
|
+
def remove_references(*args, **options)
|
607
602
|
args.each do |ref_name|
|
608
603
|
@base.remove_reference(name, ref_name, options)
|
609
604
|
end
|
@@ -7,16 +7,15 @@ module ActiveRecord
|
|
7
7
|
# Adapter level by over-writing this code inside the database specific adapters
|
8
8
|
module ColumnDumper
|
9
9
|
def column_spec(column)
|
10
|
-
|
11
|
-
spec[:name] = column.name.inspect
|
12
|
-
spec[:type] = schema_type(column).to_s
|
13
|
-
spec
|
10
|
+
[schema_type_with_virtual(column), prepare_column_options(column)]
|
14
11
|
end
|
15
12
|
|
16
13
|
def column_spec_for_primary_key(column)
|
17
14
|
return {} if default_primary_key?(column)
|
18
15
|
spec = { id: schema_type(column).inspect }
|
19
16
|
spec.merge!(prepare_column_options(column).except!(:null))
|
17
|
+
spec[:default] ||= "nil" if explicit_primary_key_default?(column)
|
18
|
+
spec
|
20
19
|
end
|
21
20
|
|
22
21
|
# This can be overridden on an Adapter level basis to support other
|
@@ -38,9 +37,9 @@ module ActiveRecord
|
|
38
37
|
end
|
39
38
|
|
40
39
|
default = schema_default(column) if column.has_default?
|
41
|
-
spec[:default]
|
40
|
+
spec[:default] = default unless default.nil?
|
42
41
|
|
43
|
-
spec[:null] =
|
42
|
+
spec[:null] = "false" unless column.null
|
44
43
|
|
45
44
|
if collation = schema_collation(column)
|
46
45
|
spec[:collation] = collation
|
@@ -52,54 +51,67 @@ module ActiveRecord
|
|
52
51
|
end
|
53
52
|
|
54
53
|
# Lists the valid migration options
|
55
|
-
def migration_keys
|
56
|
-
|
54
|
+
def migration_keys # :nodoc:
|
55
|
+
column_options_keys
|
57
56
|
end
|
57
|
+
deprecate :migration_keys
|
58
58
|
|
59
59
|
private
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
def default_primary_key?(column)
|
62
|
+
schema_type(column) == :bigint
|
63
|
+
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
:bigint
|
68
|
-
else
|
69
|
-
column.type
|
65
|
+
def explicit_primary_key_default?(column)
|
66
|
+
false
|
70
67
|
end
|
71
|
-
end
|
72
68
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
69
|
+
def schema_type_with_virtual(column)
|
70
|
+
if supports_virtual_columns? && column.virtual?
|
71
|
+
:virtual
|
72
|
+
else
|
73
|
+
schema_type(column)
|
74
|
+
end
|
75
|
+
end
|
77
76
|
|
78
|
-
|
79
|
-
|
80
|
-
|
77
|
+
def schema_type(column)
|
78
|
+
if column.bigint?
|
79
|
+
:bigint
|
80
|
+
else
|
81
|
+
column.type
|
82
|
+
end
|
83
|
+
end
|
81
84
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
+
def schema_limit(column)
|
86
|
+
limit = column.limit unless column.bigint?
|
87
|
+
limit.inspect if limit && limit != native_database_types[column.type][:limit]
|
88
|
+
end
|
85
89
|
|
86
|
-
|
87
|
-
|
88
|
-
default = type.deserialize(column.default)
|
89
|
-
if default.nil?
|
90
|
-
schema_expression(column)
|
91
|
-
else
|
92
|
-
type.type_cast_for_schema(default)
|
90
|
+
def schema_precision(column)
|
91
|
+
column.precision.inspect if column.precision
|
93
92
|
end
|
94
|
-
end
|
95
93
|
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
def schema_scale(column)
|
95
|
+
column.scale.inspect if column.scale
|
96
|
+
end
|
99
97
|
|
100
|
-
|
101
|
-
|
102
|
-
|
98
|
+
def schema_default(column)
|
99
|
+
type = lookup_cast_type_from_column(column)
|
100
|
+
default = type.deserialize(column.default)
|
101
|
+
if default.nil?
|
102
|
+
schema_expression(column)
|
103
|
+
else
|
104
|
+
type.type_cast_for_schema(default)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def schema_expression(column)
|
109
|
+
"-> { #{column.default_function.inspect} }" if column.default_function
|
110
|
+
end
|
111
|
+
|
112
|
+
def schema_collation(column)
|
113
|
+
column.collation.inspect if column.collation
|
114
|
+
end
|
103
115
|
end
|
104
116
|
end
|
105
117
|
end
|