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,12 +1,8 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "pg_array extension" do
4
4
  before(:all) do
5
5
  Sequel.extension :pg_array
6
- @pg_types = Sequel::Postgres::PG__TYPES.dup # SEQUEL5: Remove
7
- end
8
- after(:all) do
9
- Sequel::Postgres::PG__TYPES.replace(@pg_types) # SEQUEL5: Remove
10
6
  end
11
7
 
12
8
  before do
@@ -37,7 +33,7 @@ describe "pg_array extension" do
37
33
  it "should preserve encoding when parsing text arrays" do
38
34
  c = @converter[1009]
39
35
  c.call("{a,\u00E4}".encode('ISO-8859-1')).map(&:encoding).must_equal [Encoding::ISO_8859_1, Encoding::ISO_8859_1]
40
- end if RUBY_VERSION >= '1.9'
36
+ end
41
37
 
42
38
  it "should parse multi-dimensional text arrays" do
43
39
  c = @converter[1009]
@@ -261,17 +257,6 @@ describe "pg_array extension" do
261
257
  @db.select(Sequel.pg_array([1], :integer).as(:col1)).sql.must_equal 'SELECT ARRAY[1]::integer[] AS col1'
262
258
  end
263
259
 
264
- deprecated "should support registering custom array types" do
265
- Sequel::Postgres::PGArray.register('foo')
266
- @db.typecast_value(:foo_array, []).class.must_equal(Sequel::Postgres::PGArray)
267
- @db.fetch = [{:name=>'id', :db_type=>'foo[]'}]
268
- @db.schema(:items).map{|e| e[1][:type]}.must_equal [:foo_array]
269
- end
270
-
271
- deprecated "should raise error if register given convertor option and block" do
272
- proc{Sequel::Postgres::PGArray.register('foo', :converter=>:to_s.to_proc, &:to_s)}.must_raise Sequel::Error
273
- end
274
-
275
260
  it "should support registering custom array types" do
276
261
  @db.register_array_type('foo')
277
262
  @db.typecast_value(:foo_array, []).class.must_equal(Sequel::Postgres::PGArray)
@@ -301,20 +286,6 @@ describe "pg_array extension" do
301
286
  @db.conversion_procs[1234].call('{t}').must_equal [true]
302
287
  end
303
288
 
304
- deprecated "should support using a given conversion procs hash via the :type_procs option" do
305
- h = {16=>proc{|s| "!#{s}"}}
306
- Sequel::Postgres::PGArray.register('foo', :oid=>1234, :scalar_oid=>16, :type_procs=>h)
307
- h[1234].call('{t}').must_equal ["!t"]
308
- end
309
-
310
- deprecated "should support adding methods to the given module via the :typecast_methods_module option" do
311
- m = Module.new
312
- Sequel::Postgres::PGArray.register('foo15', :scalar_typecast=>:boolean, :typecast_methods_module=>m)
313
- @db.typecast_value(:foo15_array, ['t']).must_equal ['t']
314
- @db.extend(m)
315
- @db.typecast_value(:foo15_array, ['t']).must_equal [true]
316
- end
317
-
318
289
  it "should not raise an error if using :scalar_oid option with unexisting scalar conversion proc" do
319
290
  @db.register_array_type('foo', :oid=>1234, :scalar_oid=>0)
320
291
  @db.conversion_procs[1234].call('{t}').must_equal ["t"]
@@ -394,7 +365,7 @@ describe "pg_array extension" do
394
365
  end
395
366
 
396
367
  it "should set appropriate timestamp conversion procs when adding conversion procs" do
397
- @db.fetch = [[{:oid=>2222, :typname=>'foo'}], [{:oid=>2222, :typarray=>2223, :typname=>'foo'}]]
368
+ @db.fetch = [[{:oid=>2222}], [{:oid=>2222, :typarray=>2223}]]
398
369
  @db.add_named_conversion_proc(:foo){|v| v*2}
399
370
  procs = @db.conversion_procs
400
371
  procs[1185].call('{"2011-10-20 11:12:13"}').must_equal [Time.local(2011, 10, 20, 11, 12, 13)]
@@ -403,22 +374,6 @@ describe "pg_array extension" do
403
374
  procs[2223].call('{"2"}').must_equal ['22']
404
375
  end
405
376
 
406
- deprecated "should set appropriate timestamp conversion procs when resetting conversion procs when modifying PG_NAMED_TYPES" do
407
- @pg_named_types = Sequel::Postgres::PG_NAMED_TYPES.dup
408
- begin
409
- Sequel::Postgres::PG_NAMED_TYPES[:foo] = proc{|v| v*2}
410
- @db.fetch = [[{:oid=>2222, :typname=>'foo'}], [{:oid=>2222, :typarray=>2223, :typname=>'foo'}]]
411
- @db.reset_conversion_procs
412
- procs = @db.conversion_procs
413
- procs[1185].call('{"2011-10-20 11:12:13"}').must_equal [Time.local(2011, 10, 20, 11, 12, 13)]
414
- procs[1115].call('{"2011-10-20 11:12:13"}').must_equal [Time.local(2011, 10, 20, 11, 12, 13)]
415
- procs[2222].call('1').must_equal '11'
416
- procs[2223].call('{"2"}').must_equal ['22']
417
- ensure
418
- Sequel::Postgres::PG_NAMED_TYPES.replace(@pg_named_types)
419
- end
420
- end
421
-
422
377
  it "should return correct results for Database#schema_type_class" do
423
378
  @db.register_array_type('banana', :oid=>7866, :scalar_typecast=>:integer){|s| s.to_i}
424
379
  @db.schema_type_class(:banana_array).must_equal Sequel::Postgres::PGArray
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :migration
4
4
 
@@ -0,0 +1,122 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe "pg_extended_date_support extension" do
4
+ before do
5
+ @db = Sequel.mock(:host=>'postgres', :fetch=>{:v=>1}).extension(:pg_extended_date_support)
6
+ @db.extend_datasets{def quote_identifiers?; false end}
7
+ end
8
+ after do
9
+ Sequel.datetime_class = Time
10
+ Sequel.default_timezone = nil
11
+ end
12
+
13
+ it "should convert infinite timestamps and dates as configured" do
14
+ cp = @db.conversion_procs
15
+ d = lambda{|v| cp[1082].call(v)}
16
+ t = lambda{|v| cp[1114].call(v)}
17
+ pi = 'infinity'
18
+ ni = '-infinity'
19
+ today = Date.today
20
+ now = Time.now
21
+
22
+ d.(today.to_s).must_equal today
23
+ t.(now.strftime("%Y-%m-%d %H:%M:%S.%N")).must_equal now
24
+ proc{@db.typecast_value(:date, pi)}.must_raise Sequel::InvalidValue
25
+ proc{@db.typecast_value(:datetime, pi)}.must_raise Sequel::InvalidValue
26
+
27
+ [:nil, 'nil'].each do |v|
28
+ @db.convert_infinite_timestamps = v
29
+ d.(pi).must_be_nil
30
+ t.(pi).must_be_nil
31
+ d.(ni).must_be_nil
32
+ t.(ni).must_be_nil
33
+ @db.typecast_value(:date, pi).must_equal pi
34
+ @db.typecast_value(:datetime, pi).must_equal pi
35
+ @db.typecast_value(:date, ni).must_equal ni
36
+ @db.typecast_value(:datetime, ni).must_equal ni
37
+ end
38
+
39
+ d.(today.to_s).must_equal today
40
+ t.(now.strftime("%Y-%m-%d %H:%M:%S.%N")).must_equal now
41
+ @db.typecast_value(:date, today.to_s).must_equal today
42
+ @db.typecast_value(:datetime, now.strftime("%Y-%m-%d %H:%M:%S.%N")).must_equal now
43
+
44
+ [:string, 'string'].each do |v|
45
+ @db.convert_infinite_timestamps = v
46
+ d.(pi).must_equal pi
47
+ t.(pi).must_equal pi
48
+ d.(ni).must_equal ni
49
+ t.(ni).must_equal ni
50
+ end
51
+
52
+ [:date, 'date'].each do |v|
53
+ @db.convert_infinite_timestamps = v
54
+ d.(pi).must_equal Date::Infinity.new
55
+ t.(pi).must_equal Date::Infinity.new
56
+ d.(ni).must_equal -Date::Infinity.new
57
+ t.(ni).must_equal -Date::Infinity.new
58
+ end
59
+
60
+ [:float, 'float', 't', true].each do |v|
61
+ @db.convert_infinite_timestamps = v
62
+ d.(pi).must_equal 1.0/0.0
63
+ t.(pi).must_equal 1.0/0.0
64
+ d.(ni).must_equal -1.0/0.0
65
+ t.(ni).must_equal -1.0/0.0
66
+ end
67
+
68
+ ['f', false].each do |v|
69
+ @db.convert_infinite_timestamps = v
70
+ proc{d.(pi)}.must_raise ArgumentError, Sequel::InvalidValue
71
+ proc{t.(pi)}.must_raise ArgumentError, Sequel::InvalidValue
72
+ proc{d.(ni)}.must_raise ArgumentError, Sequel::InvalidValue
73
+ proc{t.(ni)}.must_raise ArgumentError, Sequel::InvalidValue
74
+ end
75
+ end
76
+
77
+ it "should handle parsing BC dates" do
78
+ @db.conversion_procs[1082].call("1092-10-20 BC").must_equal Date.new(-1091, 10, 20)
79
+ end
80
+
81
+ it "should handle parsing BC timestamps as Time values" do
82
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00 BC").must_equal Time.at(-100000000000).utc
83
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00 BC").must_equal Time.at(-100000000000).utc
84
+ Sequel.default_timezone = :utc
85
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20 BC").must_equal Time.at(-100000000000).utc
86
+ Sequel.default_timezone = nil
87
+ end
88
+
89
+ it "should handle parsing BC timestamps as DateTime values" do
90
+ Sequel.datetime_class = DateTime
91
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00 BC").must_equal DateTime.new(-1199, 2, 15, 14, 13, 20)
92
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00 BC").must_equal DateTime.new(-1199, 2, 15, 14, 13, 20)
93
+ Sequel.default_timezone = :utc
94
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20 BC").must_equal DateTime.new(-1199, 2, 15, 14, 13, 20)
95
+ end
96
+
97
+ it "should handle parsing AD timestamps with offset seconds" do
98
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00").must_equal DateTime.new(1200, 2, 15, 14, 13, 20).to_time
99
+ Sequel.datetime_class = DateTime
100
+ @db.conversion_procs[1114].call("1200-02-15 14:13:20-00:00:00").must_equal DateTime.new(1200, 2, 15, 14, 13, 20)
101
+ end
102
+
103
+ it "should format Date::Infinity values" do
104
+ @db.literal(Date::Infinity.new).must_equal "'infinity'"
105
+ @db.literal(-Date::Infinity.new).must_equal "'-infinity'"
106
+ end
107
+
108
+ it "should format BC dates" do
109
+ @db.literal(Date.new(-1091, 10, 20)).must_equal "'1092-10-20 BC'"
110
+ @db.literal(Date.new(1092, 10, 20)).must_equal "'1092-10-20'"
111
+ end
112
+
113
+ it "should format BC datetimes" do
114
+ @db.literal(DateTime.new(-1199, 2, 15, 14, 13, 20)).must_equal "'1200-02-15 14:13:20.000000000+0000 BC'"
115
+ @db.literal(DateTime.new(1200, 2, 15, 14, 13, 20)).must_equal "'1200-02-15 14:13:20.000000+0000'"
116
+ end
117
+
118
+ it "should format BC times" do
119
+ @db.literal(Time.at(-100000000000).utc).must_equal "'1200-02-15 14:13:20.000000000+0000 BC'"
120
+ @db.literal(Time.at(100000000000).utc).must_equal "'5138-11-16 09:46:40.000000+0000'"
121
+ end
122
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "pg_hstore extension" do
4
4
  before do
@@ -32,18 +32,13 @@ describe "pg_hstore extension" do
32
32
  @db.literal(Sequel.hstore("c"=>nil)).must_equal '\'"c"=>NULL\'::hstore'
33
33
  @db.literal(Sequel.hstore("c"=>'NULL')).must_equal '\'"c"=>"NULL"\'::hstore'
34
34
  @db.literal(Sequel.hstore('c'=>'\ "\'=>')).must_equal '\'"c"=>"\\\\ \\"\'\'=>"\'::hstore'
35
- ['\'"a"=>"b","c"=>"d"\'::hstore', '\'"c"=>"d","a"=>"b"\'::hstore'].must_include(@db.literal(Sequel.hstore("a"=>"b","c"=>"d")))
35
+ @db.literal(Sequel.hstore("a"=>"b","c"=>"d")).must_equal '\'"a"=>"b","c"=>"d"\'::hstore'
36
36
  end
37
37
 
38
38
  it "should register conversion proc correctly" do
39
39
  @db.conversion_procs[9999].call('"a"=>"b"').must_equal('a'=>'b')
40
40
  end
41
41
 
42
- deprecated "should reregister conversion proc when resetting conversion procs" do
43
- @db.reset_conversion_procs
44
- @db.conversion_procs[9999].call('"a"=>"b"').must_equal('a'=>'b')
45
- end
46
-
47
42
  it "should have Sequel.hstore method for creating HStore instances" do
48
43
  Sequel.hstore({}).class.must_equal(@c)
49
44
  end
@@ -100,10 +95,8 @@ describe "pg_hstore extension" do
100
95
 
101
96
  Sequel.hstore('foo'=>'bar', '1'=>'2').values_at(:foo3, :foo, :foo2, 1).must_equal [nil, 'bar', nil, '2']
102
97
 
103
- if RUBY_VERSION >= '1.9.0'
104
- Sequel.hstore('foo'=>'bar').assoc(:foo).must_equal ['foo', 'bar']
105
- Sequel.hstore('foo'=>'bar').assoc(:foo2).must_be_nil
106
- end
98
+ Sequel.hstore('foo'=>'bar').assoc(:foo).must_equal ['foo', 'bar']
99
+ Sequel.hstore('foo'=>'bar').assoc(:foo2).must_be_nil
107
100
  end
108
101
 
109
102
  it "should convert has_value?/value? lookups to string" do
@@ -124,28 +117,26 @@ describe "pg_hstore extension" do
124
117
  Sequel.hstore('1'=>'bar').to_hash[1].must_equal 'bar'
125
118
  end
126
119
 
127
- if RUBY_VERSION >= '1.9.0'
128
- it "should convert key lookups to string" do
129
- Sequel.hstore('foo'=>'bar').key(:bar).must_equal 'foo'
130
- Sequel.hstore('foo'=>'bar').key(:bar2).must_be_nil
131
- end
120
+ it "should convert key lookups to string" do
121
+ Sequel.hstore('foo'=>'bar').key(:bar).must_equal 'foo'
122
+ Sequel.hstore('foo'=>'bar').key(:bar2).must_be_nil
123
+ end
132
124
 
133
- it "should handle nil values in key lookups" do
134
- Sequel.hstore('foo'=>'').key('').must_equal 'foo'
135
- Sequel.hstore('foo'=>'').key(nil).must_be_nil
136
- Sequel.hstore('foo'=>nil).key(nil).must_equal 'foo'
137
- end
125
+ it "should handle nil values in key lookups" do
126
+ Sequel.hstore('foo'=>'').key('').must_equal 'foo'
127
+ Sequel.hstore('foo'=>'').key(nil).must_be_nil
128
+ Sequel.hstore('foo'=>nil).key(nil).must_equal 'foo'
129
+ end
138
130
 
139
- it "should convert rassoc lookups to string" do
140
- Sequel.hstore('foo'=>'bar').rassoc(:bar).must_equal ['foo', 'bar']
141
- Sequel.hstore('foo'=>'bar').rassoc(:bar2).must_be_nil
142
- end
131
+ it "should convert rassoc lookups to string" do
132
+ Sequel.hstore('foo'=>'bar').rassoc(:bar).must_equal ['foo', 'bar']
133
+ Sequel.hstore('foo'=>'bar').rassoc(:bar2).must_be_nil
134
+ end
143
135
 
144
- it "should handle nil values in rassoc lookups" do
145
- Sequel.hstore('foo'=>'').rassoc('').must_equal ['foo', '']
146
- Sequel.hstore('foo'=>'').rassoc(nil).must_be_nil
147
- Sequel.hstore('foo'=>nil).rassoc(nil).must_equal ['foo', nil]
148
- end
136
+ it "should handle nil values in rassoc lookups" do
137
+ Sequel.hstore('foo'=>'').rassoc('').must_equal ['foo', '']
138
+ Sequel.hstore('foo'=>'').rassoc(nil).must_be_nil
139
+ Sequel.hstore('foo'=>nil).rassoc(nil).must_equal ['foo', nil]
149
140
  end
150
141
 
151
142
  it "should have delete convert key to string" do
@@ -187,7 +178,7 @@ describe "pg_hstore extension" do
187
178
  @db.bound_variable_arg(Sequel.hstore('1'=>nil), nil).must_equal '"1"=>NULL'
188
179
  @db.bound_variable_arg(Sequel.hstore('1'=>"NULL"), nil).must_equal '"1"=>"NULL"'
189
180
  @db.bound_variable_arg(Sequel.hstore('1'=>"'\\ \"=>"), nil).must_equal '"1"=>"\'\\\\ \\"=>"'
190
- ['"a"=>"b","c"=>"d"', '"c"=>"d","a"=>"b"'].must_include(@db.bound_variable_arg(Sequel.hstore("a"=>"b","c"=>"d"), nil))
181
+ @db.bound_variable_arg(Sequel.hstore("a"=>"b","c"=>"d"), nil).must_equal '"a"=>"b","c"=>"d"'
191
182
  end
192
183
 
193
184
  it "should parse hstore type from the schema correctly" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_inet_ops
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "pg_inet extension" do
4
4
  ipv6_broken = (IPAddr.new('::1'); false) rescue true
@@ -18,19 +18,6 @@ describe "pg_inet extension" do
18
18
  @db.literal(IPAddr.new('2001:4f8:3:ba:2e0:81ff:fe22:d1f1')).must_equal "'2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128'"
19
19
  end unless ipv6_broken
20
20
 
21
- deprecated "should set up conversion procs correctly" do
22
- cp = Sequel::Postgres::PG__TYPES
23
- cp[869].call("127.0.0.1").must_equal IPAddr.new('127.0.0.1')
24
- cp[650].call("127.0.0.1").must_equal IPAddr.new('127.0.0.1')
25
- end
26
-
27
- deprecated "should set up conversion procs for arrays correctly" do
28
- cp = Sequel::Postgres::PG__TYPES
29
- cp[1041].call("{127.0.0.1}").must_equal [IPAddr.new('127.0.0.1')]
30
- cp[651].call("{127.0.0.1}").must_equal [IPAddr.new('127.0.0.1')]
31
- cp[1040].call("{127.0.0.1}").must_equal ['127.0.0.1']
32
- end
33
-
34
21
  it "should set up conversion procs correctly" do
35
22
  cp = @db.conversion_procs
36
23
  cp[869].call("127.0.0.1").must_equal IPAddr.new('127.0.0.1')
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  begin
4
4
  require 'active_support/duration'
@@ -6,8 +6,8 @@ begin
6
6
  require 'active_support/gem_version'
7
7
  rescue LoadError
8
8
  end
9
- rescue LoadError => exc
10
- skip_warn "pg_interval plugin: can't load active_support/duration (#{exc.class}: #{exc})"
9
+ rescue LoadError
10
+ warn "Skipping test of pg_interval plugin: can't load active_support/duration"
11
11
  else
12
12
  describe "pg_interval extension" do
13
13
  before do
@@ -34,16 +34,6 @@ describe "pg_interval extension" do
34
34
  end
35
35
  end
36
36
 
37
- deprecated "should set up conversion procs correctly" do
38
- cp = Sequel::Postgres::PG__TYPES
39
- cp[1186].call("1 sec").must_equal ActiveSupport::Duration.new(1, [[:seconds, 1]])
40
- end
41
-
42
- deprecated "should set up conversion procs for arrays correctly" do
43
- cp = Sequel::Postgres::PG__TYPES
44
- cp[1187].call("{1 sec}").must_equal [ActiveSupport::Duration.new(1, [[:seconds, 1]])]
45
- end
46
-
47
37
  it "should set up conversion procs correctly" do
48
38
  cp = @db.conversion_procs
49
39
  cp[1186].call("1 sec").must_equal ActiveSupport::Duration.new(1, [[:seconds, 1]])
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_array, :pg_array_ops, :pg_json, :pg_json_ops
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_array, :pg_json
4
4
 
@@ -17,18 +17,6 @@ describe "pg_json extension" do
17
17
  @db.extension(:pg_array, :pg_json)
18
18
  end
19
19
 
20
- deprecated "should set up conversion procs correctly" do
21
- cp = Sequel::Postgres::PG__TYPES
22
- cp[114].call("{}").must_equal @hc.new({})
23
- cp[3802].call("{}").must_equal @bhc.new({})
24
- end
25
-
26
- deprecated "should set up conversion procs for arrays correctly" do
27
- cp = Sequel::Postgres::PG__TYPES
28
- cp[199].call("{[]}").must_equal [@ac.new([])]
29
- cp[3807].call("{[]}").must_equal [@bac.new([])]
30
- end
31
-
32
20
  it "should set up conversion procs correctly" do
33
21
  cp = @db.conversion_procs
34
22
  cp[114].call("{}").must_equal @hc.new({})
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "pg_loose_count extension" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_array, :pg_range, :pg_range_ops
4
4
 
@@ -1,13 +1,8 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
1
+ require_relative "spec_helper"
3
2
 
4
3
  describe "pg_range extension" do
5
4
  before(:all) do
6
5
  Sequel.extension :pg_array, :pg_range
7
- @pg_types = Sequel::Postgres::PG__TYPES.dup # SEQUEL5: Remove
8
- end
9
- after(:all) do
10
- Sequel::Postgres::PG__TYPES.replace(@pg_types) # SEQUEL5: Remove
11
6
  end
12
7
 
13
8
  before do
@@ -21,26 +16,6 @@ describe "pg_range extension" do
21
16
  @db.extension(:pg_array, :pg_range)
22
17
  end
23
18
 
24
- deprecated "should set up conversion procs correctly" do
25
- cp = Sequel::Postgres::PG__TYPES
26
- cp[3904].call("[1,2]").must_equal @R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'int4range')
27
- cp[3906].call("[1,2]").must_equal @R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'numrange')
28
- cp[3908].call("[2011-01-02 10:20:30,2011-02-03 10:20:30)").must_equal @R.new(Time.local(2011, 1, 2, 10, 20, 30),Time.local(2011, 2, 3, 10, 20, 30), :exclude_begin=>false, :exclude_end=>true, :db_type=>'tsrange')
29
- cp[3910].call("[2011-01-02 10:20:30,2011-02-03 10:20:30)").must_equal @R.new(Time.local(2011, 1, 2, 10, 20, 30),Time.local(2011, 2, 3, 10, 20, 30), :exclude_begin=>false, :exclude_end=>true, :db_type=>'tstzrange')
30
- cp[3912].call("[2011-01-02,2011-02-03)").must_equal @R.new(Date.new(2011, 1, 2),Date.new(2011, 2, 3), :exclude_begin=>false, :exclude_end=>true, :db_type=>'daterange')
31
- cp[3926].call("[1,2]").must_equal @R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'int8range')
32
- end
33
-
34
- deprecated "should set up conversion procs for arrays correctly" do
35
- cp = Sequel::Postgres::PG__TYPES
36
- cp[3905].call("{\"[1,2]\"}").must_equal [@R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'int4range')]
37
- cp[3907].call("{\"[1,2]\"}").must_equal [@R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'numrange')]
38
- cp[3909].call("{\"[2011-01-02 10:20:30,2011-02-03 10:20:30)\"}").must_equal [@R.new(Time.local(2011, 1, 2, 10, 20, 30),Time.local(2011, 2, 3, 10, 20, 30), :exclude_begin=>false, :exclude_end=>true, :db_type=>'tsrange')]
39
- cp[3911].call("{\"[2011-01-02 10:20:30,2011-02-03 10:20:30)\"}").must_equal [@R.new(Time.local(2011, 1, 2, 10, 20, 30),Time.local(2011, 2, 3, 10, 20, 30), :exclude_begin=>false, :exclude_end=>true, :db_type=>'tstzrange')]
40
- cp[3913].call("{\"[2011-01-02,2011-02-03)\"}").must_equal [@R.new(Date.new(2011, 1, 2),Date.new(2011, 2, 3), :exclude_begin=>false, :exclude_end=>true, :db_type=>'daterange')]
41
- cp[3927].call("{\"[1,2]\"}").must_equal [@R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'int8range')]
42
- end
43
-
44
19
  it "should set up conversion procs correctly" do
45
20
  cp = @db.conversion_procs
46
21
  cp[3904].call("[1,2]").must_equal @R.new(1,2, :exclude_begin=>false, :exclude_end=>false, :db_type=>'int4range')
@@ -171,50 +146,6 @@ describe "pg_range extension" do
171
146
  end
172
147
  end
173
148
 
174
- deprecated "should support registering custom range types" do
175
- @R.register('foorange')
176
- @db.typecast_value(:foorange, 1..2).must_be_kind_of(@R)
177
- @db.fetch = [{:name=>'id', :db_type=>'foorange'}]
178
- @db.schema(:items).map{|e| e[1][:type]}.must_equal [:foorange]
179
- end
180
-
181
- deprecated "should support using a block as a custom conversion proc given as block" do
182
- @R.register('foo2range'){|s| (s*2).to_i}
183
- @db.typecast_value(:foo2range, '[1,2]').must_be :==, (11..22)
184
- end
185
-
186
- deprecated "should support using a block as a custom conversion proc given as :converter option" do
187
- @R.register('foo3range', :converter=>proc{|s| (s*2).to_i})
188
- @db.typecast_value(:foo3range, '[1,2]').must_be :==, (11..22)
189
- end
190
-
191
- deprecated "should support using an existing scaler conversion proc via the :subtype_oid option" do
192
- @R.register('foo4range', :subtype_oid=>16)
193
- @db.typecast_value(:foo4range, '[t,f]').must_equal @R.new(true, false, :db_type=>'foo4range')
194
- end
195
-
196
- deprecated "should raise an error if using :subtype_oid option with unexisting scalar conversion proc" do
197
- proc{@R.register('fooirange', :subtype_oid=>0)}.must_raise(Sequel::Error)
198
- end
199
-
200
- deprecated "should raise an error if using :converter option and a block argument" do
201
- proc{@R.register('fooirange', :converter=>proc{}){}}.must_raise(Sequel::Error)
202
- end
203
-
204
- deprecated "should raise an error if using :subtype_oid option and a block argument" do
205
- proc{@R.register('fooirange', :subtype_oid=>16){}}.must_raise(Sequel::Error)
206
- end
207
-
208
- deprecated "should support registering custom types with :oid option" do
209
- @R.register('foo5range', :oid=>331)
210
- Sequel::Postgres::PG__TYPES[331].call('[1,3)').must_be_kind_of(@R)
211
- end
212
-
213
- deprecated "should not support registering custom range types on a per-Database basis for frozen databases" do
214
- @db.freeze
215
- proc{@db.register_range_type('banana', :oid=>7865){|s| s}}.must_raise RuntimeError, TypeError
216
- end
217
-
218
149
  it "should support registering custom range types" do
219
150
  @db.register_range_type('foorange')
220
151
  @db.typecast_value(:foorange, 1..2).must_be_kind_of(@R)
@@ -349,20 +280,6 @@ describe "pg_range extension" do
349
280
  end
350
281
  end
351
282
 
352
- deprecated "should set appropriate timestamp range conversion procs when resetting conversion procs" do
353
- @db.reset_conversion_procs
354
- procs = @db.conversion_procs
355
- procs[3908].call('[2011-10-20 11:12:13,2011-10-20 11:12:14]').must_be :==, (Time.local(2011, 10, 20, 11, 12, 13)..(Time.local(2011, 10, 20, 11, 12, 14)))
356
- procs[3910].call('[2011-10-20 11:12:13,2011-10-20 11:12:14]').must_be :==, (Time.local(2011, 10, 20, 11, 12, 13)..(Time.local(2011, 10, 20, 11, 12, 14)))
357
- end
358
-
359
- deprecated "should set appropriate timestamp range array conversion procs when resetting conversion procs" do
360
- @db.reset_conversion_procs
361
- procs = @db.conversion_procs
362
- procs[3909].call('{"[2011-10-20 11:12:13,2011-10-20 11:12:14]"}').must_be :==, [Time.local(2011, 10, 20, 11, 12, 13)..Time.local(2011, 10, 20, 11, 12, 14)]
363
- procs[3911].call('{"[2011-10-20 11:12:13,2011-10-20 11:12:14]"}').must_be :==, [Time.local(2011, 10, 20, 11, 12, 13)..Time.local(2011, 10, 20, 11, 12, 14)]
364
- end
365
-
366
283
  describe "a PGRange instance" do
367
284
  before do
368
285
  @r1 = @R.new(1, 2)
@@ -420,10 +337,8 @@ describe "pg_range extension" do
420
337
  it "should quack like a range" do
421
338
  @r1.cover?(1.5).must_equal true
422
339
  @r1.cover?(2.5).must_equal false
423
- if RUBY_VERSION >= '1.9'
424
- @r1.first(1).must_equal [1]
425
- @r1.last(1).must_equal [2]
426
- end
340
+ @r1.first(1).must_equal [1]
341
+ @r1.last(1).must_equal [2]
427
342
  @r1.to_a.must_equal [1, 2]
428
343
  @r1.first.must_equal 1
429
344
  @r1.last.must_equal 2
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_array, :pg_array_ops, :pg_row, :pg_row_ops
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Sequel::Plugins::PgRow" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "pg_row extension" do
4
4
  before do
@@ -9,16 +9,6 @@ describe "pg_row extension" do
9
9
  @db.sqls
10
10
  end
11
11
 
12
- deprecated "should parse record objects as arrays" do
13
- a = Sequel::Postgres::PG__TYPES[2249].call("(a,b,c)")
14
- a.class.must_equal(@m::ArrayRow)
15
- a.to_a.must_be_kind_of(Array)
16
- a[0].must_equal 'a'
17
- a.must_equal %w'a b c'
18
- a.db_type.must_be_nil
19
- @db.literal(a).must_equal "ROW('a', 'b', 'c')"
20
- end
21
-
22
12
  it "should parse record objects as arrays" do
23
13
  a = @db.conversion_procs[2249].call("(a,b,c)")
24
14
  a.class.must_equal(@m::ArrayRow)
@@ -145,30 +135,6 @@ describe "pg_row extension" do
145
135
  p.column_converters.must_equal [Array]
146
136
  end
147
137
 
148
- deprecated "should reload registered row types when reseting conversion procs" do
149
- db = Sequel.mock(:host=>'postgres')
150
- db.extend_datasets{def quote_identifiers?; false end}
151
- db.extension(:pg_row)
152
- db.conversion_procs[4] = proc{|s| s.to_i}
153
- db.conversion_procs[5] = proc{|s| s * 2}
154
- db.sqls
155
- db.fetch = [[{:oid=>1, :typrelid=>2, :typarray=>3}], [{:attname=>'bar', :atttypid=>4}, {:attname=>'baz', :atttypid=>5}]]
156
- db.register_row_type(:foo)
157
- db.sqls.must_equal ["SELECT pg_type.oid, typrelid, typarray FROM pg_type WHERE ((typtype = 'c') AND (typname = 'foo')) LIMIT 1",
158
- "SELECT attname, (CASE pg_type.typbasetype WHEN 0 THEN atttypid ELSE pg_type.typbasetype END) AS atttypid FROM pg_attribute INNER JOIN pg_type ON (pg_type.oid = pg_attribute.atttypid) WHERE ((attrelid = 2) AND (attnum > 0) AND NOT attisdropped) ORDER BY attnum"]
159
-
160
- begin
161
- pgnt = Sequel::Postgres::PG_NAMED_TYPES.dup
162
- Sequel::Postgres::PG_NAMED_TYPES.clear
163
- db.fetch = [[{:oid=>1, :typrelid=>2, :typarray=>3}], [{:attname=>'bar', :atttypid=>4}, {:attname=>'baz', :atttypid=>5}]]
164
- db.reset_conversion_procs
165
- db.sqls.must_equal ["SELECT pg_type.oid, typrelid, typarray FROM pg_type WHERE ((typtype = 'c') AND (typname = 'foo')) LIMIT 1",
166
- "SELECT attname, (CASE pg_type.typbasetype WHEN 0 THEN atttypid ELSE pg_type.typbasetype END) AS atttypid FROM pg_attribute INNER JOIN pg_type ON (pg_type.oid = pg_attribute.atttypid) WHERE ((attrelid = 2) AND (attnum > 0) AND NOT attisdropped) ORDER BY attnum"]
167
- ensure
168
- Sequel::Postgres::PG_NAMED_TYPES.replace pgnt
169
- end
170
- end
171
-
172
138
  it "should handle ArrayRows and HashRows in bound variables" do
173
139
  @db.bound_variable_arg(1, nil).must_equal 1
174
140
  @db.bound_variable_arg(@m::ArrayRow.call(["1", "abc\\'\","]), nil).must_equal '("1","abc\\\\\'\\",")'
@@ -302,15 +268,6 @@ describe "pg_row extension" do
302
268
  @db.typecast_value(:pg_row_foo, 'bar'=>'1', 'baz'=>'b').must_equal(:bar=>1, :baz=>'bb')
303
269
  end
304
270
 
305
- deprecated "should handle conversion procs that aren't added until later" do
306
- @db.conversion_procs[5] = proc{|s| s * 2}
307
- @db.fetch = [[{:oid=>1, :typrelid=>2, :typarray=>3}], [{:attname=>'bar', :atttypid=>4}, {:attname=>'baz', :atttypid=>5}]]
308
- c = proc{|h| [h]}
309
- @db.register_row_type(:foo, :converter=>c)
310
- @db.conversion_procs[4] = proc{|s| s.to_i}
311
- @db.conversion_procs[1].call('(1,b)').must_equal [{:bar=>1, :baz=>'bb'}]
312
- end
313
-
314
271
  it "should handle nil values when converting columns" do
315
272
  @db.conversion_procs[5] = proc{|s| s * 2}
316
273
  @db.fetch = [[{:oid=>1, :typrelid=>2, :typarray=>3}], [{:attname=>'bar', :atttypid=>4}]]
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "pg_static_cache_updater extension" do
4
4
  before do