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
@@ -53,10 +53,6 @@ module Sequel
53
53
 
54
54
  # DateTime subclass literalized as CURRENT_TIMESTAMP
55
55
  class DateTime < ::DateTime; end
56
-
57
- # Mapping of Time/DateTime classes to subclasses literalized as CURRENT_TIMESTAMP
58
- MAP = {::Time=>Time, ::DateTime=>DateTime}
59
- Sequel::Deprecation.deprecate_constant(self, :MAP)
60
56
  end
61
57
 
62
58
  Dataset.register_extension(:current_datetime_timestamp, CurrentDateTimeTimestamp::DatasetMethods)
@@ -10,8 +10,8 @@
10
10
  # Then you can use the Sequel.date_add and Sequel.date_sub methods
11
11
  # to return Sequel expressions:
12
12
  #
13
- # add = Sequel.date_add(:date_column, :years=>1, :months=>2, :days=>3)
14
- # sub = Sequel.date_sub(:date_column, :hours=>1, :minutes=>2, :seconds=>3)
13
+ # add = Sequel.date_add(:date_column, years: 1, months: 2, days: 3)
14
+ # sub = Sequel.date_sub(:date_column, hours: 1, minutes: 2, seconds: 3)
15
15
  #
16
16
  # In addition to specifying the interval as a hash, there is also
17
17
  # support for specifying the interval as an ActiveSupport::Duration
@@ -66,8 +66,6 @@ module Sequel
66
66
  DERBY_DURATION_UNITS = DURATION_UNITS.zip(DURATION_UNITS.map{|s| Sequel.lit("SQL_TSI_#{s.to_s.upcase[0...-1]}").freeze}).freeze
67
67
  ACCESS_DURATION_UNITS = DURATION_UNITS.zip(%w'yyyy m d h n s'.map(&:freeze)).freeze
68
68
  DB2_DURATION_UNITS = DURATION_UNITS.zip(DURATION_UNITS.map{|s| Sequel.lit(s.to_s).freeze}).freeze
69
- FDBSQL_DURATION_UNITS = DURATION_UNITS.zip(DURATION_UNITS.map{|s| Sequel.lit(s.to_s.chop).freeze}).freeze
70
- Sequel::Deprecation.deprecate_constant(self, :FDBSQL_DURATION_UNITS)
71
69
 
72
70
  # Append the SQL fragment for the DateAdd expression to the SQL query.
73
71
  def date_add_sql_append(sql, da)
@@ -93,8 +91,7 @@ module Sequel
93
91
  args << "#{value} #{sql_unit}"
94
92
  end
95
93
  return function_sql_append(sql, Sequel.function(:datetime, *args))
96
- # SEQUEL5: Remove cubrid
97
- when :mysql, :hsqldb, :cubrid
94
+ when :mysql, :hsqldb
98
95
  if db_type == :hsqldb
99
96
  # HSQLDB requires 2.2.9+ for the DATE_ADD function
100
97
  expr = Sequel.cast(expr, Time)
@@ -181,12 +178,15 @@ module Sequel
181
178
  raise Sequel::InvalidValue, "cannot provide String value as interval part: #{v.inspect}"
182
179
  end
183
180
  end
184
- interval
181
+ Hash[interval]
185
182
  else
186
183
  h = Hash.new(0)
187
184
  interval.parts.each{|unit, value| h[unit] += value}
188
185
  Hash[h]
189
186
  end
187
+
188
+ @interval.freeze
189
+ freeze
190
190
  end
191
191
 
192
192
  to_s_method :date_add_sql
@@ -10,24 +10,28 @@
10
10
  #
11
11
  # DB.extension :duplicate_columns_handler
12
12
  #
13
+ # or into individual datasets:
14
+ #
15
+ # ds = DB[:items].extension(:duplicate_columns_handler)
16
+ #
13
17
  # A database option is introduced: :on_duplicate_columns. It accepts a Symbol
14
18
  # or any object that responds to :call.
15
19
  #
16
- # :on_duplicate_columns => :raise
17
- # :on_duplicate_columns => :warn
18
- # :on_duplicate_columns => :ignore
19
- # :on_duplicate_columns => proc { |columns| arbitrary_condition? ? :raise : :warn }
20
+ # on_duplicate_columns: :raise
21
+ # on_duplicate_columns: :warn
22
+ # on_duplicate_columns: :ignore
23
+ # on_duplicate_columns: lambda{|columns| arbitrary_condition? ? :raise : :warn}
20
24
  #
21
25
  # You may also configure duplicate columns handling for a specific dataset:
22
26
  #
23
27
  # ds.on_duplicate_columns(:warn)
24
28
  # ds.on_duplicate_columns(:raise)
25
29
  # ds.on_duplicate_columns(:ignore)
26
- # ds.on_duplicate_columns { |columns| arbitrary_condition? ? :raise : :warn }
27
- # ds.on_duplicate_columns(proc { |columns| arbitrary_condition? ? :raise : :warn })
30
+ # ds.on_duplicate_columns{|columns| arbitrary_condition? ? :raise : :warn}
31
+ # ds.on_duplicate_columns(lambda{|columns| arbitrary_condition? ? :raise : :warn})
28
32
  #
29
33
  # If :raise is specified, a Sequel::DuplicateColumnError is raised.
30
- # If :warn is specified, you will receive a warning via `warn`.
34
+ # If :warn is specified, you will receive a warning via +warn+.
31
35
  # If a callable is specified, it will be called.
32
36
  # If no on_duplicate_columns is specified, the default is :warn.
33
37
  #
@@ -45,8 +49,7 @@ module Sequel
45
49
 
46
50
  private
47
51
 
48
- # Override the attr_writer to check for duplicate columns, and call
49
- # handle_duplicate_columns if necessary.
52
+ # Call handle_duplicate_columns if there are duplicate columns.
50
53
  def columns=(cols)
51
54
  if cols && cols.uniq.size != cols.size
52
55
  handle_duplicate_columns(cols)
@@ -4,9 +4,9 @@
4
4
  # array value to consider NULL values if one of the referenced
5
5
  # columns is NULL:
6
6
  #
7
- # DB[:test].where(:name=>[])
7
+ # DB[:test].where(name: [])
8
8
  # # SELECT * FROM test WHERE (name != name)
9
- # DB[:test].exclude(:name=>[])
9
+ # DB[:test].exclude(name: [])
10
10
  # # SELECT * FROM test WHERE (name = name)
11
11
  #
12
12
  # The default Sequel behavior is to ignore NULLs, as the above
@@ -36,16 +36,7 @@ module Sequel
36
36
  "{#{obj.map{|k, v| "#{eval_inspect(k)} => #{eval_inspect(v)}"}.join(', ')}}"
37
37
  when Time
38
38
  datepart = "%Y-%m-%dT" unless obj.is_a?(Sequel::SQLTime)
39
- if RUBY_VERSION < '1.9'
40
- # :nocov:
41
- # Time on 1.8 doesn't handle %N (or %z on Windows), manually set the usec value in the string
42
- hours, mins = obj.utc_offset.divmod(3600)
43
- mins /= 60
44
- "#{obj.class}.parse(#{obj.strftime("#{datepart}%H:%M:%S.#{sprintf('%06i%+03i%02i', obj.usec, hours, mins)}").inspect})#{'.utc' if obj.utc?}"
45
- # :nocov:
46
- else
47
- "#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
48
- end
39
+ "#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
49
40
  when DateTime
50
41
  # Ignore date of calendar reform
51
42
  "DateTime.parse(#{obj.strftime('%FT%T.%N%z').inspect})"
@@ -73,9 +64,11 @@ module Sequel
73
64
  args = inspect_args.map do |arg|
74
65
  if arg.is_a?(String) && arg =~ /\A\*/
75
66
  # Special case string arguments starting with *, indicating that
76
- # they should return an array to be splatted as the remaining arguments
67
+ # they should return an array to be splatted as the remaining arguments.
68
+ # Allow calling private methods to get inspect output.
77
69
  send(arg.sub('*', '')).map{|a| Sequel.eval_inspect(a)}.join(', ')
78
70
  else
71
+ # Allow calling private methods to get inspect output.
79
72
  Sequel.eval_inspect(send(arg))
80
73
  end
81
74
  end
@@ -1,71 +1,3 @@
1
1
  # frozen-string-literal: true
2
- #
3
- # The freeze_datasets extension freezes a databases's datasets by
4
- # default, and makes it so the databases's datasets are always
5
- # frozen. This makes sure you can never accidentally modify a
6
- # dataset that may be used elsewhere (such as a model class's
7
- # dataset or the same dataset being used in another thread).
8
- # Frozen datasets can also perform caching for many
9
- # different methods that can significantly improve performance.
10
- #
11
- # In addition to the caching provided by frozen datasets, this
12
- # also adds caching of Database#from calls if the method is
13
- # called with a single Symbol argument and not a block. In
14
- # addition to speeding up Dataset#from itself, because it
15
- # returns a cached dataset, all caching done by that dataset
16
- # can also improve performance.
17
- #
18
- # Usage:
19
- #
20
- # DB.extension(:freeze_datasets)
21
- #
22
- # Related module: Sequel::FreezeDatasets
23
2
 
24
- #
25
- module Sequel
26
- class Database
27
- module FreezeDatasets
28
- module DatasetMethods
29
- # Make dup be an alias to clone, so that it
30
- # returns a frozen dataset.
31
- def dup
32
- clone
33
- end
34
- end
35
-
36
- # Reset the default dataset for this database after
37
- # loading the extension.
38
- def self.extended(db)
39
- db.extend_datasets(DatasetMethods)
40
- end
41
-
42
- # Cache returned dataset if given a single argument and no block.
43
- def from(*args, &block)
44
- if !block && args.length == 1 && (table = args[0]).is_a?(Symbol)
45
- @default_dataset.send(:cached_dataset, :"_from_#{table}_ds"){super}
46
- else
47
- super
48
- end
49
- end
50
-
51
- # Freeze datasets created from this dataset.
52
- def dataset
53
- super.freeze
54
- end
55
-
56
- private
57
-
58
- # Clear the cache of the default dataset when removing a cached
59
- # schema, in order to clear the from table cache.
60
- def remove_cached_schema(table)
61
- cache = @default_dataset.send(:cache)
62
- Sequel.synchronize{cache.clear}
63
- super
64
- end
65
- end
66
-
67
- register_extension(:freeze_datasets, FreezeDatasets)
68
- end
69
- end
70
-
71
- # Sequel::Database.register_extension(:freeze_datasets){} # SEQUEL5
3
+ Sequel::Database.register_extension(:freeze_datasets){}
@@ -1,37 +1,3 @@
1
1
  # frozen-string-literal: true
2
- #
3
- # The from_block extension changes Database#from so that blocks given
4
- # to it are treated as virtual rows applying to the FROM clause,
5
- # instead of virtual rows applying to the WHERE clause. This will
6
- # probably be made the default in the next major version of Sequel.
7
- #
8
- # This makes it easier to use table returning functions:
9
- #
10
- # DB.from{table_function(1)}
11
- # # SELECT * FROM table_function(1)
12
- #
13
- # To load the extension into the database:
14
- #
15
- # DB.extension :from_block
16
- #
17
- # Related module: Sequel::Database::FromBlock
18
2
 
19
- #
20
- module Sequel
21
- module Database::FromBlock
22
- # If a block is given, make it affect the FROM clause:
23
- # DB.from{table_function(1)}
24
- # # SELECT * FROM table_function(1)
25
- def from(*args, &block)
26
- if block
27
- @default_dataset.from(*args, &block)
28
- else
29
- super
30
- end
31
- end
32
- end
33
-
34
- Database.register_extension(:from_block, Database::FromBlock)
35
- end
36
-
37
- # Sequel::Database.register_extension(:from_block){} # SEQUEL5
3
+ Sequel::Database.register_extension(:from_block){}
@@ -4,7 +4,7 @@
4
4
  # makes Dataset#each call #graph_each if the dataset has been graphed.
5
5
  # Dataset#graph_each splits result hashes into subhashes per table:
6
6
  #
7
- # DB[:a].graph(:b, :id=>:b_id).all
7
+ # DB[:a].graph(:b, id: :b_id).all
8
8
  # # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
9
9
  #
10
10
  # You can load this extension into specific datasets:
@@ -56,7 +56,7 @@ module Sequel
56
56
  datasets = datasets.map{|ta, ds| [ta, ds, ds.row_proc]}
57
57
  # Use the manually set graph aliases, if any, otherwise
58
58
  # use the ones automatically created by .graph
59
- column_aliases = @opts[:graph_aliases] || @opts[:graph][:column_aliases] # SEQUEL5: Remove :graph_aliases support
59
+ column_aliases = @opts[:graph][:column_aliases]
60
60
  fetch_rows(sql) do |r|
61
61
  graph = {}
62
62
  # Create the sub hashes, one per table
@@ -120,10 +120,9 @@ module Sequel
120
120
  # Reset the identifier mangling options. Overrides any already set on
121
121
  # the instance. Only for internal use by shared adapters.
122
122
  def reset_identifier_mangling
123
- # SEQUEL5: Stop checking Database.*
124
- @quote_identifiers = @opts.fetch(:quote_identifiers){(qi = Database.quote_identifiers).nil? ? quote_identifiers_default : qi}
125
- @identifier_input_method = @opts.fetch(:identifier_input_method){(iim = Database.identifier_input_method).nil? ? identifier_input_method_default : (iim if iim)}
126
- @identifier_output_method = @opts.fetch(:identifier_output_method){(iom = Database.identifier_output_method).nil? ? identifier_output_method_default : (iom if iom)}
123
+ @quote_identifiers = @opts.fetch(:quote_identifiers, quote_identifiers_default)
124
+ @identifier_input_method = @opts.fetch(:identifier_input_method, identifier_input_method_default)
125
+ @identifier_output_method = @opts.fetch(:identifier_output_method, identifier_output_method_default)
127
126
  reset_default_dataset
128
127
  end
129
128
  end
@@ -135,25 +134,12 @@ module Sequel
135
134
  @opts.fetch(:identifier_input_method, db.identifier_input_method)
136
135
  end
137
136
 
138
- # Set the method to call on identifiers going into the database for this dataset
139
- def identifier_input_method=(v)
140
- raise_if_frozen!(%w"identifier_input_method= with_identifier_input_method")
141
- skip_symbol_cache!
142
- @opts[:identifier_input_method] = v
143
- end
144
-
145
137
  # The String instance method to call on identifiers before sending them to
146
138
  # the database.
147
139
  def identifier_output_method
148
140
  @opts.fetch(:identifier_output_method, db.identifier_output_method)
149
141
  end
150
142
 
151
- # Set the method to call on identifiers coming the database for this dataset
152
- def identifier_output_method=(v)
153
- raise_if_frozen!(%w"identifier_output_method= with_identifier_output_method")
154
- @opts[:identifier_output_method] = v
155
- end
156
-
157
143
  # Check with the database to see if identifier quoting is enabled
158
144
  def quote_identifiers?
159
145
  @opts.fetch(:quote_identifiers, db.quote_identifiers?)
@@ -174,14 +160,18 @@ module Sequel
174
160
  # Convert the identifier to the version used in the database via
175
161
  # identifier_input_method.
176
162
  def input_identifier(v)
177
- (i = identifier_input_method) ? v.to_s.send(i) : v.to_s
163
+ (i = identifier_input_method) ? v.to_s.public_send(i) : v.to_s
178
164
  end
179
165
 
180
166
  # Modify the identifier returned from the database based on the
181
167
  # identifier_output_method.
182
168
  def output_identifier(v)
183
169
  v = 'untitled' if v == ''
184
- (i = identifier_output_method) ? v.to_s.send(i).to_sym : v.to_sym
170
+ (i = identifier_output_method) ? v.to_s.public_send(i).to_sym : v.to_sym
171
+ end
172
+
173
+ def non_sql_option?(key)
174
+ super || key == :identifier_input_method || key == :identifier_output_method
185
175
  end
186
176
  end
187
177
  end
@@ -27,7 +27,7 @@
27
27
  module Sequel
28
28
  class Dataset
29
29
  module ImplicitSubquery
30
- exceptions = [:and, :add_graph_aliases, :filter, :from, :from_self, :naked, :or, :order_more,
30
+ exceptions = [:add_graph_aliases, :filter, :from, :from_self, :naked, :or, :order_more,
31
31
  :qualify, :reverse, :reverse_order, :select_all, :select_more, :server,
32
32
  :set_graph_aliases, :unfiltered, :ungraphed, :ungrouped, :unlimited, :unordered,
33
33
  :with_sql]
@@ -35,7 +35,7 @@ module Sequel
35
35
  (Dataset::QUERY_METHODS - Dataset::JOIN_METHODS - exceptions + additions).each do |meth|
36
36
  define_method(meth) do |*a, &b|
37
37
  if opts[:sql]
38
- from_self.send(meth, *a, &b)
38
+ from_self.public_send(meth, *a, &b)
39
39
  else
40
40
  super(*a, &b)
41
41
  end
@@ -95,8 +95,8 @@ class String
95
95
  (@uncountables << words).flatten!
96
96
  end
97
97
 
98
- Sequel.require('default_inflections', 'model')
99
- instance_eval(&Sequel::DEFAULT_INFLECTIONS_PROC)
98
+ require_relative '../model/default_inflections'
99
+ instance_exec(&Sequel::DEFAULT_INFLECTIONS_PROC)
100
100
  end
101
101
 
102
102
  # Yield the Inflections module if a block is given, and return
@@ -151,7 +151,7 @@ class String
151
151
  # Example
152
152
  # "puni_puni".dasherize #=> "puni-puni"
153
153
  def dasherize
154
- gsub(/_/, '-')
154
+ gsub('_', '-')
155
155
  end
156
156
 
157
157
  # Removes the module part from the expression in the string
@@ -181,7 +181,7 @@ class String
181
181
  # "employee_salary" #=> "Employee salary"
182
182
  # "author_id" #=> "Author"
183
183
  def humanize
184
- gsub(/_id$/, "").gsub(/_/, " ").capitalize
184
+ gsub(/_id$/, "").gsub('_', " ").capitalize
185
185
  end
186
186
 
187
187
  # Returns the plural form of the word in the string.
@@ -41,7 +41,7 @@ module Sequel
41
41
  # direction.
42
42
  def self.apply(db, direction)
43
43
  raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
44
- new(db).send(direction)
44
+ new(db).public_send(direction)
45
45
  end
46
46
 
47
47
  # Returns the list of Migration descendants.
@@ -65,6 +65,7 @@ module Sequel
65
65
 
66
66
  # Intercepts method calls intended for the database and sends them along.
67
67
  def method_missing(method_sym, *args, &block)
68
+ # Allow calling private methods for backwards compatibility
68
69
  @db.send(method_sym, *args, &block)
69
70
  end
70
71
 
@@ -99,29 +100,29 @@ module Sequel
99
100
  end
100
101
 
101
102
  # Apply the appropriate block on the +Database+
102
- # instance using instance_eval.
103
+ # instance using instance_exec.
103
104
  def apply(db, direction)
104
105
  raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
105
- if prok = send(direction)
106
- db.instance_eval(&prok)
106
+ if prok = public_send(direction)
107
+ db.instance_exec(&prok)
107
108
  end
108
109
  end
109
110
  end
110
111
 
111
112
  # Internal class used by the Sequel.migration DSL, part of the +migration+ extension.
112
113
  class MigrationDSL < BasicObject
113
- # The underlying Migration instance
114
+ # The underlying SimpleMigration instance
114
115
  attr_reader :migration
115
116
 
116
117
  def self.create(&block)
117
118
  new(&block).migration
118
119
  end
119
120
 
120
- # Create a new migration class, and instance_eval the block.
121
+ # Create a new migration class, and instance_exec the block.
121
122
  def initialize(&block)
122
123
  @migration = SimpleMigration.new
123
124
  Migration.descendants << migration
124
- instance_eval(&block)
125
+ instance_exec(&block)
125
126
  end
126
127
 
127
128
  # Defines the migration's down action.
@@ -150,7 +151,7 @@ module Sequel
150
151
  # the block.
151
152
  #
152
153
  # There are no guarantees that this will work perfectly
153
- # in all cases, but it should work for most common cases.
154
+ # in all cases, but it works for some simple cases.
154
155
  def change(&block)
155
156
  migration.up = block
156
157
  migration.down = MigrationReverser.new.reverse(&block)
@@ -170,7 +171,7 @@ module Sequel
170
171
  # the given block.
171
172
  def reverse(&block)
172
173
  begin
173
- instance_eval(&block)
174
+ instance_exec(&block)
174
175
  rescue
175
176
  just_raise = true
176
177
  end
@@ -180,12 +181,9 @@ module Sequel
180
181
  actions = @actions.reverse
181
182
  Proc.new do
182
183
  actions.each do |a|
183
- if a.last.is_a?(Proc)
184
- pr = a.pop
185
- send(*a, &pr)
186
- else
187
- send(*a)
188
- end
184
+ pr = a.last.is_a?(Proc) ? a.pop : nil
185
+ # Allow calling private methods as the reversing methods are private
186
+ send(*a, &pr)
189
187
  end
190
188
  end
191
189
  end
@@ -233,8 +231,9 @@ module Sequel
233
231
  end
234
232
 
235
233
  def reverse(&block)
236
- instance_eval(&block)
234
+ instance_exec(&block)
237
235
  actions = @actions.reverse
236
+ # Allow calling private methods as the reversing methods are private
238
237
  Proc.new{actions.each{|a| send(*a)}}
239
238
  end
240
239
 
@@ -339,25 +338,20 @@ module Sequel
339
338
  #
340
339
  # For example, to migrate the database all the way down:
341
340
  #
342
- # Sequel::Migrator.run(DB, '.', :target=>0)
341
+ # Sequel::Migrator.run(DB, '.', target: 0)
343
342
  #
344
343
  # For example, to migrate the database to version 4:
345
344
  #
346
- # Sequel::Migrator.run(DB, '.', :target=>4)
345
+ # Sequel::Migrator.run(DB, '.', target: 4)
347
346
  #
348
347
  # To migrate the database from version 1 to version 5:
349
348
  #
350
- # Sequel::Migrator.run(DB, '.', :target=>5, :current=>1)
349
+ # Sequel::Migrator.run(DB, '.', target: 5, current: 1)
351
350
  #
352
351
  # Part of the +migration+ extension.
353
352
  class Migrator
354
353
  MIGRATION_FILE_PATTERN = /\A(\d+)_.+\.rb\z/i.freeze
355
354
 
356
- MIGRATION_SPLITTER = '_'.freeze
357
- Sequel::Deprecation.deprecate_constant(self, :MIGRATION_SPLITTER)
358
- MINIMUM_TIMESTAMP = 20000101
359
- Sequel::Deprecation.deprecate_constant(self, :MINIMUM_TIMESTAMP)
360
-
361
355
  # Exception class raised when there is an error with the migrator's
362
356
  # file structure, database, or arguments.
363
357
  class Error < Sequel::Error
@@ -397,16 +391,15 @@ module Sequel
397
391
  #
398
392
  # Examples:
399
393
  # Sequel::Migrator.run(DB, "migrations")
400
- # Sequel::Migrator.run(DB, "migrations", :target=>15, :current=>10)
401
- # Sequel::Migrator.run(DB, "app1/migrations", :column=> :app2_version)
402
- # Sequel::Migrator.run(DB, "app2/migrations", :column => :app2_version, :table=>:schema_info2)
394
+ # Sequel::Migrator.run(DB, "migrations", target: 15, current: 10)
395
+ # Sequel::Migrator.run(DB, "app1/migrations", column: :app2_version)
396
+ # Sequel::Migrator.run(DB, "app2/migrations", column: :app2_version, table: :schema_info2)
403
397
  def self.run(db, directory, opts=OPTS)
404
398
  migrator_class(directory).new(db, directory, opts).run
405
399
  end
406
400
 
407
401
  # Choose the Migrator subclass to use. Uses the TimestampMigrator
408
- # if the version number appears to be a unix time integer for a year
409
- # after 2005, otherwise uses the IntegerMigrator.
402
+ # if the version number is greater than 20000101, otherwise uses the IntegerMigrator.
410
403
  def self.migrator_class(directory)
411
404
  if self.equal?(Migrator)
412
405
  Dir.new(directory).each do |file|
@@ -508,11 +501,6 @@ module Sequel
508
501
  # version number starting with 1, where missing or duplicate migration file
509
502
  # versions are not allowed. Part of the +migration+ extension.
510
503
  class IntegerMigrator < Migrator
511
- DEFAULT_SCHEMA_COLUMN = :version
512
- DEFAULT_SCHEMA_TABLE = :schema_info
513
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_COLUMN)
514
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_TABLE)
515
-
516
504
  Error = Migrator::Error
517
505
 
518
506
  # The current version for this migrator
@@ -663,17 +651,12 @@ module Sequel
663
651
  end
664
652
  end
665
653
 
666
- # The migrator used if any migration file version appears to be a timestamp.
654
+ # The migrator used if any migration file version is greater than 20000101.
667
655
  # Stores filenames of migration files, and can figure out which migrations
668
656
  # have not been applied and apply them, even if earlier migrations are added
669
657
  # after later migrations. If you plan to do that, the responsibility is on
670
658
  # you to make sure the migrations don't conflict. Part of the +migration+ extension.
671
659
  class TimestampMigrator < Migrator
672
- DEFAULT_SCHEMA_COLUMN = :filename
673
- DEFAULT_SCHEMA_TABLE = :schema_migrations
674
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_COLUMN)
675
- Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_TABLE)
676
-
677
660
  Error = Migrator::Error
678
661
 
679
662
  # Array of strings of applied migration filenames