sequel 4.49.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,314 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "identifier_mangling extension" do
4
- after do
5
- deprecated do
6
- Sequel.quote_identifiers = false
7
- Sequel.identifier_input_method = nil
8
- Sequel.identifier_output_method = nil
9
- end
10
- end
11
-
12
- deprecated "should respect the :quote_identifiers option" do
13
- db = Sequel::Database.new(:quote_identifiers=>false, :identifier_mangling=>true)
14
- db.quote_identifiers?.must_equal false
15
- db = Sequel::Database.new(:quote_identifiers=>true, :identifier_mangling=>true)
16
- db.quote_identifiers?.must_equal true
17
- end
18
-
19
- deprecated "should respect the :quote_identifiers setting" do
20
- db = Sequel::Database.new(:identifier_mangling=>true)
21
- db.quote_identifiers?.must_equal false
22
- db.quote_identifiers = true
23
- db.quote_identifiers?.must_equal true
24
- end
25
-
26
- deprecated "should upcase on input and downcase on output by default" do
27
- db = Sequel::Database.new(:identifier_mangling=>true)
28
- db.send(:identifier_input_method_default).must_equal :upcase
29
- db.send(:identifier_output_method_default).must_equal :downcase
30
- end
31
-
32
- deprecated "should respect the :identifier_input_method option" do
33
- Sequel.identifier_input_method = nil
34
- Sequel::Database.identifier_input_method.must_equal false
35
- db = Sequel::Database.new(:identifier_input_method=>nil, :identifier_mangling=>true)
36
- db.identifier_input_method.must_be_nil
37
- db.identifier_input_method = :downcase
38
- db.identifier_input_method.must_equal :downcase
39
- db = Sequel::Database.new(:identifier_input_method=>:upcase, :identifier_mangling=>true)
40
- db.identifier_input_method.must_equal :upcase
41
- db.identifier_input_method = nil
42
- db.identifier_input_method.must_be_nil
43
- Sequel.identifier_input_method = :downcase
44
- Sequel::Database.identifier_input_method.must_equal :downcase
45
- db = Sequel::Database.new(:identifier_input_method=>nil, :identifier_mangling=>true)
46
- db.identifier_input_method.must_be_nil
47
- db.identifier_input_method = :upcase
48
- db.identifier_input_method.must_equal :upcase
49
- db = Sequel::Database.new(:identifier_input_method=>:upcase, :identifier_mangling=>true)
50
- db.identifier_input_method.must_equal :upcase
51
- db.identifier_input_method = nil
52
- db.identifier_input_method.must_be_nil
53
- end
54
-
55
- deprecated "should respect the :identifier_output_method option" do
56
- Sequel.identifier_output_method = nil
57
- Sequel::Database.identifier_output_method.must_equal false
58
- db = Sequel::Database.new(:identifier_output_method=>nil, :identifier_mangling=>true)
59
- db.identifier_output_method.must_be_nil
60
- db.identifier_output_method = :downcase
61
- db.identifier_output_method.must_equal :downcase
62
- db = Sequel::Database.new(:identifier_output_method=>:upcase, :identifier_mangling=>true)
63
- db.identifier_output_method.must_equal :upcase
64
- db.identifier_output_method = nil
65
- db.identifier_output_method.must_be_nil
66
- Sequel.identifier_output_method = :downcase
67
- Sequel::Database.identifier_output_method.must_equal :downcase
68
- db = Sequel::Database.new(:identifier_output_method=>nil, :identifier_mangling=>true)
69
- db.identifier_output_method.must_be_nil
70
- db.identifier_output_method = :upcase
71
- db.identifier_output_method.must_equal :upcase
72
- db = Sequel::Database.new(:identifier_output_method=>:upcase, :identifier_mangling=>true)
73
- db.identifier_output_method.must_equal :upcase
74
- db.identifier_output_method = nil
75
- db.identifier_output_method.must_be_nil
76
- end
77
-
78
- deprecated "should use the default Sequel.quote_identifiers value" do
79
- Sequel.quote_identifiers = true
80
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
81
- Sequel.quote_identifiers = false
82
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal false
83
- Sequel::Database.quote_identifiers = true
84
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
85
- Sequel::Database.quote_identifiers = false
86
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal false
87
- end
88
-
89
- deprecated "should use the default Sequel.identifier_input_method value" do
90
- Sequel.identifier_input_method = :downcase
91
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :downcase
92
- Sequel.identifier_input_method = :upcase
93
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :upcase
94
- Sequel::Database.identifier_input_method = :downcase
95
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :downcase
96
- Sequel::Database.identifier_input_method = :upcase
97
- Sequel::Database.new(:identifier_mangling=>true).identifier_input_method.must_equal :upcase
98
- end
99
-
100
- deprecated "should use the default Sequel.identifier_output_method value" do
101
- Sequel.identifier_output_method = :downcase
102
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :downcase
103
- Sequel.identifier_output_method = :upcase
104
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :upcase
105
- Sequel::Database.identifier_output_method = :downcase
106
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :downcase
107
- Sequel::Database.identifier_output_method = :upcase
108
- Sequel::Database.new(:identifier_mangling=>true).identifier_output_method.must_equal :upcase
109
- end
110
-
111
- deprecated "should respect the quote_indentifiers_default method if Sequel.quote_identifiers = nil" do
112
- Sequel.quote_identifiers = nil
113
- Sequel::Database.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
114
- x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def quote_identifiers_default; false end}
115
- x.new(:identifier_mangling=>true).quote_identifiers?.must_equal false
116
- y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def quote_identifiers_default; true end}
117
- y.new(:identifier_mangling=>true).quote_identifiers?.must_equal true
118
- end
119
-
120
- deprecated "should respect the identifier_input_method_default method if Sequel.identifier_input_method is not called" do
121
- class Sequel::Database
122
- @identifier_input_method = nil
123
- end
124
- x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_input_method_default; :downcase end}
125
- x.new(:identifier_mangling=>true).identifier_input_method.must_equal :downcase
126
- y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_input_method_default; :camelize end}
127
- y.new(:identifier_mangling=>true).identifier_input_method.must_equal :camelize
128
- end
129
-
130
- deprecated "should respect the identifier_output_method_default method if Sequel.identifier_output_method is not called" do
131
- class Sequel::Database
132
- @identifier_output_method = nil
133
- end
134
- x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_output_method_default; :upcase end}
135
- x.new(:identifier_mangling=>true).identifier_output_method.must_equal :upcase
136
- y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def identifier_output_method_default; :underscore end}
137
- y.new(:identifier_mangling=>true).identifier_output_method.must_equal :underscore
138
- end
139
- end
140
-
141
- describe "Database#input_identifier_meth" do
142
- deprecated "should be the input_identifer method of a default dataset for this database" do
143
- db = Sequel::Database.new(:identifier_mangling=>true)
144
- db.send(:input_identifier_meth).call(:a).must_equal 'a'
145
- db.identifier_input_method = :upcase
146
- db.send(:input_identifier_meth).call(:a).must_equal 'A'
147
- end
148
- end
149
-
150
- describe "Database#output_identifier_meth" do
151
- deprecated "should be the output_identifer method of a default dataset for this database" do
152
- db = Sequel::Database.new(:identifier_mangling=>true)
153
- db.send(:output_identifier_meth).call('A').must_equal :A
154
- db.identifier_output_method = :downcase
155
- db.send(:output_identifier_meth).call('A').must_equal :a
156
- end
157
- end
158
-
159
- describe "Database#metadata_dataset" do
160
- deprecated "should be a dataset with the default settings for identifier_mangling" do
161
- ds = Sequel::Database.new(:identifier_mangling=>true).send(:metadata_dataset)
162
- ds.literal(:a).must_equal 'A'
163
- ds.send(:output_identifier, 'A').must_equal :a
164
- end
165
- end
166
-
167
- describe "Dataset" do
168
- before do
169
- @dataset = Sequel.mock(:identifier_mangling=>true).dataset
170
- end
171
-
172
- deprecated "should get quote_identifiers default from database" do
173
- db = Sequel::Database.new(:quote_identifiers=>true, :identifier_mangling=>true)
174
- db[:a].quote_identifiers?.must_equal true
175
- db = Sequel::Database.new(:quote_identifiers=>false, :identifier_mangling=>true)
176
- db[:a].quote_identifiers?.must_equal false
177
- end
178
-
179
- deprecated "should get identifier_input_method default from database" do
180
- db = Sequel::Database.new(:identifier_input_method=>:upcase, :identifier_mangling=>true)
181
- db[:a].identifier_input_method.must_equal :upcase
182
- db = Sequel::Database.new(:identifier_input_method=>:downcase, :identifier_mangling=>true)
183
- db[:a].identifier_input_method.must_equal :downcase
184
- end
185
-
186
- deprecated "should get identifier_output_method default from database" do
187
- db = Sequel::Database.new(:identifier_output_method=>:upcase, :identifier_mangling=>true)
188
- db[:a].identifier_output_method.must_equal :upcase
189
- db = Sequel::Database.new(:identifier_output_method=>:downcase, :identifier_mangling=>true)
190
- db[:a].identifier_output_method.must_equal :downcase
191
- end
192
-
193
- # SEQUEL5: Remove
194
- unless Sequel.mock(:identifier_mangling=>true).dataset.frozen?
195
- deprecated "should have quote_identifiers= method which changes literalization of identifiers" do
196
- @dataset.quote_identifiers = true
197
- @dataset.literal(:a).must_equal '"a"'
198
- @dataset.quote_identifiers = false
199
- @dataset.literal(:a).must_equal 'a'
200
- end
201
-
202
- deprecated "should have identifier_input_method= method which changes literalization of identifiers" do
203
- @dataset.identifier_input_method = :upcase
204
- @dataset.literal(:a).must_equal 'A'
205
- @dataset.identifier_input_method = :downcase
206
- @dataset.literal(:A).must_equal 'a'
207
- @dataset.identifier_input_method = :reverse
208
- @dataset.literal(:at_b).must_equal 'b_ta'
209
- end
210
-
211
- deprecated "should have identifier_output_method= method which changes identifiers returned from the database" do
212
- @dataset.send(:output_identifier, "at_b_C").must_equal :at_b_C
213
- @dataset.identifier_output_method = :upcase
214
- @dataset.send(:output_identifier, "at_b_C").must_equal :AT_B_C
215
- @dataset.identifier_output_method = :downcase
216
- @dataset.send(:output_identifier, "at_b_C").must_equal :at_b_c
217
- @dataset.identifier_output_method = :reverse
218
- @dataset.send(:output_identifier, "at_b_C").must_equal :C_b_ta
219
- end
220
- end
221
-
222
- deprecated "should have with_quote_identifiers method which returns cloned dataset with changed literalization of identifiers" do
223
- @dataset.with_quote_identifiers(true).literal(:a).must_equal '"a"'
224
- @dataset.with_quote_identifiers(false).literal(:a).must_equal 'a'
225
- ds = @dataset.freeze.with_quote_identifiers(false)
226
- ds.literal(:a).must_equal 'a'
227
- ds.frozen?.must_equal true
228
- end
229
-
230
- deprecated "should have with_identifier_input_method method which returns cloned dataset with changed literalization of identifiers" do
231
- @dataset.with_identifier_input_method(:upcase).literal(:a).must_equal 'A'
232
- @dataset.with_identifier_input_method(:downcase).literal(:A).must_equal 'a'
233
- @dataset.with_identifier_input_method(:reverse).literal(:at_b).must_equal 'b_ta'
234
- ds = @dataset.freeze.with_identifier_input_method(:reverse)
235
- ds.frozen?.must_equal true
236
- ds.literal(:at_b).must_equal 'b_ta'
237
- end
238
-
239
- deprecated "should have with_identifier_output_method method which returns cloned dataset with changed identifiers returned from the database" do
240
- @dataset.send(:output_identifier, "at_b_C").must_equal :at_b_C
241
- @dataset.with_identifier_output_method(:upcase).send(:output_identifier, "at_b_C").must_equal :AT_B_C
242
- @dataset.with_identifier_output_method(:downcase).send(:output_identifier, "at_b_C").must_equal :at_b_c
243
- @dataset.with_identifier_output_method(:reverse).send(:output_identifier, "at_b_C").must_equal :C_b_ta
244
- ds = @dataset.freeze.with_identifier_output_method(:reverse)
245
- ds.send(:output_identifier, "at_b_C").must_equal :C_b_ta
246
- ds.frozen?.must_equal true
247
- end
248
-
249
- deprecated "should have output_identifier handle empty identifiers" do
250
- @dataset.send(:output_identifier, "").must_equal :untitled
251
- @dataset.with_identifier_output_method(:upcase).send(:output_identifier, "").must_equal :UNTITLED
252
- @dataset.with_identifier_output_method(:downcase).send(:output_identifier, "").must_equal :untitled
253
- @dataset.with_identifier_output_method(:reverse).send(:output_identifier, "").must_equal :deltitnu
254
- end
255
- end
256
-
257
- describe "Frozen Datasets" do
258
- before do
259
- @ds = Sequel.mock(:identifier_mangling=>true)[:test].freeze
260
- end
261
-
262
- deprecated "should raise an error when calling mutation methods" do
263
- proc{@ds.identifier_input_method = :a}.must_raise RuntimeError
264
- proc{@ds.identifier_output_method = :a}.must_raise RuntimeError
265
- proc{@ds.quote_identifiers = false}.must_raise RuntimeError
266
- end
267
- end
268
-
269
- describe "identifier_mangling extension" do
270
- deprecated "should be able to load dialects based on the database name" do
271
- begin
272
- qi = class Sequel::Database; @quote_identifiers; end
273
- ii = class Sequel::Database; @identifier_input_method; end
274
- io = class Sequel::Database; @identifier_output_method; end
275
- Sequel.quote_identifiers = nil
276
- class Sequel::Database; @identifier_input_method=nil; end
277
- class Sequel::Database; @identifier_output_method=nil; end
278
- Sequel.mock(:host=>'access').select(Date.new(2011, 12, 13)).sql.must_equal 'SELECT #2011-12-13#'
279
- Sequel.mock(:host=>'db2').select(1).sql.must_equal 'SELECT 1 FROM "SYSIBM"."SYSDUMMY1"'
280
- Sequel.mock(:host=>'mssql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM [A] WHERE (CONTAINS ([B], 'c'))"
281
- Sequel.mock(:host=>'mysql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM `a` WHERE (MATCH (`b`) AGAINST ('c'))"
282
- Sequel.mock(:host=>'oracle')[:a].limit(1).sql.must_equal 'SELECT * FROM (SELECT * FROM "A") "T1" WHERE (ROWNUM <= 1)'
283
- Sequel.mock(:host=>'postgres')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM \"a\" WHERE (to_tsvector(CAST('simple' AS regconfig), (COALESCE(\"b\", ''))) @@ to_tsquery(CAST('simple' AS regconfig), 'c'))"
284
- Sequel.mock(:host=>'sqlanywhere').from(:a).offset(1).sql.must_equal 'SELECT TOP 2147483647 START AT (1 + 1) * FROM "A"'
285
- Sequel.mock(:host=>'sqlite')[:a___b].sql.must_equal "SELECT * FROM `a` AS 'b'"
286
- ensure
287
- Sequel.quote_identifiers = qi
288
- Sequel::Database.send(:instance_variable_set, :@identifier_input_method, ii)
289
- Sequel::Database.send(:instance_variable_set, :@identifier_output_method, io)
290
- end
291
- end
292
- end
293
-
294
- describe Sequel::Model, ".[] optimization" do
295
- before do
296
- @db = Sequel.mock(:identifier_mangling=>true, :quote_identifiers=>true)
297
- def @db.schema(*) [[:id, {:primary_key=>true}]] end
298
- def @db.supports_schema_parsing?() true end
299
- @c = Class.new(Sequel::Model(@db))
300
- @ds = @db.dataset.with_quote_identifiers(true)
301
- end
302
-
303
- deprecated "should have simple_pk and simple_table respect dataset's identifier input methods" do
304
- ds = @db.from(:ab).with_identifier_input_method(:reverse)
305
- @c.set_dataset ds
306
- @c.simple_table.must_equal '"ba"'
307
- @c.set_primary_key :cd
308
- @c.simple_pk.must_equal '"dc"'
309
-
310
- @c.set_dataset ds.from(:ef__gh)
311
- @c.simple_table.must_equal '"fe"."hg"'
312
- end
313
- end
314
-
@@ -1,40 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "Sequel::Plugins::BeforeAfterSave" do
4
- before do
5
- @db = Sequel.mock(:numrows=>1, :fetch=>{:id=>1, :name=>'b'})
6
- @c = Class.new(Sequel::Model(@db[:test]))
7
- @ds = @c.dataset
8
- @c.columns :id, :name
9
- @c.plugin :before_after_save
10
- @c.plugin :instance_hooks
11
- @o = @c.new
12
- @db.sqls
13
- end
14
-
15
- it "should reset modified flag before calling after hooks" do
16
- a = []
17
- @o.after_create_hook{@o.modified?.must_equal false; a << 1}
18
- @o.after_save_hook{@o.modified?.must_equal false; a << 2}
19
-
20
- @o.modified!
21
- @o.save
22
- a.must_equal [1, 2]
23
-
24
- @o.after_save_hook{@o.modified?.must_equal false; a << 2}
25
- @o.after_update_hook{@o.modified?.must_equal false; a << 3}
26
- a = []
27
- @o.modified!
28
- @o.save
29
- a.must_equal [3, 2]
30
- end
31
-
32
- it "should refresh the instance before calling after hooks" do
33
- a = []
34
- @o.after_create_hook{@o.values.must_equal(:id=>1, :name=>'b'); a << 1}
35
- @o.after_save_hook{@o.values.must_equal(:id=>1, :name=>'b'); a << 2}
36
-
37
- @o.save
38
- a.must_equal [1, 2]
39
- end
40
- end
@@ -1,42 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "filter_having extension" do
4
- before do
5
- deprecated do
6
- @ds = Sequel.mock[:t].extension(:filter_having)
7
- end
8
- @dsh = @ds.having(:a)
9
- end
10
-
11
- it "should make filter operate on HAVING clause if dataset has a HAVING clause" do
12
- @dsh.filter(:b).sql.must_equal 'SELECT * FROM t HAVING (a AND b)'
13
- end
14
-
15
- it "should make filter operate on WHERE clause if dataset does not have a HAVING clause" do
16
- @ds.filter(:b).sql.must_equal 'SELECT * FROM t WHERE b'
17
- end
18
-
19
- deprecated "should make and operate on HAVING clause if dataset has a HAVING clause" do
20
- @dsh.and(:b).sql.must_equal 'SELECT * FROM t HAVING (a AND b)'
21
- end
22
-
23
- deprecated "should make and operate on WHERE clause if dataset does not have a HAVING clause" do
24
- @ds.where(:a).and(:b).sql.must_equal 'SELECT * FROM t WHERE (a AND b)'
25
- end
26
-
27
- it "should make or operate on HAVING clause if dataset has a HAVING clause" do
28
- @dsh.or(:b).sql.must_equal 'SELECT * FROM t HAVING (a OR b)'
29
- end
30
-
31
- it "should make or operate on WHERE clause if dataset does not have a HAVING clause" do
32
- @ds.where(:a).or(:b).sql.must_equal 'SELECT * FROM t WHERE (a OR b)'
33
- end
34
-
35
- it "should make exclude operate on HAVING clause if dataset has a HAVING clause" do
36
- @dsh.exclude(:b).sql.must_equal 'SELECT * FROM t HAVING (a AND NOT b)'
37
- end
38
-
39
- it "should make exclude operate on WHERE clause if dataset does not have a HAVING clause" do
40
- @ds.exclude(:b).sql.must_equal 'SELECT * FROM t WHERE NOT b'
41
- end
42
- end
@@ -1,21 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "from_block extension" do
4
- before do
5
- @db = Sequel.mock
6
- @db.extension(:from_block)
7
- end
8
-
9
- it "should make Database#from blocks apply to FROM" do
10
- @db.from{f}.sql.must_equal 'SELECT * FROM f'
11
- @db.from{[f, g(f)]}.sql.must_equal 'SELECT * FROM f, g(f)'
12
- end
13
-
14
- it "should handle from blocks with method arguments" do
15
- @db.from(:f){g(f)}.sql.must_equal 'SELECT * FROM f, g(f)'
16
- end
17
-
18
- it "should handle from without block" do
19
- @db.from(:f).sql.must_equal 'SELECT * FROM f'
20
- end
21
- end
@@ -1,26 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "hash_aliases extension" do
4
- before do
5
- deprecated do
6
- @ds = Sequel.mock.dataset.extension(:hash_aliases)
7
- end
8
- end
9
-
10
- it "should make from treat hash arguments as alias specifiers" do
11
- @ds.from(:a=>:b).sql.must_equal "SELECT * FROM a AS b"
12
- end
13
-
14
- it "should not affect other arguments to from" do
15
- @ds.from(:a, :b).sql.must_equal "SELECT * FROM a, b"
16
- end
17
-
18
- it "should make select treat hash arguments as alias specifiers" do
19
- @ds.select(:a=>:b).sql.must_equal "SELECT a AS b"
20
- @ds.select{{:a=>:b}}.sql.must_equal "SELECT a AS b"
21
- end
22
-
23
- it "should not affect other arguments to select" do
24
- @ds.select(:a, :b).sql.must_equal "SELECT a, b"
25
- end
26
- end
@@ -1,19 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "identifier_columns plugin" do
4
- before do
5
- @db = Sequel.mock(:numrows=>1, :fetch=>{:id=>1, :a__b=>2}, :autoid=>1)
6
- @c = Class.new(Sequel::Model(@db[:test]))
7
- @ds = @c.dataset
8
- @c.columns :id, :a__b
9
- deprecated do
10
- @c.plugin :identifier_columns
11
- end
12
- @db.sqls
13
- end
14
-
15
- it "should not use qualification when updating or inserting values" do
16
- @c.create(:a__b=>2).save
17
- @db.sqls.must_equal ["INSERT INTO test (a__b) VALUES (2)", "SELECT * FROM test WHERE (id = 1) LIMIT 1", "UPDATE test SET a__b = 2 WHERE (id = 1)"]
18
- end
19
- end