sequel 4.49.0 → 5.3.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  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/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,17 +1,12 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "DB#create_table" do
4
4
  before do
5
5
  @db = Sequel.mock
6
6
  end
7
7
 
8
- deprecated "should support an CreateTableGenerator as second argument" do
9
- @db.create_table(:cats, Sequel::Schema::CreateTableGenerator.new(@db){})
10
- @db.sqls.must_equal ['CREATE TABLE cats ()']
11
- end
12
-
13
8
  it "should accept the table name" do
14
- @db.create_table(:cats) {}
9
+ @db.create_table(:cats){}.must_be_nil
15
10
  @db.sqls.must_equal ['CREATE TABLE cats ()']
16
11
  end
17
12
 
@@ -514,15 +509,22 @@ describe "DB#create_table" do
514
509
  end
515
510
 
516
511
  it "should ignore errors if the database raises an error on an index creation statement and the :ignore_index_errors option is used" do
517
- meta_def(@db, :execute_ddl){|*a| raise Sequel::DatabaseError if /blah/.match(a.first); super(*a)}
512
+ @db.define_singleton_method(:execute_ddl){|*a| raise Sequel::DatabaseError if /blah/.match(a.first); super(*a)}
518
513
  lambda{@db.create_table(:cats){Integer :id; index :blah; index :id}}.must_raise(Sequel::DatabaseError)
519
514
  @db.sqls.must_equal ['CREATE TABLE cats (id integer)']
520
515
  @db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}
521
516
  @db.sqls.must_equal ['CREATE TABLE cats (id integer)', 'CREATE INDEX cats_id_index ON cats (id)']
522
517
  end
523
518
 
524
- it "should use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used" do
525
- meta_def(@db, :execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
519
+ it "should not use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used" do
520
+ @db.define_singleton_method(:execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
521
+ @db.transaction{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}
522
+ @db.sqls.must_equal ["BEGIN", "CREATE TABLE cats (id integer)", "CREATE INDEX cats_blah_index ON cats (blah)", "CREATE INDEX cats_id_index ON cats (id)", "COMMIT"]
523
+ end
524
+
525
+ it "should use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used and transactional schema modifications are supported" do
526
+ @db.define_singleton_method(:supports_transactional_ddl?){true}
527
+ @db.define_singleton_method(:execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
526
528
  @db.transaction{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}
527
529
  @db.sqls.must_equal ["BEGIN", "CREATE TABLE cats (id integer)", "SAVEPOINT autopoint_1", "CREATE INDEX cats_blah_index ON cats (blah)", "ROLLBACK TO SAVEPOINT autopoint_1", "SAVEPOINT autopoint_1", "CREATE INDEX cats_id_index ON cats (id)", "RELEASE SAVEPOINT autopoint_1", "COMMIT"]
528
530
  end
@@ -613,7 +615,7 @@ describe "DB#create_table" do
613
615
  @db.sqls.must_equal ["CREATE TABLE cats (CHECK (price = 100))"]
614
616
  end
615
617
 
616
- deprecated "should accept array constraints" do
618
+ it "should accept array constraints" do
617
619
  @db.create_table(:cats) do
618
620
  check [Sequel.expr(:x) > 0, Sequel.expr(:y) < 1]
619
621
  end
@@ -757,19 +759,19 @@ describe "DB#create_table!" do
757
759
  end
758
760
 
759
761
  it "should create the table if it does not exist" do
760
- meta_def(@db, :table_exists?){|a| false}
761
- @db.create_table!(:cats){|*a|}
762
+ @db.define_singleton_method(:table_exists?){|a| false}
763
+ @db.create_table!(:cats){|*a|}.must_be_nil
762
764
  @db.sqls.must_equal ['CREATE TABLE cats ()']
763
765
  end
764
766
 
765
767
  it "should drop the table before creating it if it already exists" do
766
- meta_def(@db, :table_exists?){|a| true}
768
+ @db.define_singleton_method(:table_exists?){|a| true}
767
769
  @db.create_table!(:cats){|*a|}
768
770
  @db.sqls.must_equal ['DROP TABLE cats', 'CREATE TABLE cats ()']
769
771
  end
770
772
 
771
773
  it "should use IF EXISTS if the database supports it" do
772
- meta_def(@db, :supports_drop_table_if_exists?){true}
774
+ @db.define_singleton_method(:supports_drop_table_if_exists?){true}
773
775
  @db.create_table!(:cats){|*a|}
774
776
  @db.sqls.must_equal ['DROP TABLE IF EXISTS cats', 'CREATE TABLE cats ()']
775
777
  end
@@ -781,30 +783,30 @@ describe "DB#create_table?" do
781
783
  end
782
784
 
783
785
  it "should not create the table if the table already exists" do
784
- meta_def(@db, :table_exists?){|a| true}
785
- @db.create_table?(:cats){|*a|}
786
+ @db.define_singleton_method(:table_exists?){|a| true}
787
+ @db.create_table?(:cats){|*a|}.must_be_nil
786
788
  @db.sqls.must_equal []
787
789
  end
788
790
 
789
791
  it "should create the table if the table doesn't already exist" do
790
- meta_def(@db, :table_exists?){|a| false}
792
+ @db.define_singleton_method(:table_exists?){|a| false}
791
793
  @db.create_table?(:cats){|*a|}
792
794
  @db.sqls.must_equal ['CREATE TABLE cats ()']
793
795
  end
794
796
 
795
797
  it "should use IF NOT EXISTS if the database supports that" do
796
- meta_def(@db, :supports_create_table_if_not_exists?){true}
798
+ @db.define_singleton_method(:supports_create_table_if_not_exists?){true}
797
799
  @db.create_table?(:cats){|*a|}
798
800
  @db.sqls.must_equal ['CREATE TABLE IF NOT EXISTS cats ()']
799
801
  end
800
802
 
801
803
  it "should not use IF NOT EXISTS if the indexes are created" do
802
- meta_def(@db, :table_exists?){|a| false}
803
- meta_def(@db, :supports_create_table_if_not_exists?){true}
804
+ @db.define_singleton_method(:table_exists?){|a| false}
805
+ @db.define_singleton_method(:supports_create_table_if_not_exists?){true}
804
806
  @db.create_table?(:cats){|*a| Integer :a, :index=>true}
805
807
  @db.sqls.must_equal ['CREATE TABLE cats (a integer)', 'CREATE INDEX cats_a_index ON cats (a)']
806
808
 
807
- meta_def(@db, :table_exists?){|a| true}
809
+ @db.define_singleton_method(:table_exists?){|a| true}
808
810
  @db.create_table?(:cats){|*a| Integer :a, :index=>true}
809
811
  @db.sqls.must_equal []
810
812
  end
@@ -816,7 +818,7 @@ describe "DB#create_join_table" do
816
818
  end
817
819
 
818
820
  it "should take a hash with foreign keys and table name values" do
819
- @db.create_join_table(:cat_id=>:cats, :dog_id=>:dogs)
821
+ @db.create_join_table(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
820
822
  @db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
821
823
  end
822
824
 
@@ -864,30 +866,30 @@ describe "DB#create_join_table?" do
864
866
  end
865
867
 
866
868
  it "should create the table if it does not already exist" do
867
- meta_def(@db, :table_exists?){|a| false}
868
- @db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
869
+ @db.define_singleton_method(:table_exists?){|a| false}
870
+ @db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
869
871
  @db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
870
872
  end
871
873
 
872
874
  it "should not create the table if it already exists" do
873
- meta_def(@db, :table_exists?){|a| true}
875
+ @db.define_singleton_method(:table_exists?){|a| true}
874
876
  @db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
875
877
  @db.sqls.must_equal []
876
878
  end
877
879
 
878
880
  it "should not use IF NOT EXISTS" do
879
- meta_def(@db, :table_exists?){|a| false}
880
- meta_def(@db, :supports_create_table_if_not_exists?){true}
881
+ @db.define_singleton_method(:table_exists?){|a| false}
882
+ @db.define_singleton_method(:supports_create_table_if_not_exists?){true}
881
883
  @db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
882
884
  @db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
883
885
 
884
- meta_def(@db, :table_exists?){|a| true}
886
+ @db.define_singleton_method(:table_exists?){|a| true}
885
887
  @db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
886
888
  @db.sqls.must_equal []
887
889
  end
888
890
 
889
891
  it "should not use IF NOT EXISTS if no_index is used" do
890
- meta_def(@db, :supports_create_table_if_not_exists?){true}
892
+ @db.define_singleton_method(:supports_create_table_if_not_exists?){true}
891
893
  @db.create_join_table?({:cat_id=>:cats, :dog_id=>:dogs}, :no_index=>true)
892
894
  @db.sqls.must_equal ['CREATE TABLE IF NOT EXISTS cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))']
893
895
  end
@@ -899,19 +901,19 @@ describe "DB#create_join_table!" do
899
901
  end
900
902
 
901
903
  it "should drop the table first if it already exists" do
902
- meta_def(@db, :table_exists?){|a| true}
903
- @db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
904
+ @db.define_singleton_method(:table_exists?){|a| true}
905
+ @db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
904
906
  @db.sqls.must_equal ['DROP TABLE cats_dogs', 'CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
905
907
  end
906
908
 
907
909
  it "should not drop the table if it doesn't exists" do
908
- meta_def(@db, :table_exists?){|a| false}
910
+ @db.define_singleton_method(:table_exists?){|a| false}
909
911
  @db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
910
912
  @db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
911
913
  end
912
914
 
913
915
  it "should use IF EXISTS if the database supports it" do
914
- meta_def(@db, :supports_drop_table_if_exists?){true}
916
+ @db.define_singleton_method(:supports_drop_table_if_exists?){true}
915
917
  @db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
916
918
  @db.sqls.must_equal ['DROP TABLE IF EXISTS cats_dogs', 'CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
917
919
  end
@@ -923,7 +925,7 @@ describe "DB#drop_join_table" do
923
925
  end
924
926
 
925
927
  it "should take a hash with foreign keys and table name values and drop the table" do
926
- @db.drop_join_table(:cat_id=>:cats, :dog_id=>:dogs)
928
+ @db.drop_join_table(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
927
929
  @db.sqls.must_equal ['DROP TABLE cats_dogs']
928
930
  end
929
931
 
@@ -956,7 +958,7 @@ describe "DB#drop_table" do
956
958
  end
957
959
 
958
960
  it "should generate a DROP TABLE statement" do
959
- @db.drop_table :cats
961
+ @db.drop_table(:cats).must_be_nil
960
962
  @db.sqls.must_equal ['DROP TABLE cats']
961
963
  end
962
964
 
@@ -977,37 +979,37 @@ describe "DB#drop_table?" do
977
979
  end
978
980
 
979
981
  it "should drop the table if it exists" do
980
- meta_def(@db, :table_exists?){|a| true}
981
- @db.drop_table?(:cats)
982
+ @db.define_singleton_method(:table_exists?){|a| true}
983
+ @db.drop_table?(:cats).must_be_nil
982
984
  @db.sqls.must_equal ["DROP TABLE cats"]
983
985
  end
984
986
 
985
987
  it "should do nothing if the table does not exist" do
986
- meta_def(@db, :table_exists?){|a| false}
988
+ @db.define_singleton_method(:table_exists?){|a| false}
987
989
  @db.drop_table?(:cats)
988
990
  @db.sqls.must_equal []
989
991
  end
990
992
 
991
993
  it "should operate on multiple tables at once" do
992
- meta_def(@db, :table_exists?){|a| a == :cats}
994
+ @db.define_singleton_method(:table_exists?){|a| a == :cats}
993
995
  @db.drop_table? :cats, :dogs
994
996
  @db.sqls.must_equal ['DROP TABLE cats']
995
997
  end
996
998
 
997
999
  it "should take an options hash and support the :cascade option" do
998
- meta_def(@db, :table_exists?){|a| true}
1000
+ @db.define_singleton_method(:table_exists?){|a| true}
999
1001
  @db.drop_table? :cats, :dogs, :cascade=>true
1000
1002
  @db.sqls.must_equal ['DROP TABLE cats CASCADE', 'DROP TABLE dogs CASCADE']
1001
1003
  end
1002
1004
 
1003
1005
  it "should use IF NOT EXISTS if the database supports that" do
1004
- meta_def(@db, :supports_drop_table_if_exists?){true}
1006
+ @db.define_singleton_method(:supports_drop_table_if_exists?){true}
1005
1007
  @db.drop_table? :cats, :dogs
1006
1008
  @db.sqls.must_equal ['DROP TABLE IF EXISTS cats', 'DROP TABLE IF EXISTS dogs']
1007
1009
  end
1008
1010
 
1009
1011
  it "should use IF NOT EXISTS with CASCADE if the database supports that" do
1010
- meta_def(@db, :supports_drop_table_if_exists?){true}
1012
+ @db.define_singleton_method(:supports_drop_table_if_exists?){true}
1011
1013
  @db.drop_table? :cats, :dogs, :cascade=>true
1012
1014
  @db.sqls.must_equal ['DROP TABLE IF EXISTS cats CASCADE', 'DROP TABLE IF EXISTS dogs CASCADE']
1013
1015
  end
@@ -1018,15 +1020,10 @@ describe "DB#alter_table" do
1018
1020
  @db = Sequel.mock
1019
1021
  end
1020
1022
 
1021
- deprecated "should support an AlterTableGenerator as second argument" do
1022
- @db.alter_table(:cats, Sequel::Schema::AlterTableGenerator.new(@db){set_column_allow_null :score, false})
1023
- @db.sqls.must_equal ["ALTER TABLE cats ALTER COLUMN score SET NOT NULL"]
1024
- end
1025
-
1026
1023
  it "should allow adding not null constraint via set_column_allow_null with false argument" do
1027
1024
  @db.alter_table(:cats) do
1028
1025
  set_column_allow_null :score, false
1029
- end
1026
+ end.must_be_nil
1030
1027
  @db.sqls.must_equal ["ALTER TABLE cats ALTER COLUMN score SET NOT NULL"]
1031
1028
  end
1032
1029
 
@@ -1128,7 +1125,7 @@ describe "DB#alter_table" do
1128
1125
  end
1129
1126
 
1130
1127
  it "should ignore errors if the database raises an error on an add_index call and the :ignore_errors option is used" do
1131
- meta_def(@db, :execute_ddl){|*a| raise Sequel::DatabaseError}
1128
+ @db.define_singleton_method(:execute_ddl){|*a| raise Sequel::DatabaseError}
1132
1129
  lambda{@db.add_index(:cats, :id)}.must_raise(Sequel::DatabaseError)
1133
1130
  @db.add_index(:cats, :id, :ignore_errors=>true)
1134
1131
  @db.sqls.must_equal []
@@ -1207,6 +1204,20 @@ describe "DB#alter_table" do
1207
1204
  @db.sqls.must_equal ["ALTER TABLE cats DROP CONSTRAINT cats_node_id_fkey", "ALTER TABLE cats DROP COLUMN node_id"]
1208
1205
  end
1209
1206
 
1207
+ it "should support drop_foreign_key with :foreign_key_constraint_name option" do
1208
+ @db.alter_table(:cats) do
1209
+ drop_foreign_key :node_id, :foreign_key_constraint_name=>:foo
1210
+ end
1211
+ @db.sqls.must_equal ["ALTER TABLE cats DROP CONSTRAINT foo", "ALTER TABLE cats DROP COLUMN node_id"]
1212
+ end
1213
+
1214
+ it "should support drop_foreign_key with :name option" do
1215
+ @db.alter_table(:cats) do
1216
+ drop_foreign_key :node_id, :name=>:foo
1217
+ end
1218
+ @db.sqls.must_equal ["ALTER TABLE cats DROP CONSTRAINT foo", "ALTER TABLE cats DROP COLUMN node_id"]
1219
+ end
1220
+
1210
1221
  it "should support drop_foreign_key with composite foreign keys" do
1211
1222
  def @db.foreign_key_list(table_name)
1212
1223
  [{:name=>:cats_node_id_prop_id_fkey, :columns=>[:node_id, :prop_id]}]
@@ -1283,7 +1294,7 @@ describe "DB#alter_table" do
1283
1294
  end
1284
1295
 
1285
1296
  it "should combine operations into a single query if the database supports it" do
1286
- meta_def(@db, :supports_combining_alter_table_ops?){true}
1297
+ @db.define_singleton_method(:supports_combining_alter_table_ops?){true}
1287
1298
  @db.alter_table(:cats) do
1288
1299
  add_column :a, Integer
1289
1300
  drop_column :b
@@ -1298,7 +1309,7 @@ describe "DB#alter_table" do
1298
1309
  end
1299
1310
 
1300
1311
  it "should combine operations into consecutive groups of combinable operations if the database supports combining operations" do
1301
- meta_def(@db, :supports_combining_alter_table_ops?){true}
1312
+ @db.define_singleton_method(:supports_combining_alter_table_ops?){true}
1302
1313
  @db.alter_table(:cats) do
1303
1314
  add_column :a, Integer
1304
1315
  drop_column :b
@@ -1373,7 +1384,7 @@ end
1373
1384
  describe "Database#add_column" do
1374
1385
  it "should construct proper SQL" do
1375
1386
  db = Sequel.mock
1376
- db.add_column :test, :name, :text, :unique => true
1387
+ db.add_column(:test, :name, :text, :unique => true).must_be_nil
1377
1388
  db.sqls.must_equal ['ALTER TABLE test ADD COLUMN name text UNIQUE']
1378
1389
  end
1379
1390
  end
@@ -1384,7 +1395,7 @@ describe "Database#drop_column" do
1384
1395
  end
1385
1396
 
1386
1397
  it "should construct proper SQL" do
1387
- @db.drop_column :test, :name
1398
+ @db.drop_column(:test, :name).must_be_nil
1388
1399
  @db.sqls.must_equal ['ALTER TABLE test DROP COLUMN name']
1389
1400
  end
1390
1401
 
@@ -1400,7 +1411,7 @@ describe "Database#rename_column" do
1400
1411
  end
1401
1412
 
1402
1413
  it "should construct proper SQL" do
1403
- @db.rename_column :test, :abc, :def
1414
+ @db.rename_column(:test, :abc, :def).must_be_nil
1404
1415
  @db.sqls.must_equal ['ALTER TABLE test RENAME COLUMN abc TO def']
1405
1416
  end
1406
1417
  end
@@ -1411,7 +1422,7 @@ describe "Database#set_column_type" do
1411
1422
  end
1412
1423
 
1413
1424
  it "should construct proper SQL" do
1414
- @db.set_column_type :test, :name, :integer
1425
+ @db.set_column_type(:test, :name, :integer).must_be_nil
1415
1426
  @db.sqls.must_equal ['ALTER TABLE test ALTER COLUMN name TYPE integer']
1416
1427
  end
1417
1428
  end
@@ -1422,7 +1433,7 @@ describe "Database#set_column_default" do
1422
1433
  end
1423
1434
 
1424
1435
  it "should construct proper SQL" do
1425
- @db.set_column_default :test, :name, 'zyx'
1436
+ @db.set_column_default(:test, :name, 'zyx').must_be_nil
1426
1437
  @db.sqls.must_equal ["ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"]
1427
1438
  end
1428
1439
  end
@@ -1433,7 +1444,7 @@ describe "Database#add_index" do
1433
1444
  end
1434
1445
 
1435
1446
  it "should construct proper SQL" do
1436
- @db.add_index :test, :name, :unique => true
1447
+ @db.add_index(:test, :name, :unique => true).must_be_nil
1437
1448
  @db.sqls.must_equal ['CREATE UNIQUE INDEX test_name_index ON test (name)']
1438
1449
  end
1439
1450
 
@@ -1449,7 +1460,7 @@ describe "Database#drop_index" do
1449
1460
  end
1450
1461
 
1451
1462
  it "should construct proper SQL" do
1452
- @db.drop_index :test, :name
1463
+ @db.drop_index(:test, :name).must_be_nil
1453
1464
  @db.sqls.must_equal ['DROP INDEX test_name_index']
1454
1465
  end
1455
1466
 
@@ -1461,7 +1472,7 @@ describe "Database#drop_table" do
1461
1472
  end
1462
1473
 
1463
1474
  it "should construct proper SQL" do
1464
- @db.drop_table :test
1475
+ @db.drop_table(:test).must_be_nil
1465
1476
  @db.sqls.must_equal ['DROP TABLE test']
1466
1477
  end
1467
1478
 
@@ -1477,7 +1488,7 @@ describe "Database#rename_table" do
1477
1488
  end
1478
1489
 
1479
1490
  it "should construct proper SQL" do
1480
- @db.rename_table :abc, :xyz
1491
+ @db.rename_table(:abc, :xyz).must_be_nil
1481
1492
  @db.sqls.must_equal ['ALTER TABLE abc RENAME TO xyz']
1482
1493
  end
1483
1494
  end
@@ -1488,7 +1499,7 @@ describe "Database#create_view" do
1488
1499
  end
1489
1500
 
1490
1501
  it "should construct proper SQL with raw SQL" do
1491
- @db.create_view :test, "SELECT * FROM xyz"
1502
+ @db.create_view(:test, "SELECT * FROM xyz").must_be_nil
1492
1503
  @db.sqls.must_equal ['CREATE VIEW test AS SELECT * FROM xyz']
1493
1504
  @db.create_view Sequel.identifier(:test), "SELECT * FROM xyz"
1494
1505
  @db.sqls.must_equal ['CREATE VIEW test AS SELECT * FROM xyz']
@@ -1540,7 +1551,7 @@ describe "Database#drop_view" do
1540
1551
  end
1541
1552
 
1542
1553
  with_symbol_splitting "should construct proper SQL for splittable symbols" do
1543
- @db.drop_view :sch__test
1554
+ @db.drop_view(:sch__test).must_be_nil
1544
1555
  @db.sqls.must_equal ['DROP VIEW sch.test']
1545
1556
  end
1546
1557
 
@@ -1580,21 +1591,21 @@ describe "Schema Parser" do
1580
1591
  end
1581
1592
 
1582
1593
  it "should raise an error if there are no columns" do
1583
- meta_def(@db, :schema_parse_table) do |t, opts|
1594
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1584
1595
  []
1585
1596
  end
1586
1597
  proc{@db.schema(:x)}.must_raise(Sequel::Error)
1587
1598
  end
1588
1599
 
1589
1600
  it "should cache data by default" do
1590
- meta_def(@db, :schema_parse_table) do |t, opts|
1601
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1591
1602
  [[:a, {}]]
1592
1603
  end
1593
1604
  @db.schema(:x).must_be_same_as(@db.schema(:x))
1594
1605
  end
1595
1606
 
1596
1607
  it "should not cache data if :reload=>true is given" do
1597
- meta_def(@db, :schema_parse_table) do |t, opts|
1608
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1598
1609
  [[:a, {}]]
1599
1610
  end
1600
1611
  @db.schema(:x).wont_be_same_as(@db.schema(:x, :reload=>true))
@@ -1602,7 +1613,7 @@ describe "Schema Parser" do
1602
1613
 
1603
1614
  it "should not cache schema metadata if cache_schema is false" do
1604
1615
  @db.cache_schema = false
1605
- meta_def(@db, :schema_parse_table) do |t, opts|
1616
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1606
1617
  [[:a, {}]]
1607
1618
  end
1608
1619
  @db.schema(:x).wont_be_same_as(@db.schema(:x))
@@ -1610,7 +1621,7 @@ describe "Schema Parser" do
1610
1621
 
1611
1622
  it "should provide options if given a table name" do
1612
1623
  c = nil
1613
- meta_def(@db, :schema_parse_table) do |t, opts|
1624
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1614
1625
  c = [t, opts]
1615
1626
  [[:a, {:db_type=>t.to_s}]]
1616
1627
  end
@@ -1625,7 +1636,7 @@ describe "Schema Parser" do
1625
1636
 
1626
1637
  with_symbol_splitting "should provide options if given a table name with splittable symbols" do
1627
1638
  c = nil
1628
- meta_def(@db, :schema_parse_table) do |t, opts|
1639
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1629
1640
  c = [t, opts]
1630
1641
  [[:a, {:db_type=>t.to_s}]]
1631
1642
  end
@@ -1639,7 +1650,7 @@ describe "Schema Parser" do
1639
1650
  it "should parse the schema correctly for a single table" do
1640
1651
  sqls = @sqls
1641
1652
  proc{@db.schema(:x)}.must_raise(Sequel::Error)
1642
- meta_def(@db, :schema_parse_table) do |t, opts|
1653
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1643
1654
  sqls << t
1644
1655
  [[:a, {:db_type=>t.to_s}]]
1645
1656
  end
@@ -1652,33 +1663,33 @@ describe "Schema Parser" do
1652
1663
  end
1653
1664
 
1654
1665
  it "should set :auto_increment to true by default if unset and a single integer primary key is used" do
1655
- meta_def(@db, :schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}]]}
1666
+ @db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}]]}
1656
1667
  @db.schema(:x).first.last[:auto_increment].must_equal true
1657
1668
  end
1658
1669
 
1659
1670
  it "should not set :auto_increment if already set" do
1660
- meta_def(@db, :schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer', :auto_increment=>false}]]}
1671
+ @db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer', :auto_increment=>false}]]}
1661
1672
  @db.schema(:x).first.last[:auto_increment].must_equal false
1662
1673
  end
1663
1674
 
1664
1675
  it "should set :auto_increment to false by default if unset and a single nonintegery primary key is used" do
1665
- meta_def(@db, :schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'varchar'}]]}
1676
+ @db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'varchar'}]]}
1666
1677
  @db.schema(:x).first.last[:auto_increment].must_equal false
1667
1678
  end
1668
1679
 
1669
1680
  it "should set :auto_increment to false by default if unset and a composite primary key" do
1670
- meta_def(@db, :schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}], [:b, {:primary_key=>true, :db_type=>'integer'}]]}
1681
+ @db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}], [:b, {:primary_key=>true, :db_type=>'integer'}]]}
1671
1682
  @db.schema(:x).first.last[:auto_increment].must_equal false
1672
1683
  @db.schema(:x).last.last[:auto_increment].must_equal false
1673
1684
  end
1674
1685
 
1675
1686
  it "should set :auto_increment to true by default if set and not the first column" do
1676
- meta_def(@db, :schema_parse_table){|*| [[:b, {}], [:a, {:primary_key=>true, :db_type=>'integer'}]]}
1687
+ @db.define_singleton_method(:schema_parse_table){|*| [[:b, {}], [:a, {:primary_key=>true, :db_type=>'integer'}]]}
1677
1688
  @db.schema(:x).last.last[:auto_increment].must_equal true
1678
1689
  end
1679
1690
 
1680
1691
  it "should convert various types of table name arguments" do
1681
- meta_def(@db, :schema_parse_table) do |t, opts|
1692
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1682
1693
  [[t, opts]]
1683
1694
  end
1684
1695
  s1 = @db.schema(:x)
@@ -1703,7 +1714,7 @@ describe "Schema Parser" do
1703
1714
  end
1704
1715
 
1705
1716
  with_symbol_splitting "should convert splittable symbol arguments" do
1706
- meta_def(@db, :schema_parse_table) do |t, opts|
1717
+ @db.define_singleton_method(:schema_parse_table) do |t, opts|
1707
1718
  [[t, opts]]
1708
1719
  end
1709
1720
  s1 = @db.schema(:x)
@@ -1,41 +1,23 @@
1
- require 'rubygems'
2
- require "#{File.dirname(File.dirname(__FILE__))}/sequel_warning.rb"
1
+ require_relative "../sequel_warning"
3
2
 
4
3
  if ENV['COVERAGE']
5
- require File.join(File.dirname(File.expand_path(__FILE__)), "../sequel_coverage")
4
+ require_relative "../sequel_coverage"
6
5
  SimpleCov.sequel_coverage(:filter=>%r{lib/sequel/(\w+\.rb|(dataset|database|model|connection_pool)/\w+\.rb|adapters/mock\.rb)\z})
7
6
  end
8
7
 
9
- unless Object.const_defined?('Sequel')
10
- $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
11
- require 'sequel/core'
12
- end
8
+ $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
9
+ require_relative "../../lib/sequel/core"
13
10
 
14
11
  gem 'minitest'
15
12
  require 'minitest/autorun'
16
13
  require 'minitest/hooks/default'
17
14
  require 'minitest/shared_description'
18
15
 
19
- require "#{File.dirname(File.dirname(__FILE__))}/deprecation_helper.rb"
20
-
21
- class Minitest::HooksSpec
22
- # SEQUEL5: Replace with define_singleton_method
23
- def meta_def(obj, name, &block)
24
- (class << obj; self end).send(:define_method, name, &block)
25
- end
26
- end
16
+ require_relative '../deprecation_helper'
27
17
 
28
18
  if ENV['SEQUEL_COLUMNS_INTROSPECTION']
29
19
  Sequel.extension :columns_introspection
30
20
  Sequel::Database.extension :columns_introspection
31
- Sequel.require 'adapters/mock'
21
+ require_relative '../../lib/sequel/adapters/mock'
32
22
  Sequel::Mock::Dataset.send(:include, Sequel::ColumnsIntrospection)
33
23
  end
34
-
35
- # SEQUEL5: Remove
36
- output = Sequel::Deprecation.output
37
- Sequel::Deprecation.output = nil
38
- Sequel.quote_identifiers = false
39
- Sequel.identifier_input_method = nil
40
- Sequel.identifier_output_method = nil
41
- Sequel::Deprecation.output = output
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Sequel.version" do
4
4
  it "should be in the form X.Y.Z with all being numbers" do