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,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  model_class = proc do |klass, &block|
4
4
  c = Class.new(klass)
@@ -158,7 +158,7 @@ describe Sequel::Model do
158
158
  c.must_equal false
159
159
  @c.validates{c = respond_to?(:length_of)}
160
160
  c.must_equal true
161
- end if RUBY_VERSION >= '1.9'
161
+ end
162
162
  end
163
163
 
164
164
  describe Sequel::Model do
@@ -197,7 +197,7 @@ describe "Sequel::Plugins::ValidationClassMethods::ClassMethods::Generator" do
197
197
  @testit = testit = []
198
198
 
199
199
  @c = model_class.call Sequel::Model do
200
- (class << self; self end).send(:define_method, :validates_blah) do
200
+ singleton_class.send(:define_method, :validates_blah) do
201
201
  testit << 1324
202
202
  end
203
203
  end
@@ -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::Plugins::ValidationHelpers" do
4
4
  before do
@@ -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::Plugins::ValidationHelpers" do
4
4
  before do
@@ -19,9 +19,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
19
19
  @m.value = '1_1'
20
20
  @m.must_be :valid?
21
21
  o = String.new
22
- class << o
23
- undef_method :blank?
24
- end
22
+ o.singleton_class.send(:undef_method, :blank?)
25
23
  @m.value = o
26
24
  @m.must_be :valid?
27
25
  o = Object.new
@@ -86,38 +84,6 @@ describe "Sequel::Plugins::ValidationHelpers" do
86
84
  @m.must_be :valid?
87
85
  end
88
86
 
89
- deprecated "should support modifying default options for all models" do
90
- @c.set_validations{validates_presence(:value)}
91
- @m.wont_be :valid?
92
- @m.errors.must_equal(:value=>['is not present'])
93
- o = Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence].dup
94
- Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence][:message] = lambda{"was not entered"}
95
- @m.wont_be :valid?
96
- @m.errors.must_equal(:value=>["was not entered"])
97
- @m.value = 1
98
- @m.must_be :valid?
99
-
100
- @m.values.clear
101
- Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence][:allow_missing] = true
102
- @m.must_be :valid?
103
- @m.value = nil
104
- @m.wont_be :valid?
105
- @m.errors.must_equal(:value=>["was not entered"])
106
-
107
- c = Class.new(Sequel::Model)
108
- c.class_eval do
109
- plugin :validation_helpers
110
- set_columns([:value])
111
- def validate
112
- validates_presence(:value)
113
- end
114
- end
115
- m = c.new(:value=>nil)
116
- m.wont_be :valid?
117
- m.errors.must_equal(:value=>["was not entered"])
118
- Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS[:presence] = o
119
- end
120
-
121
87
  it "should support modifying default validation options for a particular model" do
122
88
  @c.set_validations{validates_presence(:value)}
123
89
  @m.wont_be :valid?
@@ -369,7 +335,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
369
335
  it "should support validates_unique with a single attribute" do
370
336
  @c.columns(:id, :username, :password)
371
337
  @c.set_dataset DB[:items]
372
- @c.set_validations{validates_unique(:username)}
338
+ @c.set_validations{validates_unique(:username, :only_if_modified=>false)}
373
339
  @c.dataset = @c.dataset.with_fetch(proc do |sql|
374
340
  case sql
375
341
  when /count.*username = '0records'/
@@ -407,7 +373,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
407
373
  it "should support validates_unique with multiple attributes" do
408
374
  @c.columns(:id, :username, :password)
409
375
  @c.set_dataset DB[:items]
410
- @c.set_validations{validates_unique([:username, :password])}
376
+ @c.set_validations{validates_unique([:username, :password], :only_if_modified=>false)}
411
377
  @c.dataset = @c.dataset.with_fetch(proc do |sql|
412
378
  case sql
413
379
  when /count.*username = '0records'/
@@ -452,7 +418,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
452
418
  it "should support validates_unique with a block" do
453
419
  @c.columns(:id, :username, :password)
454
420
  @c.set_dataset DB[:items]
455
- @c.set_validations{validates_unique(:username){|ds| ds.filter(:active)}}
421
+ @c.set_validations{validates_unique(:username, :only_if_modified=>false){|ds| ds.filter(:active)}}
456
422
  @c.dataset = @c.dataset.with_fetch(:v=>0)
457
423
 
458
424
  DB.reset
@@ -465,7 +431,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
465
431
  it "should support validates_unique with :where option" do
466
432
  @c.columns(:id, :username, :password)
467
433
  @c.set_dataset DB[:items]
468
- @c.set_validations{validates_unique(:username, :where=>proc{|ds, obj, cols| ds.where(cols.map{|c| [Sequel.function(:lower, c), obj.send(c).downcase]})})}
434
+ @c.set_validations{validates_unique(:username, :only_if_modified=>false, :where=>proc{|ds, obj, cols| ds.where(cols.map{|c| [Sequel.function(:lower, c), obj.send(c).downcase]})})}
469
435
  @c.dataset = @c.dataset.with_fetch(:v=>0)
470
436
 
471
437
  DB.reset
@@ -479,7 +445,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
479
445
  @c.columns(:id, :username, :password)
480
446
  @c.set_dataset DB[:items]
481
447
  c = @c
482
- @c.set_validations{validates_unique(:username, :dataset=>c.where(:a=>[1,2,3]))}
448
+ @c.set_validations{validates_unique(:username, :only_if_modified=>false, :dataset=>c.where(:a=>[1,2,3]))}
483
449
  @c.dataset = @c.dataset.with_fetch(:v=>0)
484
450
 
485
451
  DB.reset
@@ -493,7 +459,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
493
459
  @c.columns(:id, :username, :password)
494
460
  @c.set_dataset DB[:items]
495
461
  c = @c
496
- @c.set_validations{validates_unique(:username, :dataset=>c.cross_join(:a))}
462
+ @c.set_validations{validates_unique(:username, :only_if_modified=>false, :dataset=>c.cross_join(:a))}
497
463
  @c.dataset = @c.dataset.with_fetch(:v=>0)
498
464
 
499
465
  DB.reset
@@ -503,10 +469,10 @@ describe "Sequel::Plugins::ValidationHelpers" do
503
469
  "SELECT count(*) AS count FROM items CROSS JOIN a WHERE ((username = '0records') AND (items.id != 3)) LIMIT 1"]
504
470
  end
505
471
 
506
- it "should support :only_if_modified option for validates_unique, and not check uniqueness for existing records if values haven't changed" do
472
+ it "should not have validates_unique check uniqueness for existing records if values haven't changed" do
507
473
  @c.columns(:id, :username, :password)
508
474
  @c.set_dataset DB[:items]
509
- @c.set_validations{validates_unique([:username, :password], :only_if_modified=>true)}
475
+ @c.set_validations{validates_unique([:username, :password])}
510
476
  @c.dataset = @c.dataset.with_fetch(:v=>0)
511
477
 
512
478
  DB.reset
@@ -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::Model, "#(set|update)_(all|only)" do
4
4
  before do
@@ -16,7 +16,7 @@ describe Sequel::Model, "#(set|update)_(all|only)" do
16
16
  it "should raise errors if not all hash fields can be set and strict_param_setting is true" do
17
17
  @c.strict_param_setting = true
18
18
 
19
- proc{@c.new.set_all(:x => 1, :y => 2, :z=>3, :use_after_commit_rollback => false)}.must_raise(Sequel::MassAssignmentRestriction)
19
+ proc{@c.new.set_all(:x => 1, :y => 2, :z=>3, :use_transactions => false)}.must_raise(Sequel::MassAssignmentRestriction)
20
20
  (o = @c.new).set_all(:x => 1, :y => 2, :z=>3)
21
21
  o.values.must_equal(:x => 1, :y => 2, :z=>3)
22
22
 
@@ -32,9 +32,9 @@ describe Sequel::Model, "#(set|update)_(all|only)" do
32
32
  end
33
33
 
34
34
  it "#set_all should set not set restricted fields" do
35
- @o1.use_after_commit_rollback.must_be_nil
36
- @o1.set_all(:x => 1, :use_after_commit_rollback => true)
37
- @o1.use_after_commit_rollback.must_be_nil
35
+ @o1.use_transactions.must_equal false
36
+ @o1.set_all(:x => 1, :use_transactions => true)
37
+ @o1.use_transactions.must_equal false
38
38
  @o1.values.must_equal(:x => 1)
39
39
  end
40
40
 
@@ -1,9 +1,9 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  begin
4
4
  require 'nokogiri'
5
- rescue LoadError => e
6
- skip_warn "xml_serializer plugin: can't load nokogiri (#{e.class}: #{e})"
5
+ rescue LoadError
6
+ warn "Skipping test of xml_serializer plugin: can't load nokogiri"
7
7
  else
8
8
  describe "Sequel::Plugins::XmlSerializer" do
9
9
  before do
@@ -125,30 +125,25 @@ describe "Sequel::Plugins::XmlSerializer" do
125
125
  end
126
126
 
127
127
  it "should support an :encoding option when serializing" do
128
- ["<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>",
129
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><name>YJM</name><id>2</id></artist>"].must_include(@artist.to_xml(:encoding=>'UTF-8').gsub(/\n */m, ''))
128
+ @artist.to_xml(:encoding=>'UTF-8').gsub(/\n */m, '').must_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>"
130
129
  end
131
130
 
132
131
  it "should support a :builder_opts option when serializing" do
133
- ["<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>",
134
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><name>YJM</name><id>2</id></artist>"].must_include(@artist.to_xml(:builder_opts=>{:encoding=>'UTF-8'}).gsub(/\n */m, ''))
132
+ @artist.to_xml(:builder_opts=>{:encoding=>'UTF-8'}).gsub(/\n */m, '').must_equal "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>"
135
133
  end
136
134
 
137
135
  it "should support an :types option when serializing" do
138
- ["<?xml version=\"1.0\"?><artist><id type=\"integer\">2</id><name type=\"string\">YJM</name></artist>",
139
- "<?xml version=\"1.0\"?><artist><name type=\"string\">YJM</name><id type=\"integer\">2</id></artist>"].must_include(@artist.to_xml(:types=>true).gsub(/\n */m, ''))
136
+ @artist.to_xml(:types=>true).gsub(/\n */m, '').must_equal "<?xml version=\"1.0\"?><artist><id type=\"integer\">2</id><name type=\"string\">YJM</name></artist>"
140
137
  end
141
138
 
142
139
  it "should support an :root_name option when serializing" do
143
- ["<?xml version=\"1.0\"?><ar><id>2</id><name>YJM</name></ar>",
144
- "<?xml version=\"1.0\"?><ar><name>YJM</name><id>2</id></ar>"].must_include(@artist.to_xml(:root_name=>'ar').gsub(/\n */m, ''))
140
+ @artist.to_xml(:root_name=>'ar').gsub(/\n */m, '').must_equal "<?xml version=\"1.0\"?><ar><id>2</id><name>YJM</name></ar>"
145
141
  end
146
142
 
147
143
  it "should support an :array_root_name option when serializing arrays" do
148
144
  artist = @artist
149
145
  Artist.dataset = Artist.dataset.with_extend{define_method(:all){[artist]}}
150
- ["<?xml version=\"1.0\"?><ars><ar><id>2</id><name>YJM</name></ar></ars>",
151
- "<?xml version=\"1.0\"?><ars><ar><name>YJM</name><id>2</id></ar></ars>"].must_include(Artist.to_xml(:array_root_name=>'ars', :root_name=>'ar').gsub(/\n */m, ''))
146
+ Artist.to_xml(:array_root_name=>'ars', :root_name=>'ar').gsub(/\n */m, '').must_equal "<?xml version=\"1.0\"?><ars><ar><id>2</id><name>YJM</name></ar></ars>"
152
147
  end
153
148
 
154
149
  it "should raise an exception for xml tags that aren't associations, columns, or setter methods" do
@@ -3,7 +3,7 @@ require 'minitest/autorun'
3
3
  require 'minitest/hooks/default'
4
4
  require 'minitest/shared_description'
5
5
 
6
- require "#{File.dirname(__FILE__)}/deprecation_helper.rb"
6
+ require_relative "deprecation_helper"
7
7
 
8
8
  def Sequel.guarded?(*checked)
9
9
  unless ENV['SEQUEL_NO_PENDING']
@@ -36,6 +36,7 @@ module Minitest::Spec::DSL
36
36
  def cspecify(message, *checked, &block)
37
37
  if pending = Sequel.guarded?(*checked)
38
38
  it(message) do
39
+ proc{instance_exec(&block)}.must_raise(Exception) if ENV['SEQUEL_CHECK_PENDING']
39
40
  skip "Not yet working on #{Array(pending).map{|x| x.is_a?(Proc) ? :proc : x}.join(', ')}"
40
41
  end
41
42
  else
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  OneToOneEagerLimitStrategies = shared_description do
4
4
  it "eager loading one_to_one associations should work correctly" do
@@ -1587,28 +1587,6 @@ BasicRegularAndCompositeKeyAssociations = shared_description do
1587
1587
  @album.reload.alias_tags.must_equal []
1588
1588
  end
1589
1589
 
1590
- it "should work correctly with prepared_statements_association plugin" do
1591
- deprecated do
1592
- @album.update(:artist => @artist)
1593
- @album.add_tag(@tag)
1594
-
1595
- @album.reload
1596
- @artist.reload
1597
- @tag.reload
1598
-
1599
- [Tag, Album, Artist].each{|x| x.plugin :prepared_statements_associations}
1600
- @album.artist.must_equal @artist
1601
- @artist.first_album.must_equal @album
1602
- @artist.albums.must_equal [@album]
1603
- @album.tags.must_equal [@tag]
1604
- @album.alias_tags.must_equal [@tag]
1605
- @tag.albums.must_equal [@album]
1606
- unless @no_many_through_many
1607
- @album.first_tag.must_equal @tag
1608
- end
1609
- end
1610
- end
1611
-
1612
1590
  it "should have working dataset associations" do
1613
1591
  album, artist, tag = @pr.call
1614
1592
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe Sequel::Database do
4
4
  before do
@@ -37,7 +37,7 @@ describe Sequel::Database do
37
37
  @db.drop_table?(:test2, :test)
38
38
  end
39
39
 
40
- cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated", [:jdbc, :sqlite], [:db2] do
40
+ cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated", [:jdbc, :sqlite] do
41
41
  @db.create_table!(:test){String :a, :unique=>true, :null=>false}
42
42
  @db[:test].insert('1')
43
43
  proc{@db[:test].insert('1')}.must_raise(Sequel::UniqueConstraintViolation)
@@ -45,7 +45,7 @@ describe Sequel::Database do
45
45
  proc{@db[:test].update(:a=>'1')}.must_raise(Sequel::UniqueConstraintViolation)
46
46
  end
47
47
 
48
- cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated for composite primary keys", [:jdbc, :sqlite], [:db2] do
48
+ cspecify "should raise Sequel::UniqueConstraintViolation when a unique constraint is violated for composite primary keys", [:jdbc, :sqlite] do
49
49
  @db.create_table!(:test){String :a; String :b; primary_key [:a, :b]}
50
50
  @db[:test].insert(:a=>'1', :b=>'2')
51
51
  proc{@db[:test].insert(:a=>'1', :b=>'2')}.must_raise(Sequel::UniqueConstraintViolation)
@@ -53,14 +53,14 @@ describe Sequel::Database do
53
53
  proc{@db[:test].update(:a=>'1', :b=>'2')}.must_raise(Sequel::UniqueConstraintViolation)
54
54
  end
55
55
 
56
- cspecify "should raise Sequel::CheckConstraintViolation when a check constraint is violated", :mysql, [:db2], [proc{|db| db.sqlite_version < 30802}, :sqlite] do
56
+ cspecify "should raise Sequel::CheckConstraintViolation when a check constraint is violated", [proc{|db| !db.mariadb? || db.server_version <= 100200}, :mysql], [proc{|db| db.sqlite_version < 30802}, :sqlite] do
57
57
  @db.create_table!(:test){String :a; check Sequel.~(:a=>'1')}
58
58
  proc{@db[:test].insert('1')}.must_raise(Sequel::CheckConstraintViolation)
59
59
  @db[:test].insert('2')
60
60
  proc{@db[:test].insert('1')}.must_raise(Sequel::CheckConstraintViolation)
61
61
  end
62
62
 
63
- cspecify "should raise Sequel::ForeignKeyConstraintViolation when a foreign key constraint is violated", [:jdbc, :sqlite], [:db2] do
63
+ cspecify "should raise Sequel::ForeignKeyConstraintViolation when a foreign key constraint is violated", [:jdbc, :sqlite] do
64
64
  @db.create_table!(:test, :engine=>:InnoDB){primary_key :id}
65
65
  @db.create_table!(:test2, :engine=>:InnoDB){foreign_key :tid, :test}
66
66
  proc{@db[:test2].insert(:tid=>1)}.must_raise(Sequel::ForeignKeyConstraintViolation)
@@ -70,7 +70,7 @@ describe Sequel::Database do
70
70
  proc{@db[:test].where(:id=>1).delete}.must_raise(Sequel::ForeignKeyConstraintViolation)
71
71
  end
72
72
 
73
- cspecify "should raise Sequel::NotNullConstraintViolation when a not null constraint is violated", [:jdbc, :sqlite], [:db2] do
73
+ cspecify "should raise Sequel::NotNullConstraintViolation when a not null constraint is violated", [:jdbc, :sqlite] do
74
74
  @db.create_table!(:test){Integer :a, :null=>false}
75
75
  proc{@db[:test].insert(:a=>nil)}.must_raise(Sequel::NotNullConstraintViolation)
76
76
  unless @db.database_type == :mysql
@@ -104,7 +104,7 @@ describe Sequel::Database do
104
104
  @db.disconnect_connection(conn)
105
105
  end
106
106
 
107
- cspecify "should provide ability to check connections for validity", [:do, :postgres] do
107
+ it "should provide ability to check connections for validity" do
108
108
  conn = @db.synchronize{|c| c}
109
109
  @db.valid_connection?(conn).must_equal true
110
110
  @db.disconnect
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Simple Dataset operations" do
4
4
  before do
@@ -49,12 +49,6 @@ describe "Simple Dataset operations" do
49
49
  @ds.filter(:id=>2).first[:number].must_equal 20
50
50
  end
51
51
 
52
- deprecated "should have insert_multiple return primary key values" do
53
- @ds.extension(:sequel_3_dataset_methods).insert_multiple([{:number=>20}, {:number=>30}]).must_equal [2, 3]
54
- @ds.filter(:id=>2).get(:number).must_equal 20
55
- @ds.filter(:id=>3).get(:number).must_equal 30
56
- end
57
-
58
52
  it "should join correctly" do
59
53
  @ds.join(Sequel[:items].as(:b), :id=>:id).select_all(:items).all.must_equal [{:id=>1, :number=>10}]
60
54
  end
@@ -108,7 +102,7 @@ describe "Simple Dataset operations" do
108
102
  @ds.all.must_equal [{:id=>1, :number=>11}]
109
103
  end
110
104
 
111
- cspecify "should have update return the number of matched rows", [:do, :mysql] do
105
+ it "should have update return the number of matched rows" do
112
106
  @ds.update(:number=>:number).must_equal 1
113
107
  @ds.filter(:id=>1).update(:number=>:number).must_equal 1
114
108
  @ds.filter(:id=>2).update(:number=>:number).must_equal 0
@@ -171,7 +165,7 @@ describe "Simple Dataset operations" do
171
165
  @ds.all.must_equal [{:id=>1, :number=>10}]
172
166
  end
173
167
 
174
- cspecify "should skip locked rows correctly", [:do] do
168
+ it "should skip locked rows correctly" do
175
169
  @ds.insert(:number=>10)
176
170
  q1 = Queue.new
177
171
  q2 = Queue.new
@@ -777,6 +771,13 @@ if DB.dataset.supports_cte?(:update) # Assume INSERT and DELETE support as well
777
771
  @ds2.filter(:id=>@db[:t].select{max(id)}).delete
778
772
  @ds.select_order_map(:id).must_equal [1, 1]
779
773
  end
774
+
775
+ it "should support a subselect in an subquery used for INSERT" do
776
+ @db.transaction(:rollback=>:always) do
777
+ @ds.insert([:id], @db[:foo].with(:foo, @ds.select{(id + 10).as(:id)}))
778
+ @ds.select_order_map(:id).must_equal [1,2,11,12]
779
+ end
780
+ end
780
781
  end
781
782
  end
782
783
 
@@ -927,13 +928,13 @@ describe Sequel::SQL::Constants do
927
928
  (Time.now - @c[@ds.get(:t)]).must_be_close_to 0, 60
928
929
  end
929
930
 
930
- cspecify "should have working CURRENT_TIMESTAMP", [:jdbc, :sqlite], [:swift] do
931
+ cspecify "should have working CURRENT_TIMESTAMP", [:jdbc, :sqlite] do
931
932
  @db.create_table!(:constants){DateTime :ts}
932
933
  @ds.insert(:ts=>Sequel::CURRENT_TIMESTAMP)
933
934
  (Time.now - @c[@ds.get(:ts)]).must_be_close_to 0, 60
934
935
  end
935
936
 
936
- cspecify "should have working CURRENT_TIMESTAMP when used as a column default", [:jdbc, :sqlite], [:swift] do
937
+ cspecify "should have working CURRENT_TIMESTAMP when used as a column default", [:jdbc, :sqlite] do
937
938
  @db.create_table!(:constants){DateTime :ts, :default=>Sequel::CURRENT_TIMESTAMP}
938
939
  @ds.insert
939
940
  (Time.now - @c[@ds.get(:ts)]).must_be_close_to 0, 60
@@ -1055,12 +1056,6 @@ describe "Sequel::Dataset convenience methods" do
1055
1056
  @db.drop_table?(:a)
1056
1057
  end
1057
1058
 
1058
- deprecated "#[]= should update matching rows" do
1059
- @ds.insert(20, 10)
1060
- @ds.extension(:sequel_3_dataset_methods)[:a=>20] = {:b=>30}
1061
- @ds.all.must_equal [{:a=>20, :b=>30}]
1062
- end
1063
-
1064
1059
  it "#empty? should return whether the dataset returns no rows" do
1065
1060
  @ds.empty?.must_equal true
1066
1061
  @ds.insert(20, 10)
@@ -1751,36 +1746,6 @@ describe "Dataset identifier methods" do
1751
1746
  end
1752
1747
  end if IDENTIFIER_MANGLING
1753
1748
 
1754
- describe "Dataset defaults and overrides" do
1755
- before(:all) do
1756
- @db = DB
1757
- @db.create_table!(:a){Integer :a}
1758
- deprecated do
1759
- @ds = @db[:a].order(:a).extension(:set_overrides)
1760
- end
1761
- end
1762
- before do
1763
- @ds.delete
1764
- end
1765
- after(:all) do
1766
- @db.drop_table?(:a)
1767
- end
1768
-
1769
- it "#set_defaults should set defaults that can be overridden" do
1770
- @ds = @ds.set_defaults(:a=>10)
1771
- @ds.insert
1772
- @ds.insert(:a=>20)
1773
- @ds.all.must_equal [{:a=>10}, {:a=>20}]
1774
- end
1775
-
1776
- it "#set_overrides should set defaults that cannot be overridden" do
1777
- @ds = @ds.set_overrides(:a=>10)
1778
- @ds.insert
1779
- @ds.insert(:a=>20)
1780
- @ds.all.must_equal [{:a=>10}, {:a=>10}]
1781
- end
1782
- end
1783
-
1784
1749
  if DB.dataset.supports_modifying_joins?
1785
1750
  describe "Modifying joined datasets" do
1786
1751
  before do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Eagerly loading a tree structure" do
4
4
  before(:all) do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :migration
4
4
  describe Sequel::Migrator do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Sequel::Model basic support" do
4
4
  before do
@@ -49,20 +49,9 @@ describe "Sequel::Model basic support" do
49
49
  Item.all.must_equal [Item.load(:id=>1, :name=>'J')]
50
50
  end
51
51
 
52
- deprecated "should not raise an error if the implied database table doesn't exist" do
53
- class ::Item::Thing < Sequel::Model(@db)
54
- set_dataset :items
55
- end
56
- Item.create(:name=>'J')
57
- Item::Thing.first.must_equal Item::Thing.load(:id=>1, :name=>'J')
58
- end
59
-
60
- it "should raise an error if the implied database table doesn't exist if require_valid_table is true" do
52
+ it "should raise an error if the implied database table doesn't exist" do
61
53
  proc do
62
- c = Sequel::Model(@db)
63
- c.require_valid_table = true
64
- class ::Item::Thing < c
65
- set_dataset :items
54
+ class ::Item::Thing < Sequel::Model
66
55
  end
67
56
  end.must_raise Sequel::Error
68
57
  end
@@ -108,59 +97,6 @@ describe "Sequel::Model basic support" do
108
97
  i.save.must_be_nil
109
98
  end
110
99
 
111
- deprecated "#should respect after_commit, after_rollback, after_destroy_commit, and after_destroy_rollback hooks" do
112
- i = Item.create(:name=>'J')
113
- i.use_transactions = true
114
- def i.hooks
115
- @hooks
116
- end
117
- def i.rb=(x)
118
- @hooks = []
119
- @rb = x
120
- end
121
- def i.after_save
122
- @hooks << :as
123
- raise Sequel::Rollback if @rb
124
- end
125
- def i.after_destroy
126
- @hooks << :ad
127
- raise Sequel::Rollback if @rb
128
- end
129
- def i.after_commit
130
- @hooks << :ac
131
- end
132
- def i.after_rollback
133
- @hooks << :ar
134
- end
135
- def i.after_destroy_commit
136
- @hooks << :adc
137
- end
138
- def i.after_destroy_rollback
139
- @hooks << :adr
140
- end
141
- i.name = 'K'
142
- i.rb = true
143
- i.save.must_be_nil
144
- i.reload.name.must_equal 'J'
145
- i.hooks.must_equal [:as, :ar]
146
-
147
- i.rb = true
148
- i.destroy.must_be_nil
149
- i.exists?.must_equal true
150
- i.hooks.must_equal [:ad, :adr]
151
-
152
- i.name = 'K'
153
- i.rb = false
154
- i.save.wont_equal nil
155
- i.reload.name.must_equal 'K'
156
- i.hooks.must_equal [:as, :ac]
157
-
158
- i.rb = false
159
- i.destroy.wont_equal nil
160
- i.exists?.must_equal false
161
- i.hooks.must_equal [:ad, :adc]
162
- end
163
-
164
100
  it "#exists? should return whether the item is still in the database" do
165
101
  i = Item.create(:name=>'J')
166
102
  i.exists?.must_equal true
@@ -239,27 +175,13 @@ describe "Sequel::Model basic support" do
239
175
  end
240
176
 
241
177
  describe "Sequel::Model with no existing table" do
242
- deprecated "should not raise an error when setting the dataset" do
243
- db = DB
244
- db.drop_table?(:items)
245
- c = Class.new(Sequel::Model)
246
- c.set_dataset(db[:items])
247
- db.transaction do
248
- c = Class.new(Sequel::Model(db[:items]))
249
- db.get(Sequel.cast(1, Integer)).must_equal 1
250
- end
251
- end
252
-
253
- it "should not raise an error when setting the dataset when require_valid_table is true" do
178
+ it "should not raise an error when setting the dataset" do
254
179
  db = DB
255
180
  db.drop_table?(:items)
256
- c1 = Sequel::Model(db);
257
181
  c = Class.new(Sequel::Model)
258
- c.require_valid_table = true
259
182
  proc{c.set_dataset(db[:items])}.must_raise Sequel::Error
260
183
  db.transaction do
261
184
  c = Class.new(Sequel::Model)
262
- c.require_valid_table = true
263
185
  proc{c.dataset = db[:items]}.must_raise Sequel::Error
264
186
  db.get(Sequel.cast(1, Integer)).must_equal 1
265
187
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Class Table Inheritance Plugin" do
4
4
  before(:all) do
@@ -26,7 +26,7 @@ describe "Class Table Inheritance Plugin" do
26
26
  before do
27
27
  [:staff, :executives, :managers, :employees].each{|t| @db[t].delete}
28
28
  class ::Employee < Sequel::Model(@db)
29
- plugin :class_table_inheritance, :key=>:kind, :table_map=>{:Staff=>:staff}, :alias=>:employees
29
+ plugin :class_table_inheritance, :key=>:kind, :table_map=>{:Staff=>:staff}
30
30
  end
31
31
  class ::Manager < Employee
32
32
  one_to_many :staff_members, :class=>:Staff
@@ -570,7 +570,7 @@ describe "Touch plugin" do
570
570
  @album.updated_at.to_i.must_be_close_to Time.now.to_i, 2
571
571
  end
572
572
 
573
- cspecify "should update the timestamp column for many_to_one associated records when the record is updated or destroyed", [:do, :sqlite], [:jdbc, :sqlite], [:swift] do
573
+ cspecify "should update the timestamp column for many_to_one associated records when the record is updated or destroyed", [:jdbc, :sqlite] do
574
574
  Album.many_to_one :artist
575
575
  Album.plugin :touch, :associations=>:artist
576
576
  @artist.updated_at.must_be_nil
@@ -590,7 +590,7 @@ describe "Touch plugin" do
590
590
  end
591
591
  end
592
592
 
593
- cspecify "should update the timestamp column for one_to_many associated records when the record is updated", [:do, :sqlite], [:jdbc, :sqlite], [:swift] do
593
+ cspecify "should update the timestamp column for one_to_many associated records when the record is updated", [:jdbc, :sqlite] do
594
594
  Artist.one_to_many :albums
595
595
  Artist.plugin :touch, :associations=>:albums
596
596
  @album.updated_at.must_be_nil
@@ -603,7 +603,7 @@ describe "Touch plugin" do
603
603
  end
604
604
  end
605
605
 
606
- cspecify "should update the timestamp column for many_to_many associated records when the record is updated", [:do, :sqlite], [:jdbc, :sqlite], [:swift] do
606
+ cspecify "should update the timestamp column for many_to_many associated records when the record is updated", [:jdbc, :sqlite] do
607
607
  Artist.many_to_many :albums
608
608
  Artist.plugin :touch, :associations=>:albums
609
609
  @artist.add_album(@album)
@@ -1315,25 +1315,9 @@ describe "AssociationPks plugin" do
1315
1315
  Vocalist.order(:first, :last).all.map{|a| a.hit_pks.sort}.must_equal [[@h1, @h2, @h3], [@h2], []]
1316
1316
  end
1317
1317
 
1318
- deprecated "should handle :delay_pks=>true association option for new instances" do
1318
+ it "should default to delaying association_pks setter method changes until saving" do
1319
1319
  album_class = Class.new(Album)
1320
1320
  album_class.many_to_many :tags, :clone=>:tags, :delay_pks=>true, :join_table=>:albums_tags, :left_key=>:album_id
1321
- album = album_class.new(:name=>'test album')
1322
- album.tag_pks.must_equal []
1323
- album.tag_pks = [@t1, @t2]
1324
- album.tag_pks.must_equal [@t1, @t2]
1325
- album.save
1326
- album_class.with_pk!(album.pk).tag_pks.sort.must_equal [@t1, @t2]
1327
-
1328
- album.tag_pks = []
1329
- album.tag_pks.must_equal []
1330
- album.save
1331
- album_class.with_pk!(album.pk).tag_pks.sort.must_equal []
1332
- end
1333
-
1334
- it "should handle :delay_pks=>:always association option for existing instances" do
1335
- album_class = Class.new(Album)
1336
- album_class.many_to_many :tags, :clone=>:tags, :delay_pks=>:always, :join_table=>:albums_tags, :left_key=>:album_id
1337
1321
  album = album_class.with_pk!(@al1)
1338
1322
  album.tag_pks.sort.must_equal [@t1, @t2, @t3]
1339
1323
  album.tag_pks = [@t1, @t2]
@@ -2059,7 +2043,7 @@ describe "Sequel::Plugins::ConstraintValidations" do
2059
2043
  end
2060
2044
 
2061
2045
  ConstraintValidationsSpecs = shared_description do
2062
- cspecify "should set up constraints that work even outside the model", :mysql do
2046
+ cspecify "should set up constraints that work even outside the model", [proc{|db| !db.mariadb? || db.server_version <= 100200}, :mysql] do
2063
2047
  @ds.insert(@valid_row)
2064
2048
 
2065
2049
  # Test for unique constraint