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
@@ -1,32 +1,14 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "A new Database" do
4
4
  before do
5
5
  @db = Sequel::Database.new(1 => 2, :logger => 3)
6
6
  end
7
- after do
8
- deprecated do
9
- Sequel.quote_identifiers = false
10
- Sequel.identifier_input_method = nil
11
- Sequel.identifier_output_method = nil
12
- end
13
- end
14
7
 
15
- deprecated "should support DatasetClass constant" do
16
- dbc = Class.new(Sequel::Database)
17
- dbc::DatasetClass = dsc = Class.new(Sequel::Dataset)
18
- dbc.new.dataset.must_be_kind_of(dsc)
19
- end
20
-
21
- deprecated "should allow dup/clone" do
22
- @db.dup.must_be_kind_of @db.class
23
- @db.clone.must_be_kind_of @db.class
24
- end
25
-
26
8
  it "should not allow dup/clone" do
27
- proc{@db.dup}.must_raise Sequel::Error
28
- proc{@db.clone}.must_raise Sequel::Error
29
- end if false # SEQUEL5
9
+ proc{@db.dup}.must_raise NoMethodError
10
+ proc{@db.clone}.must_raise NoMethodError
11
+ end
30
12
 
31
13
  it "should receive options" do
32
14
  @db.opts[1].must_equal 2
@@ -78,7 +60,7 @@ describe "A new Database" do
78
60
  it "should have the connection pool use the connect method to get connections" do
79
61
  cc = nil
80
62
  d = Sequel::Database.new
81
- meta_def(d, :connect){|c| 1234}
63
+ d.define_singleton_method(:connect){|c| 1234}
82
64
  d.synchronize {|c| cc = c}
83
65
  cc.must_equal 1234
84
66
  end
@@ -99,21 +81,13 @@ describe "A new Database" do
99
81
  end
100
82
 
101
83
  it "should just use a :uri option for jdbc with the full connection string" do
102
- db = Sequel::Database.stub(:adapter_class, Sequel::Database) do
84
+ db = Sequel::Database.stub(:adapter_class, Class.new(Sequel::Database){def connect(*); Object.new end}) do
103
85
  Sequel.connect('jdbc:test://host/db_name')
104
86
  end
105
87
  db.must_be_kind_of(Sequel::Database)
106
88
  db.opts[:uri].must_equal 'jdbc:test://host/db_name'
107
89
  end
108
90
 
109
- it "should just use a :uri option for do with the full connection string" do
110
- db = Sequel::Database.stub(:adapter_class, Sequel::Database) do
111
- Sequel.connect('do:test://host/db_name')
112
- end
113
- db.must_be_kind_of(Sequel::Database)
114
- db.opts[:uri].must_equal 'do:test://host/db_name'
115
- end
116
-
117
91
  it "should populate :adapter option when using connection string" do
118
92
  Sequel.connect('mock:/').opts[:adapter].must_equal "mock"
119
93
  end
@@ -125,7 +99,7 @@ describe "A new Database" do
125
99
 
126
100
  it 'should strip square brackets for ipv6 hosts' do
127
101
  Sequel.connect('mock://[::1]').opts[:host].must_equal "::1"
128
- end if RUBY_VERSION >= '1.9.3'
102
+ end
129
103
  end
130
104
 
131
105
  describe "Database#freeze" do
@@ -188,79 +162,6 @@ describe "Database#log_info" do
188
162
  end
189
163
  end
190
164
 
191
- describe "Database#log_yield" do
192
- before do
193
- @o = Object.new
194
- def @o.logs; @logs || []; end
195
- def @o.warn(*args); (@logs ||= []) << [:warn] + args; end
196
- def @o.method_missing(*args); (@logs ||= []) << args; end
197
- def @o.to_ary; [self]; end
198
- @db = Sequel::Database.new(:logger=>@o)
199
- end
200
-
201
- deprecated "should yield to the passed block" do
202
- a = nil
203
- @db.log_yield('blah'){a = 1}
204
- a.must_equal 1
205
- end
206
-
207
- deprecated "should raise an exception if a block is not passed" do
208
- proc{@db.log_yield('blah')}.must_raise LocalJumpError
209
- end
210
-
211
- deprecated "should log message with duration at info level to all loggers" do
212
- @db.log_yield('blah'){}
213
- @o.logs.length.must_equal 1
214
- @o.logs.first.length.must_equal 2
215
- @o.logs.first.first.must_equal :info
216
- @o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
217
- end
218
-
219
- deprecated "should respect sql_log_level setting" do
220
- @db.sql_log_level = :debug
221
- @db.log_yield('blah'){}
222
- @o.logs.length.must_equal 1
223
- @o.logs.first.length.must_equal 2
224
- @o.logs.first.first.must_equal :debug
225
- @o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
226
- end
227
-
228
- deprecated "should log message with duration at warn level if duration greater than log_warn_duration" do
229
- @db.log_warn_duration = 0
230
- @db.log_yield('blah'){}
231
- @o.logs.length.must_equal 1
232
- @o.logs.first.length.must_equal 2
233
- @o.logs.first.first.must_equal :warn
234
- @o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
235
- end
236
-
237
- deprecated "should log message with duration at info level if duration less than log_warn_duration" do
238
- @db.log_warn_duration = 1000
239
- @db.log_yield('blah'){}
240
- @o.logs.length.must_equal 1
241
- @o.logs.first.length.must_equal 2
242
- @o.logs.first.first.must_equal :info
243
- @o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
244
- end
245
-
246
- deprecated "should log message at error level if block raises an error" do
247
- @db.log_warn_duration = 0
248
- proc{@db.log_yield('blah'){raise Sequel::Error, 'adsf'}}.must_raise Sequel::Error
249
- @o.logs.length.must_equal 1
250
- @o.logs.first.length.must_equal 2
251
- @o.logs.first.first.must_equal :error
252
- @o.logs.first.last.must_match(/\ASequel::Error: adsf: blah\z/)
253
- end
254
-
255
- deprecated "should include args with message if args passed" do
256
- @db.log_yield('blah', [1, 2]){}
257
- @o.logs.length.must_equal 1
258
- @o.logs.first.length.must_equal 2
259
- @o.logs.first.first.must_equal :info
260
- @o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah; \[1, 2\]\z/)
261
- end
262
- end
263
-
264
165
  describe "Database#log_connection_yield" do
265
166
  before do
266
167
  @o = Object.new
@@ -357,6 +258,7 @@ describe "Database#uri" do
357
258
  before do
358
259
  @c = Class.new(Sequel::Database) do
359
260
  def dataset_class_default; Sequel::Dataset end
261
+ def connect(*); Object.new end
360
262
  set_adapter_scheme :mau
361
263
  end
362
264
 
@@ -412,10 +314,8 @@ describe "Database#dataset" do
412
314
  e.sql.must_equal 'SELECT * FROM miu'
413
315
  end
414
316
 
415
- deprecated "should provide a filtered #from dataset if a block is given" do
416
- d = @db.from(:mau){x.sql_number > 100}
417
- d.must_be_kind_of(Sequel::Dataset)
418
- d.sql.must_equal 'SELECT * FROM mau WHERE (x > 100)'
317
+ it "should provide a #from dataset that supports virtual row blocks" do
318
+ @db.from{a(b)}.sql.must_equal 'SELECT * FROM a(b)'
419
319
  end
420
320
 
421
321
  it "should provide a #select dataset" do
@@ -710,7 +610,7 @@ end
710
610
  describe "Database#synchronize" do
711
611
  before do
712
612
  @db = Sequel::Database.new(:max_connections => 1)
713
- meta_def(@db, :connect){|c| 12345}
613
+ @db.define_singleton_method(:connect){|c| 12345}
714
614
  end
715
615
 
716
616
  it "should wrap the supplied block in pool.hold" do
@@ -735,7 +635,7 @@ describe "Database#test_connection" do
735
635
  before do
736
636
  @db = Sequel::Database.new
737
637
  pr = proc{@test = rand(100)}
738
- meta_def(@db, :connect){|c| pr.call}
638
+ @db.define_singleton_method(:connect){|c| pr.call}
739
639
  end
740
640
 
741
641
  it "should attempt to get a connection" do
@@ -781,7 +681,7 @@ DatabaseTransactionSpecs = shared_description do
781
681
  end
782
682
 
783
683
  it "should support transaction isolation levels" do
784
- meta_def(@db, :supports_transaction_isolation_levels?){true}
684
+ @db.define_singleton_method(:supports_transaction_isolation_levels?){true}
785
685
  [:uncommitted, :committed, :repeatable, :serializable].each do |l|
786
686
  @db.transaction(:isolation=>l){@db.run "DROP TABLE #{l}"}
787
687
  end
@@ -792,7 +692,7 @@ DatabaseTransactionSpecs = shared_description do
792
692
  end
793
693
 
794
694
  it "should allow specifying a default transaction isolation level" do
795
- meta_def(@db, :supports_transaction_isolation_levels?){true}
695
+ @db.define_singleton_method(:supports_transaction_isolation_levels?){true}
796
696
  [:uncommitted, :committed, :repeatable, :serializable].each do |l|
797
697
  @db.transaction_isolation_level = l
798
698
  @db.transaction{@db.run "DROP TABLE #{l}"}
@@ -883,8 +783,8 @@ DatabaseTransactionSpecs = shared_description do
883
783
 
884
784
  it "should handle errors when sending BEGIN" do
885
785
  ec = Class.new(StandardError)
886
- meta_def(@db, :database_error_classes){[ec]}
887
- meta_def(@db, :log_connection_execute){|c, sql| sql =~ /BEGIN/ ? raise(ec, 'bad') : super(c, sql)}
786
+ @db.define_singleton_method(:database_error_classes){[ec]}
787
+ @db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /BEGIN/ ? raise(ec, 'bad') : super(c, sql)}
888
788
  begin
889
789
  @db.transaction{@db.execute 'DROP TABLE test;'}
890
790
  rescue Sequel::DatabaseError => e
@@ -896,8 +796,8 @@ DatabaseTransactionSpecs = shared_description do
896
796
 
897
797
  it "should handle errors when sending COMMIT" do
898
798
  ec = Class.new(StandardError)
899
- meta_def(@db, :database_error_classes){[ec]}
900
- meta_def(@db, :log_connection_execute){|c, sql| sql =~ /COMMIT/ ? raise(ec, 'bad') : super(c, sql)}
799
+ @db.define_singleton_method(:database_error_classes){[ec]}
800
+ @db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /COMMIT/ ? raise(ec, 'bad') : super(c, sql)}
901
801
  begin
902
802
  @db.transaction{@db.execute 'DROP TABLE test;'}
903
803
  rescue Sequel::DatabaseError => e
@@ -909,8 +809,8 @@ DatabaseTransactionSpecs = shared_description do
909
809
 
910
810
  it "should raise original exception if there is an exception raised when rolling back" do
911
811
  ec = Class.new(StandardError)
912
- meta_def(@db, :database_error_classes){[ec]}
913
- meta_def(@db, :log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
812
+ @db.define_singleton_method(:database_error_classes){[ec]}
813
+ @db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
914
814
  begin
915
815
  @db.transaction{raise ArgumentError, 'asdf'}
916
816
  rescue => e
@@ -921,8 +821,8 @@ DatabaseTransactionSpecs = shared_description do
921
821
 
922
822
  it "should raise original exception if there is an exception raised when rolling back when using :rollback=>:always" do
923
823
  ec = Class.new(StandardError)
924
- meta_def(@db, :database_error_classes){[ec]}
925
- meta_def(@db, :log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
824
+ @db.define_singleton_method(:database_error_classes){[ec]}
825
+ @db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
926
826
  begin
927
827
  @db.transaction(:rollback=>:always){}
928
828
  rescue => e
@@ -1014,10 +914,10 @@ DatabaseTransactionSpecs = shared_description do
1014
914
  end
1015
915
 
1016
916
  it "should raise database errors when commiting a transaction as Sequel::DatabaseError" do
1017
- meta_def(@db, :commit_transaction){raise ArgumentError}
917
+ @db.define_singleton_method(:commit_transaction){raise ArgumentError}
1018
918
  lambda{@db.transaction{}}.must_raise(ArgumentError)
1019
919
 
1020
- meta_def(@db, :database_error_classes){[ArgumentError]}
920
+ @db.define_singleton_method(:database_error_classes){[ArgumentError]}
1021
921
  lambda{@db.transaction{}}.must_raise(Sequel::DatabaseError)
1022
922
  end
1023
923
 
@@ -1144,13 +1044,13 @@ DatabaseTransactionSpecs = shared_description do
1144
1044
  end
1145
1045
 
1146
1046
  it "should raise an error if you attempt to use after_commit inside a prepared transaction" do
1147
- meta_def(@db, :supports_prepared_transactions?){true}
1047
+ @db.define_singleton_method(:supports_prepared_transactions?){true}
1148
1048
  proc{@db.transaction(:prepare=>'XYZ'){@db.after_commit{@db.execute('foo')}}}.must_raise(Sequel::Error)
1149
1049
  @db.sqls.must_equal ['BEGIN', 'ROLLBACK']
1150
1050
  end
1151
1051
 
1152
1052
  it "should raise an error if you attempt to use after_rollback inside a prepared transaction" do
1153
- meta_def(@db, :supports_prepared_transactions?){true}
1053
+ @db.define_singleton_method(:supports_prepared_transactions?){true}
1154
1054
  proc{@db.transaction(:prepare=>'XYZ'){@db.after_rollback{@db.execute('foo')}}}.must_raise(Sequel::Error)
1155
1055
  @db.sqls.must_equal ['BEGIN', 'ROLLBACK']
1156
1056
  end
@@ -1216,13 +1116,13 @@ describe "Database#transaction with savepoint support" do
1216
1116
  end
1217
1117
 
1218
1118
  it "should raise an error if you attempt to use after_commit inside a savepoint in a prepared transaction" do
1219
- meta_def(@db, :supports_prepared_transactions?){true}
1119
+ @db.define_singleton_method(:supports_prepared_transactions?){true}
1220
1120
  proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_commit{@db.execute('foo')}}}}.must_raise(Sequel::Error)
1221
1121
  @db.sqls.must_equal ['BEGIN', 'SAVEPOINT autopoint_1','ROLLBACK TO SAVEPOINT autopoint_1', 'ROLLBACK']
1222
1122
  end
1223
1123
 
1224
1124
  it "should raise an error if you attempt to use after_rollback inside a savepoint in a prepared transaction" do
1225
- meta_def(@db, :supports_prepared_transactions?){true}
1125
+ @db.define_singleton_method(:supports_prepared_transactions?){true}
1226
1126
  proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_rollback{@db.execute('foo')}}}}.must_raise(Sequel::Error)
1227
1127
  @db.sqls.must_equal ['BEGIN', 'SAVEPOINT autopoint_1','ROLLBACK TO SAVEPOINT autopoint_1', 'ROLLBACK']
1228
1128
  end
@@ -1241,7 +1141,7 @@ end
1241
1141
  describe "Database#transaction without savepoint support" do
1242
1142
  before do
1243
1143
  @db = Sequel.mock(:servers=>{:test=>{}})
1244
- meta_def(@db, :supports_savepoints?){false}
1144
+ @db.define_singleton_method(:supports_savepoints?){false}
1245
1145
  end
1246
1146
 
1247
1147
  it "should not create savepoint if inside a transaction when :savepoint=>:only is used" do
@@ -1405,11 +1305,11 @@ describe "Database#transaction with savepoints" do
1405
1305
  end
1406
1306
 
1407
1307
  it "should raise database errors when commiting a transaction as Sequel::DatabaseError" do
1408
- meta_def(@db, :commit_transaction){raise ArgumentError}
1308
+ @db.define_singleton_method(:commit_transaction){raise ArgumentError}
1409
1309
  lambda{@db.transaction{}}.must_raise(ArgumentError)
1410
1310
  lambda{@db.transaction{@db.transaction(:savepoint=>true){}}}.must_raise(ArgumentError)
1411
1311
 
1412
- meta_def(@db, :database_error_classes){[ArgumentError]}
1312
+ @db.define_singleton_method(:database_error_classes){[ArgumentError]}
1413
1313
  lambda{@db.transaction{}}.must_raise(Sequel::DatabaseError)
1414
1314
  lambda{@db.transaction{@db.transaction(:savepoint=>true){}}}.must_raise(Sequel::DatabaseError)
1415
1315
  end
@@ -1417,7 +1317,7 @@ end
1417
1317
 
1418
1318
  describe "A Database adapter with a scheme" do
1419
1319
  before do
1420
- require 'sequel/adapters/mock'
1320
+ require_relative '../../lib/sequel/adapters/mock'
1421
1321
  @ccc = Class.new(Sequel::Mock::Database)
1422
1322
  @ccc.send(:set_adapter_scheme, :ccc)
1423
1323
  end
@@ -1475,7 +1375,7 @@ describe "A Database adapter with a scheme" do
1475
1375
  Sequel.send(:def_adapter_method, :ccc)
1476
1376
  Sequel.ccc('db', :host=>'localhost', &p).must_equal returnValue
1477
1377
  @ccc::DISCONNECTS.must_equal [z, y, x]
1478
- class << Sequel; remove_method(:ccc) end
1378
+ Sequel.singleton_class.send(:remove_method, :ccc)
1479
1379
  end
1480
1380
 
1481
1381
  it "should be accessible through Sequel.<adapter>" do
@@ -1500,7 +1400,7 @@ describe "A Database adapter with a scheme" do
1500
1400
  c = Sequel.ccc(:database => 'mydb', :host => 'localhost')
1501
1401
  c.must_be_kind_of(@ccc)
1502
1402
  c.opts.values_at(:adapter, :database, :host, :adapter_class).must_equal [:ccc, 'mydb', 'localhost', @ccc]
1503
- class << Sequel; remove_method(:ccc) end
1403
+ Sequel.singleton_class.send(:remove_method, :ccc)
1504
1404
  end
1505
1405
 
1506
1406
  it "should be accessible through Sequel.connect with options" do
@@ -1608,14 +1508,6 @@ describe "A single threaded database" do
1608
1508
  db.pool.must_be_kind_of(Sequel::SingleConnectionPool)
1609
1509
  end
1610
1510
 
1611
- deprecated "should be constructable using Database.single_threaded = true" do
1612
- Sequel::Database.single_threaded = true
1613
- Sequel.single_threaded.must_equal true
1614
- Sequel::Database.single_threaded.must_equal true
1615
- db = Sequel::Database.new{123}
1616
- db.pool.must_be_kind_of(Sequel::SingleConnectionPool)
1617
- end
1618
-
1619
1511
  it "should be constructable using Sequel.single_threaded = true" do
1620
1512
  Sequel.single_threaded = true
1621
1513
  Sequel.single_threaded.must_equal true
@@ -1628,7 +1520,7 @@ describe "A single threaded database" do
1628
1520
  before do
1629
1521
  conn = 1234567
1630
1522
  @db = Sequel::Database.new(:single_threaded => true)
1631
- meta_def(@db, :connect) do |c|
1523
+ @db.define_singleton_method(:connect) do |c|
1632
1524
  conn += 1
1633
1525
  end
1634
1526
  end
@@ -1649,14 +1541,12 @@ describe "A single threaded database" do
1649
1541
  end
1650
1542
 
1651
1543
  it "should convert an Exception on connection into a DatabaseConnectionError" do
1652
- db = Sequel::Database.new(:single_threaded => true, :servers=>{})
1653
- def db.connect(*) raise Exception end
1544
+ db = Class.new(Sequel::Database){def connect(*) raise Exception end}.new(:single_threaded => true, :servers=>{}, :test=>false)
1654
1545
  proc {db.pool.hold {|c|}}.must_raise(Sequel::DatabaseConnectionError)
1655
1546
  end
1656
1547
 
1657
1548
  it "should raise a DatabaseConnectionError if the connection proc returns nil" do
1658
- db = Sequel.mock(:single_threaded => true, :servers=>{})
1659
- def db.connect(*) end
1549
+ db = Class.new(Sequel::Database){def connect(*) end}.new(:single_threaded => true, :servers=>{}, :test=>false)
1660
1550
  proc {db.pool.hold {|c|}}.must_raise(Sequel::DatabaseConnectionError)
1661
1551
  end
1662
1552
  end
@@ -1776,11 +1666,11 @@ describe "Database#inspect" do
1776
1666
  end
1777
1667
 
1778
1668
  it "should include the class name and the connection options if an options hash was given" do
1779
- Sequel.connect(:adapter=>:mock).inspect.must_match(/#<Sequel::Mock::Database: \{:adapter=>:mock\}>/)
1669
+ Sequel.connect(:adapter=>:mock).inspect.must_equal '#<Sequel::Mock::Database: {:adapter=>:mock}>'
1780
1670
  end
1781
1671
 
1782
1672
  it "should include the class name, uri, and connection options if uri and options hash was given" do
1783
- Sequel.connect('mock://foo', :database=>'bar').inspect.must_match(/#<Sequel::Mock::Database: "mock:\/\/foo" \{:database=>"bar"\}>/)
1673
+ Sequel.connect('mock://foo', :database=>'bar').inspect.must_equal '#<Sequel::Mock::Database: "mock://foo" {:database=>"bar"}>'
1784
1674
  end
1785
1675
  end
1786
1676
 
@@ -1890,6 +1780,10 @@ describe "Database#add_servers" do
1890
1780
  @db.synchronize(:server1){|c| c.opts[:host].must_equal 8}
1891
1781
  @db.synchronize(:server2){|c| c.opts[:host].must_equal 4}
1892
1782
  end
1783
+
1784
+ it "should raise error for unsharded pool" do
1785
+ proc{Sequel.mock.add_servers(:server1=>{})}.must_raise Sequel::Error
1786
+ end
1893
1787
  end
1894
1788
 
1895
1789
  describe "Database#remove_servers" do
@@ -1940,86 +1834,12 @@ describe "Database#remove_servers" do
1940
1834
  c1.opts[:host].must_equal 1
1941
1835
  end
1942
1836
  end
1943
- end
1944
-
1945
- describe "Database#add_servers and #remove_servers when not sharded" do
1946
- deprecated "should do nothing" do
1947
- db = Sequel.mock
1948
- db.opts[:servers].must_be_nil
1949
- db.add_servers(:foo=>{}).must_be_nil
1950
- db.opts[:servers].must_be_nil
1951
- db.remove_servers(:foo).must_be_nil
1952
- db.opts[:servers].must_be_nil
1953
- end
1954
-
1955
- it "should raise Error" do
1956
- db = Sequel.mock
1957
- db.opts[:servers].must_be_nil
1958
- proc{db.add_servers(:foo=>{})}.must_raise Sequel::Error
1959
- db.opts[:servers].must_be_nil
1960
- proc{db.remove_servers(:foo)}.must_raise Sequel::Error
1961
- db.opts[:servers].must_be_nil
1962
- end if false # SEQUEL5
1963
- end
1964
-
1965
- describe "Database#each_server with do/jdbc adapter connection string without :adapter option" do
1966
- deprecated "should yield a separate database object for each server" do
1967
- require 'sequel/adapters/mock'
1968
- klass = Class.new(Sequel::Database)
1969
- def klass.adapter_class(v)
1970
- raise unless v == :jdbc
1971
- Sequel::Mock::Database
1972
- end
1973
- @db = klass.connect('jdbc:blah:', :host=>1, :database=>2, :servers=>{:server1=>{:host=>3}})
1974
-
1975
- hosts = []
1976
- @db.each_server do |db|
1977
- db.must_be_kind_of(Sequel::Database)
1978
- db.wont_equal @db
1979
- db.opts[:adapter_class].must_equal Sequel::Mock::Database
1980
- db.opts[:database].must_equal 2
1981
- hosts << db.opts[:host]
1982
- end
1983
- hosts.sort.must_equal [1, 3]
1984
- end
1985
1837
 
1986
- deprecated "should raise if not given a block" do
1987
- proc{Sequel.mock.each_server}.must_raise(Sequel::Error)
1838
+ it "should raise error for unsharded pool" do
1839
+ proc{Sequel.mock.remove_servers(:server1)}.must_raise Sequel::Error
1988
1840
  end
1989
1841
  end
1990
1842
 
1991
- describe "Database#each_server" do
1992
- before do
1993
- @db = Sequel.mock(:host=>1, :database=>2, :servers=>{:server1=>{:host=>3}, :server2=>{:host=>4}})
1994
- end
1995
-
1996
- deprecated "should yield a separate database object for each server" do
1997
- hosts = []
1998
- @db.each_server do |db|
1999
- db.must_be_kind_of(Sequel::Database)
2000
- db.wont_equal @db
2001
- db.opts[:adapter].must_equal :mock
2002
- db.opts[:database].must_equal 2
2003
- hosts << db.opts[:host]
2004
- end
2005
- hosts.sort.must_equal [1, 3, 4]
2006
- end
2007
-
2008
- deprecated "should disconnect and remove entry from Sequel::DATABASES after use" do
2009
- dbs = []
2010
- dcs = []
2011
- @db.each_server do |db|
2012
- dbs << db
2013
- Sequel::DATABASES.must_include(db)
2014
- meta_def(db, :disconnect){dcs << db}
2015
- end
2016
- dbs.each do |db|
2017
- Sequel::DATABASES.wont_include(db)
2018
- end
2019
- dbs.must_equal dcs
2020
- end
2021
- end
2022
-
2023
1843
  describe "Database#raise_error" do
2024
1844
  before do
2025
1845
  @db = Sequel.mock
@@ -2156,9 +1976,9 @@ describe "Database#typecast_value" do
2156
1976
  t2 = Time.mktime(2011, 1, 2, 3, 4, 5, 500000) # Local Time
2157
1977
  t3 = Time.utc(2011, 1, 2, 3, 4, 5, 500000) - (t - t2) # Local Time in UTC Time
2158
1978
  t4 = Time.mktime(2011, 1, 2, 3, 4, 5, 500000) + (t - t2) # UTC Time in Local Time
2159
- secs = defined?(Rational) ? Rational(11, 2) : 5.5
2160
- r1 = defined?(Rational) ? Rational(t2.utc_offset, 86400) : t2.utc_offset/86400.0
2161
- r2 = defined?(Rational) ? Rational((t - t2).to_i, 86400) : (t - t2).to_i/86400.0
1979
+ secs = Rational(11, 2)
1980
+ r1 = Rational(t2.utc_offset, 86400)
1981
+ r2 = Rational((t - t2).to_i, 86400)
2162
1982
  dt = DateTime.civil(2011, 1, 2, 3, 4, secs)
2163
1983
  dt2 = DateTime.civil(2011, 1, 2, 3, 4, secs, r1)
2164
1984
  dt3 = DateTime.civil(2011, 1, 2, 3, 4, secs) - r2
@@ -2297,8 +2117,8 @@ describe "Database#typecast_value" do
2297
2117
 
2298
2118
  Sequel.datetime_class = DateTime
2299
2119
  @db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14]).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14)
2300
- @db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000]).must_equal DateTime.civil(2011, 10, 11, 12, 13, (defined?(Rational) ? Rational(29, 2) : 14.5))
2301
- @db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000, (defined?(Rational) ? Rational(1, 2) : 0.5)]).must_equal DateTime.civil(2011, 10, 11, 12, 13, (defined?(Rational) ? Rational(29, 2) : 14.5), (defined?(Rational) ? Rational(1, 2) : 0.5))
2120
+ @db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000]).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
2121
+ @db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000, Rational(1, 2)]).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2), Rational(1, 2))
2302
2122
  ensure
2303
2123
  Sequel.datetime_class = Time
2304
2124
  end
@@ -2313,13 +2133,13 @@ describe "Database#typecast_value" do
2313
2133
 
2314
2134
  Sequel.datetime_class = DateTime
2315
2135
  @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14)
2316
- @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13, (defined?(Rational) ? Rational(29, 2) : 14.5))
2136
+ @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
2317
2137
  @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14)
2318
- @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13, (defined?(Rational) ? Rational(29, 2) : 14.5))
2319
- @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :offset=>(defined?(Rational) ? Rational(1, 2) : 0.5)).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14, (defined?(Rational) ? Rational(1, 2) : 0.5))
2320
- @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000, :offset=>(defined?(Rational) ? Rational(1, 2) : 0.5)).must_equal DateTime.civil(2011, 10, 11, 12, 13, (defined?(Rational) ? Rational(29, 2) : 14.5), (defined?(Rational) ? Rational(1, 2) : 0.5))
2321
- @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'offset'=>(defined?(Rational) ? Rational(1, 2) : 0.5)).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14, (defined?(Rational) ? Rational(1, 2) : 0.5))
2322
- @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000, 'offset'=>(defined?(Rational) ? Rational(1, 2) : 0.5)).must_equal DateTime.civil(2011, 10, 11, 12, 13, (defined?(Rational) ? Rational(29, 2) : 14.5), (defined?(Rational) ? Rational(1, 2) : 0.5))
2138
+ @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
2139
+ @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :offset=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14, Rational(1, 2))
2140
+ @db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000, :offset=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2), Rational(1, 2))
2141
+ @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'offset'=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14, Rational(1, 2))
2142
+ @db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000, 'offset'=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2), Rational(1, 2))
2323
2143
  ensure
2324
2144
  Sequel.datetime_class = Time
2325
2145
  end
@@ -2397,7 +2217,7 @@ describe "Database#typecast_value" do
2397
2217
  rescue => e1
2398
2218
  begin
2399
2219
  raise RuntimeError
2400
- rescue => e2
2220
+ rescue
2401
2221
  @db.send(:raise_error, e1)
2402
2222
  end
2403
2223
  end
@@ -2411,7 +2231,7 @@ describe "Database#typecast_value" do
2411
2231
  @db.typecast_value(:date, 'a')
2412
2232
  true.must_equal false
2413
2233
  rescue Sequel::InvalidValue => e
2414
- e.inspect.must_match(/\A#<Sequel::InvalidValue: ArgumentError: .*>\z/)
2234
+ e.inspect.must_equal '#<Sequel::InvalidValue: ArgumentError: invalid date>'
2415
2235
  end
2416
2236
  end
2417
2237
  end
@@ -2559,8 +2379,8 @@ describe "Database#supports_savepoints_in_prepared_transactions?" do
2559
2379
 
2560
2380
  it "should be true if both savepoints and prepared transactions are supported" do
2561
2381
  db = Sequel::Database.new
2562
- meta_def(db, :supports_savepoints?){true}
2563
- meta_def(db, :supports_prepared_transactions?){true}
2382
+ db.define_singleton_method(:supports_savepoints?){true}
2383
+ db.define_singleton_method(:supports_prepared_transactions?){true}
2564
2384
  db.supports_savepoints_in_prepared_transactions?.must_equal true
2565
2385
  end
2566
2386
  end
@@ -2669,7 +2489,7 @@ describe "Database extensions" do
2669
2489
  end
2670
2490
  end
2671
2491
  before do
2672
- @db = Sequel.mock(:identifier_mangling=>false)
2492
+ @db = Sequel.mock
2673
2493
  end
2674
2494
  after do
2675
2495
  Sequel::Database.instance_variable_set(:@initialize_hook, Proc.new {|db| })
@@ -2724,8 +2544,8 @@ describe "Database extensions" do
2724
2544
  Sequel::Database.extension(:foo, :bar)
2725
2545
  @db.wont_respond_to(:a)
2726
2546
  @db.wont_respond_to(:b)
2727
- Sequel.mock(:identifier_mangling=>false).a.must_equal 1
2728
- Sequel.mock(:identifier_mangling=>false).b.must_equal 2
2547
+ Sequel.mock.a.must_equal 1
2548
+ Sequel.mock.b.must_equal 2
2729
2549
  end
2730
2550
  end
2731
2551
 
@@ -2816,6 +2636,6 @@ end
2816
2636
 
2817
2637
  describe "Dataset identifier folding" do
2818
2638
  it "should fold to uppercase by default, as per SQL" do
2819
- Sequel::Database.new(:identifier_mangling=>false).send(:folds_unquoted_identifiers_to_uppercase?).must_equal true
2639
+ Sequel::Database.new.send(:folds_unquoted_identifiers_to_uppercase?).must_equal true
2820
2640
  end
2821
2641
  end