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
  describe "Sequel::Model()" do
4
4
  before do
@@ -109,14 +109,6 @@ describe "Sequel::Model()" do
109
109
  Object.send(:remove_const, :Album) if defined?(::Album)
110
110
  end
111
111
 
112
- deprecated "Sequel.cache_anonymous_models should return value for Sequel::Model" do
113
- Sequel.cache_anonymous_models.must_equal true
114
- Sequel::Model.cache_anonymous_models = false
115
- Sequel.cache_anonymous_models.must_equal false
116
- Sequel.cache_anonymous_models = true
117
- Sequel.cache_anonymous_models.must_equal true
118
- end
119
-
120
112
  it "should work without raising an exception with a symbol" do
121
113
  class ::Album < Sequel::Model(:table); end
122
114
  class ::Album < Sequel::Model(:table); end
@@ -185,12 +177,7 @@ end
185
177
  describe "Sequel::Model.freeze" do
186
178
  it "should freeze the model class and not allow any changes" do
187
179
  model = Class.new(Sequel::Model(:items))
188
- deprecated do
189
- model.set_allowed_columns [:id]
190
- model.finder(:name=>:f_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}
191
- end
192
180
  model.freeze
193
- model.f_by_name(1)
194
181
 
195
182
  model.frozen?.must_equal true
196
183
  model.dataset.frozen?.must_equal true
@@ -201,11 +188,12 @@ describe "Sequel::Model.freeze" do
201
188
  model.send(:overridable_methods_module).frozen?.must_equal true
202
189
  model.default_set_fields_options.frozen?.must_equal true
203
190
 
204
- proc{model.dataset_module{}}.must_raise RuntimeError, TypeError
205
- deprecated do
206
- model.allowed_columns.frozen?.must_equal true
207
- proc{model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}}.must_raise RuntimeError, TypeError
208
- end
191
+ proc{model.dataset_module{}}.must_raise RuntimeError
192
+ end
193
+
194
+ it "should work if the model is already frozen" do
195
+ model = Class.new(Sequel::Model(:items))
196
+ model.freeze.freeze
209
197
  end
210
198
 
211
199
  it "should freeze a model class without a dataset without breaking" do
@@ -219,10 +207,7 @@ describe "Sequel::Model.freeze" do
219
207
  model.send(:overridable_methods_module).frozen?.must_equal true
220
208
  model.default_set_fields_options.frozen?.must_equal true
221
209
 
222
- proc{model.dataset_module{}}.must_raise RuntimeError, TypeError
223
- deprecated do
224
- proc{model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}}.must_raise RuntimeError, TypeError
225
- end
210
+ proc{model.dataset_module{}}.must_raise RuntimeError
226
211
  end
227
212
 
228
213
  it "should allow subclasses of frozen model classes to work correctly" do
@@ -233,14 +218,8 @@ describe "Sequel::Model.freeze" do
233
218
 
234
219
  model.dataset_module{}
235
220
  model.plugin Module.new
236
- deprecated do
237
- model.finder(:name=>:first_by_name){|pl, ds| ds.where(:name=>pl.arg).limit(1)}
238
- end
239
- model.first_by_name('a').values.must_equal(:id=>1, :x=>1)
240
- model.dataset.frozen?.must_equal false
241
221
 
242
222
  model.frozen?.must_equal false
243
- model.dataset.frozen?.must_equal false
244
223
  model.db_schema.frozen?.must_equal false
245
224
  model.db_schema[:id].frozen?.must_equal false
246
225
  model.setter_methods.frozen?.must_equal false
@@ -252,10 +231,8 @@ end
252
231
 
253
232
  describe Sequel::Model do
254
233
  it "should have class method aliased as model" do
255
- Sequel::Model.instance_methods.collect{|x| x.to_s}.must_include("model")
256
-
257
234
  model_a = Class.new(Sequel::Model(:items))
258
- model_a.new.model.wont_be_nil
235
+ model_a.new.model.must_be_same_as model_a
259
236
  end
260
237
 
261
238
  it "should be associated with a dataset" do
@@ -279,15 +256,10 @@ describe Sequel::Model do
279
256
  DB.reset
280
257
  end
281
258
 
282
- deprecated "should allow dup/clone" do
283
- @model.dup.must_be :<, @model.superclass
284
- @model.clone.must_be :<, @model.superclass
285
- end
286
-
287
259
  it "should not allow dup/clone" do
288
- proc{@model.dup}.must_raise Sequel::Error
289
- proc{@model.clone}.must_raise Sequel::Error
290
- end if false # SEQUEL5
260
+ proc{@model.dup}.must_raise NoMethodError
261
+ proc{@model.clone}.must_raise NoMethodError
262
+ end
291
263
 
292
264
  it "has table_name return name of table" do
293
265
  @model.table_name.must_equal :items
@@ -328,6 +300,13 @@ describe Sequel::Model do
328
300
  proc{@model.set_dataset(Object.new)}.must_raise(Sequel::Error)
329
301
  end
330
302
 
303
+ it "set_dataset should use a subquery for joined datasets" do
304
+ @model.set_dataset(DB.from(:foo, :bar))
305
+ @model.dataset.sql.must_equal 'SELECT * FROM (SELECT * FROM foo, bar) AS foo'
306
+ @model.set_dataset(DB[:foo].cross_join(:bar))
307
+ @model.dataset.sql.must_equal 'SELECT * FROM (SELECT * FROM foo CROSS JOIN bar) AS foo'
308
+ end
309
+
331
310
  it "set_dataset should add the destroy method to the dataset that destroys each object" do
332
311
  ds = DB[:foo]
333
312
  ds.wont_respond_to(:destroy)
@@ -490,11 +469,10 @@ describe Sequel::Model, ".require_valid_table = true" do
490
469
  c.columns.must_equal [:id]
491
470
  end
492
471
 
493
- deprecated "should assume nil value is the same as false" do
472
+ it "should assume nil value is the same as false" do
494
473
  c = Class.new(Sequel::Model)
495
474
  c.require_valid_table = nil
496
- ds = @db.dataset
497
- def ds.columns; raise Sequel::Error; end
475
+ ds = @db.dataset.with_extend{def columns; raise Sequel::Error; end}
498
476
  c.set_dataset(ds)
499
477
  end
500
478
  end
@@ -575,36 +553,6 @@ describe Sequel::Model, "new" do
575
553
  end
576
554
  end
577
555
 
578
- describe Sequel::Model, ".subset" do
579
- before do
580
- @c = Class.new(Sequel::Model(:items))
581
- DB.reset
582
- end
583
-
584
- deprecated "should create a filter on the underlying dataset" do
585
- proc {@c.new_only}.must_raise(NoMethodError)
586
-
587
- @c.subset(:new_only){age < 'new'}
588
-
589
- @c.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
590
- @c.dataset.new_only.sql.must_equal "SELECT * FROM items WHERE (age < 'new')"
591
-
592
- @c.subset(:pricey){price > 100}
593
-
594
- @c.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
595
- @c.dataset.pricey.sql.must_equal "SELECT * FROM items WHERE (price > 100)"
596
-
597
- @c.pricey.new_only.sql.must_equal "SELECT * FROM items WHERE ((price > 100) AND (age < 'new'))"
598
- @c.new_only.pricey.sql.must_equal "SELECT * FROM items WHERE ((age < 'new') AND (price > 100))"
599
- end
600
-
601
- deprecated "should not override existing model methods" do
602
- def @c.active() true end
603
- @c.subset(:active, :active)
604
- @c.active.must_equal true
605
- end
606
- end
607
-
608
556
  describe Sequel::Model, ".find" do
609
557
  before do
610
558
  @c = Class.new(Sequel::Model(:items))
@@ -629,242 +577,6 @@ describe Sequel::Model, ".find" do
629
577
  end
630
578
  end
631
579
 
632
- describe Sequel::Model, ".first_where" do
633
- deprecated "should take a condition and do a lookup" do
634
- db = Sequel.mock(:fetch=>[])
635
- c = Class.new(Sequel::Model(db[:items]))
636
- db.sqls
637
- c.first_where(:a)
638
- db.sqls.must_equal ['SELECT * FROM items WHERE a LIMIT 1']
639
- proc{c.first_where(1)}.must_raise Sequel::Error
640
- end
641
- end
642
-
643
- describe Sequel::Model, ".finder" do
644
- before do
645
- @h = {:id=>1}
646
- @db = Sequel.mock(:fetch=>@h)
647
- @c = Class.new(Sequel::Model(@db[:items]))
648
- @c.instance_eval do
649
- def foo(a, b)
650
- where(:bar=>a).order(b)
651
- end
652
- end
653
- @o = @c.load(@h)
654
- @db.sqls
655
- end
656
-
657
- deprecated "should create a method that calls the method given and returns the first instance" do
658
- @c.finder :foo
659
- @c.first_foo(1, 2).must_equal @o
660
- @c.first_foo(3, 4).must_equal @o
661
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
662
- end
663
-
664
- deprecated "should work correctly when subclassing" do
665
- @c.finder(:foo)
666
- @sc = Class.new(@c)
667
- @sc.set_dataset :foos
668
- @db.sqls
669
- @sc.first_foo(1, 2).must_equal @sc.load(@h)
670
- @sc.first_foo(3, 4).must_equal @sc.load(@h)
671
- @db.sqls.must_equal ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
672
- end
673
-
674
- deprecated "should work correctly when dataset is modified" do
675
- @c.finder(:foo)
676
- @c.first_foo(1, 2).must_equal @o
677
- @c.set_dataset :foos
678
- @c.first_foo(3, 4).must_equal @o
679
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
680
- end
681
-
682
- deprecated "should create a method based on the given block if no method symbol provided" do
683
- @c.finder(:name=>:first_foo){|pl, ds| ds.where(pl.arg).limit(1)}
684
- @c.first_foo(:id=>1).must_equal @o
685
- @db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1"]
686
- end
687
-
688
- deprecated "should raise an error if both a block and method symbol given" do
689
- proc{@c.finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
690
- end
691
-
692
- deprecated "should raise an error if two option hashes are provided" do
693
- proc{@c.finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
694
- end
695
-
696
- deprecated "should support :type option" do
697
- @c.finder :foo, :type=>:all
698
- @c.finder :foo, :type=>:each
699
- @c.finder :foo, :type=>:get
700
-
701
- a = []
702
- @c.all_foo(1, 2){|r| a << r}.must_equal [@o]
703
- a.must_equal [@o]
704
-
705
- a = []
706
- @c.each_foo(3, 4){|r| a << r}
707
- a.must_equal [@o]
708
-
709
- @c.get_foo(5, 6).must_equal 1
710
-
711
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4", "SELECT * FROM items WHERE (bar = 5) ORDER BY 6 LIMIT 1"]
712
- end
713
-
714
- deprecated "should support :name option" do
715
- @c.finder :foo, :name=>:find_foo
716
- @c.find_foo(1, 2).must_equal @o
717
- @c.find_foo(3, 4).must_equal @o
718
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
719
- end
720
-
721
- deprecated "should support :arity option" do
722
- def @c.foobar(*b)
723
- ds = dataset
724
- b.each_with_index do |a, i|
725
- ds = ds.where(i=>a)
726
- end
727
- ds
728
- end
729
- @c.finder :foobar, :arity=>1, :name=>:find_foobar_1
730
- @c.finder :foobar, :arity=>2, :name=>:find_foobar_2
731
- @c.find_foobar_1(:a)
732
- @c.find_foobar_2(:a, :b)
733
- @db.sqls.must_equal ["SELECT * FROM items WHERE (0 = a) LIMIT 1", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1"]
734
- end
735
-
736
- deprecated "should support :mod option" do
737
- m = Module.new
738
- @c.finder :foo, :mod=>m
739
- proc{@c.first_foo}.must_raise NoMethodError
740
- @c.extend m
741
- @c.first_foo(1, 2).must_equal @o
742
- @c.first_foo(3, 4).must_equal @o
743
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
744
- end
745
-
746
- deprecated "should raise error when calling with the wrong arity" do
747
- @c.finder :foo
748
- proc{@c.first_foo(1)}.must_raise Sequel::Error
749
- proc{@c.first_foo(1,2,3)}.must_raise Sequel::Error
750
- end
751
- end
752
-
753
- describe Sequel::Model, ".prepared_finder" do
754
- before do
755
- @h = {:id=>1}
756
- @db = Sequel.mock(:fetch=>@h)
757
- @db.extend_datasets do
758
- def select_sql
759
- sql = super
760
- sql << ' -- prepared' if is_a?(Sequel::Dataset::PreparedStatementMethods)
761
- sql
762
- end
763
- end
764
- @c = Class.new(Sequel::Model(@db[:items]))
765
- @c.instance_eval do
766
- def foo(a, b)
767
- where(:bar=>a).order(b)
768
- end
769
- end
770
- @o = @c.load(@h)
771
- @db.sqls
772
- end
773
-
774
- deprecated "should create a method that calls the method given and returns the first instance" do
775
- @c.prepared_finder :foo
776
- @c.first_foo(1, 2).must_equal @o
777
- @c.first_foo(3, 4).must_equal @o
778
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
779
- end
780
-
781
- deprecated "should work correctly when subclassing" do
782
- @c.prepared_finder(:foo)
783
- @sc = Class.new(@c)
784
- @sc.set_dataset :foos
785
- @db.sqls
786
- @sc.first_foo(1, 2).must_equal @sc.load(@h)
787
- @sc.first_foo(3, 4).must_equal @sc.load(@h)
788
- @db.sqls.must_equal ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
789
- end
790
-
791
- deprecated "should work correctly when dataset is modified" do
792
- @c.prepared_finder(:foo)
793
- @c.first_foo(1, 2).must_equal @o
794
- @c.set_dataset :foos
795
- @c.first_foo(3, 4).must_equal @o
796
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
797
- end
798
-
799
- deprecated "should create a method based on the given block if no method symbol provided" do
800
- @c.prepared_finder(:name=>:first_foo){|a1| where(:id=>a1).limit(1)}
801
- @c.first_foo(1).must_equal @o
802
- @db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1) LIMIT 1 -- prepared"]
803
- end
804
-
805
- deprecated "should raise an error if both a block and method symbol given" do
806
- proc{@c.prepared_finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
807
- end
808
-
809
- deprecated "should raise an error if two option hashes are provided" do
810
- proc{@c.prepared_finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.must_raise(Sequel::Error)
811
- end
812
-
813
- deprecated "should support :type option" do
814
- @c.prepared_finder :foo, :type=>:all
815
- @c.prepared_finder :foo, :type=>:each
816
-
817
- a = []
818
- @c.all_foo(1, 2){|r| a << r}.must_equal [@o]
819
- a.must_equal [@o]
820
-
821
- a = []
822
- @c.each_foo(3, 4){|r| a << r}
823
- a.must_equal [@o]
824
-
825
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 -- prepared"]
826
- end
827
-
828
- deprecated "should support :name option" do
829
- @c.prepared_finder :foo, :name=>:find_foo
830
- @c.find_foo(1, 2).must_equal @o
831
- @c.find_foo(3, 4).must_equal @o
832
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
833
- end
834
-
835
- deprecated "should support :arity option" do
836
- def @c.foobar(*b)
837
- ds = dataset
838
- b.each_with_index do |a, i|
839
- ds = ds.where(i=>a)
840
- end
841
- ds
842
- end
843
- @c.prepared_finder :foobar, :arity=>1, :name=>:find_foobar_1
844
- @c.prepared_finder :foobar, :arity=>2, :name=>:find_foobar_2
845
- @c.find_foobar_1(:a)
846
- @c.find_foobar_2(:a, :b)
847
- @db.sqls.must_equal ["SELECT * FROM items WHERE (0 = a) LIMIT 1 -- prepared", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1 -- prepared"]
848
- end
849
-
850
- deprecated "should support :mod option" do
851
- m = Module.new
852
- @c.prepared_finder :foo, :mod=>m
853
- proc{@c.first_foo}.must_raise NoMethodError
854
- @c.extend m
855
- @c.first_foo(1, 2).must_equal @o
856
- @c.first_foo(3, 4).must_equal @o
857
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
858
- end
859
-
860
- deprecated "should handle models with names" do
861
- def @c.name; 'foobar' end
862
- @c.prepared_finder :foo
863
- @c.first_foo(1, 2).must_equal @o
864
- @db.sqls.must_equal ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared"]
865
- end
866
- end
867
-
868
580
  describe Sequel::Model, ".fetch" do
869
581
  before do
870
582
  DB.reset
@@ -912,10 +624,9 @@ describe Sequel::Model, ".find_or_create" do
912
624
  @db.fetch = [[], {:x=>1, :id=>1}]
913
625
  @db.autoid = 1
914
626
  @c.find_or_create(:x => 1){|x| x[:y] = 2}.must_equal @c.load(:x=>1, :id=>1)
915
- sqls = @db.sqls
916
- sqls.first.must_equal "SELECT * FROM items WHERE (x = 1) LIMIT 1"
917
- ["INSERT INTO items (x, y) VALUES (1, 2)", "INSERT INTO items (y, x) VALUES (2, 1)"].must_include(sqls[1])
918
- sqls.last.must_equal "SELECT * FROM items WHERE id = 1"
627
+ @db.sqls.must_equal ["SELECT * FROM items WHERE (x = 1) LIMIT 1",
628
+ "INSERT INTO items (x, y) VALUES (1, 2)",
629
+ "SELECT * FROM items WHERE id = 1"]
919
630
  end
920
631
  end
921
632
 
@@ -973,17 +684,12 @@ describe Sequel::Model, "attribute accessors" do
973
684
  end
974
685
 
975
686
  it "should be created on set_dataset" do
976
- %w'x z x= z='.each do |x|
977
- @c.instance_methods.collect{|z| z.to_s}.wont_include(x)
978
- end
687
+ a = [:x, :z, :x= ,:z=]
688
+ (a - @c.instance_methods).must_equal a
979
689
  @c.set_dataset(@dataset)
980
- %w'x z x= z='.each do |x|
981
- @c.instance_methods.collect{|z| z.to_s}.must_include(x)
982
- end
690
+ (a - @c.instance_methods).must_equal []
983
691
  o = @c.new
984
- %w'x z x= z='.each do |x|
985
- o.methods.collect{|z| z.to_s}.must_include(x)
986
- end
692
+ (a - o.methods).must_equal []
987
693
 
988
694
  o.x.must_be_nil
989
695
  o.x = 34
@@ -1046,12 +752,6 @@ describe Sequel::Model, ".[]" do
1046
752
  DB.sqls.must_equal ["SELECT * FROM items WHERE name = 'sharon'"]
1047
753
  end
1048
754
 
1049
- deprecated "should use a qualified primary key if the dataset is joined" do
1050
- @c.dataset = @c.dataset.cross_join(:a)
1051
- @c[1].must_equal @c.load(:name => 'sharon', :id => 1)
1052
- DB.sqls.must_equal ["SELECT * FROM items CROSS JOIN a WHERE (items.id = 1) LIMIT 1"]
1053
- end
1054
-
1055
755
  it "should handle a dataset that uses a subquery" do
1056
756
  @c.dataset = @c.dataset.cross_join(:a).from_self(:alias=>:b)
1057
757
  @c[1].must_equal @c.load(:name => 'sharon', :id => 1)
@@ -1061,9 +761,7 @@ describe Sequel::Model, ".[]" do
1061
761
  it "should work correctly for composite primary key specified as array" do
1062
762
  @c.set_primary_key [:node_id, :kind]
1063
763
  @c[3921, 201].must_be_kind_of(@c)
1064
- sqls = DB.sqls
1065
- sqls.length.must_equal 1
1066
- sqls.first.must_match(/^SELECT \* FROM items WHERE \((\(node_id = 3921\) AND \(kind = 201\))|(\(kind = 201\) AND \(node_id = 3921\))\) LIMIT 1$/)
764
+ DB.sqls.must_equal ['SELECT * FROM items WHERE ((node_id = 3921) AND (kind = 201)) LIMIT 1']
1067
765
  end
1068
766
  end
1069
767
 
@@ -1122,14 +820,6 @@ describe "Model.db_schema" do
1122
820
  @c.db_schema.must_equal(:x=>{:type=>:integer}, :z=>{}, :y=>{:type=>:string})
1123
821
  end
1124
822
 
1125
- deprecated "should not raise error if setting dataset where getting schema and columns raises an error" do
1126
- def @db.schema(table, opts={})
1127
- raise Sequel::Error
1128
- end
1129
- @c.dataset = @dataset.join(:x, :id).from_self.columns(:id, :x)
1130
- @c.db_schema.must_equal(:x=>{}, :id=>{})
1131
- end
1132
-
1133
823
  it "should not raise error if setting dataset where getting schema and columns raises an error and require_valid_table is false" do
1134
824
  @c.require_valid_table = false
1135
825
  def @db.schema(table, opts={})
@@ -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, ".plugin" do
4
4
  before do
@@ -307,7 +307,7 @@ describe "Sequel::Model.plugin" do
307
307
  it "should try loading plugins from sequel/plugins/:plugin" do
308
308
  a = []
309
309
  m = Module.new
310
- (class << @c; self end).send(:define_method, :require) do |b|
310
+ @c.define_singleton_method(:require) do |b|
311
311
  a << b
312
312
  Sequel::Plugins.const_set(:SomethingOrOther, m)
313
313
  end
@@ -315,18 +315,4 @@ describe "Sequel::Model.plugin" do
315
315
  @c.plugins.must_include m
316
316
  a.must_equal ['sequel/plugins/something_or_other']
317
317
  end
318
-
319
- deprecated "should try loading plugins from sequel_plugin" do
320
- proc{@c.plugin :something_or_other}.must_raise(LoadError)
321
- a = []
322
- m = Module.new
323
- (class << @c; self end).send(:define_method, :require) do |b|
324
- a << b
325
- raise LoadError if b == 'sequel/plugins/something_or_other'
326
- Sequel::Plugins.const_set(:SomethingOrOther, m)
327
- end
328
- @c.plugin :something_or_other
329
- @c.plugins.must_include m
330
- a.must_equal ['sequel/plugins/something_or_other', 'sequel_something_or_other']
331
- end
332
318
  end