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
@@ -28,7 +28,7 @@ module ActiveRecord
|
|
28
28
|
# - "schema.name".table_name
|
29
29
|
# - "schema.name"."table.name"
|
30
30
|
def quote_table_name(name) # :nodoc:
|
31
|
-
@quoted_table_names[name] ||= Utils.extract_schema_qualified_name(name.to_s).quoted
|
31
|
+
@quoted_table_names[name] ||= Utils.extract_schema_qualified_name(name.to_s).quoted.freeze
|
32
32
|
end
|
33
33
|
|
34
34
|
# Quotes schema names for use in SQL queries.
|
@@ -42,7 +42,7 @@ module ActiveRecord
|
|
42
42
|
|
43
43
|
# Quotes column names for use in SQL queries.
|
44
44
|
def quote_column_name(name) # :nodoc:
|
45
|
-
@quoted_column_names[name] ||= PG::Connection.quote_ident(super)
|
45
|
+
@quoted_column_names[name] ||= PG::Connection.quote_ident(super).freeze
|
46
46
|
end
|
47
47
|
|
48
48
|
# Quote date/time values for use in SQL input.
|
@@ -55,10 +55,14 @@ module ActiveRecord
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
def quoted_binary(value) # :nodoc:
|
59
|
+
"'#{escape_bytea(value.to_s)}'"
|
60
|
+
end
|
61
|
+
|
58
62
|
def quote_default_expression(value, column) # :nodoc:
|
59
63
|
if value.is_a?(Proc)
|
60
64
|
value.call
|
61
|
-
elsif column.type == :uuid && value
|
65
|
+
elsif column.type == :uuid && value.is_a?(String) && /\(\)/.match?(value)
|
62
66
|
value # Does not quote function default values for UUID columns
|
63
67
|
elsif column.respond_to?(:array?)
|
64
68
|
value = type_cast_from_column(column, value)
|
@@ -73,47 +77,48 @@ module ActiveRecord
|
|
73
77
|
end
|
74
78
|
|
75
79
|
private
|
80
|
+
def lookup_cast_type(sql_type)
|
81
|
+
super(query_value("SELECT #{quote(sql_type)}::regtype::oid", "SCHEMA").to_i)
|
82
|
+
end
|
76
83
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
84
|
+
def _quote(value)
|
85
|
+
case value
|
86
|
+
when OID::Xml::Data
|
87
|
+
"xml '#{quote_string(value.to_s)}'"
|
88
|
+
when OID::Bit::Data
|
89
|
+
if value.binary?
|
90
|
+
"B'#{value}'"
|
91
|
+
elsif value.hex?
|
92
|
+
"X'#{value}'"
|
93
|
+
end
|
94
|
+
when Float
|
95
|
+
if value.infinite? || value.nan?
|
96
|
+
"'#{value}'"
|
97
|
+
else
|
98
|
+
super
|
99
|
+
end
|
100
|
+
when OID::Array::Data
|
101
|
+
_quote(encode_array(value))
|
92
102
|
else
|
93
103
|
super
|
94
104
|
end
|
95
|
-
when OID::Array::Data
|
96
|
-
_quote(encode_array(value))
|
97
|
-
else
|
98
|
-
super
|
99
105
|
end
|
100
|
-
end
|
101
106
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
107
|
+
def _type_cast(value)
|
108
|
+
case value
|
109
|
+
when Type::Binary::Data
|
110
|
+
# Return a bind param hash with format as binary.
|
111
|
+
# See https://deveiate.org/code/pg/PG/Connection.html#method-i-exec_prepared-doc
|
112
|
+
# for more information
|
113
|
+
{ value: value.to_s, format: 1 }
|
114
|
+
when OID::Xml::Data, OID::Bit::Data
|
115
|
+
value.to_s
|
111
116
|
when OID::Array::Data
|
112
117
|
encode_array(value)
|
113
|
-
|
114
|
-
|
118
|
+
else
|
119
|
+
super
|
120
|
+
end
|
115
121
|
end
|
116
|
-
end
|
117
122
|
|
118
123
|
def encode_array(array_data)
|
119
124
|
encoder = array_data.encoder
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
module PostgreSQL
|
4
|
+
class SchemaCreation < AbstractAdapter::SchemaCreation # :nodoc:
|
5
|
+
private
|
6
|
+
def add_column_options!(sql, options)
|
7
|
+
if options[:collation]
|
8
|
+
sql << " COLLATE \"#{options[:collation]}\""
|
9
|
+
end
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -11,11 +11,22 @@ module ActiveRecord
|
|
11
11
|
# t.timestamps
|
12
12
|
# end
|
13
13
|
#
|
14
|
-
# By default, this will use the +
|
15
|
-
# +
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
14
|
+
# By default, this will use the +gen_random_uuid()+ function from the
|
15
|
+
# +pgcrypto+ extension. As that extension is only available in
|
16
|
+
# PostgreSQL 9.4+, for earlier versions an explicit default can be set
|
17
|
+
# to use +uuid_generate_v4()+ from the +uuid-ossp+ extension instead:
|
18
|
+
#
|
19
|
+
# create_table :stuffs, id: false do |t|
|
20
|
+
# t.primary_key :id, :uuid, default: "uuid_generate_v4()"
|
21
|
+
# t.uuid :foo_id
|
22
|
+
# t.timestamps
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# To enable the appropriate extension, which is a requirement, use
|
26
|
+
# the +enable_extension+ method in your migrations.
|
27
|
+
#
|
28
|
+
# To use a UUID primary key without any of the extensions, set the
|
29
|
+
# +:default+ option to +nil+:
|
19
30
|
#
|
20
31
|
# create_table :stuffs, id: false do |t|
|
21
32
|
# t.primary_key :id, :uuid, default: nil
|
@@ -23,15 +34,25 @@ module ActiveRecord
|
|
23
34
|
# t.timestamps
|
24
35
|
# end
|
25
36
|
#
|
26
|
-
# You may also pass a
|
27
|
-
#
|
37
|
+
# You may also pass a custom stored procedure that returns a UUID or use a
|
38
|
+
# different UUID generation function from another library.
|
28
39
|
#
|
29
40
|
# Note that setting the UUID primary key default value to +nil+ will
|
30
41
|
# require you to assure that you always provide a UUID value before saving
|
31
42
|
# a record (as primary keys cannot be +nil+). This might be done via the
|
32
43
|
# +SecureRandom.uuid+ method and a +before_save+ callback, for instance.
|
33
44
|
def primary_key(name, type = :primary_key, **options)
|
34
|
-
options[:
|
45
|
+
options[:auto_increment] = true if [:integer, :bigint].include?(type) && !options.key?(:default)
|
46
|
+
if type == :uuid
|
47
|
+
options[:default] = options.fetch(:default, "gen_random_uuid()")
|
48
|
+
elsif options.delete(:auto_increment) == true && %i(integer bigint).include?(type)
|
49
|
+
type = if type == :bigint || options[:limit] == 8
|
50
|
+
:bigserial
|
51
|
+
else
|
52
|
+
:serial
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
35
56
|
super
|
36
57
|
end
|
37
58
|
|
@@ -67,6 +88,10 @@ module ActiveRecord
|
|
67
88
|
args.each { |name| column(name, :inet, options) }
|
68
89
|
end
|
69
90
|
|
91
|
+
def interval(*args, **options)
|
92
|
+
args.each { |name| column(name, :interval, options) }
|
93
|
+
end
|
94
|
+
|
70
95
|
def int4range(*args, **options)
|
71
96
|
args.each { |name| column(name, :int4range, options) }
|
72
97
|
end
|
@@ -99,6 +124,10 @@ module ActiveRecord
|
|
99
124
|
args.each { |name| column(name, :numrange, options) }
|
100
125
|
end
|
101
126
|
|
127
|
+
def oid(*args, **options)
|
128
|
+
args.each { |name| column(name, :oid, options) }
|
129
|
+
end
|
130
|
+
|
102
131
|
def point(*args, **options)
|
103
132
|
args.each { |name| column(name, :point, options) }
|
104
133
|
end
|
@@ -152,24 +181,8 @@ module ActiveRecord
|
|
152
181
|
end
|
153
182
|
end
|
154
183
|
|
155
|
-
class ColumnDefinition < ActiveRecord::ConnectionAdapters::ColumnDefinition
|
156
|
-
attr_accessor :array
|
157
|
-
end
|
158
|
-
|
159
184
|
class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition
|
160
185
|
include ColumnMethods
|
161
|
-
|
162
|
-
def new_column_definition(name, type, options) # :nodoc:
|
163
|
-
column = super
|
164
|
-
column.array = options[:array]
|
165
|
-
column
|
166
|
-
end
|
167
|
-
|
168
|
-
private
|
169
|
-
|
170
|
-
def create_column_definition(name, type)
|
171
|
-
PostgreSQL::ColumnDefinition.new name, type
|
172
|
-
end
|
173
186
|
end
|
174
187
|
|
175
188
|
class Table < ActiveRecord::ConnectionAdapters::Table
|
@@ -1,19 +1,11 @@
|
|
1
1
|
module ActiveRecord
|
2
2
|
module ConnectionAdapters
|
3
3
|
module PostgreSQL
|
4
|
-
module ColumnDumper
|
5
|
-
def column_spec_for_primary_key(column)
|
6
|
-
spec = super
|
7
|
-
if schema_type(column) == :uuid
|
8
|
-
spec[:default] ||= 'nil'
|
9
|
-
end
|
10
|
-
spec
|
11
|
-
end
|
12
|
-
|
4
|
+
module ColumnDumper # :nodoc:
|
13
5
|
# Adds +:array+ option to the default set
|
14
6
|
def prepare_column_options(column)
|
15
7
|
spec = super
|
16
|
-
spec[:array] =
|
8
|
+
spec[:array] = "true" if column.array?
|
17
9
|
spec
|
18
10
|
end
|
19
11
|
|
@@ -24,23 +16,27 @@ module ActiveRecord
|
|
24
16
|
|
25
17
|
private
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
def default_primary_key?(column)
|
20
|
+
schema_type(column) == :bigserial
|
21
|
+
end
|
22
|
+
|
23
|
+
def explicit_primary_key_default?(column)
|
24
|
+
column.type == :uuid || (column.type == :integer && !column.serial?)
|
25
|
+
end
|
30
26
|
|
31
|
-
|
32
|
-
|
27
|
+
def schema_type(column)
|
28
|
+
return super unless column.serial?
|
33
29
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
if column.bigint?
|
31
|
+
:bigserial
|
32
|
+
else
|
33
|
+
:serial
|
34
|
+
end
|
38
35
|
end
|
39
|
-
end
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
def schema_expression(column)
|
38
|
+
super unless column.serial?
|
39
|
+
end
|
44
40
|
end
|
45
41
|
end
|
46
42
|
end
|