activerecord 4.2.11.2 → 6.0.0

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 (372) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +613 -1638
  3. data/MIT-LICENSE +4 -2
  4. data/README.rdoc +13 -12
  5. data/examples/performance.rb +33 -32
  6. data/examples/simple.rb +5 -4
  7. data/lib/active_record.rb +41 -22
  8. data/lib/active_record/aggregations.rb +267 -251
  9. data/lib/active_record/association_relation.rb +11 -6
  10. data/lib/active_record/associations.rb +1737 -1597
  11. data/lib/active_record/associations/alias_tracker.rb +29 -35
  12. data/lib/active_record/associations/association.rb +125 -58
  13. data/lib/active_record/associations/association_scope.rb +103 -132
  14. data/lib/active_record/associations/belongs_to_association.rb +65 -60
  15. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -12
  16. data/lib/active_record/associations/builder/association.rb +27 -40
  17. data/lib/active_record/associations/builder/belongs_to.rb +69 -55
  18. data/lib/active_record/associations/builder/collection_association.rb +10 -33
  19. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +52 -66
  20. data/lib/active_record/associations/builder/has_many.rb +8 -4
  21. data/lib/active_record/associations/builder/has_one.rb +46 -5
  22. data/lib/active_record/associations/builder/singular_association.rb +16 -10
  23. data/lib/active_record/associations/collection_association.rb +131 -287
  24. data/lib/active_record/associations/collection_proxy.rb +241 -146
  25. data/lib/active_record/associations/foreign_association.rb +10 -1
  26. data/lib/active_record/associations/has_many_association.rb +34 -97
  27. data/lib/active_record/associations/has_many_through_association.rb +60 -87
  28. data/lib/active_record/associations/has_one_association.rb +61 -49
  29. data/lib/active_record/associations/has_one_through_association.rb +20 -11
  30. data/lib/active_record/associations/join_dependency.rb +137 -167
  31. data/lib/active_record/associations/join_dependency/join_association.rb +38 -86
  32. data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
  33. data/lib/active_record/associations/join_dependency/join_part.rb +14 -14
  34. data/lib/active_record/associations/preloader.rb +90 -92
  35. data/lib/active_record/associations/preloader/association.rb +90 -123
  36. data/lib/active_record/associations/preloader/through_association.rb +85 -65
  37. data/lib/active_record/associations/singular_association.rb +18 -39
  38. data/lib/active_record/associations/through_association.rb +38 -18
  39. data/lib/active_record/attribute_assignment.rb +56 -183
  40. data/lib/active_record/attribute_decorators.rb +39 -15
  41. data/lib/active_record/attribute_methods.rb +120 -135
  42. data/lib/active_record/attribute_methods/before_type_cast.rb +13 -8
  43. data/lib/active_record/attribute_methods/dirty.rb +174 -144
  44. data/lib/active_record/attribute_methods/primary_key.rb +91 -83
  45. data/lib/active_record/attribute_methods/query.rb +6 -5
  46. data/lib/active_record/attribute_methods/read.rb +20 -76
  47. data/lib/active_record/attribute_methods/serialization.rb +40 -20
  48. data/lib/active_record/attribute_methods/time_zone_conversion.rb +58 -36
  49. data/lib/active_record/attribute_methods/write.rb +32 -54
  50. data/lib/active_record/attributes.rb +214 -82
  51. data/lib/active_record/autosave_association.rb +91 -37
  52. data/lib/active_record/base.rb +57 -45
  53. data/lib/active_record/callbacks.rb +100 -74
  54. data/lib/active_record/coders/json.rb +3 -1
  55. data/lib/active_record/coders/yaml_column.rb +24 -12
  56. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +796 -296
  57. data/lib/active_record/connection_adapters/abstract/database_limits.rb +26 -8
  58. data/lib/active_record/connection_adapters/abstract/database_statements.rb +234 -115
  59. data/lib/active_record/connection_adapters/abstract/query_cache.rb +82 -23
  60. data/lib/active_record/connection_adapters/abstract/quoting.rb +170 -53
  61. data/lib/active_record/connection_adapters/abstract/savepoints.rb +5 -3
  62. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +74 -46
  63. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +356 -227
  64. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +79 -36
  65. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +664 -243
  66. data/lib/active_record/connection_adapters/abstract/transaction.rb +191 -83
  67. data/lib/active_record/connection_adapters/abstract_adapter.rb +460 -204
  68. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +510 -635
  69. data/lib/active_record/connection_adapters/column.rb +56 -43
  70. data/lib/active_record/connection_adapters/connection_specification.rb +174 -152
  71. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
  72. data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
  73. data/lib/active_record/connection_adapters/mysql/database_statements.rb +200 -0
  74. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
  75. data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
  76. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +72 -0
  77. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
  78. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
  79. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
  80. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
  81. data/lib/active_record/connection_adapters/mysql2_adapter.rb +58 -180
  82. data/lib/active_record/connection_adapters/postgresql/column.rb +21 -11
  83. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +64 -114
  84. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid.rb +23 -25
  86. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +50 -58
  87. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +9 -8
  88. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
  89. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +4 -2
  90. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +5 -1
  91. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +13 -1
  92. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +9 -22
  93. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
  94. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -3
  95. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +31 -19
  96. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
  97. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
  98. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
  99. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -9
  100. data/lib/active_record/connection_adapters/postgresql/oid/{integer.rb → oid.rb} +6 -2
  101. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +33 -11
  102. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +52 -34
  103. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -5
  104. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +58 -54
  105. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +10 -5
  106. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +3 -1
  107. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +3 -1
  108. data/lib/active_record/connection_adapters/postgresql/quoting.rb +144 -47
  109. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +27 -14
  110. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
  111. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +178 -108
  112. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +50 -0
  113. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +470 -290
  114. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
  115. data/lib/active_record/connection_adapters/postgresql/utils.rb +12 -8
  116. data/lib/active_record/connection_adapters/postgresql_adapter.rb +551 -356
  117. data/lib/active_record/connection_adapters/schema_cache.rb +72 -25
  118. data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
  119. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +118 -0
  120. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
  121. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +103 -0
  122. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
  123. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
  124. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
  125. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
  126. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +290 -345
  127. data/lib/active_record/connection_adapters/statement_pool.rb +34 -13
  128. data/lib/active_record/connection_handling.rb +176 -41
  129. data/lib/active_record/core.rb +251 -231
  130. data/lib/active_record/counter_cache.rb +67 -49
  131. data/lib/active_record/database_configurations.rb +233 -0
  132. data/lib/active_record/database_configurations/database_config.rb +37 -0
  133. data/lib/active_record/database_configurations/hash_config.rb +50 -0
  134. data/lib/active_record/database_configurations/url_config.rb +79 -0
  135. data/lib/active_record/define_callbacks.rb +22 -0
  136. data/lib/active_record/dynamic_matchers.rb +87 -105
  137. data/lib/active_record/enum.rb +163 -86
  138. data/lib/active_record/errors.rb +188 -53
  139. data/lib/active_record/explain.rb +23 -11
  140. data/lib/active_record/explain_registry.rb +4 -2
  141. data/lib/active_record/explain_subscriber.rb +10 -5
  142. data/lib/active_record/fixture_set/file.rb +35 -9
  143. data/lib/active_record/fixture_set/model_metadata.rb +33 -0
  144. data/lib/active_record/fixture_set/render_context.rb +17 -0
  145. data/lib/active_record/fixture_set/table_row.rb +153 -0
  146. data/lib/active_record/fixture_set/table_rows.rb +47 -0
  147. data/lib/active_record/fixtures.rb +228 -499
  148. data/lib/active_record/gem_version.rb +6 -4
  149. data/lib/active_record/inheritance.rb +158 -112
  150. data/lib/active_record/insert_all.rb +179 -0
  151. data/lib/active_record/integration.rb +123 -29
  152. data/lib/active_record/internal_metadata.rb +53 -0
  153. data/lib/active_record/legacy_yaml_adapter.rb +21 -3
  154. data/lib/active_record/locale/en.yml +3 -2
  155. data/lib/active_record/locking/optimistic.rb +87 -96
  156. data/lib/active_record/locking/pessimistic.rb +18 -6
  157. data/lib/active_record/log_subscriber.rb +76 -33
  158. data/lib/active_record/middleware/database_selector.rb +75 -0
  159. data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
  160. data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
  161. data/lib/active_record/migration.rb +621 -303
  162. data/lib/active_record/migration/command_recorder.rb +177 -90
  163. data/lib/active_record/migration/compatibility.rb +244 -0
  164. data/lib/active_record/migration/join_table.rb +8 -6
  165. data/lib/active_record/model_schema.rb +312 -112
  166. data/lib/active_record/nested_attributes.rb +264 -222
  167. data/lib/active_record/no_touching.rb +14 -1
  168. data/lib/active_record/null_relation.rb +24 -37
  169. data/lib/active_record/persistence.rb +557 -125
  170. data/lib/active_record/query_cache.rb +19 -23
  171. data/lib/active_record/querying.rb +43 -29
  172. data/lib/active_record/railtie.rb +143 -44
  173. data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
  174. data/lib/active_record/railties/console_sandbox.rb +2 -0
  175. data/lib/active_record/railties/controller_runtime.rb +34 -33
  176. data/lib/active_record/railties/databases.rake +328 -185
  177. data/lib/active_record/readonly_attributes.rb +5 -4
  178. data/lib/active_record/reflection.rb +428 -279
  179. data/lib/active_record/relation.rb +518 -341
  180. data/lib/active_record/relation/batches.rb +207 -55
  181. data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
  182. data/lib/active_record/relation/calculations.rb +267 -253
  183. data/lib/active_record/relation/delegation.rb +70 -80
  184. data/lib/active_record/relation/finder_methods.rb +277 -241
  185. data/lib/active_record/relation/from_clause.rb +26 -0
  186. data/lib/active_record/relation/merger.rb +78 -87
  187. data/lib/active_record/relation/predicate_builder.rb +114 -119
  188. data/lib/active_record/relation/predicate_builder/array_handler.rb +27 -26
  189. data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
  190. data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
  191. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
  192. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
  193. data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
  194. data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
  195. data/lib/active_record/relation/query_attribute.rb +50 -0
  196. data/lib/active_record/relation/query_methods.rb +575 -394
  197. data/lib/active_record/relation/record_fetch_warning.rb +51 -0
  198. data/lib/active_record/relation/spawn_methods.rb +11 -13
  199. data/lib/active_record/relation/where_clause.rb +190 -0
  200. data/lib/active_record/relation/where_clause_factory.rb +33 -0
  201. data/lib/active_record/result.rb +79 -42
  202. data/lib/active_record/runtime_registry.rb +6 -4
  203. data/lib/active_record/sanitization.rb +144 -121
  204. data/lib/active_record/schema.rb +21 -24
  205. data/lib/active_record/schema_dumper.rb +112 -93
  206. data/lib/active_record/schema_migration.rb +24 -17
  207. data/lib/active_record/scoping.rb +45 -26
  208. data/lib/active_record/scoping/default.rb +101 -85
  209. data/lib/active_record/scoping/named.rb +86 -33
  210. data/lib/active_record/secure_token.rb +40 -0
  211. data/lib/active_record/serialization.rb +5 -5
  212. data/lib/active_record/statement_cache.rb +73 -36
  213. data/lib/active_record/store.rb +127 -42
  214. data/lib/active_record/suppressor.rb +61 -0
  215. data/lib/active_record/table_metadata.rb +75 -0
  216. data/lib/active_record/tasks/database_tasks.rb +307 -100
  217. data/lib/active_record/tasks/mysql_database_tasks.rb +55 -99
  218. data/lib/active_record/tasks/postgresql_database_tasks.rb +81 -41
  219. data/lib/active_record/tasks/sqlite_database_tasks.rb +38 -16
  220. data/lib/active_record/test_databases.rb +23 -0
  221. data/lib/active_record/test_fixtures.rb +224 -0
  222. data/lib/active_record/timestamp.rb +86 -40
  223. data/lib/active_record/touch_later.rb +66 -0
  224. data/lib/active_record/transactions.rb +216 -150
  225. data/lib/active_record/translation.rb +3 -1
  226. data/lib/active_record/type.rb +78 -23
  227. data/lib/active_record/type/adapter_specific_registry.rb +129 -0
  228. data/lib/active_record/type/date.rb +4 -45
  229. data/lib/active_record/type/date_time.rb +4 -49
  230. data/lib/active_record/type/decimal_without_scale.rb +6 -2
  231. data/lib/active_record/type/hash_lookup_type_map.rb +5 -3
  232. data/lib/active_record/type/internal/timezone.rb +17 -0
  233. data/lib/active_record/type/json.rb +30 -0
  234. data/lib/active_record/type/serialized.rb +24 -15
  235. data/lib/active_record/type/text.rb +2 -2
  236. data/lib/active_record/type/time.rb +11 -16
  237. data/lib/active_record/type/type_map.rb +15 -17
  238. data/lib/active_record/type/unsigned_integer.rb +9 -7
  239. data/lib/active_record/type_caster.rb +9 -0
  240. data/lib/active_record/type_caster/connection.rb +34 -0
  241. data/lib/active_record/type_caster/map.rb +20 -0
  242. data/lib/active_record/validations.rb +39 -35
  243. data/lib/active_record/validations/absence.rb +25 -0
  244. data/lib/active_record/validations/associated.rb +13 -4
  245. data/lib/active_record/validations/length.rb +26 -0
  246. data/lib/active_record/validations/presence.rb +14 -13
  247. data/lib/active_record/validations/uniqueness.rb +42 -55
  248. data/lib/active_record/version.rb +3 -1
  249. data/lib/arel.rb +51 -0
  250. data/lib/arel/alias_predication.rb +9 -0
  251. data/lib/arel/attributes.rb +22 -0
  252. data/lib/arel/attributes/attribute.rb +37 -0
  253. data/lib/arel/collectors/bind.rb +24 -0
  254. data/lib/arel/collectors/composite.rb +31 -0
  255. data/lib/arel/collectors/plain_string.rb +20 -0
  256. data/lib/arel/collectors/sql_string.rb +20 -0
  257. data/lib/arel/collectors/substitute_binds.rb +28 -0
  258. data/lib/arel/crud.rb +42 -0
  259. data/lib/arel/delete_manager.rb +18 -0
  260. data/lib/arel/errors.rb +9 -0
  261. data/lib/arel/expressions.rb +29 -0
  262. data/lib/arel/factory_methods.rb +49 -0
  263. data/lib/arel/insert_manager.rb +49 -0
  264. data/lib/arel/math.rb +45 -0
  265. data/lib/arel/nodes.rb +68 -0
  266. data/lib/arel/nodes/and.rb +32 -0
  267. data/lib/arel/nodes/ascending.rb +23 -0
  268. data/lib/arel/nodes/binary.rb +52 -0
  269. data/lib/arel/nodes/bind_param.rb +36 -0
  270. data/lib/arel/nodes/case.rb +55 -0
  271. data/lib/arel/nodes/casted.rb +50 -0
  272. data/lib/arel/nodes/comment.rb +29 -0
  273. data/lib/arel/nodes/count.rb +12 -0
  274. data/lib/arel/nodes/delete_statement.rb +45 -0
  275. data/lib/arel/nodes/descending.rb +23 -0
  276. data/lib/arel/nodes/equality.rb +18 -0
  277. data/lib/arel/nodes/extract.rb +24 -0
  278. data/lib/arel/nodes/false.rb +16 -0
  279. data/lib/arel/nodes/full_outer_join.rb +8 -0
  280. data/lib/arel/nodes/function.rb +44 -0
  281. data/lib/arel/nodes/grouping.rb +8 -0
  282. data/lib/arel/nodes/in.rb +8 -0
  283. data/lib/arel/nodes/infix_operation.rb +80 -0
  284. data/lib/arel/nodes/inner_join.rb +8 -0
  285. data/lib/arel/nodes/insert_statement.rb +37 -0
  286. data/lib/arel/nodes/join_source.rb +20 -0
  287. data/lib/arel/nodes/matches.rb +18 -0
  288. data/lib/arel/nodes/named_function.rb +23 -0
  289. data/lib/arel/nodes/node.rb +50 -0
  290. data/lib/arel/nodes/node_expression.rb +13 -0
  291. data/lib/arel/nodes/outer_join.rb +8 -0
  292. data/lib/arel/nodes/over.rb +15 -0
  293. data/lib/arel/nodes/regexp.rb +16 -0
  294. data/lib/arel/nodes/right_outer_join.rb +8 -0
  295. data/lib/arel/nodes/select_core.rb +67 -0
  296. data/lib/arel/nodes/select_statement.rb +41 -0
  297. data/lib/arel/nodes/sql_literal.rb +16 -0
  298. data/lib/arel/nodes/string_join.rb +11 -0
  299. data/lib/arel/nodes/table_alias.rb +27 -0
  300. data/lib/arel/nodes/terminal.rb +16 -0
  301. data/lib/arel/nodes/true.rb +16 -0
  302. data/lib/arel/nodes/unary.rb +45 -0
  303. data/lib/arel/nodes/unary_operation.rb +20 -0
  304. data/lib/arel/nodes/unqualified_column.rb +22 -0
  305. data/lib/arel/nodes/update_statement.rb +41 -0
  306. data/lib/arel/nodes/values_list.rb +9 -0
  307. data/lib/arel/nodes/window.rb +126 -0
  308. data/lib/arel/nodes/with.rb +11 -0
  309. data/lib/arel/order_predications.rb +13 -0
  310. data/lib/arel/predications.rb +257 -0
  311. data/lib/arel/select_manager.rb +271 -0
  312. data/lib/arel/table.rb +110 -0
  313. data/lib/arel/tree_manager.rb +72 -0
  314. data/lib/arel/update_manager.rb +34 -0
  315. data/lib/arel/visitors.rb +20 -0
  316. data/lib/arel/visitors/depth_first.rb +204 -0
  317. data/lib/arel/visitors/dot.rb +297 -0
  318. data/lib/arel/visitors/ibm_db.rb +34 -0
  319. data/lib/arel/visitors/informix.rb +62 -0
  320. data/lib/arel/visitors/mssql.rb +157 -0
  321. data/lib/arel/visitors/mysql.rb +83 -0
  322. data/lib/arel/visitors/oracle.rb +159 -0
  323. data/lib/arel/visitors/oracle12.rb +66 -0
  324. data/lib/arel/visitors/postgresql.rb +110 -0
  325. data/lib/arel/visitors/sqlite.rb +39 -0
  326. data/lib/arel/visitors/to_sql.rb +889 -0
  327. data/lib/arel/visitors/visitor.rb +46 -0
  328. data/lib/arel/visitors/where_sql.rb +23 -0
  329. data/lib/arel/window_predications.rb +9 -0
  330. data/lib/rails/generators/active_record.rb +7 -5
  331. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
  332. data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
  333. data/lib/rails/generators/active_record/migration.rb +31 -1
  334. data/lib/rails/generators/active_record/migration/migration_generator.rb +42 -37
  335. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
  336. data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +11 -2
  337. data/lib/rails/generators/active_record/model/model_generator.rb +19 -22
  338. data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
  339. data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
  340. metadata +164 -59
  341. data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
  342. data/lib/active_record/associations/preloader/collection_association.rb +0 -24
  343. data/lib/active_record/associations/preloader/has_many.rb +0 -17
  344. data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
  345. data/lib/active_record/associations/preloader/has_one.rb +0 -23
  346. data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
  347. data/lib/active_record/associations/preloader/singular_association.rb +0 -21
  348. data/lib/active_record/attribute.rb +0 -163
  349. data/lib/active_record/attribute_set.rb +0 -81
  350. data/lib/active_record/attribute_set/builder.rb +0 -106
  351. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
  352. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  353. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  354. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  355. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -35
  356. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  357. data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
  358. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  359. data/lib/active_record/type/big_integer.rb +0 -13
  360. data/lib/active_record/type/binary.rb +0 -50
  361. data/lib/active_record/type/boolean.rb +0 -31
  362. data/lib/active_record/type/decimal.rb +0 -64
  363. data/lib/active_record/type/decorator.rb +0 -14
  364. data/lib/active_record/type/float.rb +0 -19
  365. data/lib/active_record/type/integer.rb +0 -59
  366. data/lib/active_record/type/mutable.rb +0 -16
  367. data/lib/active_record/type/numeric.rb +0 -36
  368. data/lib/active_record/type/string.rb +0 -40
  369. data/lib/active_record/type/time_value.rb +0 -38
  370. data/lib/active_record/type/value.rb +0 -110
  371. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +0 -19
  372. data/lib/rails/generators/active_record/model/templates/model.rb +0 -10
@@ -1,93 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- module PostgreSQL
4
- module ArrayParser # :nodoc:
5
-
6
- DOUBLE_QUOTE = '"'
7
- BACKSLASH = "\\"
8
- COMMA = ','
9
- BRACKET_OPEN = '{'
10
- BRACKET_CLOSE = '}'
11
-
12
- def parse_pg_array(string) # :nodoc:
13
- local_index = 0
14
- array = []
15
- while(local_index < string.length)
16
- case string[local_index]
17
- when BRACKET_OPEN
18
- local_index,array = parse_array_contents(array, string, local_index + 1)
19
- when BRACKET_CLOSE
20
- return array
21
- end
22
- local_index += 1
23
- end
24
-
25
- array
26
- end
27
-
28
- private
29
-
30
- def parse_array_contents(array, string, index)
31
- is_escaping = false
32
- is_quoted = false
33
- was_quoted = false
34
- current_item = ''
35
-
36
- local_index = index
37
- while local_index
38
- token = string[local_index]
39
- if is_escaping
40
- current_item << token
41
- is_escaping = false
42
- else
43
- if is_quoted
44
- case token
45
- when DOUBLE_QUOTE
46
- is_quoted = false
47
- was_quoted = true
48
- when BACKSLASH
49
- is_escaping = true
50
- else
51
- current_item << token
52
- end
53
- else
54
- case token
55
- when BACKSLASH
56
- is_escaping = true
57
- when COMMA
58
- add_item_to_array(array, current_item, was_quoted)
59
- current_item = ''
60
- was_quoted = false
61
- when DOUBLE_QUOTE
62
- is_quoted = true
63
- when BRACKET_OPEN
64
- internal_items = []
65
- local_index,internal_items = parse_array_contents(internal_items, string, local_index + 1)
66
- array.push(internal_items)
67
- when BRACKET_CLOSE
68
- add_item_to_array(array, current_item, was_quoted)
69
- return local_index,array
70
- else
71
- current_item << token
72
- end
73
- end
74
- end
75
-
76
- local_index += 1
77
- end
78
- return local_index,array
79
- end
80
-
81
- def add_item_to_array(array, current_item, quoted)
82
- return if !quoted && current_item.length == 0
83
-
84
- if !quoted && current_item == 'NULL'
85
- array.push nil
86
- else
87
- array.push current_item
88
- end
89
- end
90
- end
91
- end
92
- end
93
- end
@@ -1,21 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- module PostgreSQL
4
- module OID # :nodoc:
5
- class Float < Type::Float # :nodoc:
6
- include Infinity
7
-
8
- def cast_value(value)
9
- case value
10
- when ::Float then value
11
- when 'Infinity' then ::Float::INFINITY
12
- when '-Infinity' then -::Float::INFINITY
13
- when 'NaN' then ::Float::NAN
14
- else value.to_f
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,13 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- module PostgreSQL
4
- module OID # :nodoc:
5
- module Infinity # :nodoc:
6
- def infinity(options = {})
7
- options[:negative] ? -::Float::INFINITY : ::Float::INFINITY
8
- end
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,35 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- module PostgreSQL
4
- module OID # :nodoc:
5
- class Json < Type::Value # :nodoc:
6
- include Type::Mutable
7
-
8
- def type
9
- :json
10
- end
11
-
12
- def type_cast_from_database(value)
13
- if value.is_a?(::String)
14
- ::ActiveSupport::JSON.decode(value) rescue nil
15
- else
16
- super
17
- end
18
- end
19
-
20
- def type_cast_for_database(value)
21
- if value.is_a?(::Array) || value.is_a?(::Hash)
22
- ::ActiveSupport::JSON.encode(value)
23
- else
24
- super
25
- end
26
- end
27
-
28
- def accessor
29
- ActiveRecord::Store::StringKeyedHashAccessor
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,11 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- module PostgreSQL
4
- module OID # :nodoc:
5
- class Time < Type::Time # :nodoc:
6
- include Infinity
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- #FIXME Remove if ArJdbcMysql will give.
2
- module ArJdbcMySQL #:nodoc:
3
- class Error < StandardError #:nodoc:
4
- attr_accessor :error_number, :sql_state
5
-
6
- def initialize msg
7
- super
8
- @error_number = nil
9
- @sql_state = nil
10
- end
11
-
12
- # Mysql gem compatibility
13
- alias_method :errno, :error_number
14
- alias_method :error, :message
15
- end
16
- end
@@ -1,193 +0,0 @@
1
- require 'active_support/core_ext/hash/conversions'
2
-
3
- module ActiveRecord #:nodoc:
4
- module Serialization
5
- include ActiveModel::Serializers::Xml
6
-
7
- # Builds an XML document to represent the model. Some configuration is
8
- # available through +options+. However more complicated cases should
9
- # override ActiveRecord::Base#to_xml.
10
- #
11
- # By default the generated XML document will include the processing
12
- # instruction and all the object's attributes. For example:
13
- #
14
- # <?xml version="1.0" encoding="UTF-8"?>
15
- # <topic>
16
- # <title>The First Topic</title>
17
- # <author-name>David</author-name>
18
- # <id type="integer">1</id>
19
- # <approved type="boolean">false</approved>
20
- # <replies-count type="integer">0</replies-count>
21
- # <bonus-time type="dateTime">2000-01-01T08:28:00+12:00</bonus-time>
22
- # <written-on type="dateTime">2003-07-16T09:28:00+1200</written-on>
23
- # <content>Have a nice day</content>
24
- # <author-email-address>david@loudthinking.com</author-email-address>
25
- # <parent-id></parent-id>
26
- # <last-read type="date">2004-04-15</last-read>
27
- # </topic>
28
- #
29
- # This behavior can be controlled with <tt>:only</tt>, <tt>:except</tt>,
30
- # <tt>:skip_instruct</tt>, <tt>:skip_types</tt>, <tt>:dasherize</tt> and <tt>:camelize</tt> .
31
- # The <tt>:only</tt> and <tt>:except</tt> options are the same as for the
32
- # +attributes+ method. The default is to dasherize all column names, but you
33
- # can disable this setting <tt>:dasherize</tt> to +false+. Setting <tt>:camelize</tt>
34
- # to +true+ will camelize all column names - this also overrides <tt>:dasherize</tt>.
35
- # To not have the column type included in the XML output set <tt>:skip_types</tt> to +true+.
36
- #
37
- # For instance:
38
- #
39
- # topic.to_xml(skip_instruct: true, except: [ :id, :bonus_time, :written_on, :replies_count ])
40
- #
41
- # <topic>
42
- # <title>The First Topic</title>
43
- # <author-name>David</author-name>
44
- # <approved type="boolean">false</approved>
45
- # <content>Have a nice day</content>
46
- # <author-email-address>david@loudthinking.com</author-email-address>
47
- # <parent-id></parent-id>
48
- # <last-read type="date">2004-04-15</last-read>
49
- # </topic>
50
- #
51
- # To include first level associations use <tt>:include</tt>:
52
- #
53
- # firm.to_xml include: [ :account, :clients ]
54
- #
55
- # <?xml version="1.0" encoding="UTF-8"?>
56
- # <firm>
57
- # <id type="integer">1</id>
58
- # <rating type="integer">1</rating>
59
- # <name>37signals</name>
60
- # <clients type="array">
61
- # <client>
62
- # <rating type="integer">1</rating>
63
- # <name>Summit</name>
64
- # </client>
65
- # <client>
66
- # <rating type="integer">1</rating>
67
- # <name>Microsoft</name>
68
- # </client>
69
- # </clients>
70
- # <account>
71
- # <id type="integer">1</id>
72
- # <credit-limit type="integer">50</credit-limit>
73
- # </account>
74
- # </firm>
75
- #
76
- # Additionally, the record being serialized will be passed to a Proc's second
77
- # parameter. This allows for ad hoc additions to the resultant document that
78
- # incorporate the context of the record being serialized. And by leveraging the
79
- # closure created by a Proc, to_xml can be used to add elements that normally fall
80
- # outside of the scope of the model -- for example, generating and appending URLs
81
- # associated with models.
82
- #
83
- # proc = Proc.new { |options, record| options[:builder].tag!('name-reverse', record.name.reverse) }
84
- # firm.to_xml procs: [ proc ]
85
- #
86
- # <firm>
87
- # # ... normal attributes as shown above ...
88
- # <name-reverse>slangis73</name-reverse>
89
- # </firm>
90
- #
91
- # To include deeper levels of associations pass a hash like this:
92
- #
93
- # firm.to_xml include: {account: {}, clients: {include: :address}}
94
- # <?xml version="1.0" encoding="UTF-8"?>
95
- # <firm>
96
- # <id type="integer">1</id>
97
- # <rating type="integer">1</rating>
98
- # <name>37signals</name>
99
- # <clients type="array">
100
- # <client>
101
- # <rating type="integer">1</rating>
102
- # <name>Summit</name>
103
- # <address>
104
- # ...
105
- # </address>
106
- # </client>
107
- # <client>
108
- # <rating type="integer">1</rating>
109
- # <name>Microsoft</name>
110
- # <address>
111
- # ...
112
- # </address>
113
- # </client>
114
- # </clients>
115
- # <account>
116
- # <id type="integer">1</id>
117
- # <credit-limit type="integer">50</credit-limit>
118
- # </account>
119
- # </firm>
120
- #
121
- # To include any methods on the model being called use <tt>:methods</tt>:
122
- #
123
- # firm.to_xml methods: [ :calculated_earnings, :real_earnings ]
124
- #
125
- # <firm>
126
- # # ... normal attributes as shown above ...
127
- # <calculated-earnings>100000000000000000</calculated-earnings>
128
- # <real-earnings>5</real-earnings>
129
- # </firm>
130
- #
131
- # To call any additional Procs use <tt>:procs</tt>. The Procs are passed a
132
- # modified version of the options hash that was given to +to_xml+:
133
- #
134
- # proc = Proc.new { |options| options[:builder].tag!('abc', 'def') }
135
- # firm.to_xml procs: [ proc ]
136
- #
137
- # <firm>
138
- # # ... normal attributes as shown above ...
139
- # <abc>def</abc>
140
- # </firm>
141
- #
142
- # Alternatively, you can yield the builder object as part of the +to_xml+ call:
143
- #
144
- # firm.to_xml do |xml|
145
- # xml.creator do
146
- # xml.first_name "David"
147
- # xml.last_name "Heinemeier Hansson"
148
- # end
149
- # end
150
- #
151
- # <firm>
152
- # # ... normal attributes as shown above ...
153
- # <creator>
154
- # <first_name>David</first_name>
155
- # <last_name>Heinemeier Hansson</last_name>
156
- # </creator>
157
- # </firm>
158
- #
159
- # As noted above, you may override +to_xml+ in your ActiveRecord::Base
160
- # subclasses to have complete control about what's generated. The general
161
- # form of doing this is:
162
- #
163
- # class IHaveMyOwnXML < ActiveRecord::Base
164
- # def to_xml(options = {})
165
- # require 'builder'
166
- # options[:indent] ||= 2
167
- # xml = options[:builder] ||= ::Builder::XmlMarkup.new(indent: options[:indent])
168
- # xml.instruct! unless options[:skip_instruct]
169
- # xml.level_one do
170
- # xml.tag!(:second_level, 'content')
171
- # end
172
- # end
173
- # end
174
- def to_xml(options = {}, &block)
175
- XmlSerializer.new(self, options).serialize(&block)
176
- end
177
- end
178
-
179
- class XmlSerializer < ActiveModel::Serializers::Xml::Serializer #:nodoc:
180
- class Attribute < ActiveModel::Serializers::Xml::Serializer::Attribute #:nodoc:
181
- def compute_type
182
- klass = @serializable.class
183
- column = klass.columns_hash[name] || Type::Value.new
184
-
185
- type = ActiveSupport::XmlMini::TYPE_NAMES[value.class.name] || column.type
186
-
187
- { :text => :string,
188
- :time => :datetime }[type] || type
189
- end
190
- protected :compute_type
191
- end
192
- end
193
- end
@@ -1,13 +0,0 @@
1
- require 'active_record/type/integer'
2
-
3
- module ActiveRecord
4
- module Type
5
- class BigInteger < Integer # :nodoc:
6
- private
7
-
8
- def max_value
9
- ::Float::INFINITY
10
- end
11
- end
12
- end
13
- end
@@ -1,50 +0,0 @@
1
- module ActiveRecord
2
- module Type
3
- class Binary < Value # :nodoc:
4
- def type
5
- :binary
6
- end
7
-
8
- def binary?
9
- true
10
- end
11
-
12
- def type_cast(value)
13
- if value.is_a?(Data)
14
- value.to_s
15
- else
16
- super
17
- end
18
- end
19
-
20
- def type_cast_for_database(value)
21
- return if value.nil?
22
- Data.new(super)
23
- end
24
-
25
- def changed_in_place?(raw_old_value, value)
26
- old_value = type_cast_from_database(raw_old_value)
27
- old_value != value
28
- end
29
-
30
- class Data # :nodoc:
31
- def initialize(value)
32
- @value = value.to_s
33
- end
34
-
35
- def to_s
36
- @value
37
- end
38
- alias_method :to_str, :to_s
39
-
40
- def hex
41
- @value.unpack('H*')[0]
42
- end
43
-
44
- def ==(other)
45
- other == to_s || super
46
- end
47
- end
48
- end
49
- end
50
- end