sequel 4.49.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -6,7 +6,7 @@ Sequel supports reflection information in multiple ways.
6
6
 
7
7
  You can get the adapter in use using Database#adapter_scheme:
8
8
 
9
- DB.adapter_scheme # e.g. :postgres, :jdbc, :odbc
9
+ DB.adapter_scheme # :postgres, :jdbc, :odbc
10
10
 
11
11
  == Database Connected To
12
12
 
@@ -97,17 +97,17 @@ You can get an array of association symbols with Model.associations:
97
97
 
98
98
  Model.associations # [:association1, :association2, ...]
99
99
 
100
- You can get the association reflection for a single association via the Model.association_reflection. Association reflections are subclasses of hash, for ease of use and introspection (and backwards compatibility):
100
+ You can get the association reflection for a single association via the Model.association_reflection. Association reflections are subclasses of hash:
101
101
 
102
- Model.association_reflection(:association1) # {:name=>:association1, :type=>:many_to_one, :model=>Model, ...}
102
+ Model.association_reflection(:association1) # #<Sequel::Model::Associations::ManyToOneAssociationReflection Model.many_to_one :association1>
103
103
 
104
104
  You can get an array of all association reflections via Model.all_association_reflections:
105
105
 
106
- Model.all_association_reflections # [{:name=>:association1, :type=>:many_to_one, :model=>Model, ...}, ...]
106
+ Model.all_association_reflections # [#<Sequel::Model::Associations::ManyToOneAssociationReflection Model.many_to_one :association1>, ...]
107
107
 
108
108
  Finally, you can get a hash of association reflections via Model.association_reflections:
109
109
 
110
- Model.association_reflections # {:association1=>{:name=>:association1, :type=>:many_to_one, :model=>Model, ...}, ...}
110
+ Model.association_reflections # {:association1=>#<Sequel::Model::Associations::ManyToOneAssociationReflection Model.many_to_one :association1>, ...}
111
111
 
112
112
  == Validations Defined
113
113
 
@@ -118,4 +118,3 @@ When using the validation_class_methods plugin, you can use the validation_refle
118
118
  Similarly, when using the constraint_validations plugin, you can use the constraint_validation_reflections class method:
119
119
 
120
120
  Model.constraint_validation_reflections[:column] # => [[:presence, {}], [:max_length, {:argument=>255, :message=>'is just too long'}]]
121
-
@@ -0,0 +1,159 @@
1
+ = Major Changes
2
+
3
+ * Datasets are now frozen by default. Since Sequel's inception,
4
+ datasets have used a method-chaining API that returned modified
5
+ copies, but previously they still supported direct mutation. Now,
6
+ datasets are always frozen and cannot be mutated. This allows many
7
+ additional default optimizations related to caching, and provides
8
+ greater thread safety.
9
+
10
+ ds = DB[:table]
11
+
12
+ # Before
13
+ ds.row_proc = lambda{|h| h}
14
+
15
+ # Now
16
+ ds = ds.with_row_proc(lambda{|h| h})
17
+
18
+ * Symbol splitting to create qualified and/or aliased identifiers is
19
+ now disabled by default. While symbol splitting allowed for shorter
20
+ code, it was not obvious and caused significant issues when using
21
+ column names with embedded double or triple underscores. Sequel now
22
+ offers many ways to create qualified and/or aliased identifiers.
23
+
24
+ # Before
25
+ :table__column # "table"."column"
26
+
27
+ # Now
28
+ :table__column # "table__column"
29
+ Sequel[:table][:column] # "table"."column"
30
+
31
+ # To get back historical behavior
32
+ Sequel.split_symbols = true
33
+
34
+ * Sequel no longer allows the use of plain ruby strings as SQL code
35
+ fragments in the dataset filtering methods, as that makes it
36
+ easier to introduce SQL injection vulnerabilities. You can use
37
+ Sequel.lit to create literal strings (SQL code fragments), which
38
+ makes it easier to do security auditing of applications using
39
+ Sequel.
40
+
41
+ # Before
42
+ DB[:table].where("column = 1").all
43
+
44
+ # Now
45
+ DB[:table].where(Sequel.lit("column = 1")).all
46
+ # or better
47
+ DB[:table].where(column: 1).all
48
+
49
+ # To get back historical behavior
50
+ DB.extension :auto_literal_strings
51
+
52
+ = Backwards Compatibility
53
+
54
+ * All adapters, extensions, plugins, features, and constants
55
+ deprecated in 4.49.0 have been removed. Before upgrading to Sequel
56
+ 5.0.0, upgrade to 4.49.0 and fix all deprecation warnings.
57
+
58
+ * Support for ruby 1.8.7 has been dropped, the minimum ruby version is
59
+ now 1.9.2.
60
+
61
+ * The {before,after,around}_validation hooks are now always called
62
+ when saving, even if the validate: false option is used. This
63
+ allows you to use the before_validation hook to make changes
64
+ to the model instance that are required before validation and
65
+ before saving even if not validating.
66
+
67
+ * Getting column values for newly created model instances after
68
+ insertion now happens before after_create is called, instead of
69
+ after.
70
+
71
+ * Sequel now immediately attempts to the connect to the database
72
+ when a Database instance is created, in order to fail fast if the
73
+ connection parameters are invalid.
74
+
75
+ * The validates_unique method in the validation_helpers plugin
76
+ now only checks for uniqueness by default if the record is new or
77
+ one of the related columns has been modified by default.
78
+
79
+ * Database schema modification methods and schema generator methods
80
+ now return nil instead of some internal value.
81
+
82
+ * Many cases where Sequel used Kernel#send internally have been
83
+ switched to Kernel#public_send so they only call public methods.
84
+
85
+ * Model association hooks are now nil instead of empty arrays by
86
+ default.
87
+
88
+ * Internal uses of instance_eval with a block have been changed to
89
+ instance_exec. This allows them to be used with lambdas that
90
+ take no arguments.
91
+
92
+ * Most internal constants are now frozen, unless there is a
93
+ requirement that they be modified at runtime.
94
+
95
+ * The Model @was_new instance variable is now no longer set when
96
+ saving new model instances.
97
+
98
+ * The private Sequel::Postgres::PGArray::Parser#new_entry_buffer
99
+ method in the pg_array extension has been removed.
100
+
101
+ * Modifying Model.input_transformer_order in the input_transformer
102
+ plugin no longer has an effect.
103
+
104
+ = New Features
105
+
106
+ * Database#add_index :if_not_exists option is now supported on
107
+ PostgreSQL 9.5+.
108
+
109
+ * SQL::Subscript#expression has been added to retrieve the
110
+ expression that is subscripted.
111
+
112
+ = Other Improvements
113
+
114
+ * Threaded connection pools no longer block while new connections
115
+ are being made. Previously, attempting to establish a new
116
+ connection blocked all connection pool activity until the new
117
+ connection was made.
118
+
119
+ * Many minor performance improvements have been made.
120
+
121
+ * The class_table_inheritance plugin now raises an error during
122
+ Model#update if a query does not modify a single row, just as
123
+ the default Model#update does.
124
+
125
+ * ConnectionPool#size is now thread-safe in both threaded
126
+ connection pools. Internal callers that already have the
127
+ connection pool mutex should switch to using #_size (a new
128
+ private method).
129
+
130
+ * Registration of new serialization formats in the serialization
131
+ plugin is now thread-safe.
132
+
133
+ * If transactional schema modifications are not supported, a
134
+ savepoint will not automatically be created when adding
135
+ indexes for new tables inside transactions. This fixes issues
136
+ when making schema changes inside transactions on MySQL.
137
+
138
+ * Attempting to create a prepared statement using a dataset that
139
+ uses a delayed evaluation now raises an error, because the
140
+ prepared statement would not respect the delayed evaluation.
141
+
142
+ * The bin/sequel -M option now uses base 10. Previously, it
143
+ used the Kernel#Integer default, which was base 8 if there was
144
+ a preceding 0.
145
+
146
+ = Deprecated Features
147
+
148
+ These deprecated features will be removed in Sequel 5.1.0.
149
+
150
+ * Model.allowed_columns in the base plugin is now deprecated. Use
151
+ the whitelist_security plugin if you want to call it.
152
+
153
+ * Model use_after_commit_rollback class and instance accessors are
154
+ now deprecated.
155
+
156
+ * Defining the Model#_before_validation method is now deprecated.
157
+ You can change to using before_validation.
158
+
159
+ * The private Model.plugin_module_defined? method is now deprecated.
@@ -25,27 +25,27 @@ type for the given database. So while you specified +String+, Sequel will actua
25
25
  +text+ depending on the underlying database. Here's a list of all ruby classes that Sequel will
26
26
  convert to database types:
27
27
 
28
- create_table(:columns_types) do # common database type used
29
- Integer :a0 # integer
30
- String :a1 # varchar(255)
31
- String :a2, :size=>50 # varchar(50)
32
- String :a3, :fixed=>true # char(255)
33
- String :a4, :fixed=>true, :size=>50 # char(50)
34
- String :a5, :text=>true # text
35
- File :b # blob
36
- Fixnum :c # integer
37
- Bignum :d # bigint
38
- Float :e # double precision
39
- BigDecimal :f # numeric
40
- BigDecimal :f2, :size=>10 # numeric(10)
41
- BigDecimal :f3, :size=>[10, 2] # numeric(10, 2)
42
- Date :g # date
43
- DateTime :h # timestamp
44
- Time :i # timestamp
45
- Time :i2, :only_time=>true # time
46
- Numeric :j # numeric
47
- TrueClass :k # boolean
48
- FalseClass :l # boolean
28
+ create_table(:columns_types) do # common database type used
29
+ Integer :a0 # integer
30
+ String :a1 # varchar(255)
31
+ String :a2, size: 50 # varchar(50)
32
+ String :a3, fixed: true # char(255)
33
+ String :a4, fixed: true, size: 50 # char(50)
34
+ String :a5, text: true # text
35
+ File :b # blob
36
+ Fixnum :c # integer
37
+ Bignum :d # bigint
38
+ Float :e # double precision
39
+ BigDecimal :f # numeric
40
+ BigDecimal :f2, size: 10 # numeric(10)
41
+ BigDecimal :f3, size: [10, 2] # numeric(10, 2)
42
+ Date :g # date
43
+ DateTime :h # timestamp
44
+ Time :i # timestamp
45
+ Time :i2, only_time: true # time
46
+ Numeric :j # numeric
47
+ TrueClass :k # boolean
48
+ FalseClass :l # boolean
49
49
  end
50
50
 
51
51
  Note that in addition to the ruby class name, Sequel also pays attention to the column options when
@@ -89,7 +89,7 @@ method, the fourth argument is the options hash. The following options are supp
89
89
  options for the index.
90
90
  :null :: Mark the column as allowing NULL values (if true),
91
91
  or not allowing NULL values (if false). If unspecified, will default
92
- to whatever the database default is.
92
+ to whatever the database default is (usually true).
93
93
  :primary_key :: Mark this column as the primary key. This is used instead of the
94
94
  primary key method if you want a non-autoincrementing primary key.
95
95
  :primary_key_constraint_name :: The name to give the primary key constraint.
@@ -98,7 +98,7 @@ method, the fourth argument is the options hash. The following options are supp
98
98
  as +primary_key+ or +foreign_key+.
99
99
  :unique :: Mark the column as unique, generally has the same effect as
100
100
  creating a unique index on the column.
101
- :unique_constraint_name :: The name to give the unique key constraint.
101
+ :unique_constraint_name :: The name to give the unique constraint.
102
102
 
103
103
  === Other methods
104
104
 
@@ -112,14 +112,14 @@ You've seen this one used already. It's used to create an autoincrementing inte
112
112
 
113
113
  If you want an autoincrementing 64-bit integer:
114
114
 
115
- create_table(:a0){primary_key :id, :type=>:Bignum}
115
+ create_table(:a0){primary_key :id, type: :Bignum}
116
116
 
117
117
  If you want to create a primary key column that doesn't use an autoincrementing integer, you should
118
118
  not use this method. Instead, you should use the :primary_key option to the +column+ method or type
119
119
  method:
120
120
 
121
- create_table(:a1){Integer :id, :primary_key=>true} # Non autoincrementing integer primary key
122
- create_table(:a2){String :name, :primary_key=>true} # varchar(255) primary key
121
+ create_table(:a1){Integer :id, primary_key: true} # Non autoincrementing integer primary key
122
+ create_table(:a2){String :name, primary_key: true} # varchar(255) primary key
123
123
 
124
124
  If you want to create a composite primary key, you should call the +primary_key+ method with an
125
125
  array of column symbols. You can provide a specific name to use for the primary key constraint
@@ -128,7 +128,7 @@ via the :name option:
128
128
  create_table(:items) do
129
129
  Integer :group_id
130
130
  Integer :position
131
- primary_key [:group_id, :position], :name=>:items_pk
131
+ primary_key [:group_id, :position], name: :items_pk
132
132
  end
133
133
 
134
134
  If provided with an array, +primary_key+ does not create a column, it just sets up the primary key constraint.
@@ -147,7 +147,7 @@ as its third argument. A simple example is:
147
147
 
148
148
  +foreign_key+ accepts the same options as +column+. For example, to have a unique foreign key with varchar(16) type:
149
149
 
150
- foreign_key :column_name, :table, :unique=>true, :type=>'varchar(16)'
150
+ foreign_key :column_name, :table, unique: true, type: 'varchar(16)'
151
151
 
152
152
  +foreign_key+ also accepts some specific options:
153
153
 
@@ -186,7 +186,7 @@ When using an array of symbols, you can also provide a :name option to name the
186
186
  String :artist_name
187
187
  String :artist_location
188
188
  String :name
189
- foreign_key [:artist_name, :artist_location], :artists, :name=>'albums_artist_name_location_fkey'
189
+ foreign_key [:artist_name, :artist_location], :artists, name: 'albums_artist_name_location_fkey'
190
190
  end
191
191
 
192
192
  If you want to add a foreign key for a single column with a named constraint, you must use
@@ -196,7 +196,7 @@ the array form with a single symbol:
196
196
  primary_key :id
197
197
  Integer :artist_id
198
198
  String :name
199
- foreign_key [:artist_id], :artists, :name=>'albums_artist_id_fkey'
199
+ foreign_key [:artist_id], :artists, name: 'albums_artist_id_fkey'
200
200
  end
201
201
 
202
202
  ==== +index+
@@ -204,18 +204,18 @@ the array form with a single symbol:
204
204
  +index+ creates indexes on the table. For single columns, calling index is the same as using the
205
205
  <tt>:index</tt> option when creating the column:
206
206
 
207
- create_table(:a){Integer :id, :index=>true}
207
+ create_table(:a){Integer :id, index: true}
208
208
  # Same as:
209
209
  create_table(:a) do
210
210
  Integer :id
211
211
  index :id
212
212
  end
213
213
 
214
- create_table(:a){Integer :id, :index=>{:unique=>true}}
214
+ create_table(:a){Integer :id, index: {unique: true}}
215
215
  # Same as:
216
216
  create_table(:a) do
217
217
  Integer :id
218
- index :id, :unique=>true
218
+ index :id, unique: true
219
219
  end
220
220
 
221
221
  Similar to the +primary_key+ and +foreign_key+ methods, calling +index+ with an array of symbols
@@ -241,11 +241,11 @@ The +unique+ method creates a unique constraint on the table. A unique constrai
241
241
  operates identically to a unique index, so the following three +create_table+ blocks are
242
242
  pretty much identical:
243
243
 
244
- create_table(:a){Integer :a, :unique=>true}
244
+ create_table(:a){Integer :a, unique: true}
245
245
 
246
246
  create_table(:a) do
247
247
  Integer :a
248
- index :a, :unique=>true
248
+ index :a, unique: true
249
249
  end
250
250
 
251
251
  create_table(:a) do
@@ -304,23 +304,23 @@ constraint, as that makes it easier to drop the constraint later if necessary.
304
304
 
305
305
  +create_join_table+ is a shortcut that you can use to create simple many-to-many join tables:
306
306
 
307
- create_join_table(:artist_id=>:artists, :album_id=>:albums)
307
+ create_join_table(artist_id: :artists, album_id: :albums)
308
308
 
309
309
  which expands to:
310
310
 
311
311
  create_table(:albums_artists) do
312
- foreign_key :album_id, :albums, :null=>false
313
- foreign_key :artist_id, :artists, :null=>false
312
+ foreign_key :album_id, :albums
313
+ foreign_key :artist_id, :artists
314
314
  primary_key [:album_id, :artist_id]
315
315
  index [:artist_id, :album_id]
316
316
  end
317
317
 
318
- == <tt>create_table :as=></tt>
318
+ == <tt>create_table :as</tt>
319
319
 
320
320
  To create a table from the result of a SELECT query, instead of passing a block
321
321
  to +create_table+, provide a dataset to the :as option:
322
322
 
323
- create_table(:older_items, :as=>DB[:items].where{updated_at < Date.today << 6})
323
+ create_table(:older_items, as: DB[:items].where{updated_at < Date.today << 6})
324
324
 
325
325
  == +alter_table+
326
326
 
@@ -336,7 +336,7 @@ argument is the column name, the second is the type, and the third is an options
336
336
  hash:
337
337
 
338
338
  alter_table(:albums) do
339
- add_column :copies_sold, Integer, :default=>0
339
+ add_column :copies_sold, Integer, default: 0
340
340
  end
341
341
 
342
342
  === +drop_column+
@@ -374,6 +374,12 @@ Sequel will not add a column, but will add a composite primary key constraint:
374
374
  add_primary_key [:album_id, :artist_id]
375
375
  end
376
376
 
377
+ It is possible to specify a name for the primary key constraint: via the :name option:
378
+
379
+ alter_table(:albums_artists) do
380
+ add_primary_key [:album_id, :artist_id], :name=>:albums_artists_pkey
381
+ end
382
+
377
383
  If you just want to take an existing single column and make it a primary key, call
378
384
  +add_primary_key+ with an array with a single symbol:
379
385
 
@@ -396,14 +402,14 @@ array with a single element. It's encouraged to provide a name when adding the
396
402
  via the :name option:
397
403
 
398
404
  alter_table(:albums) do
399
- add_foreign_key [:artist_id], :artists, :name=>:albums_artist_id_fkey
405
+ add_foreign_key [:artist_id], :artists, name: :albums_artist_id_fkey
400
406
  end
401
407
 
402
408
  To set up a multiple column foreign key constraint, use an array with multiple column
403
409
  symbols:
404
410
 
405
411
  alter_table(:albums) do
406
- add_foreign_key [:artist_name, :artist_location], :artists, :name=>:albums_artist_name_location_fkey
412
+ add_foreign_key [:artist_name, :artist_location], :artists, name: :albums_artist_name_location_fkey
407
413
  end
408
414
 
409
415
  === +drop_foreign_key+
@@ -420,13 +426,13 @@ an array. It's encouraged to use the :name option to provide the constraint nam
420
426
  drop, though on some databases Sequel may be able to find the name through introspection:
421
427
 
422
428
  alter_table(:albums) do
423
- drop_foreign_key [:artist_id], :name=>:albums_artist_id_fkey
429
+ drop_foreign_key [:artist_id], name: :albums_artist_id_fkey
424
430
  end
425
431
 
426
432
  An array is also used to drop a composite foreign key constraint:
427
433
 
428
434
  alter_table(:albums) do
429
- drop_foreign_key [:artist_name, :artist_location], :name=>:albums_artist_name_location_fkey
435
+ drop_foreign_key [:artist_name, :artist_location], name: :albums_artist_name_location_fkey
430
436
  end
431
437
 
432
438
  If you do not provide a :name option and Sequel is not able to determine the name
@@ -445,7 +451,7 @@ It accepts the same options as +create_table+'s +index+ method, and you can set
445
451
  a multiple column index using an array:
446
452
 
447
453
  alter_table(:albums_artists) do
448
- add_index [:album_id, :artist_id], :unique=>true
454
+ add_index [:album_id, :artist_id], unique: true
449
455
  end
450
456
 
451
457
  === +drop_index+
@@ -461,7 +467,7 @@ Just like +drop_column+, it is often used in the +down+ block of a migration.
461
467
  To drop an index with a specific name, use the <tt>:name</tt> option:
462
468
 
463
469
  alter_table(:albums) do
464
- drop_index :artist_id, :name=>:artists_id_index
470
+ drop_index :artist_id, name: :artists_id_index
465
471
  end
466
472
 
467
473
  === +add_full_text_index+, +add_spatial_index+
@@ -480,7 +486,7 @@ method:
480
486
 
481
487
  There is no method to add an unnamed constraint, but you can pass +nil+ as the first
482
488
  argument of +add_constraint+ to do so. However, it's not recommended to do that
483
- as it is difficult to drop such a constraint.
489
+ as it is more difficult to drop such a constraint.
484
490
 
485
491
  === +add_unique_constraint+
486
492
 
@@ -491,6 +497,12 @@ method. This usually has the same effect as adding a unique index.
491
497
  add_unique_constraint [:artist_id, :name]
492
498
  end
493
499
 
500
+ You can also specify a name via the :name option when adding the constraint:
501
+
502
+ alter_table(:albums) do
503
+ add_unique_constraint [:artist_id, :name], name: :albums_artist_id_name_ukey
504
+ end
505
+
494
506
  === +drop_constraint+
495
507
 
496
508
  This method drops an existing named constraint:
@@ -506,9 +518,9 @@ For that reason, you should not add unnamed constraints that you ever might need
506
518
  On some databases, you must specify the type of constraint via a <tt>:type</tt> option:
507
519
 
508
520
  alter_table(:albums) do
509
- drop_constraint(:albums_pk, :type=>:primary_key)
510
- drop_constraint(:albums_fk, :type=>:foreign_key)
511
- drop_constraint(:albums_uk, :type=>:unique)
521
+ drop_constraint(:albums_pk, type: :primary_key)
522
+ drop_constraint(:albums_fk, type: :foreign_key)
523
+ drop_constraint(:albums_uk, type: :unique)
512
524
  end
513
525
 
514
526
  === +set_column_default+
@@ -597,9 +609,6 @@ the table if the table already exists. On some databases, it uses
597
609
  <tt>IF NOT EXISTS</tt>, on others it does a separate query to check for
598
610
  existence.
599
611
 
600
- This should not be used inside migrations, as if the table does not
601
- exist, it may mess up the migration.
602
-
603
612
  === +rename_table+
604
613
 
605
614
  You can rename an existing table using +rename_table+. Like +rename_column+,
@@ -623,9 +632,6 @@ is the same as:
623
632
  primary_key :id
624
633
  end
625
634
 
626
- It should not be used inside migrations, as if the table does not exist, it may
627
- mess up the migration.
628
-
629
635
  === <tt>create_table?</tt>
630
636
 
631
637
  <tt>create_table?</tt> only creates the table if it does
@@ -643,8 +649,6 @@ is the same as:
643
649
  end
644
650
  end
645
651
 
646
- Like <tt>create_table!</tt>, it should not be used inside migrations.
647
-
648
652
  === +create_view+ and +create_or_replace_view+
649
653
 
650
654
  These can be used to create views. The difference between them is that
@@ -662,4 +666,3 @@ second argument:
662
666
  arguments:
663
667
 
664
668
  drop_view(:gold_albums, :platinum_albums)
665
-