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,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
@@ -1,35 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "Sequel::Metaprogramming" do
4
- before do
5
- deprecated do
6
- Sequel.extension :meta_def
7
- end
8
- end
9
- after do
10
- Sequel::Metaprogramming.send(:remove_method, :meta_def)
11
- end
12
-
13
- it "should add meta_def method to Database, Dataset, and Model classes and instances" do
14
- Sequel::Database.meta_def(:foo){1}
15
- Sequel::Database.foo.must_equal 1
16
- Sequel::Dataset.meta_def(:foo){2}
17
- Sequel::Dataset.foo.must_equal 2
18
- Sequel::Model.meta_def(:foo){3}
19
- Sequel::Model.foo.must_equal 3
20
- o = Sequel::Database.new
21
- o.meta_def(:foo){4}
22
- o.foo.must_equal 4
23
-
24
- o = o[:a]
25
- # SEQUEL5: Remove
26
- unless o.frozen?
27
- o.meta_def(:foo){5}
28
- o.foo.must_equal 5
29
- end
30
-
31
- o = Sequel::Model.new
32
- o.meta_def(:foo){6}
33
- o.foo.must_equal 6
34
- end
35
- end
@@ -1,69 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe "no_auto_literal_strings extension" do
4
- before do
5
- @ds = Sequel.mock[:t].extension(:no_auto_literal_strings)
6
- end
7
-
8
- it "should raise exception for plain strings in filter methods" do
9
- proc{@ds.where("a")}.must_raise Sequel::Error
10
- proc{@ds.having("a")}.must_raise Sequel::Error
11
- proc{@ds.filter("a")}.must_raise Sequel::Error
12
- proc{@ds.exclude_having("a")}.must_raise Sequel::Error
13
- deprecated do
14
- proc{@ds.exclude_where("a")}.must_raise Sequel::Error
15
- proc{@ds.and("a")}.must_raise Sequel::Error
16
- end
17
- proc{@ds.where(:a).or("a")}.must_raise Sequel::Error
18
- proc{@ds.first("a")}.must_raise Sequel::Error
19
- proc{@ds.order(:a).last("a")}.must_raise Sequel::Error
20
- proc{@ds["a"]}.must_raise Sequel::Error
21
- end
22
-
23
- it "should raise exception for plain strings arrays in filter methods" do
24
- proc{@ds.where(["a"])}.must_raise Sequel::Error
25
- end
26
-
27
- it "should handle explicit literal strings in filter methods" do
28
- @ds.where(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a)'
29
- @ds.having(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t HAVING (a)'
30
- @ds.filter(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a)'
31
- @ds.exclude_having(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t HAVING NOT (a)'
32
- deprecated do
33
- @ds.exclude_where(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE NOT (a)'
34
- @ds.and(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a)'
35
- end
36
- @ds.where(:a).or(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a OR (a))'
37
- @ds.first(Sequel.lit("a"))
38
- @ds.order(:a).last(Sequel.lit("a"))
39
- @ds[Sequel.lit("a")]
40
- @ds.db.sqls.must_equal ["SELECT * FROM t WHERE (a) LIMIT 1",
41
- "SELECT * FROM t WHERE (a) ORDER BY a DESC LIMIT 1",
42
- "SELECT * FROM t WHERE (a) LIMIT 1"]
43
- end
44
-
45
- deprecated "should handle literal strings in arrays in filter methods" do
46
- @ds.where([Sequel.lit("a")]).sql.must_equal 'SELECT * FROM t WHERE (a)'
47
- end
48
-
49
- it "should handle other objects in filter methods" do
50
- @ds.where(:a).sql.must_equal 'SELECT * FROM t WHERE a'
51
- end
52
-
53
- it "should raise exception for plain strings in update methods" do
54
- proc{@ds.update("a = a + 1")}.must_raise Sequel::Error
55
- proc{@ds.update_sql("a = a + 1")}.must_raise Sequel::Error
56
- end
57
-
58
- it "should handle explicit literal strings in update methods" do
59
- @ds.update_sql(Sequel.lit("a = a + 1")).must_equal "UPDATE t SET a = a + 1"
60
- @ds.update(Sequel.lit("a = a + 1"))
61
- @ds.db.sqls.must_equal ["UPDATE t SET a = a + 1"]
62
- end
63
-
64
- it "should handle other objects in update methods" do
65
- @ds.update_sql(:a=>:a).must_equal "UPDATE t SET a = a"
66
- @ds.update(:a=>:a)
67
- @ds.db.sqls.must_equal ["UPDATE t SET a = a"]
68
- end
69
- end
@@ -1,70 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe Sequel::Model, "PgTypecastOnLoad plugin" do
4
- before do
5
- @db = Sequel.mock(:host=>'postgres', :fetch=>{:id=>1, :b=>"t", :y=>"0"}, :columns=>[:id, :b, :y], :numrows=>1)
6
- def @db.schema(*args)
7
- [[:id, {}], [:b, {:type=>:boolean, :oid=>16}], [:y, {:type=>:integer, :oid=>20}]]
8
- end
9
- @c = Class.new(Sequel::Model(@db[:items]))
10
- deprecated do
11
- @c.plugin :pg_typecast_on_load, :b, :y
12
- end
13
- end
14
-
15
- deprecated "should call the database conversion proc for all given columns" do
16
- @c.first.values.must_equal(:id=>1, :b=>true, :y=>0)
17
- end
18
-
19
- deprecated "should call the database conversion proc with value when reloading the object, for all given columns" do
20
- @c.first.refresh.values.must_equal(:id=>1, :b=>true, :y=>0)
21
- end
22
-
23
- deprecated "should not fail if schema oid does not have a related conversion proc" do
24
- @c.db_schema[:b][:oid] = 0
25
- @c.first.refresh.values.must_equal(:id=>1, :b=>"t", :y=>0)
26
- end
27
-
28
- deprecated "should call the database conversion proc with value when automatically reloading the object on creation via insert_select" do
29
- @c.dataset = @c.dataset.with_extend{def insert_select(h) insert(h); first end}
30
- @c.create.values.must_equal(:id=>1, :b=>true, :y=>0)
31
- end
32
-
33
- deprecated "should allowing setting columns separately via add_pg_typecast_on_load_columns" do
34
- @c = Class.new(Sequel::Model(@db[:items]))
35
- @c.plugin :pg_typecast_on_load
36
- @c.first.values.must_equal(:id=>1, :b=>"t", :y=>"0")
37
- @c.add_pg_typecast_on_load_columns :b
38
- @c.first.values.must_equal(:id=>1, :b=>true, :y=>"0")
39
- @c.add_pg_typecast_on_load_columns :y
40
- @c.first.values.must_equal(:id=>1, :b=>true, :y=>0)
41
- end
42
-
43
- deprecated "should work with subclasses" do
44
- @c = Class.new(Sequel::Model(@db[:items]))
45
- @c.plugin :pg_typecast_on_load
46
- @c.first.values.must_equal(:id=>1, :b=>"t", :y=>"0")
47
-
48
- c1 = Class.new(@c)
49
- @c.add_pg_typecast_on_load_columns :b
50
- @c.first.values.must_equal(:id=>1, :b=>true, :y=>"0")
51
- c1.first.values.must_equal(:id=>1, :b=>"t", :y=>"0")
52
-
53
- c2 = Class.new(@c)
54
- @c.add_pg_typecast_on_load_columns :y
55
- @c.first.values.must_equal(:id=>1, :b=>true, :y=>0)
56
- c2.first.values.must_equal(:id=>1, :b=>true, :y=>"0")
57
-
58
- c1.add_pg_typecast_on_load_columns :y
59
- c1.first.values.must_equal(:id=>1, :b=>"t", :y=>0)
60
- end
61
-
62
- deprecated "should not mark the object as modified" do
63
- @c.first.modified?.must_equal false
64
- end
65
-
66
- deprecated "should freeze pg_typecast_on_load_columns" do
67
- @c.freeze
68
- @c.pg_typecast_on_load_columns.frozen?.must_equal true
69
- end
70
- end