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,50 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- require 'swift/db/mysql'
4
- Sequel.require 'adapters/shared/mysql'
5
-
6
- module Sequel
7
- module Swift
8
- # Database and Dataset instance methods for MySQL specific
9
- # support via Swift.
10
- module MySQL
11
- # Database instance methods for MySQL databases accessed via Swift.
12
- module DatabaseMethods
13
- include Sequel::MySQL::DatabaseMethods
14
-
15
- private
16
-
17
- # The database name for the given database.
18
- def database_name
19
- opts[:database]
20
- end
21
-
22
- # Consider tinyint(1) columns as boolean.
23
- def schema_column_type(db_type)
24
- db_type =~ /\Atinyint\(1\)/ ? :boolean : super
25
- end
26
-
27
- # Apply the connectiong setting SQLs for every new connection.
28
- def setup_connection(conn)
29
- mysql_connection_setting_sqls.each{|sql| log_connection_yield(sql, conn){conn.execute(sql)}}
30
- super
31
- end
32
- end
33
-
34
- # Dataset class for MySQL datasets accessed via Swift.
35
- class Dataset < Swift::Dataset
36
- include Sequel::MySQL::DatasetMethods
37
-
38
- APOS = "'".freeze
39
- Sequel::Deprecation.deprecate_constant(self, :APOS)
40
-
41
- private
42
-
43
- # Use Swift's escape method for quoting.
44
- def literal_string_append(sql, s)
45
- sql << "'" << db.synchronize(@opts[:server]){|c| c.escape(s)} << "'"
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,49 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- require 'swift/db/postgres'
4
- Sequel.require 'adapters/shared/postgres'
5
-
6
- module Sequel
7
- module Swift
8
- # Adapter, Database, and Dataset support for accessing a PostgreSQL
9
- # database via Swift.
10
- module Postgres
11
- # Methods to add to Database instances that access PostgreSQL via Swift.
12
- module DatabaseMethods
13
- include Sequel::Postgres::DatabaseMethods
14
-
15
- # Add the primary_keys and primary_key_sequences instance variables,
16
- # so we can get the correct return values for inserted rows.
17
- def self.extended(db)
18
- super
19
- db.send(:initialize_postgres_adapter)
20
- end
21
-
22
- private
23
-
24
- DATABASE_ERROR_CLASSES = [::Swift::Error].freeze
25
- def database_error_classes
26
- DATABASE_ERROR_CLASSES
27
- end
28
-
29
- # Remove all other options except for ones specifically handled, as
30
- # otherwise swift passes them to dbic++ which passes them to PostgreSQL
31
- # which can raise an error.
32
- def server_opts(o)
33
- o = super
34
- so = {}
35
- [:db, :user, :password, :host, :port].each{|s| so[s] = o[s] if o.has_key?(s)}
36
- so
37
- end
38
-
39
- # Extend the adapter with the Swift PostgreSQL AdapterMethods.
40
- def setup_connection(conn)
41
- conn = super(conn)
42
- conn.native_bind_format = true
43
- connection_configuration_sqls.each{|sql| log_connection_yield(sql, conn){conn.execute(sql)}}
44
- conn
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,48 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- require 'swift/db/sqlite3'
4
- Sequel.require 'adapters/shared/sqlite'
5
-
6
- module Sequel
7
- module Swift
8
- # Database and Dataset instance methods for SQLite specific
9
- # support via Swift.
10
- module SQLite
11
- # Database instance methods for SQLite databases accessed via Swift.
12
- module DatabaseMethods
13
- include Sequel::SQLite::DatabaseMethods
14
-
15
- DATABASE_ERROR_REGEXPS = {
16
- /\AUNIQUE constraint failed: / => UniqueConstraintViolation,
17
- /\AFOREIGN KEY constraint failed/ => ForeignKeyConstraintViolation,
18
- /\ACHECK constraint failed/ => CheckConstraintViolation,
19
- /\A(SQLITE ERROR 19 \(CONSTRAINT\) : )?constraint failed/ => ConstraintViolation,
20
- /may not be NULL\z|NOT NULL constraint failed: .+/ => NotNullConstraintViolation,
21
- /\ASQLITE ERROR \d+ \(\) : CHECK constraint failed: / => CheckConstraintViolation
22
- }.freeze
23
- def database_error_regexps
24
- DATABASE_ERROR_REGEXPS
25
- end
26
-
27
- # Set the correct pragmas on the connection.
28
- def connect(opts)
29
- c = super
30
- connection_pragmas.each{|s| log_connection_yield(s, c){c.execute(s)}}
31
- c
32
- end
33
- end
34
-
35
- # Dataset class for SQLite datasets accessed via Swift.
36
- class Dataset < Swift::Dataset
37
- include Sequel::SQLite::DatasetMethods
38
-
39
- private
40
-
41
- # Use Swift's escape method for quoting.
42
- def literal_string_append(sql, s)
43
- sql << "'" << db.synchronize(@opts[:server]){|c| c.escape(s)} << "'"
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,169 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("The swift adapter", "Please consider maintaining it yourself as an external gem if you want to continue using it")
4
-
5
- module Sequel
6
- # Module holding the Swift DB support for Sequel. Swift DB is a
7
- # collection of drivers used in Swift ORM.
8
- #
9
- # The Swift adapter currently supports PostgreSQL, MySQL and SQLite3
10
- #
11
- # Sequel.connect('swift://user:password@host/database?db_type=postgres')
12
- # Sequel.connect('swift://user:password@host/database?db_type=mysql')
13
- module Swift
14
- # Contains procs keyed on sub adapter type that extend the
15
- # given database object so it supports the correct database type.
16
- DATABASE_SETUP = {:postgres=>proc do |db|
17
- db.extend(Sequel::Swift::Postgres::DatabaseMethods)
18
- db.extend_datasets Sequel::Postgres::DatasetMethods
19
- db.swift_class = ::Swift::DB::Postgres
20
- end,
21
- :mysql=>proc do |db|
22
- db.extend(Sequel::Swift::MySQL::DatabaseMethods)
23
- db.dataset_class = Sequel::Swift::MySQL::Dataset
24
- db.swift_class = ::Swift::DB::Mysql
25
- end,
26
- :sqlite=>proc do |db|
27
- db.extend(Sequel::Swift::SQLite::DatabaseMethods)
28
- db.dataset_class = Sequel::Swift::SQLite::Dataset
29
- db.swift_class = ::Swift::DB::Sqlite3
30
- db.set_integer_booleans
31
- end,
32
- }
33
-
34
- class Database < Sequel::Database
35
- set_adapter_scheme :swift
36
-
37
- # The Swift adapter class being used by this database. Connections
38
- # in this database's connection pool will be instances of this class.
39
- attr_accessor :swift_class
40
-
41
- def initialize(opts=OPTS)
42
- Sequel.require "adapters/swift/#{opts[:db_type]}" if %w'postgres mysql sqlite'.include?(opts[:db_type].to_s)
43
- super
44
- end
45
-
46
- # Create an instance of swift_class for the given options.
47
- def connect(server)
48
- opts = server_opts(server)
49
- opts[:pass] = opts[:password]
50
- setup_connection(swift_class.new(opts))
51
- end
52
-
53
- # Execute the given SQL, yielding a Swift::Result if a block is given.
54
- def execute(sql, opts=OPTS)
55
- synchronize(opts[:server]) do |conn|
56
- begin
57
- res = log_connection_yield(sql, conn){conn.execute(sql)}
58
- yield res if block_given?
59
- nil
60
- rescue ::Swift::Error => e
61
- raise_error(e)
62
- end
63
- end
64
- end
65
-
66
- # Execute the SQL on the this database, returning the number of affected
67
- # rows.
68
- def execute_dui(sql, opts=OPTS)
69
- synchronize(opts[:server]) do |conn|
70
- begin
71
- log_connection_yield(sql, conn){conn.execute(sql).affected_rows}
72
- rescue ::Swift::Error => e
73
- raise_error(e)
74
- end
75
- end
76
- end
77
-
78
- # Execute the SQL on this database, returning the primary key of the
79
- # table being inserted to.
80
- def execute_insert(sql, opts=OPTS)
81
- synchronize(opts[:server]) do |conn|
82
- begin
83
- log_connection_yield(sql, conn){conn.execute(sql).insert_id}
84
- rescue ::Swift::Error => e
85
- raise_error(e)
86
- end
87
- end
88
- end
89
-
90
- private
91
-
92
- # Call the DATABASE_SETUP proc directly after initialization,
93
- # so the object always uses sub adapter specific code. Also,
94
- # raise an error immediately if the connection doesn't have a
95
- # db_type specified, since one is required to include the correct
96
- # subadapter.
97
- def adapter_initialize
98
- if db_type = @opts[:db_type] and !db_type.to_s.empty?
99
- if prok = DATABASE_SETUP[db_type.to_s.to_sym]
100
- prok.call(self)
101
- else
102
- raise(Error, "No :db_type option specified")
103
- end
104
- else
105
- raise(Error, ":db_type option not valid, should be postgres, mysql, or sqlite")
106
- end
107
- end
108
-
109
- # Method to call on a statement object to execute SQL that does
110
- # not return any rows.
111
- def connection_execute_method
112
- :execute
113
- end
114
-
115
- def database_error_classes
116
- [::Swift::Error]
117
- end
118
-
119
- def dataset_class_default
120
- Dataset
121
- end
122
-
123
- # Set the :db entry to the same as the :database entry, since
124
- # Swift uses :db.
125
- def server_opts(o)
126
- o = super
127
- o[:db] ||= o[:database]
128
- o
129
- end
130
-
131
- # Allow extending the given connection when it is first created.
132
- # By default, just returns the connection.
133
- def setup_connection(conn)
134
- conn
135
- end
136
- end
137
-
138
- class Dataset < Sequel::Dataset
139
- Database::DatasetClass = self
140
- Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
141
-
142
- # Set the columns and yield the hashes to the block.
143
- def fetch_rows(sql)
144
- execute(sql) do |res|
145
- col_map = {}
146
- self.columns = res.fields.map do |c|
147
- col_map[c] = output_identifier(c)
148
- end
149
- tz = db.timezone if Sequel.application_timezone
150
- res.each do |r|
151
- h = {}
152
- r.each do |k, v|
153
- h[col_map[k]] = case v
154
- when StringIO
155
- SQL::Blob.new(v.read)
156
- when DateTime
157
- tz ? Sequel.database_to_application_timestamp(Sequel.send(:convert_input_datetime_no_offset, v, tz)) : v
158
- else
159
- v
160
- end
161
- end
162
- yield h
163
- end
164
- end
165
- self
166
- end
167
- end
168
- end
169
- end
@@ -1,4 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- Sequel::Deprecation.deprecate("requiring sequel/adapters/utils/pg_types", "This file should no longer be required, use Database#conversion_procs to modify conversion procs for a Database instance")
4
- Sequel.require 'adapters/shared/postgres'
@@ -1,98 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- module Sequel
4
- class Dataset
5
- # ---------------------
6
- # :section: 7 - Mutation methods
7
- # These methods modify the receiving dataset and should be used with care.
8
- # ---------------------
9
-
10
- # All methods that should have a ! method added that modifies the receiver.
11
- MUTATION_METHODS = QUERY_METHODS - [:naked, :from_self]
12
- Sequel::Deprecation.deprecate_constant(self, :MUTATION_METHODS)
13
-
14
- # Setup mutation (e.g. filter!) methods. These operate the same as the
15
- # non-! methods, but replace the options of the current dataset with the
16
- # options of the resulting dataset.
17
- #
18
- # Do not call this method with untrusted input, as that can result in
19
- # arbitrary code execution.
20
- def self.def_mutation_method(*meths)
21
- options = meths.pop if meths.last.is_a?(Hash)
22
- mod = options[:module] if options
23
- mod ||= self
24
- meths.each do |meth|
25
- mod.class_eval("def #{meth}!(*args, &block); mutation_method(:#{meth}, *args, &block) end", __FILE__, __LINE__)
26
- end
27
- end
28
-
29
- # Add the mutation methods via metaprogramming
30
- def_mutation_method(*(QUERY_METHODS - [:naked, :from_self]))
31
-
32
- # Like #extension, but modifies and returns the receiver instead of returning a modified clone.
33
- def extension!(*exts)
34
- raise_if_frozen!(%w"extension! extension")
35
- _extension!(exts)
36
- end
37
-
38
- # Avoid self-referential dataset by cloning.
39
- def from_self!(*args, &block)
40
- raise_if_frozen!(%w"from_self! from_self")
41
- @opts = clone.from_self(*args, &block).opts
42
- self
43
- end
44
-
45
- # Remove the row_proc from the current dataset.
46
- def naked!
47
- raise_if_frozen!(%w"naked! naked")
48
- @opts[:row_proc] = nil
49
- self
50
- end
51
-
52
- # Set whether to quote identifiers for this dataset
53
- def quote_identifiers=(v)
54
- raise_if_frozen!(%w"quote_identifiers= with_quote_identifiers")
55
- skip_symbol_cache!
56
- @opts[:quote_identifiers] = v
57
- end
58
-
59
- # Override the row_proc for this dataset
60
- def row_proc=(v)
61
- raise_if_frozen!(%w"row_proc= with_row_proc")
62
- @opts[:row_proc] = v
63
- end
64
-
65
- private
66
-
67
- # Modify the receiver with the results of sending the meth, args, and block
68
- # to the receiver and merging the options of the resulting dataset into
69
- # the receiver's options.
70
- def mutation_method(meth, *args, &block)
71
- raise_if_frozen!(["#{meth}!", meth])
72
- @opts = send(meth, *args, &block).opts
73
- @cache = {}
74
- self
75
- end
76
-
77
- # Raise a RuntimeError if the receiver is frozen
78
- def raise_if_frozen!(meth = nil)
79
- if frozen?
80
- raise RuntimeError, "can't modify frozen #{visible_class_name}"
81
- end
82
- case meth
83
- when Array
84
- meth = " (method called: #{meth.first}, non-mutating replacement: #{meth.last})"
85
- when String
86
- # :nocov:
87
- meth = " (method called: #{meth})"
88
- # :nocov:
89
- end
90
- Sequel::Deprecation.deprecate("Dataset mutation is deprecated and will be removed in Sequel 5#{meth}")
91
- end
92
-
93
- # Set the dataset to skip the symbol cache
94
- def skip_symbol_cache!
95
- @opts[:skip_symbol_cache] = true
96
- end
97
- end
98
- end
@@ -1,117 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- #
4
- module Sequel
5
- module DeprecatedIdentifierMangling
6
- module DatabaseMethods
7
- def self.extended(db)
8
- db.instance_exec do
9
- @identifier_input_method = nil
10
- @identifier_output_method = nil
11
- @quote_identifiers = nil
12
- reset_identifier_mangling
13
- extend_datasets(DatasetMethods)
14
- end
15
- end
16
-
17
- attr_reader :identifier_input_method
18
- attr_reader :identifier_output_method
19
-
20
- def identifier_input_method=(v)
21
- Sequel::Deprecation.deprecate("Database#identifier_input_method=", "Explicitly load the identifier_mangling extension if you would like to use this")
22
- reset_default_dataset
23
- @identifier_input_method = v
24
- end
25
-
26
- def identifier_output_method=(v)
27
- Sequel::Deprecation.deprecate("Database#identifier_output_method=", "Explicitly load the identifier_mangling extension if you would like to use this")
28
- reset_default_dataset
29
- @identifier_output_method = v
30
- end
31
-
32
- def quote_identifiers=(v)
33
- Sequel::Deprecation.deprecate("Database#quote_identifiers=", "Explicitly load the identifier_mangling extension if you would like to use this")
34
- reset_default_dataset
35
- @quote_identifiers = v
36
- end
37
-
38
- def quote_identifiers?
39
- @quote_identifiers
40
- end
41
-
42
- private
43
-
44
- def _metadata_dataset
45
- super.clone(:identifier_input_method=>identifier_input_method_default, :identifier_output_method=>identifier_output_method_default, :skip_symbol_cache=>true)
46
- end
47
-
48
- def identifier_input_method_default
49
- return super if defined?(super)
50
- :upcase if folds_unquoted_identifiers_to_uppercase?
51
- end
52
-
53
- def identifier_output_method_default
54
- return super if defined?(super)
55
- :downcase if folds_unquoted_identifiers_to_uppercase?
56
- end
57
-
58
- def reset_identifier_mangling
59
- @quote_identifiers = @opts.fetch(:quote_identifiers){(qi = Database.quote_identifiers).nil? ? quote_identifiers_default : qi}
60
- @identifier_input_method = @opts.fetch(:identifier_input_method){(iim = Database.identifier_input_method).nil? ? identifier_input_method_default : (iim if iim)}
61
- @identifier_output_method = @opts.fetch(:identifier_output_method){(iom = Database.identifier_output_method).nil? ? identifier_output_method_default : (iom if iom)}
62
- reset_default_dataset
63
- end
64
- end
65
-
66
- module DatasetMethods
67
- def identifier_input_method
68
- @opts.fetch(:identifier_input_method, db.identifier_input_method)
69
- end
70
-
71
- def identifier_input_method=(v)
72
- Sequel::Deprecation.deprecate("Dataset#identifier_input_method=", "Explicitly load the identifier_mangling extension if you would like to use this")
73
- raise_if_frozen!(%w"identifier_input_method= with_identifier_input_method")
74
- skip_symbol_cache!
75
- @opts[:identifier_input_method] = v
76
- end
77
-
78
- def identifier_output_method
79
- @opts.fetch(:identifier_output_method, db.identifier_output_method)
80
- end
81
-
82
- def identifier_output_method=(v)
83
- Sequel::Deprecation.deprecate("Dataset#identifier_output_method=", "Explicitly load the identifier_mangling extension if you would like to use this")
84
- raise_if_frozen!(%w"identifier_output_method= with_identifier_output_method")
85
- @opts[:identifier_output_method] = v
86
- end
87
-
88
- def quote_identifiers?
89
- @opts.fetch(:quote_identifiers, db.quote_identifiers?)
90
- end
91
-
92
- def with_identifier_input_method(meth)
93
- Sequel::Deprecation.deprecate("Dataset#with_identifier_input_method", "Explicitly load the identifier_mangling extension if you would like to use this")
94
- clone(:identifier_input_method=>meth, :skip_symbol_cache=>true)
95
- end
96
-
97
- def with_identifier_output_method(meth)
98
- Sequel::Deprecation.deprecate("Dataset#with_identifier_output_method", "Explicitly load the identifier_mangling extension if you would like to use this")
99
- clone(:identifier_output_method=>meth)
100
- end
101
-
102
- private
103
-
104
- def input_identifier(v)
105
- (i = identifier_input_method) ? v.to_s.send(i) : v.to_s
106
- end
107
-
108
- def output_identifier(v)
109
- v = 'untitled' if v == ''
110
- (i = identifier_output_method) ? v.to_s.send(i).to_sym : v.to_sym
111
- end
112
- end
113
- end
114
-
115
- Database.register_extension(:_deprecated_identifier_mangling, DeprecatedIdentifierMangling::DatabaseMethods)
116
- end
117
-
@@ -1,8 +0,0 @@
1
- # frozen-string-literal: true
2
- #
3
- # This only exists for backwards compatibility, as the behavior
4
- # added by this extension is now the default Sequel behavior.
5
-
6
- Sequel::Deprecation.deprecate("The empty_array_ignore_nulls", "It has been a no-op since 4.25.0")
7
-
8
- Sequel::Dataset.register_extension(:empty_array_ignore_nulls){}
@@ -1,65 +0,0 @@
1
- # frozen-string-literal: true
2
- #
3
- # The filter_having extension allows Dataset#filter, #and, #or
4
- # and #exclude to operate on the HAVING clause if the dataset
5
- # already has a HAVING clause, which was the historical behavior
6
- # before Sequel 4. It is only recommended to use this for
7
- # backwards compatibility.
8
- #
9
- # You can load this extension into specific datasets:
10
- #
11
- # ds = DB[:table]
12
- # ds = ds.extension(:filter_having)
13
- #
14
- # Or you can load it into all of a database's datasets, which
15
- # is probably the desired behavior if you are using this extension:
16
- #
17
- # DB.extension(:filter_having)
18
- #
19
- # Related module: Sequel::FilterHaving
20
-
21
- Sequel::Deprecation.deprecate("The filter_having extension", "Please consider maintaining it yourself as an external gem if you want to continue using it")
22
-
23
- #
24
- module Sequel
25
- module FilterHaving
26
- # Operate on HAVING clause if HAVING clause already present.
27
- def and(*cond, &block)
28
- if @opts[:having]
29
- having(*cond, &block)
30
- else
31
- super
32
- end
33
- end
34
-
35
- # Operate on HAVING clause if HAVING clause already present.
36
- def exclude(*cond, &block)
37
- if @opts[:having]
38
- exclude_having(*cond, &block)
39
- else
40
- super
41
- end
42
- end
43
-
44
- # Operate on HAVING clause if HAVING clause already present.
45
- def filter(*cond, &block)
46
- if @opts[:having]
47
- having(*cond, &block)
48
- else
49
- super
50
- end
51
- end
52
-
53
- # Operate on HAVING clause if HAVING clause already present.
54
- def or(*cond, &block)
55
- if having = @opts[:having]
56
- cond = cond.first if cond.size == 1
57
- clone(:having => SQL::BooleanExpression.new(:OR, having, filter_expr(cond, &block)))
58
- else
59
- super
60
- end
61
- end
62
- end
63
-
64
- Dataset.register_extension(:filter_having, FilterHaving)
65
- end
@@ -1,51 +0,0 @@
1
- # frozen-string-literal: true
2
- #
3
- # The hash_aliases extension allows Dataset#select and Dataset#from
4
- # to treat a hash argument as an alias specification, with keys
5
- # being the expressions and values being the aliases,
6
- # which was the historical behavior before Sequel 4.
7
- # It is only recommended to use this for backwards compatibility.
8
- #
9
- # You can load this extension into specific datasets:
10
- #
11
- # ds = DB[:table]
12
- # ds = ds.extension(:hash_aliases)
13
- #
14
- # Or you can load it into all of a database's datasets, which
15
- # is probably the desired behavior if you are using this extension:
16
- #
17
- # DB.extension(:hash_aliases)
18
- #
19
- # Related module: Sequel::HashAliases
20
-
21
- Sequel::Deprecation.deprecate("The hash_aliases extension", "Please consider maintaining it yourself as an external gem if you want to continue using it")
22
-
23
- #
24
- module Sequel
25
- module HashAliases
26
- def from(*source)
27
- super(*convert_hash_aliases(source))
28
- end
29
-
30
- def select(*columns, &block)
31
- virtual_row_columns(columns, block)
32
- super(*convert_hash_aliases(columns), &nil)
33
- end
34
-
35
- private
36
-
37
- def convert_hash_aliases(columns)
38
- m = []
39
- columns.each do |i|
40
- if i.is_a?(Hash)
41
- m.concat(i.map{|k, v| SQL::AliasedExpression.new(k,v)})
42
- else
43
- m << i
44
- end
45
- end
46
- m
47
- end
48
- end
49
-
50
- Dataset.register_extension(:hash_aliases, HashAliases)
51
- end