sequel 4.49.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -75,9 +75,7 @@ module Sequel
75
75
  :starts_after => ["(".freeze, " &> ".freeze, ")".freeze].freeze,
76
76
  :adjacent_to => ["(".freeze, " -|- ".freeze, ")".freeze].freeze,
77
77
  :overlaps => ["(".freeze, " && ".freeze, ")".freeze].freeze,
78
- }#.freeze # SEQUEL5
79
- FUNCTIONS = %w'lower upper isempty lower_inc upper_inc lower_inf upper_inf'
80
- Sequel::Deprecation.deprecate_constant(self, :FUNCTIONS)
78
+ }.freeze
81
79
 
82
80
  %w'lower upper isempty lower_inc upper_inc lower_inf upper_inf'.each do |f|
83
81
  class_eval("def #{f}; function(:#{f}) end", __FILE__, __LINE__)
@@ -64,12 +64,12 @@
64
64
  #
65
65
  # You can also use a hash:
66
66
  #
67
- # DB.row_type(:address, :street=>'123 Sesame St.', :city=>'Some City', :zip=>'12345')
67
+ # DB.row_type(:address, street: '123 Sesame St.', city: 'Some City', zip: '12345')
68
68
  #
69
69
  # So if you have a person table that has an address column, here's how you
70
70
  # could insert into the column:
71
71
  #
72
- # DB[:table].insert(:address=>DB.row_type(:address, :street=>'123 Sesame St.', :city=>'Some City', :zip=>'12345'))
72
+ # DB[:table].insert(address: DB.row_type(:address, street: '123 Sesame St.', city: 'Some City', zip: '12345'))
73
73
  #
74
74
  # Note that registering row types without providing an explicit :converter option
75
75
  # creates anonymous classes. This results in ruby being unable to Marshal such
@@ -88,16 +88,10 @@
88
88
 
89
89
  require 'delegate'
90
90
  require 'strscan'
91
- Sequel.require 'adapters/shared/postgres'
92
91
 
93
92
  module Sequel
94
93
  module Postgres
95
94
  module PGRow
96
- ROW = 'ROW'.freeze
97
- Sequel::Deprecation.deprecate_constant(self, :ROW)
98
- CAST = '::'.freeze
99
- Sequel::Deprecation.deprecate_constant(self, :CAST)
100
-
101
95
  # Class for row-valued/composite types that are treated as arrays. By default,
102
96
  # this is only used for generic PostgreSQL record types, as registered
103
97
  # types use HashRow by default.
@@ -216,7 +210,7 @@ module Sequel
216
210
  end
217
211
  end
218
212
 
219
- ROW_TYPE_CLASSES = [HashRow, ArrayRow]#.freeze # SEQUEL5
213
+ ROW_TYPE_CLASSES = [HashRow, ArrayRow].freeze
220
214
 
221
215
  # This parser-like class splits the PostgreSQL
222
216
  # row-valued/composite type output string format
@@ -225,25 +219,6 @@ module Sequel
225
219
  # will accept, it only handles the output format that
226
220
  # PostgreSQL uses.
227
221
  class Splitter < StringScanner
228
- OPEN_PAREN = /\(/.freeze
229
- Sequel::Deprecation.deprecate_constant(self, :OPEN_PAREN)
230
- CLOSE_PAREN = /\)/.freeze
231
- Sequel::Deprecation.deprecate_constant(self, :CLOSE_PAREN)
232
- UNQUOTED_RE = /[^,)]*/.freeze
233
- Sequel::Deprecation.deprecate_constant(self, :UNQUOTED_RE)
234
- SEP_RE = /[,)]/.freeze
235
- Sequel::Deprecation.deprecate_constant(self, :SEP_RE)
236
- QUOTE_RE = /"/.freeze
237
- Sequel::Deprecation.deprecate_constant(self, :QUOTE_RE)
238
- QUOTE_SEP_RE = /"[,)]/.freeze
239
- Sequel::Deprecation.deprecate_constant(self, :QUOTE_SEP_RE)
240
- QUOTED_RE = /(\\.|""|[^"])*/.freeze
241
- Sequel::Deprecation.deprecate_constant(self, :QUOTED_RE)
242
- REPLACE_RE = /\\(.)|"(")/.freeze
243
- Sequel::Deprecation.deprecate_constant(self, :REPLACE_RE)
244
- REPLACE_WITH = '\1\2'.freeze
245
- Sequel::Deprecation.deprecate_constant(self, :REPLACE_WITH)
246
-
247
222
  # Split the stored string into an array of strings, handling
248
223
  # the different types of quoting.
249
224
  def parse
@@ -387,13 +362,6 @@ module Sequel
387
362
  end
388
363
 
389
364
  module DatabaseMethods
390
- ESCAPE_RE = /("|\\)/.freeze
391
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
392
- ESCAPE_REPLACEMENT = '\\\\\1'.freeze
393
- Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
394
- COMMA = ','.freeze
395
- Sequel::Deprecation.deprecate_constant(self, :COMMA)
396
-
397
365
  # A hash mapping row type keys (usually symbols), to option
398
366
  # hashes. At the least, the values will contain the :parser
399
367
  # option for the Parser instance that the type will use.
@@ -401,7 +369,7 @@ module Sequel
401
369
 
402
370
  # Do some setup for the data structures the module uses.
403
371
  def self.extended(db)
404
- db.instance_eval do
372
+ db.instance_exec do
405
373
  @row_types = {}
406
374
  @row_schema_types = {}
407
375
  extend(@row_type_method_module = Module.new)
@@ -433,8 +401,6 @@ module Sequel
433
401
  super
434
402
  end
435
403
 
436
- STRING_TYPES = [18, 19, 25, 1042, 1043].freeze
437
-
438
404
  # Register a new row type for the Database instance. db_type should be the type
439
405
  # symbol. This parses the PostgreSQL system tables to get information the
440
406
  # composite type, and by default has the type return instances of a subclass
@@ -487,23 +453,7 @@ module Sequel
487
453
 
488
454
  # Using the conversion_procs, lookup converters for each member of the composite type
489
455
  parser_opts[:column_converters] = parser_opts[:column_oids].map do |oid|
490
- # procs[oid] # SEQUEL5
491
-
492
- # SEQUEL5: Remove
493
- if pr = procs[oid]
494
- pr
495
- elsif !STRING_TYPES.include?(oid)
496
- # It's not a string type, and it's possible a conversion proc for this
497
- # oid will be added later, so do a runtime check for it.
498
- lambda do |s|
499
- if (pr = procs[oid])
500
- Sequel::Deprecation.deprecate("Calling conversion proc for subtype (oid: #{oid}) of composite type (oid: #{parser_opts[:oid]}) not added until after composite type registration", "Register subtype conversion procs before registering composite type")
501
- pr.call(s)
502
- else
503
- s
504
- end
505
- end
506
- end
456
+ procs[oid]
507
457
  end
508
458
 
509
459
  # Setup the converter and typecaster
@@ -533,21 +483,9 @@ module Sequel
533
483
  private meth
534
484
  end
535
485
 
536
- conversion_procs_updated # SEQUEL5: Remove
537
486
  nil
538
487
  end
539
488
 
540
- # SEQUEL5: Remove
541
- def reset_conversion_procs
542
- procs = super
543
-
544
- row_types.values.each do |opts|
545
- register_row_type(opts[:type], opts)
546
- end
547
-
548
- procs
549
- end
550
-
551
489
  # Handle typecasting of the given object to the given database type.
552
490
  # In general, the given database type should already be registered,
553
491
  # but if obj is an array, this will handled unregistered types.
@@ -602,16 +540,6 @@ module Sequel
602
540
  end
603
541
  end
604
542
  end
605
-
606
- # SEQUEL5: Remove
607
- parser = PGRow::Parser.new(:converter=>PGRow::ArrayRow)
608
- PG__TYPES[2249] = lambda do |s|
609
- Sequel::Deprecation.deprecate("Conversion proc for record added globally by pg_row extension", "Load the pg_row extension into the Database instance")
610
- parser.call(s)
611
- end
612
- if defined?(PGArray) && PGArray.respond_to?(:register)
613
- PGArray.register('record', :oid=>2287, :scalar_oid=>2249, :skip_deprecation_warning=>true)
614
- end
615
543
  end
616
544
 
617
545
  module SQL::Builders
@@ -76,8 +76,8 @@
76
76
  #
77
77
  # This feature is mostly useful for a different way to graph tables:
78
78
  #
79
- # DB[:a].join(:b, :id=>:b_id).select(Sequel.pg_row_op(:a).splat(:a),
80
- # Sequel.pg_row_op(:b).splat(:b))
79
+ # DB[:a].join(:b, id: :b_id).select(Sequel.pg_row_op(:a).splat(:a),
80
+ # Sequel.pg_row_op(:b).splat(:b))
81
81
  # # SELECT (a.*)::a, (b.*)::b FROM a INNER JOIN b ON (b.id = a.b_id)
82
82
  # # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
83
83
  #
@@ -88,17 +88,6 @@ module Sequel
88
88
  module Postgres
89
89
  # This class represents a composite type expression reference.
90
90
  class PGRowOp < SQL::PlaceholderLiteralString
91
- OPEN = '('.freeze
92
- Sequel::Deprecation.deprecate_constant(self, :OPEN)
93
- CLOSE_DOT = ').'.freeze
94
- Sequel::Deprecation.deprecate_constant(self, :CLOSE_DOT)
95
- CLOSE_STAR = '.*)'.freeze
96
- Sequel::Deprecation.deprecate_constant(self, :CLOSE_STAR)
97
- CLOSE_STAR_CAST = '.*)::'.freeze
98
- Sequel::Deprecation.deprecate_constant(self, :CLOSE_STAR_CAST)
99
- EMPTY = "".freeze
100
- Sequel::Deprecation.deprecate_constant(self, :EMPTY)
101
-
102
91
  ROW = ['(', '.*)'].freeze.each(&:freeze)
103
92
  ROW_CAST = ['(', '.*)::'].freeze.each(&:freeze)
104
93
  QUALIFY = ['(', ').'].freeze.each(&:freeze)
@@ -37,11 +37,9 @@ module Sequel
37
37
  end
38
38
 
39
39
  module DatasetQuery
40
- Dataset.def_mutation_method(:query, :module=>self)
41
-
42
40
  # Translates a query block into a dataset. Query blocks are an
43
41
  # alternative to Sequel's usual method chaining, by using
44
- # instance_eval with a proxy object:
42
+ # instance_exec with a proxy object:
45
43
  #
46
44
  # dataset = DB[:items].query do
47
45
  # select :x, :y, :z
@@ -54,7 +52,7 @@ module Sequel
54
52
  # dataset = DB[:items].select(:x, :y, :z).where{(x > 1) & (y > 2)}.reverse(:z)
55
53
  def query(&block)
56
54
  query = Dataset::Query.new(self)
57
- query.instance_eval(&block)
55
+ query.instance_exec(&block)
58
56
  query.dataset
59
57
  end
60
58
  end
@@ -71,6 +69,7 @@ module Sequel
71
69
 
72
70
  # Replace the query's dataset with dataset returned by the method call.
73
71
  def method_missing(method, *args, &block)
72
+ # Allow calling private methods, so things like raise works
74
73
  @dataset = @dataset.send(method, *args, &block)
75
74
  raise(Sequel::Error, "method #{method.inspect} did not return a dataset") unless @dataset.is_a?(Dataset)
76
75
  self
@@ -25,12 +25,6 @@
25
25
  #
26
26
  # Related module: Sequel::Dataset::RoundTimestamps
27
27
 
28
- unless RUBY_VERSION >= '1.9'
29
- # :nocov:
30
- raise LoadError, 'the round_timestamps extension only works on ruby 1.9+'
31
- # :nocov:
32
- end
33
-
34
28
  module Sequel
35
29
  class Dataset
36
30
  module RoundTimestamps
@@ -70,7 +70,7 @@ module Sequel
70
70
  end
71
71
 
72
72
  # Dump foreign key constraints for all tables as a migration. This complements
73
- # the :foreign_keys=>false option to dump_schema_migration. This only dumps
73
+ # the foreign_keys: false option to dump_schema_migration. This only dumps
74
74
  # the constraints (not the columns) using alter_table/add_foreign_key with an
75
75
  # array of columns.
76
76
  #
@@ -81,14 +81,14 @@ module Sequel
81
81
  <<END_MIG
82
82
  Sequel.migration do
83
83
  change do
84
- #{ts.sort_by(&:to_s).map{|t| dump_table_foreign_keys(t)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
84
+ #{ts.sort.map{|t| dump_table_foreign_keys(t)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
85
85
  end
86
86
  end
87
87
  END_MIG
88
88
  end
89
89
 
90
90
  # Dump indexes for all tables as a migration. This complements
91
- # the :indexes=>false option to dump_schema_migration. Options:
91
+ # the indexes: false option to dump_schema_migration. Options:
92
92
  # :same_db :: Create a dump for the same database type, so
93
93
  # don't ignore errors if the index statements fail.
94
94
  # :index_names :: If set to false, don't record names of indexes. If
@@ -99,13 +99,13 @@ END_MIG
99
99
  <<END_MIG
100
100
  Sequel.migration do
101
101
  change do
102
- #{ts.sort_by(&:to_s).map{|t| dump_table_indexes(t, :add_index, options)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
102
+ #{ts.sort.map{|t| dump_table_indexes(t, :add_index, options)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
103
103
  end
104
104
  end
105
105
  END_MIG
106
106
  end
107
107
 
108
- # Return a string that contains a Sequel::Migration subclass that when
108
+ # Return a string that contains a Sequel migration that when
109
109
  # run would recreate the database structure. Options:
110
110
  # :same_db :: Don't attempt to translate database types to ruby types.
111
111
  # If this isn't set to true, all database types will be translated to
@@ -132,7 +132,7 @@ END_MIG
132
132
  # Handle skipped foreign keys by adding them at the end via
133
133
  # alter_table/add_foreign_key. Note that skipped foreign keys
134
134
  # probably result in a broken down migration.
135
- sfka = sfk.sort_by{|table, fks| table.to_s}.map{|table, fks| dump_add_fk_constraints(table, fks.values)}
135
+ sfka = sfk.sort.map{|table, fks| dump_add_fk_constraints(table, fks.values)}
136
136
  sfka.join("\n\n").gsub(/^/, ' ') unless sfka.empty?
137
137
  end
138
138
 
@@ -225,7 +225,7 @@ END_MIG
225
225
  sfks = String.new
226
226
  sfks << "alter_table(#{table.inspect}) do\n"
227
227
  sfks << create_table_generator do
228
- fks.sort_by{|fk| fk[:columns].map(&:to_s)}.each do |fk|
228
+ fks.sort_by{|fk| fk[:columns]}.each do |fk|
229
229
  foreign_key fk[:columns], fk
230
230
  end
231
231
  end.dump_constraints.gsub(/^foreign_key /, ' add_foreign_key ')
@@ -236,7 +236,7 @@ END_MIG
236
236
  # string that would add the foreign keys if run in a migration.
237
237
  def dump_table_foreign_keys(table, options=OPTS)
238
238
  if supports_foreign_key_parsing?
239
- fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns].map(&:to_s)}
239
+ fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]}
240
240
  end
241
241
 
242
242
  if fks.nil? || fks.empty?
@@ -256,7 +256,7 @@ END_MIG
256
256
  im = method(:index_to_generator_opts)
257
257
 
258
258
  if options[:indexes] != false && supports_index_parsing?
259
- indexes = indexes(table).sort_by{|k,v| k.to_s}
259
+ indexes = indexes(table).sort
260
260
  end
261
261
 
262
262
  if options[:foreign_keys] != false && supports_foreign_key_parsing?
@@ -296,7 +296,7 @@ END_MIG
296
296
  # creating the index migration.
297
297
  def dump_table_indexes(table, meth, options=OPTS)
298
298
  if supports_index_parsing?
299
- indexes = indexes(table).sort_by{|k,v| k.to_s}
299
+ indexes = indexes(table).sort
300
300
  else
301
301
  return ''
302
302
  end
@@ -335,7 +335,7 @@ END_MIG
335
335
  options[:skipped_foreign_keys] = skipped_foreign_keys
336
336
  tables
337
337
  else
338
- tables.sort_by(&:to_s)
338
+ tables.sort
339
339
  end
340
340
  end
341
341
 
@@ -360,14 +360,14 @@ END_MIG
360
360
  # outstanding foreign keys and skipping those foreign keys.
361
361
  # The skipped foreign keys will be added at the end of the
362
362
  # migration.
363
- skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table.to_s]}.first
363
+ skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table]}.first
364
364
  skip_fks_hash = skipped_foreign_keys[skip_table] = {}
365
365
  skip_fks.each{|fk| skip_fks_hash[fk[:columns]] = fk}
366
366
  this_loop << skip_table
367
367
  end
368
368
 
369
369
  # Add sorted tables from this loop to the final list
370
- sorted_tables.concat(this_loop.sort_by(&:to_s))
370
+ sorted_tables.concat(this_loop.sort)
371
371
 
372
372
  # Remove tables that were handled this loop
373
373
  this_loop.each{|t| table_fks.delete(t)}
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
  #
3
- # The select_remove extension adds Sequel::Dataset#select_remove for removing existing selected
3
+ # The select_remove extension adds select_remove for removing existing selected
4
4
  # columns from a dataset. It's not part of Sequel core as it is rarely needed and has
5
5
  # some corner cases where it can't work correctly.
6
6
  #
@@ -26,8 +26,8 @@ module Sequel
26
26
  # # Assume columns a, b, and c in items table
27
27
  # DB[:items] # SELECT * FROM items
28
28
  # DB[:items].select_remove(:c) # SELECT a, b FROM items
29
- # DB[:items].select(:a, :b___c, :c___b).select_remove(:c) # SELECT a, c AS b FROM items
30
- # DB[:items].select(:a, :b___c, :c___b).select_remove(:c___b) # SELECT a, b AS c FROM items
29
+ # DB[:items].select(:a, Sequel[:b].as(:c), Sequel[:c].as(:b)).select_remove(:c) # SELECT a, c AS b FROM items
30
+ # DB[:items].select(:a, Sequel[:b][:c], Sequel[:c][:b]).select_remove(Sequel[:c][:b]) # SELECT a, b AS c FROM items
31
31
  #
32
32
  # Note that there are a few cases where this method may not work correctly:
33
33
  #
@@ -3,7 +3,7 @@
3
3
  # The split_array_nil extension overrides Sequel's default handling of
4
4
  # IN/NOT IN with arrays of values to do specific nil checking. For example,
5
5
  #
6
- # ds = DB[:table].where(:column=>[1, nil])
6
+ # ds = DB[:table].where(column: [1, nil])
7
7
  #
8
8
  # By default, that produces the following SQL:
9
9
  #
@@ -19,7 +19,7 @@
19
19
  #
20
20
  # Similarly, for NOT IN queries:
21
21
  #
22
- # ds = DB[:table].exclude(:column=>[1, nil])
22
+ # ds = DB[:table].exclude(column: [1, nil])
23
23
  # # Default:
24
24
  # # SELECT * FROM table WHERE (column NOT IN (1, NULL))
25
25
  # # with split_array_nils extension:
@@ -20,7 +20,7 @@
20
20
  # work correctly when used in subqueries:
21
21
  #
22
22
  # ds = DB[:table].comment("Some\r\nComment Here")
23
- # ds.where(:id=>ds).all
23
+ # ds.where(id: ds).all
24
24
  # # SELECT * FROM table WHERE (id IN (SELECT * FROM table -- Some Comment Here
25
25
  # # )) -- Some Comment Here
26
26
  # #
@@ -31,7 +31,7 @@
31
31
  # Due to the use of single line SQL comments and converting all
32
32
  # whitespace to spaces, this should correctly handle even
33
33
  # malicious input. However, it would be unwise to rely on that,
34
- # you should probably attempt to ensure that the argument given
34
+ # you should ensure that the argument given
35
35
  # to Dataset#comment is not derived from user input.
36
36
  #
37
37
  # You can load this extension into specific datasets:
@@ -103,8 +103,7 @@ module Sequel
103
103
  f = f.distinct
104
104
  end
105
105
  literal_append(sql, f)
106
- # SEQUEL5: Remove cubrid
107
- when :mysql, :hsqldb, :cubrid, :h2
106
+ when :mysql, :hsqldb, :h2
108
107
  sql << "GROUP_CONCAT("
109
108
  if distinct
110
109
  sql << "DISTINCT "
@@ -148,6 +147,8 @@ module Sequel
148
147
  def initialize(expr, separator=nil)
149
148
  @expr = expr
150
149
  @separator = separator
150
+ yield self if block_given?
151
+ freeze
151
152
  end
152
153
 
153
154
  # Whether the current expression uses distinct expressions
@@ -157,16 +158,18 @@ module Sequel
157
158
 
158
159
  # Return a modified StringAgg that uses distinct expressions
159
160
  def distinct
160
- sa = dup
161
- sa.instance_variable_set(:@distinct, true)
162
- sa
161
+ self.class.new(@expr, @separator) do |sa|
162
+ sa.instance_variable_set(:@order_expr, @order_expr) if @order_expr
163
+ sa.instance_variable_set(:@distinct, true)
164
+ end
163
165
  end
164
166
 
165
167
  # Return a modified StringAgg with the given order
166
168
  def order(*o)
167
- sa = dup
168
- sa.instance_variable_set(:@order_expr, o.empty? ? nil : o)
169
- sa
169
+ self.class.new(@expr, @separator) do |sa|
170
+ sa.instance_variable_set(:@distinct, @distinct) if @distinct
171
+ sa.instance_variable_set(:@order_expr, o.empty? ? nil : o.freeze)
172
+ end
170
173
  end
171
174
 
172
175
  to_s_method :string_agg_sql