sequel 4.49.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,86 +1,4 @@
1
1
  # frozen-string-literal: true
2
- #
3
- # The no_auto_literal_strings extension removes Sequel's automatic conversion
4
- # of strings to literal strings in the dataset filter methods. By default,
5
- # Sequel considers a string passed to a filter method as a literal string:
6
- #
7
- # DB[:table].where("name > 'A'")
8
- #
9
- # This is fine, except when the string is derived from user input:
10
- #
11
- # DB[:table].where("name > '#{params[:user]}'") # SQL Injection!
12
- #
13
- # Sequel does support using placeholders for such strings:
14
- #
15
- # DB[:table].where("name > ?", params[:user].to_s) # Safe
16
- #
17
- # However, if you forget to user placeholders, and pass a string to a filter
18
- # method that is derived from user input, you open yourself up to SQL injection.
19
- # With this extension, using a plain string in a filter method will result
20
- # in an exception being raised. You either need to explicitly use a literal
21
- # string:
22
- #
23
- # DB[:table].where(Sequel.lit("name > ?", params[:user].to_s))
24
- #
25
- # or you need to construct the same SQL using a non-string based approach:
26
- #
27
- # DB[:table].where{|o| o.name > params[:user].to_s}
28
- #
29
- # Note that as listed in Sequel's security guide, a large number of dataset
30
- # methods call down to a filtering method, and this protects all of those
31
- # cases.
32
- #
33
- # This extension also protects the use of a plain string passed to Dataset#update:
34
- #
35
- # DB[:table].update("column = column + 1")
36
- #
37
- # Again, you either need to explicitly use a literal string:
38
- #
39
- # DB[:table].update(Sequel.lit("column = column + 1"))
40
- #
41
- # or construct the same SQL using a non-string based approach:
42
- #
43
- # DB[:table].update(:column => Sequel[:column] + 1)
44
- #
45
- # Related module: Sequel::Dataset::NoAutoLiteralStrings
46
2
 
47
- #
48
- module Sequel
49
- class Dataset
50
- module NoAutoLiteralStrings
51
- # Raise an error if passing a plain string or an array whose first
52
- # entry is a plain string.
53
- def filter_expr(expr = nil)
54
- case expr
55
- when LiteralString
56
- super
57
- when String
58
- raise Error, "plain string passed to a dataset filtering method"
59
- when Array
60
- if expr.first.is_a?(String) && !expr.first.is_a?(LiteralString)
61
- raise Error, "plain string passed to a dataset filtering method"
62
- end
63
- super
64
- else
65
- super
66
- end
67
- end
68
-
69
- # Raise an error if passing a plain string.
70
- def update_sql(values=OPTS)
71
- case values
72
- when LiteralString
73
- super
74
- when String
75
- raise Error, "plain string passed to a dataset filtering method"
76
- else
77
- super
78
- end
79
- end
80
- end
81
-
82
- register_extension(:no_auto_literal_strings, NoAutoLiteralStrings)
83
- end
84
- end
85
-
86
- # Sequel::Dataset.register_extension(:no_auto_literal_strings){} # SEQUEL5
3
+ Sequel::Database.register_extension(:no_auto_literal_strings){}
4
+ Sequel::Dataset.register_extension(:no_auto_literal_strings){}
@@ -13,7 +13,7 @@
13
13
  #
14
14
  # Usage:
15
15
  #
16
- # ds = DB[:items].nullify.where(:a=>:b).select(:c)
16
+ # ds = DB[:items].nullify.where(a: :b).select(:c)
17
17
  # ds.sql # => "SELECT c FROM items WHERE (a = b)"
18
18
  # ds.all # => [] # no query sent to the database
19
19
  #
@@ -41,13 +41,7 @@ module Sequel
41
41
  module Nullifiable
42
42
  # Return a cloned nullified dataset.
43
43
  def nullify
44
- clone.with_extend(NullDataset)
45
- end
46
-
47
- # Nullify the current dataset
48
- def nullify!
49
- Sequel::Deprecation.deprecate("Dataset#nullify! from the null_dataset extension", "Use Dataset#nullify, which returned a modified copy")
50
- extend NullDataset
44
+ with_extend(NullDataset)
51
45
  end
52
46
  end
53
47
 
@@ -64,10 +64,8 @@ module Sequel
64
64
 
65
65
  class Dataset
66
66
  # Holds methods that only relate to paginated datasets. Paginated dataset
67
- # have pages starting at 1 (page 1 is offset 0, page 1 is offset page_size).
67
+ # have pages starting at 1 (page 1 is offset 0, page 2 is offset 1 * page_size).
68
68
  module Pagination
69
- Sequel::Dataset.def_deprecated_opts_setter(self, :page_size, :page_count, :current_page, :pagination_record_count)
70
-
71
69
  # The number of records per page (the final page may have fewer than
72
70
  # this number of records).
73
71
  def page_size
@@ -135,20 +133,6 @@ module Sequel
135
133
  def prev_page
136
134
  current_page > 1 ? (current_page - 1) : nil
137
135
  end
138
-
139
- # SEQUEL5: Remove
140
- # :nocov:
141
- def set_pagination_info(page_no, page_size, record_count)
142
- Sequel::Deprecation.deprecate("Dataset#set_pagination_info", "It should no longer be necessary to call this method")
143
- self.current_page = page_no
144
- self.page_size = page_size
145
- self.pagination_record_count = record_count
146
- page_count = (record_count / page_size.to_f).ceil
147
- page_count = 1 if page_count == 0
148
- self.page_count = page_count
149
- self
150
- end
151
- # :nocov:
152
136
  end
153
137
  end
154
138
 
@@ -32,7 +32,7 @@
32
32
  #
33
33
  # So if you want to insert an array into an integer[] database column:
34
34
  #
35
- # DB[:table].insert(:column=>Sequel.pg_array([1, 2, 3]))
35
+ # DB[:table].insert(column: Sequel.pg_array([1, 2, 3]))
36
36
  #
37
37
  # To use this extension, first load it into your Sequel::Database instance:
38
38
  #
@@ -71,7 +71,6 @@
71
71
 
72
72
  require 'delegate'
73
73
  require 'strscan'
74
- Sequel.require 'adapters/shared/postgres'
75
74
 
76
75
  module Sequel
77
76
  module Postgres
@@ -79,108 +78,16 @@ module Sequel
79
78
  class PGArray < DelegateClass(Array)
80
79
  include Sequel::SQL::AliasMethods
81
80
 
82
- ARRAY = "ARRAY".freeze
83
- Sequel::Deprecation.deprecate_constant(self, :ARRAY)
84
- DOUBLE_COLON = '::'.freeze
85
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_COLON)
86
- EMPTY_ARRAY = "'{}'".freeze
87
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_ARRAY)
88
- EMPTY_BRACKET = '[]'.freeze
89
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_BRACKET)
90
- OPEN_BRACKET = '['.freeze
91
- Sequel::Deprecation.deprecate_constant(self, :OPEN_BRACKET)
92
- CLOSE_BRACKET = ']'.freeze
93
- Sequel::Deprecation.deprecate_constant(self, :CLOSE_BRACKET)
94
- COMMA = ','.freeze
95
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
96
- BACKSLASH = '\\'.freeze
97
- Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
98
- EMPTY_STRING = ''.freeze
99
- Sequel::Deprecation.deprecate_constant(self, :EMPTY_STRING)
100
- OPEN_BRACE = '{'.freeze
101
- Sequel::Deprecation.deprecate_constant(self, :OPEN_BRACE)
102
- CLOSE_BRACE = '}'.freeze
103
- Sequel::Deprecation.deprecate_constant(self, :CLOSE_BRACE)
104
- NULL = 'NULL'.freeze
105
- Sequel::Deprecation.deprecate_constant(self, :NULL)
106
- QUOTE = '"'.freeze
107
- Sequel::Deprecation.deprecate_constant(self, :QUOTE)
108
-
109
- # SEQUEL5: Remove
110
- ARRAY_TYPES = {}
111
-
112
- # SEQUEL5: Remove
113
- def self.register(db_type, opts=OPTS, &block)
114
- Sequel::Deprecation.deprecate("Sequel::Postgres::PGArray.register", "Use Database#register_array_type on a Database instance using the pg_array extension") unless opts[:skip_deprecation_warning]
115
-
116
- db_type = db_type.to_s
117
- type = (opts[:type_symbol] || db_type).to_sym
118
- type_procs = opts[:type_procs] || PG__TYPES
119
- mod = opts[:typecast_methods_module] || DatabaseMethods
120
- typecast_method_map = opts[:typecast_method_map] || ARRAY_TYPES
121
-
122
- if converter = opts[:converter]
123
- raise Error, "can't provide both a block and :converter option to register" if block
124
- else
125
- converter = block
126
- end
127
-
128
- if soid = opts[:scalar_oid]
129
- raise Error, "can't provide both a converter and :scalar_oid option to register" if converter
130
- converter = type_procs[soid]
131
- end
132
-
133
- array_type = (opts[:array_type] || db_type).to_s.dup.freeze
134
- creator = Creator.new(array_type, converter)
135
-
136
- typecast_method_map[db_type] = :"#{type}_array"
137
-
138
- define_array_typecast_method(mod, type, creator, opts.fetch(:scalar_typecast, type))
139
-
140
- if oid = opts[:oid]
141
- if opts[:skip_deprecation_warning]
142
- def creator.call(s)
143
- Sequel::Deprecation.deprecate("Conversion proc for #{type}[] added globally by pg_array or other pg_* extension", "Load the appropriate pg_* extension(s) into the Database instance")
144
- super
145
- end
146
- end
147
- type_procs[oid] = creator
148
- end
149
-
150
- nil
151
- end
152
-
153
- # SEQUEL5: Remove
154
- def self.define_array_typecast_method(mod, type, creator, scalar_typecast)
155
- mod.class_eval do
156
- meth = :"typecast_value_#{type}_array"
157
- scalar_typecast_method = :"typecast_value_#{scalar_typecast}"
158
- define_method(meth){|v| typecast_value_pg_array(v, creator, scalar_typecast_method)}
159
- private meth
160
- end
161
- end
162
- private_class_method :define_array_typecast_method
163
-
164
81
  module DatabaseMethods
165
- APOS = "'".freeze
166
- Sequel::Deprecation.deprecate_constant(self, :APOS)
167
- DOUBLE_APOS = "''".freeze
168
- Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
169
- ESCAPE_RE = /("|\\)/.freeze
170
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
171
- ESCAPE_REPLACEMENT = '\\\\\1'.freeze
172
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
173
-
174
82
  BLOB_RANGE = 1...-1
175
83
 
176
84
  # Create the local hash of database type strings to schema type symbols,
177
85
  # used for array types local to this database.
178
86
  def self.extended(db)
179
- db.instance_eval do
87
+ db.instance_exec do
180
88
  @pg_array_schema_types ||= {}
181
- procs = conversion_procs
182
- add_conversion_proc(1115, Creator.new("timestamp without time zone", procs[1114]))
183
- add_conversion_proc(1185, Creator.new("timestamp with time zone", procs[1184]))
89
+ register_array_type('timestamp without time zone', :oid=>1115, :scalar_oid=>1114, :type_symbol=>:datetime)
90
+ register_array_type('timestamp with time zone', :oid=>1185, :scalar_oid=>1184, :type_symbol=>:datetime_timezone, :scalar_typecast=>:datetime)
184
91
 
185
92
  register_array_type('text', :oid=>1009, :scalar_oid=>25, :type_symbol=>:string)
186
93
  register_array_type('integer', :oid=>1007, :scalar_oid=>23)
@@ -220,6 +127,15 @@ module Sequel
220
127
  end
221
128
  end
222
129
 
130
+ def add_named_conversion_proc(name, &block)
131
+ ret = super
132
+ name = name.to_s if name.is_a?(Symbol)
133
+ from(:pg_type).where(:typname=>name).select_map([:oid, :typarray]).each do |scalar_oid, array_oid|
134
+ register_array_type(name, :oid=>array_oid.to_i, :scalar_oid=>scalar_oid.to_i)
135
+ end
136
+ ret
137
+ end
138
+
223
139
  # Handle arrays in bound variables
224
140
  def bound_variable_arg(arg, conn)
225
141
  case arg
@@ -260,9 +176,6 @@ module Sequel
260
176
  #
261
177
  # If a block is given, it is treated as the :converter option.
262
178
  def register_array_type(db_type, opts=OPTS, &block)
263
- # Only for convert_named_procs_to_procs usage
264
- type_procs = opts[:type_procs] || conversion_procs # SEQUEL5: Remove
265
-
266
179
  oid = opts[:oid]
267
180
  soid = opts[:scalar_oid]
268
181
 
@@ -286,17 +199,16 @@ module Sequel
286
199
 
287
200
  if soid
288
201
  raise Error, "can't provide both a converter and :scalar_oid option to register" if has_converter
289
- converter = type_procs[soid] # SEQUEL5: conversion_procs[soid]
202
+ converter = conversion_procs[soid]
290
203
  end
291
204
 
292
205
  array_type = (opts[:array_type] || db_type).to_s.dup.freeze
293
206
  creator = Creator.new(array_type, converter)
294
- type_procs[oid] = creator # SEQUEL5: Remove
295
- #add_conversion_proc(oid, creator) # SEQUEL5
207
+ add_conversion_proc(oid, creator)
296
208
 
297
209
  typecast_method_map[db_type] = :"#{type}_array"
298
210
 
299
- (class << self; self end).class_eval do # singleton_class.class_eval do # SEQUEL5
211
+ singleton_class.class_eval do
300
212
  meth = :"typecast_value_#{type}_array"
301
213
  scalar_typecast_method = :"typecast_value_#{opts.fetch(:scalar_typecast, type)}"
302
214
  define_method(meth){|v| typecast_value_pg_array(v, creator, scalar_typecast_method)}
@@ -304,15 +216,9 @@ module Sequel
304
216
  end
305
217
 
306
218
  @schema_type_classes[:"#{type}_array"] = PGArray
307
- conversion_procs_updated # SEQUEL5: Remove
308
219
  nil
309
220
  end
310
221
 
311
- # SEQUEL5: Remove
312
- def schema_type_class(type)
313
- super || (ARRAY_TYPES.each_value{|v| return PGArray if type == v}; nil)
314
- end
315
-
316
222
  private
317
223
 
318
224
  # Format arrays used in bound variables.
@@ -331,32 +237,11 @@ module Sequel
331
237
  end
332
238
  end
333
239
 
334
- # Automatically handle array types for the given named types.
335
- def convert_named_procs_to_procs(named_procs)
336
- h = super
337
- unless h.empty?
338
- from(:pg_type).where(:oid=>h.keys).select_map([:typname, :oid, :typarray]).each do |name, scalar_oid, array_oid|
339
- register_array_type(name, :type_procs=>h, :oid=>array_oid.to_i, :scalar_oid=>scalar_oid.to_i)
340
- end
341
- end
342
- h
343
- end
344
-
345
- # SEQUEL5: Remove
346
- def get_conversion_procs
347
- procs = super
348
-
349
- procs[1115] = Creator.new("timestamp without time zone", procs[1114])
350
- procs[1185] = Creator.new("timestamp with time zone", procs[1184])
351
-
352
- procs
353
- end
354
-
355
240
  # Look into both the current database's array schema types and the global
356
241
  # array schema types to get the type symbol for the given database type
357
242
  # string.
358
243
  def pg_array_schema_type(type)
359
- @pg_array_schema_types[type] || ARRAY_TYPES[type] # SEQUEL5: Remove || ARRAY_TYPES[type]
244
+ @pg_array_schema_types[type]
360
245
  end
361
246
 
362
247
  # Make the column type detection handle registered array types.
@@ -408,15 +293,6 @@ module Sequel
408
293
  # Note that does not handle all forms out input that PostgreSQL will
409
294
  # accept, and it will not raise an error for all forms of invalid input.
410
295
  class Parser < StringScanner
411
- UNQUOTED_RE = /[{}",]|[^{}",]+/
412
- Sequel::Deprecation.deprecate_constant(self, :UNQUOTED_RE)
413
- QUOTED_RE = /["\\]|[^"\\]+/
414
- Sequel::Deprecation.deprecate_constant(self, :QUOTED_RE)
415
- NULL_RE = /NULL",/
416
- Sequel::Deprecation.deprecate_constant(self, :NULL_RE)
417
- OPEN_RE = /((\[\d+:\d+\])+=)?\{/
418
- Sequel::Deprecation.deprecate_constant(self, :OPEN_RE)
419
-
420
296
  # Set the source for the input, and any converter callable
421
297
  # to call with objects to be created. For nested parsers
422
298
  # the source may contain text after the end current parse,
@@ -425,8 +301,8 @@ module Sequel
425
301
  super(source)
426
302
  @converter = converter
427
303
  @stack = [[]]
428
- @recorded = new_entry_buffer
429
- #@encoding = string.encoding # SEQUEL5
304
+ @encoding = string.encoding
305
+ @recorded = String.new.force_encoding(@encoding)
430
306
  end
431
307
 
432
308
  # Take the buffer of recorded characters and add it to the array
@@ -440,7 +316,7 @@ module Sequel
440
316
  entry = @converter.call(entry)
441
317
  end
442
318
  @stack.last.push(entry)
443
- @recorded = new_entry_buffer
319
+ @recorded = String.new.force_encoding(@encoding)
444
320
  end
445
321
  end
446
322
 
@@ -499,21 +375,6 @@ module Sequel
499
375
 
500
376
  raise Sequel::Error, "array parsing finished with array unclosed"
501
377
  end
502
-
503
- private
504
-
505
- if RUBY_VERSION < '1.9.0'
506
- # :nocov:
507
- def new_entry_buffer
508
- String.new
509
- end
510
- # :nocov:
511
- else
512
- def new_entry_buffer
513
- String.new.force_encoding(string.encoding)
514
- #String.new.force_encoding(@encoding) # SEQUEL5
515
- end
516
- end
517
378
  end unless Sequel::Postgres.respond_to?(:parse_pg_array)
518
379
 
519
380
  # Callable object that takes the input string and parses it using Parser.
@@ -596,36 +457,6 @@ module Sequel
596
457
  end
597
458
  sql << ']'
598
459
  end
599
-
600
- # SEQUEL5: Remove
601
- register('text', :oid=>1009, :scalar_oid=>25, :type_symbol=>:string, :skip_deprecation_warning=>true)
602
- register('integer', :oid=>1007, :scalar_oid=>23, :skip_deprecation_warning=>true)
603
- register('bigint', :oid=>1016, :scalar_oid=>20, :scalar_typecast=>:integer, :skip_deprecation_warning=>true)
604
- register('numeric', :oid=>1231, :scalar_oid=>1700, :type_symbol=>:decimal, :skip_deprecation_warning=>true)
605
- register('double precision', :oid=>1022, :scalar_oid=>701, :type_symbol=>:float, :skip_deprecation_warning=>true)
606
- register('boolean', :oid=>1000, :scalar_oid=>16, :skip_deprecation_warning=>true)
607
- register('bytea', :oid=>1001, :scalar_oid=>17, :type_symbol=>:blob, :skip_deprecation_warning=>true)
608
- register('date', :oid=>1182, :scalar_oid=>1082, :skip_deprecation_warning=>true)
609
- register('time without time zone', :oid=>1183, :scalar_oid=>1083, :type_symbol=>:time, :skip_deprecation_warning=>true)
610
- register('timestamp without time zone', :oid=>1115, :scalar_oid=>1114, :type_symbol=>:datetime, :skip_deprecation_warning=>true)
611
- register('time with time zone', :oid=>1270, :scalar_oid=>1083, :type_symbol=>:time_timezone, :scalar_typecast=>:time, :skip_deprecation_warning=>true)
612
- register('timestamp with time zone', :oid=>1185, :scalar_oid=>1184, :type_symbol=>:datetime_timezone, :scalar_typecast=>:datetime, :skip_deprecation_warning=>true)
613
- register('smallint', :oid=>1005, :scalar_oid=>21, :scalar_typecast=>:integer, :skip_deprecation_warning=>true)
614
- register('oid', :oid=>1028, :scalar_oid=>26, :scalar_typecast=>:integer, :skip_deprecation_warning=>true)
615
- register('real', :oid=>1021, :scalar_oid=>700, :scalar_typecast=>:float, :skip_deprecation_warning=>true)
616
- register('character', :oid=>1014, :array_type=>:text, :scalar_typecast=>:string, :skip_deprecation_warning=>true)
617
- register('character varying', :oid=>1015, :scalar_typecast=>:string, :type_symbol=>:varchar, :skip_deprecation_warning=>true)
618
- register('xml', :oid=>143, :scalar_oid=>142, :skip_deprecation_warning=>true)
619
- register('money', :oid=>791, :scalar_oid=>790, :skip_deprecation_warning=>true)
620
- register('bit', :oid=>1561, :scalar_oid=>1560, :skip_deprecation_warning=>true)
621
- register('bit varying', :oid=>1563, :scalar_oid=>1562, :type_symbol=>:varbit, :skip_deprecation_warning=>true)
622
- register('uuid', :oid=>2951, :scalar_oid=>2950, :skip_deprecation_warning=>true)
623
- register('xid', :oid=>1011, :scalar_oid=>28, :skip_deprecation_warning=>true)
624
- register('cid', :oid=>1012, :scalar_oid=>29, :skip_deprecation_warning=>true)
625
- register('name', :oid=>1003, :scalar_oid=>19, :skip_deprecation_warning=>true)
626
- register('tid', :oid=>1010, :scalar_oid=>27, :skip_deprecation_warning=>true)
627
- register('int2vector', :oid=>1006, :scalar_oid=>22, :skip_deprecation_warning=>true)
628
- register('oidvector', :oid=>1013, :scalar_oid=>30, :skip_deprecation_warning=>true)
629
460
  end
630
461
  end
631
462