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
@@ -7,12 +7,8 @@ module Sequel
7
7
  # This methods generally execute SQL code on the database server.
8
8
  # ---------------------
9
9
 
10
- STRING_DEFAULT_RE = /\A'(.*)'\z/
11
- Sequel::Deprecation.deprecate_constant(self, :STRING_DEFAULT_RE)
12
- CURRENT_TIMESTAMP_RE = /now|today|CURRENT|getdate|\ADate\(\)\z/i
13
- Sequel::Deprecation.deprecate_constant(self, :CURRENT_TIMESTAMP_RE)
14
- COLUMN_SCHEMA_DATETIME_TYPES = [:date, :datetime]#.freeze # SEQUEL5
15
- COLUMN_SCHEMA_STRING_TYPES = [:string, :blob, :date, :datetime, :time, :enum, :set, :interval]#.freeze # SEQUEL5
10
+ COLUMN_SCHEMA_DATETIME_TYPES = [:date, :datetime].freeze
11
+ COLUMN_SCHEMA_STRING_TYPES = [:string, :blob, :date, :datetime, :time, :enum, :set, :interval].freeze
16
12
 
17
13
  # The prepared statement object hash for this database, keyed by name symbol
18
14
  attr_reader :prepared_statements
@@ -34,7 +30,7 @@ module Sequel
34
30
  # Call the prepared statement with the given name with the given hash
35
31
  # of arguments.
36
32
  #
37
- # DB[:items].where(:id=>1).prepare(:first, :sa)
33
+ # DB[:items].where(id: 1).prepare(:first, :sa)
38
34
  # DB.call(:sa) # SELECT * FROM items WHERE id = 1
39
35
  def call(ps_name, hash={}, &block)
40
36
  prepared_statement(ps_name).call(hash, &block)
@@ -47,7 +43,7 @@ module Sequel
47
43
  execute_dui(sql, opts, &block)
48
44
  end
49
45
 
50
- # Method that should be used when issuing a DELETE, UPDATE, or INSERT
46
+ # Method that should be used when issuing a DELETE or UPDATE
51
47
  # statement. By default, calls execute.
52
48
  # This method should not be called directly by user code.
53
49
  def execute_dui(sql, opts=OPTS, &block)
@@ -61,11 +57,11 @@ module Sequel
61
57
  execute_dui(sql, opts, &block)
62
58
  end
63
59
 
64
- # Returns a single value from the database, e.g.:
60
+ # Returns a single value from the database, see Dataset#get.
65
61
  #
66
62
  # DB.get(1) # SELECT 1
67
63
  # # => 1
68
- # DB.get{server_version{}} # SELECT server_version()
64
+ # DB.get{server_version.function} # SELECT server_version()
69
65
  def get(*args, &block)
70
66
  @default_dataset.get(*args, &block)
71
67
  end
@@ -310,9 +306,8 @@ module Sequel
310
306
 
311
307
  # Remove the cached schema for the given schema name
312
308
  def remove_cached_schema(table)
313
- #SEQUEL5
314
- #cache = @default_dataset.send(:cache)
315
- #Sequel.synchronize{cache.clear}
309
+ cache = @default_dataset.send(:cache)
310
+ Sequel.synchronize{cache.clear}
316
311
  k = quote_schema_table(table)
317
312
  Sequel.synchronize{@schemas.delete(k)}
318
313
  end
@@ -20,13 +20,13 @@ module Sequel
20
20
  # Classes specifying generic types that Sequel will convert to database-specific types.
21
21
  GENERIC_TYPES=%w'String Integer Float Numeric BigDecimal Date DateTime Time File TrueClass FalseClass'.freeze
22
22
 
23
- # Return the column hashes created by this generator
23
+ # Column hashes created by this generator
24
24
  attr_reader :columns
25
25
 
26
- # Return the constraint hashes created by this generator
26
+ # Constraint hashes created by this generator
27
27
  attr_reader :constraints
28
28
 
29
- # Return the index hashes created by this generator
29
+ # Index hashes created by this generator
30
30
  attr_reader :indexes
31
31
 
32
32
  # Set the database in which to create the table, and evaluate the block
@@ -37,7 +37,7 @@ module Sequel
37
37
  @indexes = []
38
38
  @constraints = []
39
39
  @primary_key = nil
40
- instance_eval(&block) if block
40
+ instance_exec(&block) if block
41
41
  @columns.unshift(@primary_key) if @primary_key && !has_column?(primary_key_name)
42
42
  end
43
43
 
@@ -57,30 +57,35 @@ module Sequel
57
57
  # with that type as a constant. Types given should either already
58
58
  # be constants/classes or a capitalized string/symbol with the same name
59
59
  # as a constant/class.
60
- #
61
- # Do not call this method with untrusted input, as that can result in
62
- # arbitrary code execution.
63
60
  def self.add_type_method(*types)
64
61
  types.each do |type|
65
- class_eval("def #{type}(name, opts={}); column(name, #{type}, opts); end", __FILE__, __LINE__)
62
+ case type
63
+ when Symbol, String
64
+ method = type
65
+ type = Object.const_get(type)
66
+ else
67
+ method = type.to_s
68
+ end
69
+
70
+ define_method(method){|name, opts={}| column(name, type, opts)}
66
71
  end
72
+ nil
67
73
  end
68
74
 
69
- # Add an unnamed constraint to the DDL, specified by the given block
75
+ # Add an unnamed constraint, specified by the given block
70
76
  # or args:
71
77
  #
72
- # check(:num=>1..5) # CHECK num >= 1 AND num <= 5
73
- # check{num > 5} # CHECK num > 5
78
+ # check(num: 1..5) # CHECK num >= 1 AND num <= 5
79
+ # check{num > 5} # CHECK num > 5
74
80
  def check(*args, &block)
75
81
  constraint(nil, *args, &block)
76
82
  end
77
83
 
78
- # Add a column with the given name, type, and opts to the DDL.
79
- #
84
+ # Add a column with the given name, type, and opts #
80
85
  # column :num, :integer
81
86
  # # num INTEGER
82
87
  #
83
- # column :name, String, :null=>false, :default=>'a'
88
+ # column :name, String, null: false, default: 'a'
84
89
  # # name varchar(255) NOT NULL DEFAULT 'a'
85
90
  #
86
91
  # inet :ip
@@ -111,14 +116,14 @@ module Sequel
111
116
  # references the primary key of the associated table, except if you are
112
117
  # using MySQL.
113
118
  # :null :: Mark the column as allowing NULL values (if true),
114
- # or not allowing NULL values (if false). If unspecified, will default
115
- # to whatever the database default is.
119
+ # or not allowing NULL values (if false). The default is to allow NULL values.
116
120
  # :on_delete :: Specify the behavior of this column when being deleted
117
121
  # (:restrict, :cascade, :set_null, :set_default, :no_action).
118
122
  # :on_update :: Specify the behavior of this column when being updated
119
123
  # (:restrict, :cascade, :set_null, :set_default, :no_action).
120
- # :primary_key :: Make the column as a single primary key column. This should only
121
- # be used if you have a single, nonautoincrementing primary key column.
124
+ # :primary_key :: Make the column as a single primary key column. This should not
125
+ # be used if you have a single, nonautoincrementing primary key column
126
+ # (use the primary_key method in that case).
122
127
  # :primary_key_constraint_name :: The name to give the primary key constraint
123
128
  # :type :: Overrides the type given as the argument. Generally not used by column
124
129
  # itself, but can be passed as an option to other methods that call column.
@@ -130,28 +135,30 @@ module Sequel
130
135
  if index_opts = opts[:index]
131
136
  index(name, index_opts.is_a?(Hash) ? index_opts : {})
132
137
  end
138
+ nil
133
139
  end
134
140
 
135
- # Adds a named constraint (or unnamed if name is nil) to the DDL,
141
+ # Adds a named constraint (or unnamed if name is nil),
136
142
  # with the given block or args. To provide options for the constraint, pass
137
143
  # a hash as the first argument.
138
144
  #
139
- # constraint(:blah, :num=>1..5)
145
+ # constraint(:blah, num: 1..5)
140
146
  # # CONSTRAINT blah CHECK num >= 1 AND num <= 5
141
- # constraint({:name=>:blah, :deferrable=>true}, :num=>1..5)
147
+ # constraint({name: :blah, deferrable: true}, num: 1..5)
142
148
  # # CONSTRAINT blah CHECK num >= 1 AND num <= 5 DEFERRABLE INITIALLY DEFERRED
143
149
  def constraint(name, *args, &block)
144
150
  opts = name.is_a?(Hash) ? name : {:name=>name}
145
151
  constraints << opts.merge(:type=>:check, :check=>block || args)
152
+ nil
146
153
  end
147
154
 
148
- # Add a foreign key in the table that references another table to the DDL. See column
155
+ # Add a foreign key in the table that references another table. See column
149
156
  # for available options.
150
157
  #
151
158
  # foreign_key(:artist_id) # artist_id INTEGER
152
159
  # foreign_key(:artist_id, :artists) # artist_id INTEGER REFERENCES artists
153
- # foreign_key(:artist_id, :artists, :key=>:id) # artist_id INTEGER REFERENCES artists(id)
154
- # foreign_key(:artist_id, :artists, :type=>String) # artist_id varchar(255) REFERENCES artists(id)
160
+ # foreign_key(:artist_id, :artists, key: :id) # artist_id INTEGER REFERENCES artists(id)
161
+ # foreign_key(:artist_id, :artists, type: String) # artist_id varchar(255) REFERENCES artists(id)
155
162
  #
156
163
  # Additional Options:
157
164
  #
@@ -161,7 +168,7 @@ module Sequel
161
168
  # composite foreign key), you can provide an array of columns as the first argument, and
162
169
  # you can provide the :name option to name the constraint:
163
170
  #
164
- # foreign_key([:artist_name, :artist_location], :artists, :name=>:artist_fk)
171
+ # foreign_key([:artist_name, :artist_location], :artists, name: :artist_fk)
165
172
  # # ADD CONSTRAINT artist_fk FOREIGN KEY (artist_name, artist_location) REFERENCES artists
166
173
  def foreign_key(name, table=nil, opts = OPTS)
167
174
  opts = case table
@@ -176,7 +183,7 @@ module Sequel
176
183
  column(name, Integer, opts)
177
184
  end
178
185
 
179
- # Add a full text index on the given columns to the DDL.
186
+ # Add a full text index on the given columns.
180
187
  #
181
188
  # PostgreSQL specific options:
182
189
  # :index_type :: Can be set to :gist to use a GIST index instead of the
@@ -189,12 +196,12 @@ module Sequel
189
196
  index(columns, opts.merge(:type => :full_text))
190
197
  end
191
198
 
192
- # True if the DDL includes the creation of a column with the given name.
199
+ # True if the generator includes the creation of a column with the given name.
193
200
  def has_column?(name)
194
201
  columns.any?{|c| c[:name] == name}
195
202
  end
196
203
 
197
- # Add an index on the given column(s) with the given options to the DDL.
204
+ # Add an index on the given column(s) with the given options.
198
205
  # General options:
199
206
  #
200
207
  # :name :: The name to use for the index. If not given, a default name
@@ -222,9 +229,10 @@ module Sequel
222
229
  # # CREATE INDEX table_artist_id_name_index ON table (artist_id, name)
223
230
  def index(columns, opts = OPTS)
224
231
  indexes << {:columns => Array(columns)}.merge!(opts)
232
+ nil
225
233
  end
226
234
 
227
- # Add a column with the given type, name, and opts to the DDL. See +column+ for available
235
+ # Add a column with the given type, name, and opts. See +column+ for available
228
236
  # options.
229
237
  def method_missing(type, name = nil, opts = OPTS)
230
238
  name ? column(name, type, opts) : super
@@ -235,7 +243,7 @@ module Sequel
235
243
  true
236
244
  end
237
245
 
238
- # Adds an autoincrementing primary key column or a primary key constraint to the DDL.
246
+ # Adds an autoincrementing primary key column or a primary key constraint.
239
247
  # To just create a constraint, the first argument should be an array of column symbols
240
248
  # specifying the primary key columns. To create an autoincrementing primary key
241
249
  # column, a single symbol can be used. In both cases, an options hash can be used
@@ -243,7 +251,7 @@ module Sequel
243
251
  #
244
252
  # If you want to create a primary key column that is not autoincrementing, you
245
253
  # should not use this method. Instead, you should use the regular +column+ method
246
- # with a <tt>:primary_key=>true</tt> option.
254
+ # with a <tt>primary_key: true</tt> option.
247
255
  #
248
256
  # If an array of column symbols is used, you can specify the :name option
249
257
  # to name the constraint.
@@ -256,8 +264,8 @@ module Sequel
256
264
  # Examples:
257
265
  # primary_key(:id)
258
266
  # primary_key(:id, Bigint)
259
- # primary_key(:id, Bigint, :keep_order=>true)
260
- # primary_key([:street_number, :house_number], :name=>:some constraint_name)
267
+ # primary_key(:id, Bigint, keep_order: true)
268
+ # primary_key([:street_number, :house_number], name: :some constraint_name)
261
269
  def primary_key(name, *args)
262
270
  return composite_primary_key(name, *args) if name.is_a?(Array)
263
271
  column = @db.serial_primary_key_options.merge({:name => name})
@@ -276,6 +284,7 @@ module Sequel
276
284
  else
277
285
  columns.unshift(column)
278
286
  end
287
+ nil
279
288
  end
280
289
 
281
290
  # The name of the primary key for this generator, if it has a primary key.
@@ -283,12 +292,12 @@ module Sequel
283
292
  @primary_key[:name] if @primary_key
284
293
  end
285
294
 
286
- # Add a spatial index on the given columns to the DDL.
295
+ # Add a spatial index on the given columns.
287
296
  def spatial_index(columns, opts = OPTS)
288
297
  index(columns, opts.merge(:type => :spatial))
289
298
  end
290
299
 
291
- # Add a unique constraint on the given columns to the DDL.
300
+ # Add a unique constraint on the given columns.
292
301
  #
293
302
  # unique(:name) # UNIQUE (name)
294
303
  #
@@ -296,6 +305,7 @@ module Sequel
296
305
  # to name the constraint.
297
306
  def unique(columns, opts = OPTS)
298
307
  constraints << {:type => :unique, :columns => Array(columns)}.merge!(opts)
308
+ nil
299
309
  end
300
310
 
301
311
  private
@@ -304,20 +314,18 @@ module Sequel
304
314
  def composite_primary_key(columns, *args)
305
315
  opts = args.pop || {}
306
316
  constraints << {:type => :primary_key, :columns => columns}.merge!(opts)
317
+ nil
307
318
  end
308
319
 
309
320
  # Add a composite foreign key constraint
310
321
  def composite_foreign_key(columns, opts)
311
322
  constraints << {:type => :foreign_key, :columns => columns}.merge!(opts)
323
+ nil
312
324
  end
313
325
 
314
326
  add_type_method(*GENERIC_TYPES)
315
327
  end
316
328
 
317
- # Alias of CreateTableGenerator for backwards compatibility.
318
- Generator = CreateTableGenerator
319
- Sequel::Deprecation.deprecate_constant(self, :Generator)
320
-
321
329
  # Schema::AlterTableGenerator is an internal class that the user is not expected
322
330
  # to instantiate directly. Instances are created by Database#alter_table.
323
331
  # It is used to specify table alteration parameters. It takes a Database
@@ -328,18 +336,18 @@ module Sequel
328
336
  # For more information on Sequel's support for schema modification, see
329
337
  # the {"Schema Modification" guide}[link:files/doc/schema_modification_rdoc.html].
330
338
  class AlterTableGenerator
331
- # An array of DDL operations to perform
339
+ # An array of operations to perform
332
340
  attr_reader :operations
333
341
 
334
- # Set the Database object to which to apply the DDL, and evaluate the
342
+ # Set the Database object to which to apply the changes, and evaluate the
335
343
  # block in the context of this object.
336
344
  def initialize(db, &block)
337
345
  @db = db
338
346
  @operations = []
339
- instance_eval(&block) if block
347
+ instance_exec(&block) if block
340
348
  end
341
349
 
342
- # Add a column with the given name, type, and opts to the DDL for the table.
350
+ # Add a column with the given name, type, and opts.
343
351
  # See CreateTableGenerator#column for the available options.
344
352
  #
345
353
  # add_column(:name, String) # ADD COLUMN name varchar(255)
@@ -354,32 +362,35 @@ module Sequel
354
362
  # :first :: Create this new column before all other existing columns
355
363
  def add_column(name, type, opts = OPTS)
356
364
  @operations << {:op => :add_column, :name => name, :type => type}.merge!(opts)
365
+ nil
357
366
  end
358
367
 
359
- # Add a constraint with the given name and args to the DDL for the table.
368
+ # Add a constraint with the given name and args.
360
369
  # See CreateTableGenerator#constraint.
361
370
  #
362
371
  # add_constraint(:valid_name, Sequel.like(:name, 'A%'))
363
372
  # # ADD CONSTRAINT valid_name CHECK (name LIKE 'A%' ESCAPE '\')
364
- # add_constraint({:name=>:valid_name, :deferrable=>true}, Sequel.like(:name, 'A%'))
373
+ # add_constraint({name: :valid_name, deferrable: true}, Sequel.like(:name, 'A%'))
365
374
  # # ADD CONSTRAINT valid_name CHECK (name LIKE 'A%' ESCAPE '\') DEFERRABLE INITIALLY DEFERRED
366
375
  def add_constraint(name, *args, &block)
367
376
  opts = name.is_a?(Hash) ? name : {:name=>name}
368
377
  @operations << opts.merge(:op=>:add_constraint, :type=>:check, :check=>block || args)
378
+ nil
369
379
  end
370
380
 
371
381
  # Add a unique constraint to the given column(s)
372
382
  #
373
383
  # add_unique_constraint(:name) # ADD UNIQUE (name)
374
- # add_unique_constraint(:name, :name=>:unique_name) # ADD CONSTRAINT unique_name UNIQUE (name)
384
+ # add_unique_constraint(:name, name: :unique_name) # ADD CONSTRAINT unique_name UNIQUE (name)
375
385
  #
376
386
  # Supports the same :deferrable option as CreateTableGenerator#column.
377
387
  def add_unique_constraint(columns, opts = OPTS)
378
388
  @operations << {:op => :add_constraint, :type => :unique, :columns => Array(columns)}.merge!(opts)
389
+ nil
379
390
  end
380
391
 
381
- # Add a foreign key with the given name and referencing the given table
382
- # to the DDL for the table. See CreateTableGenerator#column for the available options.
392
+ # Add a foreign key with the given name and referencing the given table.
393
+ # See CreateTableGenerator#column for the available options.
383
394
  #
384
395
  # You can also pass an array of column names for creating composite foreign
385
396
  # keys. In this case, it will assume the columns exist and will only add
@@ -405,13 +416,13 @@ module Sequel
405
416
  add_column(name, Integer, {:table=>table}.merge!(opts))
406
417
  end
407
418
 
408
- # Add a full text index on the given columns to the DDL for the table.
419
+ # Add a full text index on the given columns.
409
420
  # See CreateTableGenerator#index for available options.
410
421
  def add_full_text_index(columns, opts = OPTS)
411
422
  add_index(columns, {:type=>:full_text}.merge!(opts))
412
423
  end
413
424
 
414
- # Add an index on the given columns to the DDL for the table. See
425
+ # Add an index on the given columns. See
415
426
  # CreateTableGenerator#index for available options.
416
427
  #
417
428
  # add_index(:artist_id) # CREATE INDEX table_artist_id_index ON table (artist_id)
@@ -432,6 +443,7 @@ module Sequel
432
443
  # :opclass :: Set an opclass to use for all columns (per-column opclasses require
433
444
  # custom SQL).
434
445
  # :type :: Set the index type (e.g. full_text, spatial, hash, gin, gist, btree).
446
+ # :if_not_exists :: Only create the index if an index of the same name doesn't already exists
435
447
  #
436
448
  # MySQL specific options:
437
449
  #
@@ -444,9 +456,10 @@ module Sequel
444
456
  # :type :: clustered uses a clustered index, full_text uses a full text index.
445
457
  def add_index(columns, opts = OPTS)
446
458
  @operations << {:op => :add_index, :columns => Array(columns)}.merge!(opts)
459
+ nil
447
460
  end
448
461
 
449
- # Add a primary key to the DDL for the table. See CreateTableGenerator#column
462
+ # Add a primary key. See CreateTableGenerator#column
450
463
  # for the available options. Like +add_foreign_key+, if you specify
451
464
  # the column name as an array, it just creates a constraint:
452
465
  #
@@ -458,16 +471,16 @@ module Sequel
458
471
  add_column(name, opts.delete(:type), opts)
459
472
  end
460
473
 
461
- # Add a spatial index on the given columns to the DDL for the table.
474
+ # Add a spatial index on the given columns.
462
475
  # See CreateTableGenerator#index for available options.
463
476
  def add_spatial_index(columns, opts = OPTS)
464
477
  add_index(columns, {:type=>:spatial}.merge!(opts))
465
478
  end
466
479
 
467
- # Remove a column from the DDL for the table.
480
+ # Remove a column from the table.
468
481
  #
469
482
  # drop_column(:artist_id) # DROP COLUMN artist_id
470
- # drop_column(:artist_id, :cascade=>true) # DROP COLUMN artist_id CASCADE
483
+ # drop_column(:artist_id, cascade: true) # DROP COLUMN artist_id CASCADE
471
484
  #
472
485
  # Options:
473
486
  #
@@ -479,20 +492,24 @@ module Sequel
479
492
  # exist.
480
493
  def drop_column(name, opts=OPTS)
481
494
  @operations << {:op => :drop_column, :name => name}.merge!(opts)
495
+ nil
482
496
  end
483
497
 
484
- # Remove a constraint from the DDL for the table. MySQL/SQLite specific options:
498
+ # Remove a constraint from the table:
499
+ #
500
+ # drop_constraint(:unique_name) # DROP CONSTRAINT unique_name
501
+ # drop_constraint(:unique_name, cascade: true) # DROP CONSTRAINT unique_name CASCADE
502
+ #
503
+ # MySQL/SQLite specific options:
485
504
  #
486
505
  # :type :: Set the type of constraint to drop, either :primary_key, :foreign_key,
487
506
  # or :unique.
488
- #
489
- # drop_constraint(:unique_name) # DROP CONSTRAINT unique_name
490
- # drop_constraint(:unique_name, :cascade=>true) # DROP CONSTRAINT unique_name CASCADE
491
507
  def drop_constraint(name, opts=OPTS)
492
508
  @operations << {:op => :drop_constraint, :name => name}.merge!(opts)
509
+ nil
493
510
  end
494
511
 
495
- # Remove a foreign key and the associated column from the DDL for the table. General options:
512
+ # Remove a foreign key and the associated column from the table. General options:
496
513
  #
497
514
  # :name :: The name of the constraint to drop. If not given, uses the same name
498
515
  # that would be used by add_foreign_key with the same columns.
@@ -507,7 +524,7 @@ module Sequel
507
524
  drop_column(name) unless name.is_a?(Array)
508
525
  end
509
526
 
510
- # Remove an index from the DDL for the table. General options:
527
+ # Remove an index from the table. General options:
511
528
  #
512
529
  # :name :: The name of the index to drop. If not given, uses the same name
513
530
  # that would be used by add_index with the same columns.
@@ -521,19 +538,21 @@ module Sequel
521
538
  #
522
539
  # drop_index(:artist_id) # DROP INDEX table_artist_id_index
523
540
  # drop_index([:a, :b]) # DROP INDEX table_a_b_index
524
- # drop_index([:a, :b], :name=>:foo) # DROP INDEX foo
541
+ # drop_index([:a, :b], name: :foo) # DROP INDEX foo
525
542
  def drop_index(columns, options=OPTS)
526
543
  @operations << {:op => :drop_index, :columns => Array(columns)}.merge!(options)
544
+ nil
527
545
  end
528
546
 
529
- # Modify a column's name in the DDL for the table.
547
+ # Rename one of the table's columns.
530
548
  #
531
549
  # rename_column(:name, :artist_name) # RENAME COLUMN name TO artist_name
532
550
  def rename_column(name, new_name, opts = OPTS)
533
551
  @operations << {:op => :rename_column, :name => name, :new_name => new_name}.merge!(opts)
552
+ nil
534
553
  end
535
554
 
536
- # Modify a column's default value in the DDL for the table.
555
+ # Modify the default value for one of the table's column.
537
556
  #
538
557
  # set_column_default(:artist_name, 'a') # ALTER COLUMN artist_name SET DEFAULT 'a'
539
558
  #
@@ -545,9 +564,10 @@ module Sequel
545
564
  # can lose the type and NULL/NOT NULL setting for the column.
546
565
  def set_column_default(name, default)
547
566
  @operations << {:op => :set_column_default, :name => name, :default => default}
567
+ nil
548
568
  end
549
569
 
550
- # Modify a column's type in the DDL for the table.
570
+ # Modify the type of one of the table's column.
551
571
  #
552
572
  # set_column_type(:artist_name, 'char(10)') # ALTER COLUMN artist_name TYPE char(10)
553
573
  #
@@ -559,6 +579,7 @@ module Sequel
559
579
  # can lose the default and NULL/NOT NULL setting for the column.
560
580
  def set_column_type(name, type, opts=OPTS)
561
581
  @operations << {:op => :set_column_type, :name => name, :type => type}.merge!(opts)
582
+ nil
562
583
  end
563
584
 
564
585
  # Set a given column as allowing NULL values.
@@ -569,6 +590,7 @@ module Sequel
569
590
  # can lose the default and type for the column.
570
591
  def set_column_allow_null(name, allow_null=true)
571
592
  @operations << {:op => :set_column_null, :name => name, :null => allow_null}
593
+ nil
572
594
  end
573
595
 
574
596
  # Set a given column as not allowing NULL values.
@@ -586,16 +608,19 @@ module Sequel
586
608
  # Add a composite primary key constraint
587
609
  def add_composite_primary_key(columns, opts)
588
610
  @operations << {:op => :add_constraint, :type => :primary_key, :columns => columns}.merge!(opts)
611
+ nil
589
612
  end
590
613
 
591
614
  # Add a composite foreign key constraint
592
615
  def add_composite_foreign_key(columns, table, opts)
593
616
  @operations << {:op => :add_constraint, :type => :foreign_key, :columns => columns, :table => table}.merge!(opts)
617
+ nil
594
618
  end
595
619
 
596
620
  # Drop a composite foreign key constraint
597
621
  def drop_composite_foreign_key(columns, opts)
598
622
  @operations << {:op => :drop_constraint, :type => :foreign_key, :columns => columns}.merge!(opts)
623
+ nil
599
624
  end
600
625
  end
601
626
  end