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.

Files changed (219) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +657 -2080
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +1 -1
  5. data/examples/performance.rb +28 -28
  6. data/examples/simple.rb +3 -3
  7. data/lib/active_record/aggregations.rb +244 -244
  8. data/lib/active_record/association_relation.rb +5 -5
  9. data/lib/active_record/associations/alias_tracker.rb +10 -11
  10. data/lib/active_record/associations/association.rb +23 -5
  11. data/lib/active_record/associations/association_scope.rb +95 -81
  12. data/lib/active_record/associations/belongs_to_association.rb +7 -4
  13. data/lib/active_record/associations/builder/belongs_to.rb +30 -16
  14. data/lib/active_record/associations/builder/collection_association.rb +1 -2
  15. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +27 -27
  16. data/lib/active_record/associations/collection_association.rb +36 -205
  17. data/lib/active_record/associations/collection_proxy.rb +132 -63
  18. data/lib/active_record/associations/has_many_association.rb +10 -19
  19. data/lib/active_record/associations/has_many_through_association.rb +12 -4
  20. data/lib/active_record/associations/has_one_association.rb +24 -28
  21. data/lib/active_record/associations/has_one_through_association.rb +5 -1
  22. data/lib/active_record/associations/join_dependency/join_association.rb +4 -28
  23. data/lib/active_record/associations/join_dependency/join_base.rb +1 -1
  24. data/lib/active_record/associations/join_dependency/join_part.rb +1 -1
  25. data/lib/active_record/associations/join_dependency.rb +121 -118
  26. data/lib/active_record/associations/preloader/association.rb +64 -64
  27. data/lib/active_record/associations/preloader/belongs_to.rb +0 -2
  28. data/lib/active_record/associations/preloader/collection_association.rb +6 -6
  29. data/lib/active_record/associations/preloader/has_many.rb +0 -2
  30. data/lib/active_record/associations/preloader/singular_association.rb +6 -8
  31. data/lib/active_record/associations/preloader/through_association.rb +41 -41
  32. data/lib/active_record/associations/preloader.rb +94 -94
  33. data/lib/active_record/associations/singular_association.rb +8 -25
  34. data/lib/active_record/associations/through_association.rb +2 -5
  35. data/lib/active_record/associations.rb +1591 -1562
  36. data/lib/active_record/attribute/user_provided_default.rb +4 -2
  37. data/lib/active_record/attribute.rb +98 -71
  38. data/lib/active_record/attribute_assignment.rb +61 -61
  39. data/lib/active_record/attribute_decorators.rb +35 -13
  40. data/lib/active_record/attribute_methods/before_type_cast.rb +7 -7
  41. data/lib/active_record/attribute_methods/dirty.rb +229 -46
  42. data/lib/active_record/attribute_methods/primary_key.rb +74 -73
  43. data/lib/active_record/attribute_methods/read.rb +39 -35
  44. data/lib/active_record/attribute_methods/serialization.rb +7 -7
  45. data/lib/active_record/attribute_methods/time_zone_conversion.rb +35 -58
  46. data/lib/active_record/attribute_methods/write.rb +30 -33
  47. data/lib/active_record/attribute_methods.rb +56 -65
  48. data/lib/active_record/attribute_mutation_tracker.rb +63 -11
  49. data/lib/active_record/attribute_set/builder.rb +27 -33
  50. data/lib/active_record/attribute_set/yaml_encoder.rb +41 -0
  51. data/lib/active_record/attribute_set.rb +9 -6
  52. data/lib/active_record/attributes.rb +22 -22
  53. data/lib/active_record/autosave_association.rb +18 -13
  54. data/lib/active_record/base.rb +24 -22
  55. data/lib/active_record/callbacks.rb +56 -14
  56. data/lib/active_record/coders/yaml_column.rb +9 -11
  57. data/lib/active_record/collection_cache_key.rb +3 -4
  58. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +330 -284
  59. data/lib/active_record/connection_adapters/abstract/database_limits.rb +1 -3
  60. data/lib/active_record/connection_adapters/abstract/database_statements.rb +39 -37
  61. data/lib/active_record/connection_adapters/abstract/query_cache.rb +32 -27
  62. data/lib/active_record/connection_adapters/abstract/quoting.rb +62 -51
  63. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +10 -20
  64. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +74 -79
  65. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +53 -41
  66. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +120 -100
  67. data/lib/active_record/connection_adapters/abstract/transaction.rb +49 -43
  68. data/lib/active_record/connection_adapters/abstract_adapter.rb +165 -135
  69. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +404 -424
  70. data/lib/active_record/connection_adapters/column.rb +26 -4
  71. data/lib/active_record/connection_adapters/connection_specification.rb +128 -118
  72. data/lib/active_record/connection_adapters/mysql/column.rb +6 -31
  73. data/lib/active_record/connection_adapters/mysql/database_statements.rb +36 -49
  74. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +22 -22
  75. data/lib/active_record/connection_adapters/mysql/quoting.rb +6 -12
  76. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +49 -45
  77. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +16 -19
  78. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +54 -28
  79. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +43 -0
  80. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +7 -6
  81. data/lib/active_record/connection_adapters/mysql2_adapter.rb +23 -27
  82. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +32 -53
  83. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +3 -3
  84. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +19 -9
  85. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +5 -3
  86. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +1 -1
  87. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +2 -2
  88. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +1 -1
  89. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +3 -3
  90. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +16 -16
  91. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +0 -10
  92. data/lib/active_record/connection_adapters/postgresql/oid/{rails_5_1_point.rb → legacy_point.rb} +9 -16
  93. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +2 -2
  94. data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +13 -0
  95. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +28 -8
  96. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +32 -30
  97. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +2 -1
  98. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +51 -51
  99. data/lib/active_record/connection_adapters/postgresql/oid.rb +22 -21
  100. data/lib/active_record/connection_adapters/postgresql/quoting.rb +40 -35
  101. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +15 -0
  102. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +37 -24
  103. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +19 -23
  104. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +182 -222
  105. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +6 -4
  106. data/lib/active_record/connection_adapters/postgresql/utils.rb +7 -5
  107. data/lib/active_record/connection_adapters/postgresql_adapter.rb +198 -167
  108. data/lib/active_record/connection_adapters/schema_cache.rb +16 -7
  109. data/lib/active_record/connection_adapters/sql_type_metadata.rb +3 -3
  110. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +1 -1
  111. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +16 -19
  112. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +1 -8
  113. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +28 -0
  114. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +17 -0
  115. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +32 -0
  116. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +184 -167
  117. data/lib/active_record/connection_adapters/statement_pool.rb +7 -7
  118. data/lib/active_record/connection_handling.rb +14 -26
  119. data/lib/active_record/core.rb +109 -93
  120. data/lib/active_record/counter_cache.rb +60 -13
  121. data/lib/active_record/define_callbacks.rb +20 -0
  122. data/lib/active_record/dynamic_matchers.rb +80 -79
  123. data/lib/active_record/enum.rb +8 -6
  124. data/lib/active_record/errors.rb +64 -15
  125. data/lib/active_record/explain.rb +1 -2
  126. data/lib/active_record/explain_registry.rb +1 -1
  127. data/lib/active_record/explain_subscriber.rb +7 -4
  128. data/lib/active_record/fixture_set/file.rb +11 -8
  129. data/lib/active_record/fixtures.rb +66 -53
  130. data/lib/active_record/gem_version.rb +1 -1
  131. data/lib/active_record/inheritance.rb +93 -79
  132. data/lib/active_record/integration.rb +7 -7
  133. data/lib/active_record/internal_metadata.rb +3 -16
  134. data/lib/active_record/legacy_yaml_adapter.rb +1 -1
  135. data/lib/active_record/locking/optimistic.rb +69 -74
  136. data/lib/active_record/locking/pessimistic.rb +10 -1
  137. data/lib/active_record/log_subscriber.rb +23 -28
  138. data/lib/active_record/migration/command_recorder.rb +94 -94
  139. data/lib/active_record/migration/compatibility.rb +100 -47
  140. data/lib/active_record/migration/join_table.rb +6 -6
  141. data/lib/active_record/migration.rb +153 -155
  142. data/lib/active_record/model_schema.rb +94 -107
  143. data/lib/active_record/nested_attributes.rb +200 -199
  144. data/lib/active_record/null_relation.rb +11 -34
  145. data/lib/active_record/persistence.rb +65 -50
  146. data/lib/active_record/query_cache.rb +2 -6
  147. data/lib/active_record/querying.rb +3 -4
  148. data/lib/active_record/railtie.rb +16 -17
  149. data/lib/active_record/railties/controller_runtime.rb +6 -2
  150. data/lib/active_record/railties/databases.rake +105 -133
  151. data/lib/active_record/railties/jdbcmysql_error.rb +1 -1
  152. data/lib/active_record/readonly_attributes.rb +2 -2
  153. data/lib/active_record/reflection.rb +154 -108
  154. data/lib/active_record/relation/batches/batch_enumerator.rb +1 -1
  155. data/lib/active_record/relation/batches.rb +80 -51
  156. data/lib/active_record/relation/calculations.rb +169 -162
  157. data/lib/active_record/relation/delegation.rb +32 -31
  158. data/lib/active_record/relation/finder_methods.rb +197 -231
  159. data/lib/active_record/relation/merger.rb +58 -62
  160. data/lib/active_record/relation/predicate_builder/array_handler.rb +7 -5
  161. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +23 -23
  162. data/lib/active_record/relation/predicate_builder/base_handler.rb +3 -1
  163. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +0 -8
  164. data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +12 -10
  165. data/lib/active_record/relation/predicate_builder/range_handler.rb +0 -8
  166. data/lib/active_record/relation/predicate_builder.rb +92 -89
  167. data/lib/active_record/relation/query_attribute.rb +1 -1
  168. data/lib/active_record/relation/query_methods.rb +255 -293
  169. data/lib/active_record/relation/record_fetch_warning.rb +3 -3
  170. data/lib/active_record/relation/spawn_methods.rb +4 -5
  171. data/lib/active_record/relation/where_clause.rb +80 -65
  172. data/lib/active_record/relation/where_clause_factory.rb +47 -8
  173. data/lib/active_record/relation.rb +93 -119
  174. data/lib/active_record/result.rb +41 -32
  175. data/lib/active_record/runtime_registry.rb +3 -3
  176. data/lib/active_record/sanitization.rb +176 -192
  177. data/lib/active_record/schema.rb +3 -3
  178. data/lib/active_record/schema_dumper.rb +15 -38
  179. data/lib/active_record/schema_migration.rb +8 -4
  180. data/lib/active_record/scoping/default.rb +90 -90
  181. data/lib/active_record/scoping/named.rb +11 -11
  182. data/lib/active_record/scoping.rb +6 -6
  183. data/lib/active_record/secure_token.rb +2 -2
  184. data/lib/active_record/statement_cache.rb +13 -15
  185. data/lib/active_record/store.rb +31 -32
  186. data/lib/active_record/suppressor.rb +2 -1
  187. data/lib/active_record/table_metadata.rb +9 -5
  188. data/lib/active_record/tasks/database_tasks.rb +65 -55
  189. data/lib/active_record/tasks/mysql_database_tasks.rb +76 -73
  190. data/lib/active_record/tasks/postgresql_database_tasks.rb +72 -47
  191. data/lib/active_record/tasks/sqlite_database_tasks.rb +18 -16
  192. data/lib/active_record/timestamp.rb +46 -25
  193. data/lib/active_record/touch_later.rb +1 -2
  194. data/lib/active_record/transactions.rb +97 -109
  195. data/lib/active_record/type/adapter_specific_registry.rb +46 -42
  196. data/lib/active_record/type/decimal_without_scale.rb +13 -0
  197. data/lib/active_record/type/hash_lookup_type_map.rb +3 -3
  198. data/lib/active_record/type/internal/abstract_json.rb +4 -0
  199. data/lib/active_record/type/serialized.rb +14 -8
  200. data/lib/active_record/type/text.rb +9 -0
  201. data/lib/active_record/type/time.rb +0 -1
  202. data/lib/active_record/type/type_map.rb +11 -15
  203. data/lib/active_record/type/unsigned_integer.rb +15 -0
  204. data/lib/active_record/type.rb +17 -13
  205. data/lib/active_record/type_caster/connection.rb +8 -6
  206. data/lib/active_record/type_caster/map.rb +3 -1
  207. data/lib/active_record/type_caster.rb +2 -2
  208. data/lib/active_record/validations/associated.rb +1 -1
  209. data/lib/active_record/validations/presence.rb +2 -2
  210. data/lib/active_record/validations/uniqueness.rb +8 -39
  211. data/lib/active_record/validations.rb +4 -4
  212. data/lib/active_record/version.rb +1 -1
  213. data/lib/active_record.rb +20 -20
  214. data/lib/rails/generators/active_record/migration/migration_generator.rb +37 -34
  215. data/lib/rails/generators/active_record/migration.rb +1 -1
  216. data/lib/rails/generators/active_record/model/model_generator.rb +9 -9
  217. data/lib/rails/generators/active_record.rb +4 -4
  218. metadata +24 -13
  219. 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
- def _quote(value)
78
- case value
79
- when Type::Binary::Data
80
- "'#{escape_bytea(value.to_s)}'"
81
- when OID::Xml::Data
82
- "xml '#{quote_string(value.to_s)}'"
83
- when OID::Bit::Data
84
- if value.binary?
85
- "B'#{value}'"
86
- elsif value.hex?
87
- "X'#{value}'"
88
- end
89
- when Float
90
- if value.infinite? || value.nan?
91
- "'#{value}'"
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
- def _type_cast(value)
103
- case value
104
- when Type::Binary::Data
105
- # Return a bind param hash with format as binary.
106
- # See https://deveiate.org/code/pg/PG/Connection.html#method-i-exec_prepared-doc
107
- # for more information
108
- { value: value.to_s, format: 1 }
109
- when OID::Xml::Data, OID::Bit::Data
110
- value.to_s
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
- else
114
- super
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 +uuid_generate_v4()+ function from the
15
- # +uuid-ossp+ extension, which MUST be enabled on your database. To enable
16
- # the +uuid-ossp+ extension, you can use the +enable_extension+ method in your
17
- # migrations. To use a UUID primary key without +uuid-ossp+ enabled, you can
18
- # set the +:default+ option to +nil+:
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 different UUID generation function from +uuid-ossp+
27
- # or another library.
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[:default] = options.fetch(:default, 'uuid_generate_v4()') if type == :uuid
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] = 'true' if column.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
- def default_primary_key?(column)
28
- schema_type(column) == :serial
29
- end
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
- def schema_type(column)
32
- return super unless column.serial?
27
+ def schema_type(column)
28
+ return super unless column.serial?
33
29
 
34
- if column.bigint?
35
- :bigserial
36
- else
37
- :serial
30
+ if column.bigint?
31
+ :bigserial
32
+ else
33
+ :serial
34
+ end
38
35
  end
39
- end
40
36
 
41
- def schema_expression(column)
42
- super unless column.serial?
43
- end
37
+ def schema_expression(column)
38
+ super unless column.serial?
39
+ end
44
40
  end
45
41
  end
46
42
  end