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,40 +7,19 @@ module Sequel
7
7
  # These methods execute code on the database that modifies the database's schema.
8
8
  # ---------------------
9
9
 
10
- AUTOINCREMENT = 'AUTOINCREMENT'.freeze
11
- Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
12
- COMMA_SEPARATOR = ', '.freeze
13
- Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
14
- NOT_NULL = ' NOT NULL'.freeze
15
- Sequel::Deprecation.deprecate_constant(self, :NOT_NULL)
16
- NULL = ' NULL'.freeze
17
- Sequel::Deprecation.deprecate_constant(self, :NULL)
18
- PRIMARY_KEY = ' PRIMARY KEY'.freeze
19
- Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY)
20
- TEMPORARY = 'TEMPORARY '.freeze
21
- Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
22
- UNDERSCORE = '_'.freeze
23
- Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE)
24
- UNIQUE = ' UNIQUE'.freeze
25
- Sequel::Deprecation.deprecate_constant(self, :UNIQUE)
26
- UNSIGNED = ' UNSIGNED'.freeze
27
- Sequel::Deprecation.deprecate_constant(self, :UNSIGNED)
28
- DEFAULT_JOIN_TABLE_COLUMN_OPTIONS = {:null=>false}
29
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_JOIN_TABLE_COLUMN_OPTIONS)
30
-
31
10
  # The order of column modifiers to use when defining a column.
32
- COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references]#.freeze # SEQUEL5
11
+ COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references].freeze
33
12
 
34
13
  # The alter table operations that are combinable.
35
14
  COMBINABLE_ALTER_TABLE_OPS = [:add_column, :drop_column, :rename_column,
36
15
  :set_column_type, :set_column_default, :set_column_null,
37
- :add_constraint, :drop_constraint]#.freeze # SEQUEL5
16
+ :add_constraint, :drop_constraint].freeze
38
17
 
39
18
  # Adds a column to the specified table. This method expects a column name,
40
19
  # a datatype and optionally a hash with additional constraints and options:
41
20
  #
42
- # DB.add_column :items, :name, :text, :unique => true, :null => false
43
- # DB.add_column :items, :category, :text, :default => 'ruby'
21
+ # DB.add_column :items, :name, String, unique: true, null: false
22
+ # DB.add_column :items, :category, String, default: 'ruby'
44
23
  #
45
24
  # See <tt>alter_table</tt>.
46
25
  def add_column(table, *args)
@@ -50,9 +29,10 @@ module Sequel
50
29
  # Adds an index to a table for the given columns:
51
30
  #
52
31
  # DB.add_index :posts, :title
53
- # DB.add_index :posts, [:author, :title], :unique => true
32
+ # DB.add_index :posts, [:author, :title], unique: true
54
33
  #
55
34
  # Options:
35
+ #
56
36
  # :ignore_errors :: Ignore any DatabaseErrors that are raised
57
37
  # :name :: Name to use for index instead of default
58
38
  #
@@ -64,16 +44,17 @@ module Sequel
64
44
  rescue DatabaseError
65
45
  raise unless e
66
46
  end
47
+ nil
67
48
  end
68
49
 
69
50
  # Alters the given table with the specified block. Example:
70
51
  #
71
52
  # DB.alter_table :items do
72
- # add_column :category, :text, :default => 'ruby'
53
+ # add_column :category, String, default: 'ruby'
73
54
  # drop_column :category
74
55
  # rename_column :cntr, :counter
75
- # set_column_type :value, :float
76
- # set_column_default :value, :float
56
+ # set_column_type :value, Float
57
+ # set_column_default :value, 4.2
77
58
  # add_index [:group, :category]
78
59
  # drop_index [:group, :category]
79
60
  # end
@@ -83,13 +64,8 @@ module Sequel
83
64
  # available for index definition.
84
65
  #
85
66
  # See <tt>Schema::AlterTableGenerator</tt> and the {"Migrations and Schema Modification" guide}[rdoc-ref:doc/migration.rdoc].
86
- def alter_table(name, generator=(arg_not_given=true; nil), &block)
87
- if generator
88
- Sequel::Deprecation.deprecate("Passing a Sequel::Schema::AlterTableGenerator instance as the second argument to Sequel::Database#alter_table ", "Pass a block to Sequel::Database#alter_table instead")
89
- else
90
- Sequel::Deprecation.deprecate("Passing a second argument to Sequel::Database#alter_table :generator option", "Pass only a single argument to the method") unless arg_not_given
91
- generator = alter_table_generator(&block)
92
- end
67
+ def alter_table(name, &block)
68
+ generator = alter_table_generator(&block)
93
69
  remove_cached_schema(name)
94
70
  apply_alter_table_generator(name, generator)
95
71
  nil
@@ -104,7 +80,7 @@ module Sequel
104
80
  # Create a join table using a hash of foreign keys to referenced
105
81
  # table names. Example:
106
82
  #
107
- # create_join_table(:cat_id=>:cats, :dog_id=>:dogs)
83
+ # create_join_table:cat_id: :cats, dog_id: :dogs)
108
84
  # # CREATE TABLE cats_dogs (
109
85
  # # cat_id integer NOT NULL REFERENCES cats,
110
86
  # # dog_id integer NOT NULL REFERENCES dogs,
@@ -121,11 +97,11 @@ module Sequel
121
97
  # be option hashes, so long as the option hashes have a :table
122
98
  # entry giving the table referenced:
123
99
  #
124
- # create_join_table(:cat_id=>{:table=>:cats, :type=>:Bignum}, :dog_id=>:dogs)
100
+ # create_join_table(cat_id: {table: :cats, type: :Bignum}, dog_id: :dogs)
125
101
  #
126
102
  # You can provide a second argument which is a table options hash:
127
103
  #
128
- # create_join_table({:cat_id=>:cats, :dog_id=>:dogs}, :temp=>true)
104
+ # create_join_table({cat_id: :cats, dog_id: :dogs}, temp: true)
129
105
  #
130
106
  # Some table options are handled specially:
131
107
  #
@@ -134,7 +110,7 @@ module Sequel
134
110
  # :no_index :: Set to true not to create the second index.
135
111
  # :no_primary_key :: Set to true to not create the primary key.
136
112
  def create_join_table(hash, options=OPTS)
137
- keys = hash.keys.sort_by(&:to_s)
113
+ keys = hash.keys.sort
138
114
  create_table(join_table_name(hash, options), options) do
139
115
  keys.each do |key|
140
116
  v = hash[key]
@@ -147,6 +123,7 @@ module Sequel
147
123
  primary_key(keys) unless options[:no_primary_key]
148
124
  index(keys.reverse, options[:index_options] || {}) unless options[:no_index]
149
125
  end
126
+ nil
150
127
  end
151
128
 
152
129
  # Forcibly create a join table, attempting to drop it if it already exists, then creating it.
@@ -168,7 +145,7 @@ module Sequel
168
145
  #
169
146
  # DB.create_table :posts do
170
147
  # primary_key :id
171
- # column :title, :text
148
+ # column :title, String
172
149
  # String :content
173
150
  # index :title
174
151
  # end
@@ -201,10 +178,6 @@ module Sequel
201
178
  # See <tt>Schema::CreateTableGenerator</tt> and the {"Schema Modification" guide}[rdoc-ref:doc/schema_modification.rdoc].
202
179
  def create_table(name, options=OPTS, &block)
203
180
  remove_cached_schema(name)
204
- if options.is_a?(Schema::CreateTableGenerator)
205
- Sequel::Deprecation.deprecate("Passing a Sequel::Schema::CreateTableGenerator instance as the second argument to Sequel::Database#create_table", "Use the Sequel::Database#create_table :generator option instead")
206
- options = {:generator=>options}
207
- end
208
181
  if sql = options[:as]
209
182
  raise(Error, "can't provide both :as option and block to create_table") if block
210
183
  create_table_as(name, sql, options)
@@ -212,8 +185,8 @@ module Sequel
212
185
  generator = options[:generator] || create_table_generator(&block)
213
186
  create_table_from_generator(name, generator, options)
214
187
  create_table_indexes_from_generator(name, generator, options)
215
- nil
216
188
  end
189
+ nil
217
190
  end
218
191
 
219
192
  # Forcibly create a table, attempting to drop it if it already exists, then creating it.
@@ -251,7 +224,7 @@ module Sequel
251
224
  # Creates a view, replacing a view with the same name if one already exists.
252
225
  #
253
226
  # DB.create_or_replace_view(:some_items, "SELECT * FROM items WHERE price < 100")
254
- # DB.create_or_replace_view(:some_items, DB[:items].where(:category => 'ruby'))
227
+ # DB.create_or_replace_view(:some_items, DB[:items].where(category: 'ruby'))
255
228
  #
256
229
  # For databases where replacing a view is not natively supported, support
257
230
  # is emulated by dropping a view with the same name before creating the view.
@@ -263,6 +236,7 @@ module Sequel
263
236
  end
264
237
 
265
238
  create_view(name, source, options)
239
+ nil
266
240
  end
267
241
 
268
242
  # Creates a view based on a dataset or an SQL string:
@@ -271,11 +245,11 @@ module Sequel
271
245
  # # CREATE VIEW cheap_items AS
272
246
  # # SELECT * FROM items WHERE price < 100
273
247
  #
274
- # DB.create_view(:ruby_items, DB[:items].where(:category => 'ruby'))
248
+ # DB.create_view(:ruby_items, DB[:items].where(category: 'ruby'))
275
249
  # # CREATE VIEW ruby_items AS
276
250
  # # SELECT * FROM items WHERE (category = 'ruby')
277
251
  #
278
- # DB.create_view(:checked_items, DB[:items].where(:foo), :check=>true)
252
+ # DB.create_view(:checked_items, DB[:items].where(:foo), check: true)
279
253
  # # CREATE VIEW checked_items AS
280
254
  # # SELECT * FROM items WHERE foo
281
255
  # # WITH CHECK OPTION
@@ -299,7 +273,7 @@ module Sequel
299
273
  # option. Since a recursive view requires a union that isn't
300
274
  # in a subquery, if you are providing a Dataset as the source
301
275
  # argument, if should probably call the union method with the
302
- # :all=>true and :from_self=>false options.
276
+ # all: true and from_self: false options.
303
277
  def create_view(name, source, options = OPTS)
304
278
  execute_ddl(create_view_sql(name, source, options))
305
279
  remove_cached_schema(name)
@@ -315,7 +289,7 @@ module Sequel
315
289
  alter_table(table) {drop_column(*args)}
316
290
  end
317
291
 
318
- # Removes an index for the given table and column/s:
292
+ # Removes an index for the given table and column(s):
319
293
  #
320
294
  # DB.drop_index :posts, :title
321
295
  # DB.drop_index :posts, [:author, :title]
@@ -328,7 +302,7 @@ module Sequel
328
302
  # Drop the join table that would have been created with the
329
303
  # same arguments to create_join_table:
330
304
  #
331
- # drop_join_table(:cat_id=>:cats, :dog_id=>:dogs)
305
+ # drop_join_table(cat_id: :cats, dog_id: :dogs)
332
306
  # # DROP TABLE cats_dogs
333
307
  def drop_join_table(hash, options=OPTS)
334
308
  drop_table(join_table_name(hash, options), options)
@@ -338,7 +312,7 @@ module Sequel
338
312
  #
339
313
  # DB.drop_table(:posts) # DROP TABLE posts
340
314
  # DB.drop_table(:posts, :comments)
341
- # DB.drop_table(:posts, :comments, :cascade=>true)
315
+ # DB.drop_table(:posts, :comments, cascade: true)
342
316
  def drop_table(*names)
343
317
  options = names.last.is_a?(Hash) ? names.pop : {}
344
318
  names.each do |n|
@@ -366,14 +340,15 @@ module Sequel
366
340
  drop_table(name, options) if table_exists?(name)
367
341
  end
368
342
  end
343
+ nil
369
344
  end
370
345
 
371
346
  # Drops one or more views corresponding to the given names:
372
347
  #
373
348
  # DB.drop_view(:cheap_items)
374
349
  # DB.drop_view(:cheap_items, :pricey_items)
375
- # DB.drop_view(:cheap_items, :pricey_items, :cascade=>true)
376
- # DB.drop_view(:cheap_items, :pricey_items, :if_exists=>true)
350
+ # DB.drop_view(:cheap_items, :pricey_items, cascade: true)
351
+ # DB.drop_view(:cheap_items, :pricey_items, if_exists: true)
377
352
  #
378
353
  # Options:
379
354
  # :cascade :: Also drop objects depending on this view.
@@ -458,6 +433,7 @@ module Sequel
458
433
  def alter_table_op_sql(table, op)
459
434
  meth = "alter_table_#{op[:op]}_sql"
460
435
  if respond_to?(meth, true)
436
+ # Allow calling private methods as alter table op sql methods are private
461
437
  send(meth, table, op)
462
438
  else
463
439
  raise Error, "Unsupported ALTER TABLE operation: #{op[:op]}"
@@ -500,7 +476,7 @@ module Sequel
500
476
  "DROP CONSTRAINT #{quoted_name}#{' CASCADE' if op[:cascade]}"
501
477
  end
502
478
 
503
- # The SQL to execute to modify the DDL for the given table name. op
479
+ # The SQL to execute to modify the table. op
504
480
  # should be one of the operations returned by the AlterTableGenerator.
505
481
  def alter_table_sql(table, op)
506
482
  case op[:op]
@@ -513,8 +489,8 @@ module Sequel
513
489
  end
514
490
  end
515
491
 
516
- # Array of SQL DDL modification statements for the given table,
517
- # corresponding to the DDL changes specified by the operations.
492
+ # Array of SQL statements used to modify the table,
493
+ # corresponding to changes specified by the operations.
518
494
  def alter_table_sql_list(table, operations)
519
495
  if supports_combining_alter_table_ops?
520
496
  grouped_ops = []
@@ -554,7 +530,7 @@ module Sequel
554
530
  COLUMN_DEFINITION_ORDER
555
531
  end
556
532
 
557
- # SQL DDL fragment containing the column creation SQL for the given column.
533
+ # SQL fragment containing the column creation SQL for the given column.
558
534
  def column_definition_sql(column)
559
535
  sql = String.new
560
536
  sql << "#{quote_identifier(column[:name])} #{type_literal(column)}"
@@ -629,12 +605,12 @@ module Sequel
629
605
  (generator.columns.map{|c| column_definition_sql(c)} + generator.constraints.map{|c| constraint_definition_sql(c)}).join(', ')
630
606
  end
631
607
 
632
- # SQL DDL fragment for column foreign key references (column constraints)
608
+ # SQL fragment for column foreign key references (column constraints)
633
609
  def column_references_column_constraint_sql(column)
634
610
  column_references_sql(column)
635
611
  end
636
612
 
637
- # SQL DDL fragment for column foreign key references
613
+ # SQL fragment for column foreign key references
638
614
  def column_references_sql(column)
639
615
  sql = String.new
640
616
  sql << " REFERENCES #{quote_schema_table(column[:table])}"
@@ -645,7 +621,7 @@ module Sequel
645
621
  sql
646
622
  end
647
623
 
648
- # SQL DDL fragment for table foreign key references (table constraints)
624
+ # SQL fragment for table foreign key references (table constraints)
649
625
  def column_references_table_constraint_sql(constraint)
650
626
  "FOREIGN KEY #{literal(constraint[:columns])}#{column_references_sql(constraint)}"
651
627
  end
@@ -655,7 +631,7 @@ module Sequel
655
631
  COMBINABLE_ALTER_TABLE_OPS.include?(op[:op])
656
632
  end
657
633
 
658
- # SQL DDL fragment specifying a constraint on a table.
634
+ # SQL fragment specifying a constraint on a table.
659
635
  def constraint_definition_sql(constraint)
660
636
  sql = String.new
661
637
  sql << "CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]
@@ -679,7 +655,7 @@ module Sequel
679
655
  sql
680
656
  end
681
657
 
682
- # SQL DDL fragment specifying the deferrable constraint attributes.
658
+ # SQL fragment specifying the deferrable constraint attributes.
683
659
  def constraint_deferrable_sql_append(sql, defer)
684
660
  case defer
685
661
  when nil
@@ -707,14 +683,15 @@ module Sequel
707
683
  e = options[:ignore_index_errors] || options[:if_not_exists]
708
684
  generator.indexes.each do |index|
709
685
  begin
710
- transaction(:savepoint=>:only){index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}}
686
+ pr = proc{index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}}
687
+ supports_transactional_ddl? ? transaction(:savepoint=>:only, &pr) : pr.call
711
688
  rescue Error
712
689
  raise unless e
713
690
  end
714
691
  end
715
692
  end
716
693
 
717
- # DDL statement for creating a table with the given name, columns, and options
694
+ # SQL statement for creating a table with the given name, columns, and options
718
695
  def create_table_sql(name, generator, options)
719
696
  unless supports_named_column_constraints?
720
697
  # Split column constraints into table constraints if they have a name
@@ -747,30 +724,30 @@ module Sequel
747
724
  "#{create_table_prefix_sql(name, options)} (#{column_list_sql(generator)})"
748
725
  end
749
726
 
750
- # Run a command to create the table with the given name from the given
727
+ # Run SQL statement to create the table with the given name from the given
751
728
  # SELECT sql statement.
752
729
  def create_table_as(name, sql, options)
753
730
  sql = sql.sql if sql.is_a?(Sequel::Dataset)
754
731
  run(create_table_as_sql(name, sql, options))
755
732
  end
756
733
 
757
- # DDL statement for creating a table from the result of a SELECT statement.
734
+ # SQL statement for creating a table from the result of a SELECT statement.
758
735
  # +sql+ should be a string representing a SELECT query.
759
736
  def create_table_as_sql(name, sql, options)
760
737
  "#{create_table_prefix_sql(name, options)} AS #{sql}"
761
738
  end
762
739
 
763
- # DDL fragment for initial part of CREATE TABLE statement
740
+ # SQL fragment for initial part of CREATE TABLE statement
764
741
  def create_table_prefix_sql(name, options)
765
742
  "CREATE #{temporary_table_sql if options[:temp]}TABLE#{' IF NOT EXISTS' if options[:if_not_exists]} #{options[:temp] ? quote_identifier(name) : quote_schema_table(name)}"
766
743
  end
767
744
 
768
- # DDL fragment for initial part of CREATE VIEW statement
745
+ # SQL fragment for initial part of CREATE VIEW statement
769
746
  def create_view_prefix_sql(name, options)
770
747
  create_view_sql_append_columns("CREATE #{'OR REPLACE 'if options[:replace]}VIEW #{quote_schema_table(name)}", options[:columns])
771
748
  end
772
749
 
773
- # DDL statement for creating a view.
750
+ # SQL statement for creating a view.
774
751
  def create_view_sql(name, source, options)
775
752
  source = source.sql if source.is_a?(Dataset)
776
753
  sql = String.new
@@ -831,14 +808,18 @@ module Sequel
831
808
  args = nil
832
809
  elsif arg.is_a?(String)
833
810
  args = [Sequel.lit(*args)]
834
- elsif arg.is_a?(Array) && arg.first.is_a?(String)
835
- args = [Sequel.lit(*arg)]
811
+ elsif arg.is_a?(Array)
812
+ if arg.first.is_a?(String)
813
+ args = [Sequel.lit(*arg)]
814
+ elsif arg.length > 1
815
+ args = [Sequel.&(*arg)]
816
+ end
836
817
  end
837
818
  end
838
819
  schema_utility_dataset.literal(schema_utility_dataset.send(:filter_expr, *args, &block))
839
820
  end
840
821
 
841
- # SQL DDL statement for creating an index for the table with the given name
822
+ # SQL statement for creating an index for the table with the given name
842
823
  # and index specifications.
843
824
  def index_definition_sql(table_name, index)
844
825
  index_name = index[:name] || default_index_name(table_name, index[:columns])
@@ -847,7 +828,7 @@ module Sequel
847
828
  "CREATE #{'UNIQUE ' if index[:unique]}INDEX #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{literal(index[:columns])}#{" WHERE #{filter_expr(index[:where])}" if index[:where]}"
848
829
  end
849
830
 
850
- # Array of SQL DDL statements, one for each index specification,
831
+ # Array of SQL statements, one for each index specification,
851
832
  # for the given table.
852
833
  def index_sql_list(table_name, indexes)
853
834
  indexes.map{|i| index_definition_sql(table_name, i)}
@@ -879,7 +860,7 @@ module Sequel
879
860
  end
880
861
  end
881
862
 
882
- # SQL DDL ON DELETE fragment to use, based on the given action.
863
+ # SQL fragment to use for ON DELETE, based on the given action.
883
864
  # The following actions are recognized:
884
865
  #
885
866
  # :cascade :: Delete rows referencing this row.
@@ -906,7 +887,7 @@ module Sequel
906
887
  schema_utility_dataset.quote_schema_table(table)
907
888
  end
908
889
 
909
- # SQL DDL statement for renaming a table.
890
+ # SQL statement for renaming a table.
910
891
  def rename_table_sql(name, new_name)
911
892
  "ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_schema_table(new_name)}"
912
893
  end
@@ -931,7 +912,7 @@ module Sequel
931
912
  schema_utility_dataset.split_qualifiers(table_name)
932
913
  end
933
914
 
934
- # SQL DDL fragment for temporary table
915
+ # SQL fragment for temporary table
935
916
  def temporary_table_sql
936
917
  'TEMPORARY '
937
918
  end
@@ -953,6 +934,7 @@ module Sequel
953
934
  def type_literal_generic(column)
954
935
  meth = "type_literal_generic_#{column[:type].name.to_s.downcase}"
955
936
  if respond_to?(meth, true)
937
+ # Allow calling private methods as per type literal generic methods are private
956
938
  send(meth, column)
957
939
  else
958
940
  raise Error, "Unsupported ruby class used as database type: #{column[:type]}"
@@ -1046,7 +1028,7 @@ module Sequel
1046
1028
  "#{type}#{literal(Array(elements)) if elements}#{' UNSIGNED' if column[:unsigned]}"
1047
1029
  end
1048
1030
 
1049
- # Whether clob should be used for String :text=>true columns.
1031
+ # Whether clob should be used for String text: true columns.
1050
1032
  def uses_clob_for_text?
1051
1033
  false
1052
1034
  end
@@ -9,30 +9,10 @@ module Sequel
9
9
  # them do.
10
10
  # ---------------------
11
11
 
12
- SQL_BEGIN = 'BEGIN'.freeze
13
- Sequel::Deprecation.deprecate_constant(self, :SQL_BEGIN)
14
- SQL_COMMIT = 'COMMIT'.freeze
15
- Sequel::Deprecation.deprecate_constant(self, :SQL_COMMIT)
16
- SQL_RELEASE_SAVEPOINT = 'RELEASE SAVEPOINT autopoint_%d'.freeze
17
- Sequel::Deprecation.deprecate_constant(self, :SQL_RELEASE_SAVEPOINT)
18
- SQL_ROLLBACK = 'ROLLBACK'.freeze
19
- Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK)
20
- SQL_ROLLBACK_TO_SAVEPOINT = 'ROLLBACK TO SAVEPOINT autopoint_%d'.freeze
21
- Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK_TO_SAVEPOINT)
22
- SQL_SAVEPOINT = 'SAVEPOINT autopoint_%d'.freeze
23
- Sequel::Deprecation.deprecate_constant(self, :SQL_SAVEPOINT)
24
-
25
- TRANSACTION_BEGIN = 'Transaction.begin'.freeze
26
- Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_BEGIN)
27
- TRANSACTION_COMMIT = 'Transaction.commit'.freeze
28
- Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_COMMIT)
29
- TRANSACTION_ROLLBACK = 'Transaction.rollback'.freeze
30
- Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_ROLLBACK)
31
-
32
12
  TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>'READ UNCOMMITTED'.freeze,
33
13
  :committed=>'READ COMMITTED'.freeze,
34
14
  :repeatable=>'REPEATABLE READ'.freeze,
35
- :serializable=>'SERIALIZABLE'.freeze}#.freeze # SEQUEL5
15
+ :serializable=>'SERIALIZABLE'.freeze}.freeze
36
16
 
37
17
  # The default transaction isolation level for this database,
38
18
  # used for all future transactions. For MSSQL, this should be set
@@ -284,7 +264,7 @@ module Sequel
284
264
  hooks << block
285
265
  end
286
266
 
287
- # Whether the current thread/connection is already inside a transaction
267
+ # Whether the given connection is already inside a transaction
288
268
  def already_in_transaction?(conn, opts)
289
269
  _trans(conn) && (!supports_savepoints? || !opts[:savepoint])
290
270
  end
@@ -305,7 +285,7 @@ module Sequel
305
285
  "SAVEPOINT autopoint_#{depth}"
306
286
  end
307
287
 
308
- # Start a new database connection on the given connection
288
+ # Start a new database transaction on the given connection
309
289
  def begin_new_transaction(conn, opts)
310
290
  log_connection_execute(conn, begin_transaction_sql)
311
291
  set_transaction_isolation(conn, opts)
@@ -332,7 +312,7 @@ module Sequel
332
312
  # Whether to commit the current transaction. Thread.current.status is
333
313
  # checked because Thread#kill skips rescue blocks (so exception would be
334
314
  # nil), but the transaction should still be rolled back. On Ruby 1.9 (but
335
- # not 1.8 or 2.0), the thread status will still be "run", so Thread#kill
315
+ # not 2.0+), the thread status will still be "run", so Thread#kill
336
316
  # will erroneously commit the transaction, and there isn't a workaround.
337
317
  def commit_or_rollback_transaction(exception, conn, opts)
338
318
  if exception