sequel 5.80.0 → 5.92.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 (205) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sequel +9 -4
  3. data/lib/sequel/adapters/ado.rb +1 -1
  4. data/lib/sequel/adapters/ibmdb.rb +1 -0
  5. data/lib/sequel/adapters/jdbc/db2.rb +2 -2
  6. data/lib/sequel/adapters/jdbc/derby.rb +3 -3
  7. data/lib/sequel/adapters/jdbc/h2.rb +2 -2
  8. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -2
  9. data/lib/sequel/adapters/jdbc/jtds.rb +2 -2
  10. data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
  11. data/lib/sequel/adapters/jdbc/oracle.rb +5 -5
  12. data/lib/sequel/adapters/jdbc/postgresql.rb +5 -5
  13. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +6 -6
  14. data/lib/sequel/adapters/jdbc/sqlite.rb +2 -2
  15. data/lib/sequel/adapters/jdbc/sqlserver.rb +2 -2
  16. data/lib/sequel/adapters/jdbc.rb +8 -8
  17. data/lib/sequel/adapters/mysql2.rb +8 -1
  18. data/lib/sequel/adapters/shared/access.rb +1 -0
  19. data/lib/sequel/adapters/shared/db2.rb +1 -1
  20. data/lib/sequel/adapters/shared/mssql.rb +18 -5
  21. data/lib/sequel/adapters/shared/mysql.rb +8 -4
  22. data/lib/sequel/adapters/shared/oracle.rb +1 -0
  23. data/lib/sequel/adapters/shared/postgres.rb +106 -13
  24. data/lib/sequel/adapters/shared/sqlite.rb +4 -2
  25. data/lib/sequel/adapters/sqlite.rb +4 -0
  26. data/lib/sequel/adapters/trilogy.rb +1 -2
  27. data/lib/sequel/connection_pool/sharded_threaded.rb +26 -10
  28. data/lib/sequel/connection_pool/threaded.rb +26 -10
  29. data/lib/sequel/connection_pool.rb +2 -2
  30. data/lib/sequel/core.rb +15 -0
  31. data/lib/sequel/database/connecting.rb +20 -26
  32. data/lib/sequel/database/dataset_defaults.rb +3 -3
  33. data/lib/sequel/database/misc.rb +46 -10
  34. data/lib/sequel/database/query.rb +11 -11
  35. data/lib/sequel/database/schema_generator.rb +8 -0
  36. data/lib/sequel/database/schema_methods.rb +17 -1
  37. data/lib/sequel/dataset/actions.rb +9 -1
  38. data/lib/sequel/dataset/deprecated_singleton_class_methods.rb +1 -1
  39. data/lib/sequel/dataset/prepared_statements.rb +2 -1
  40. data/lib/sequel/dataset/query.rb +9 -5
  41. data/lib/sequel/dataset/sql.rb +25 -5
  42. data/lib/sequel/extensions/caller_logging.rb +2 -0
  43. data/lib/sequel/extensions/connection_validator.rb +15 -10
  44. data/lib/sequel/extensions/dataset_run.rb +41 -0
  45. data/lib/sequel/extensions/migration.rb +23 -3
  46. data/lib/sequel/extensions/null_dataset.rb +2 -2
  47. data/lib/sequel/extensions/pg_auto_parameterize.rb +1 -1
  48. data/lib/sequel/extensions/pg_auto_parameterize_in_array.rb +93 -10
  49. data/lib/sequel/extensions/pg_enum.rb +3 -3
  50. data/lib/sequel/extensions/pg_json_ops.rb +642 -9
  51. data/lib/sequel/extensions/pg_row.rb +3 -1
  52. data/lib/sequel/extensions/pg_schema_caching.rb +90 -0
  53. data/lib/sequel/extensions/provenance.rb +2 -0
  54. data/lib/sequel/extensions/query_blocker.rb +172 -0
  55. data/lib/sequel/extensions/schema_caching.rb +24 -9
  56. data/lib/sequel/extensions/schema_dumper.rb +16 -4
  57. data/lib/sequel/extensions/sqlite_json_ops.rb +1 -1
  58. data/lib/sequel/extensions/stdio_logger.rb +48 -0
  59. data/lib/sequel/extensions/string_agg.rb +17 -4
  60. data/lib/sequel/extensions/temporarily_release_connection.rb +178 -0
  61. data/lib/sequel/extensions/virtual_row_method_block.rb +1 -0
  62. data/lib/sequel/model/associations.rb +28 -3
  63. data/lib/sequel/model/base.rb +67 -18
  64. data/lib/sequel/plugins/association_pks.rb +1 -1
  65. data/lib/sequel/plugins/column_encryption.rb +1 -1
  66. data/lib/sequel/plugins/composition.rb +1 -1
  67. data/lib/sequel/plugins/defaults_setter.rb +16 -4
  68. data/lib/sequel/plugins/enum.rb +1 -1
  69. data/lib/sequel/plugins/forbid_lazy_load.rb +14 -1
  70. data/lib/sequel/plugins/input_transformer.rb +1 -1
  71. data/lib/sequel/plugins/inspect_pk.rb +44 -0
  72. data/lib/sequel/plugins/instance_filters.rb +4 -1
  73. data/lib/sequel/plugins/inverted_subsets.rb +1 -0
  74. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  75. data/lib/sequel/plugins/nested_attributes.rb +10 -5
  76. data/lib/sequel/plugins/optimistic_locking.rb +2 -0
  77. data/lib/sequel/plugins/paged_operations.rb +5 -2
  78. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +6 -1
  79. data/lib/sequel/plugins/pg_auto_validate_enums.rb +88 -0
  80. data/lib/sequel/plugins/pg_eager_any_typed_array.rb +95 -0
  81. data/lib/sequel/plugins/rcte_tree.rb +1 -1
  82. data/lib/sequel/plugins/serialization.rb +11 -5
  83. data/lib/sequel/plugins/sql_comments.rb +7 -2
  84. data/lib/sequel/plugins/static_cache_cache.rb +50 -13
  85. data/lib/sequel/plugins/subset_conditions.rb +85 -5
  86. data/lib/sequel/plugins/subset_static_cache.rb +263 -0
  87. data/lib/sequel/plugins/tactical_eager_loading.rb +6 -2
  88. data/lib/sequel/plugins/validate_associated.rb +1 -1
  89. data/lib/sequel/sql.rb +16 -6
  90. data/lib/sequel/version.rb +1 -1
  91. metadata +12 -234
  92. data/CHANGELOG +0 -1355
  93. data/README.rdoc +0 -936
  94. data/doc/advanced_associations.rdoc +0 -884
  95. data/doc/association_basics.rdoc +0 -1859
  96. data/doc/bin_sequel.rdoc +0 -146
  97. data/doc/cheat_sheet.rdoc +0 -255
  98. data/doc/code_order.rdoc +0 -102
  99. data/doc/core_extensions.rdoc +0 -405
  100. data/doc/dataset_basics.rdoc +0 -96
  101. data/doc/dataset_filtering.rdoc +0 -222
  102. data/doc/extensions.rdoc +0 -77
  103. data/doc/fork_safety.rdoc +0 -84
  104. data/doc/mass_assignment.rdoc +0 -98
  105. data/doc/migration.rdoc +0 -660
  106. data/doc/model_dataset_method_design.rdoc +0 -129
  107. data/doc/model_hooks.rdoc +0 -254
  108. data/doc/model_plugins.rdoc +0 -270
  109. data/doc/mssql_stored_procedures.rdoc +0 -43
  110. data/doc/object_model.rdoc +0 -563
  111. data/doc/opening_databases.rdoc +0 -436
  112. data/doc/postgresql.rdoc +0 -611
  113. data/doc/prepared_statements.rdoc +0 -144
  114. data/doc/querying.rdoc +0 -1070
  115. data/doc/reflection.rdoc +0 -120
  116. data/doc/release_notes/5.0.0.txt +0 -159
  117. data/doc/release_notes/5.1.0.txt +0 -31
  118. data/doc/release_notes/5.10.0.txt +0 -84
  119. data/doc/release_notes/5.11.0.txt +0 -83
  120. data/doc/release_notes/5.12.0.txt +0 -141
  121. data/doc/release_notes/5.13.0.txt +0 -27
  122. data/doc/release_notes/5.14.0.txt +0 -63
  123. data/doc/release_notes/5.15.0.txt +0 -39
  124. data/doc/release_notes/5.16.0.txt +0 -110
  125. data/doc/release_notes/5.17.0.txt +0 -31
  126. data/doc/release_notes/5.18.0.txt +0 -69
  127. data/doc/release_notes/5.19.0.txt +0 -28
  128. data/doc/release_notes/5.2.0.txt +0 -33
  129. data/doc/release_notes/5.20.0.txt +0 -89
  130. data/doc/release_notes/5.21.0.txt +0 -87
  131. data/doc/release_notes/5.22.0.txt +0 -48
  132. data/doc/release_notes/5.23.0.txt +0 -56
  133. data/doc/release_notes/5.24.0.txt +0 -56
  134. data/doc/release_notes/5.25.0.txt +0 -32
  135. data/doc/release_notes/5.26.0.txt +0 -35
  136. data/doc/release_notes/5.27.0.txt +0 -21
  137. data/doc/release_notes/5.28.0.txt +0 -16
  138. data/doc/release_notes/5.29.0.txt +0 -22
  139. data/doc/release_notes/5.3.0.txt +0 -121
  140. data/doc/release_notes/5.30.0.txt +0 -20
  141. data/doc/release_notes/5.31.0.txt +0 -148
  142. data/doc/release_notes/5.32.0.txt +0 -46
  143. data/doc/release_notes/5.33.0.txt +0 -24
  144. data/doc/release_notes/5.34.0.txt +0 -40
  145. data/doc/release_notes/5.35.0.txt +0 -56
  146. data/doc/release_notes/5.36.0.txt +0 -60
  147. data/doc/release_notes/5.37.0.txt +0 -30
  148. data/doc/release_notes/5.38.0.txt +0 -28
  149. data/doc/release_notes/5.39.0.txt +0 -19
  150. data/doc/release_notes/5.4.0.txt +0 -80
  151. data/doc/release_notes/5.40.0.txt +0 -40
  152. data/doc/release_notes/5.41.0.txt +0 -25
  153. data/doc/release_notes/5.42.0.txt +0 -136
  154. data/doc/release_notes/5.43.0.txt +0 -98
  155. data/doc/release_notes/5.44.0.txt +0 -32
  156. data/doc/release_notes/5.45.0.txt +0 -34
  157. data/doc/release_notes/5.46.0.txt +0 -87
  158. data/doc/release_notes/5.47.0.txt +0 -59
  159. data/doc/release_notes/5.48.0.txt +0 -14
  160. data/doc/release_notes/5.49.0.txt +0 -59
  161. data/doc/release_notes/5.5.0.txt +0 -61
  162. data/doc/release_notes/5.50.0.txt +0 -78
  163. data/doc/release_notes/5.51.0.txt +0 -47
  164. data/doc/release_notes/5.52.0.txt +0 -87
  165. data/doc/release_notes/5.53.0.txt +0 -23
  166. data/doc/release_notes/5.54.0.txt +0 -27
  167. data/doc/release_notes/5.55.0.txt +0 -21
  168. data/doc/release_notes/5.56.0.txt +0 -51
  169. data/doc/release_notes/5.57.0.txt +0 -23
  170. data/doc/release_notes/5.58.0.txt +0 -31
  171. data/doc/release_notes/5.59.0.txt +0 -73
  172. data/doc/release_notes/5.6.0.txt +0 -31
  173. data/doc/release_notes/5.60.0.txt +0 -22
  174. data/doc/release_notes/5.61.0.txt +0 -43
  175. data/doc/release_notes/5.62.0.txt +0 -132
  176. data/doc/release_notes/5.63.0.txt +0 -33
  177. data/doc/release_notes/5.64.0.txt +0 -50
  178. data/doc/release_notes/5.65.0.txt +0 -21
  179. data/doc/release_notes/5.66.0.txt +0 -24
  180. data/doc/release_notes/5.67.0.txt +0 -32
  181. data/doc/release_notes/5.68.0.txt +0 -61
  182. data/doc/release_notes/5.69.0.txt +0 -26
  183. data/doc/release_notes/5.7.0.txt +0 -108
  184. data/doc/release_notes/5.70.0.txt +0 -35
  185. data/doc/release_notes/5.71.0.txt +0 -21
  186. data/doc/release_notes/5.72.0.txt +0 -33
  187. data/doc/release_notes/5.73.0.txt +0 -66
  188. data/doc/release_notes/5.74.0.txt +0 -45
  189. data/doc/release_notes/5.75.0.txt +0 -35
  190. data/doc/release_notes/5.76.0.txt +0 -86
  191. data/doc/release_notes/5.77.0.txt +0 -63
  192. data/doc/release_notes/5.78.0.txt +0 -67
  193. data/doc/release_notes/5.79.0.txt +0 -28
  194. data/doc/release_notes/5.8.0.txt +0 -170
  195. data/doc/release_notes/5.80.0.txt +0 -40
  196. data/doc/release_notes/5.9.0.txt +0 -99
  197. data/doc/schema_modification.rdoc +0 -679
  198. data/doc/security.rdoc +0 -443
  199. data/doc/sharding.rdoc +0 -286
  200. data/doc/sql.rdoc +0 -648
  201. data/doc/testing.rdoc +0 -190
  202. data/doc/thread_safety.rdoc +0 -15
  203. data/doc/transactions.rdoc +0 -250
  204. data/doc/validations.rdoc +0 -558
  205. data/doc/virtual_rows.rdoc +0 -265
@@ -1,59 +0,0 @@
1
- = New Features
2
-
3
- * Sequel now supports using separate queries for each table for both
4
- lazy and eager loading of the following associations:
5
-
6
- * many_to_many
7
- * one_through_one
8
- * many_through_many # many_through_many plugin
9
- * one_through_many # many_through_many plugin
10
-
11
- For many_to_many/one_through_one, you specify the :join_table_db
12
- association option, which should be a Sequel::Database instance
13
- containing the join table. It is possible for the current table,
14
- join table, and associated table all to be in separate databases:
15
-
16
- JOIN_TABLE_DB = Sequel.connect('...')
17
- Album.many_to_many :artists, join_table_db: JOIN_TABLE_DB
18
-
19
- For many_through_many/one_through_many, you can use the :db option
20
- in each join table specification. All join tables can be in
21
- separate databases:
22
-
23
- JTDB1 = Sequel.connect('...')
24
- JTDB2 = Sequel.connect('...')
25
- # Tracks on all albums this artist appears on
26
- Artist.many_through_many :album_tracks, [
27
- {table: :albums_artists, left: :artist_id, right: :album_id, db: JTDB1},
28
- {table: :artists, left: :id, right: :id, db: JTDB2}
29
- ],
30
- class: :Track, right_primary_key: :album_id
31
-
32
- * The :allow_eager_graph association option has been added. Setting
33
- this option to false will disallow eager loading via #eager_graph.
34
- This is useful if you can eager load the association via #eager,
35
- but not with #eager_graph.
36
-
37
- * The :allow_filtering_by association option has been added. Setting
38
- this option to false will disallow the use of filtering by
39
- associations for the association.
40
-
41
- * Dataset#returning is now supported on SQLite 3.35.0+. To work around
42
- bugs in the SQLite implementation, identifiers used in the RETURNING
43
- clause are automatically aliased. Additionally, prepared statements
44
- that use the RETURNING clause on SQLite seem to have issues, so the
45
- prepared_statements plugin does not automatically use prepared
46
- statements on SQLite for queries that use the RETURNING clause.
47
-
48
- * Database#rename_tables has been added on MySQL to support renaming
49
- multiple tables in the same query.
50
-
51
- = Other Improvements
52
-
53
- * The unused_associations plugin now tracks access to the association
54
- reflection for associations, so it will no longer show an
55
- association as completely unused if something is accessing the
56
- association reflection for it. This eliminates most of the false
57
- positives, where the plugin would show an association as unused
58
- even though something was using it without calling the association
59
- methods.
@@ -1,14 +0,0 @@
1
- = New Features
2
-
3
- * A Sequel::Database#like_without_collate accessor has been added on
4
- Microsoft SQL Server, which avoids using the COLLATE clause for
5
- LIKE expressions. This can speed up query performance significantly.
6
-
7
- * A private Sequel::Model::Errors#full_message method has been added
8
- to make it easier to support internationalization for Sequel::Model
9
- error messages.
10
-
11
- = Other Improvements
12
-
13
- * The association reflection tracking in the unused_associations
14
- plugin now works correctly when combining coverage runs.
@@ -1,59 +0,0 @@
1
- = New Features
2
-
3
- * Model#validates_no_null_byte has been added to the
4
- validation_helpers. It checks that the value being validated does
5
- not contain an ASCII NUL ('\0') byte. Some databases will return an
6
- error if a string contains a NUL byte.
7
-
8
- The auto_validations plugin will now automatically add no_null_byte
9
- validations for all string columns in the model's table. This will
10
- change exceptions raised by NUL bytes from database errors to
11
- validation failures.
12
-
13
- If you are using auto_validations and would like to have a table
14
- accept NUL bytes in string columns, use the following code inside
15
- the model:
16
-
17
- skip_auto_validations(:no_null_byte)
18
-
19
- * JSONB subscripts are now supported on PostgreSQL 14+ when using the
20
- pg_json_ops extension. You can use JSONB subscripts to more easily
21
- update part of a JSONB column:
22
-
23
- DB[:table].update(Sequel.pg_jsonb_op(:column)['key'] => 'value')
24
- UPDATE "table" SET "column"['key'] = 'value'
25
-
26
- * hstore subscripts are now supported on PostgreSQL 14+ when using the
27
- pg_hstore_ops extension. You can use hstore subscripts to more
28
- easily update part of an hstore column:
29
-
30
- DB[:table].update(Sequel.hstore_op(:column)['key'] => 'value')
31
- UPDATE "table" SET "column"['key'] = 'value'
32
-
33
- * Sequel now supports table aliases for JOIN USING columns on
34
- PostgreSQL 14+. These allow you to reference the USING columns in
35
- the query using a qualified identifier. To use this support, pass an
36
- SQL::AliasedExpression as the expression to join on:
37
-
38
- DB[:t1].join(:t2, Sequel.as([:c1, :c2], :alias))
39
- # SELECT * FROM "t1" INNER JOIN "t2" USING ("c1", "c2") AS "alias"
40
-
41
- * Database#create_trigger on PostgreSQL now supports a :replace option
42
- for CREATE OR REPLACE TRIGGER (supported in PostgreSQL 14+).
43
-
44
- * SQL::Expression#sequel_ast_transform has been added to support
45
- AST transforms of custom expression classes.
46
-
47
- = Other Improvements
48
-
49
- * Sequel now supports calling PostgreSQL procedures without arguments
50
- when using Database#call_procedure. Previously, attempts to call
51
- procuredures without arguments would call the procedure with a
52
- single NULL argument.
53
-
54
- * Sequel now uses defined?(yield) instead of block_given? internally
55
- for better performance on CRuby. defined?(yield) is faster as it is
56
- built into the VM, while block_given? is a regular method and has
57
- the overhead of calling a regular method. Note that defined?(yield)
58
- is not implemented correctly on JRuby before 9.0.0.0, so this
59
- release of Sequel drops support for JRuby versions before 9.0.0.0.
@@ -1,61 +0,0 @@
1
- = New Features
2
-
3
- * The defaults_setter plugin now supports a :cache option, which
4
- will cache default values in the model object's values hash:
5
-
6
- Model.plugin :defaults_setter
7
- o = Model.new
8
- o.column # => 1 # default value
9
- o.values # => {}
10
-
11
- Model.plugin :defaults_setter, cache: true
12
- o = Model.new
13
- o.column # => 1 # default value
14
- o.values # => {:column => 1}
15
-
16
- * The pg_array extension now sets a :callable_default schema entry
17
- for recognized empty array defaults.
18
-
19
- * The pg_hstore extension now sets a :callable_default schema entry
20
- for recognized empty hstore defaults.
21
-
22
- * The pg_json extension now sets a :callable_default schema entry for
23
- recognized empty json/jsonb array/hash defaults.
24
-
25
- * The pg_inet extension now sets a :ruby_default schema entry for
26
- recognized inet/cidr defaults.
27
-
28
- * The pg_range extension now sets a :ruby_default schema entry for
29
- recognized range defaults.
30
-
31
- * The defaults_setter plugin will now give preference to a
32
- :callable_default schema entry over a :ruby_default schema entry.
33
- Combined with the other changes listed above, this makes default
34
- values recognized by the pg_array, pg_hstore, and pg_json extensions
35
- work well if the defaults_setter :cache option is also used.
36
-
37
- = Other Improvements
38
-
39
- * The modification_detection plugin no longer breaks column change
40
- detection for new objects.
41
-
42
- * Database#copy_table in the postgres adapter now handles errors that
43
- occur when processing rows. Previously, an exception could be
44
- raised on the next query in that case.
45
-
46
- * The results of the changed_columns method are now cached in many
47
- places internally where they are called in a loop. This results
48
- in better performance, especially if the modification_detection or
49
- serialization_modification_detection plugins are used.
50
-
51
- = Backwards Compatibility
52
-
53
- * The pg_interval extension now sets a :ruby_default schema entry for
54
- recognized interval defaults to the same value Sequel would return
55
- if the default value was returned. Previously, Sequel would use a
56
- string in the :ruby_schema schema value.
57
-
58
- * String values in hashes returned by Database#schema are now frozen
59
- to prevent possible thread-safety issues and issues with
60
- unintentional modification of a shared string. The hashes
61
- themselves are not frozen and can still be modified.
@@ -1,78 +0,0 @@
1
- = New Features
2
-
3
- * A pg_multirange extension has been added with support for PostgreSQL
4
- 14+ multirange types. Multirange types are similar to an array of
5
- ranges, where a value is in the multirange if it is in any of the
6
- ranges contained in the multirange. Multiranges are useful when you
7
- need to check against multiple ranges that do not overlap.
8
-
9
- You can create multiranges using Sequel.pg_multirange, passing
10
- an array of ranges and a multirange type:
11
-
12
- DB.extension :pg_multirange
13
- multirange = Sequel.pg_multirange(array_of_date_ranges, :datemultirange)
14
-
15
- Sequel.pg_multirange returns a PGMultiRange, which operates as a
16
- delegate to an array of PGRange objects. Behavior of the object
17
- is similar to an array, except that cover? is supported, which will
18
- test if any of the included ranges covers the argument:
19
-
20
- multirange.cover?(Date.today)
21
-
22
- Like the pg_range extension, this also supports registering custom
23
- multirange types, and using multirange types as bound variables.
24
-
25
- The pg_range_ops extension now supports both ranges and multiranges,
26
- with a few new methods added to Postgres::RangeOp for converting
27
- between them:
28
-
29
- * range_merge
30
- * multirange
31
- * and unnest
32
-
33
- * An sql_log_normalizer extension has been added for normalizing
34
- logged SQL, replacing numbers and strings inside the SQL string
35
- with question marks. This is useful for analytics and sensitive
36
- data.
37
-
38
- DB[:table].first(a: 1, b: 'something')
39
- # Without sql_log_normalizer extension, logged SQL is:
40
- # SELECT * FROM "table" WHERE (("a" = 1) AND ("b" = 'something')) LIMIT 1
41
-
42
- DB.extension :sql_log_normalizer
43
- DB[:table].first(a: 1, b: 'something')
44
- # With sql_log_normalizer_extension, logged SQL is:
45
- # SELECT * FROM "table" WHERE (("a" = ?) AND ("b" = ?)) LIMIT ?
46
-
47
- This extension scans the logged SQL for numbers and strings,
48
- attempting to support the database's rules for string quoting. This
49
- means it should work with SQL that Sequel didn't itself create.
50
- However, there are corner cases that the extension doesn't handle,
51
- such as the use of apostrophes inside quoted identifiers, and
52
- potentially other cases of database specific SQL where the normal
53
- string quoting rules are changed, such as the use of escape strings
54
- on PostgreSQL (E'escape string').
55
-
56
- * A :before_preconnect Database option has been added. This is useful
57
- for configuring extensions added via :preconnect_extensions before
58
- the connection takes place.
59
-
60
- = Other Improvements
61
-
62
- * Dataset#columns! now uses a LIMIT 0 query instead of a LIMIT 1 query
63
- by default. This can improve performance in cases where the row
64
- returned would be large. Some databases do not support a LIMIT 0
65
- query, and some adapters that ship with Sequel have been updated to
66
- continue using LIMIT 1. Custom adapters should be updated to use
67
- LIMIT 1 if the database does not support LIMIT 0.
68
-
69
- * The lazy_attributes plugin no longer modifies the database schema.
70
- Previously, it could modify the database schema indirectly,
71
- resulting in the loss of typecasting for models that were not
72
- based on a single table or view, such as usage with the
73
- class_table_inheritance plugin.
74
-
75
- * Model#freeze in the composition, serialization, and
76
- serialization_modification_detection plugins now returns self. In
77
- addition to being more correct, this fixes usage of these plugins
78
- with the static_cache plugin.
@@ -1,47 +0,0 @@
1
- = New Features
2
-
3
- * On PostgreSQL 14+, Dataset#with_recursive now supports :search and
4
- :cycle options for result ordering and cycle detection. These use
5
- the SEARCH and CYCLE clauses added in PostgreSQL 14:
6
-
7
- DB[:t].with_recursive(:t,
8
- DB[:i1].where(parent_id: nil),
9
- DB[:i1].join(:t, id: :parent_id).select_all(:i1),
10
- search: {by: :id, type: :breadth},
11
- cycle: {columns: :id, cycle_value: 1, noncycle_value: 2})
12
-
13
- # WITH RECURSIVE t AS (
14
- # SELECT * FROM i1 WHERE (parent_id IS NULL)
15
- # UNION ALL
16
- # (SELECT i1.* FROM i1 INNER JOIN t ON (t.id = i1.parent_id))
17
- # )
18
- # SEARCH BREADTH FIRST BY id SET ordercol
19
- # CYCLE id SET is_cycle TO 1 DEFAULT 2 USING path
20
-
21
- * On MySQL, column schema hashes now contain an :extra entry, which
22
- contains the Extra string returned in MySQL's DESCRIBE results
23
- for the column.
24
-
25
- = Other Improvements
26
-
27
- * When eager loading via the tactical_eager_loading plugin, objects
28
- that already have an association loaded will not have it reloaded
29
- unless the :eager_reload option is given.
30
-
31
- * When cloning an association and using a different :class option
32
- than the cloned association, the :class option given when cloning
33
- will now take precedence over the :class option for the cloned
34
- association.
35
-
36
- * When using the mock postgres adapter, the adapter defaults to
37
- supporting PostgreSQL 14 (previously, it defaulted to supporting
38
- PostgreSQL 9.5).
39
-
40
- * Sequel now avoids a method redefined warning in the lazy attributes
41
- plugin in verbose warnings mode.
42
-
43
- = Other
44
-
45
- * Sequel's primary discussion forum is now GitHub Discussions. The
46
- sequel-talk Google Group is still available for users who would
47
- prefer to use that instead.
@@ -1,87 +0,0 @@
1
- = New Features
2
-
3
- * When the sql_comments Database extension is used,
4
- Database#with_comments is now added, which can be used for including
5
- comments for all queries executed inside a given block. This can
6
- be useful if you want to analyze database query logs, and want to
7
- group all related queries:
8
-
9
- DB.with_comments(model: Album, action: :all) do
10
- DB[:albums].all
11
- # SELECT * FROM albums -- model:Album,action:all
12
- end
13
-
14
- * An sql_comments plugin has been added, which will automatically
15
- add SQL comments for all queries generated by model class, instance
16
- and dataset methods:
17
-
18
- Album.plugin :sql_comments
19
-
20
- album = Album[1]
21
- # SELECT * FROM albums WHERE (id = 1) LIMIT 1
22
- # -- model:Album,method_type:class,method:[]
23
-
24
- album.update(:name=>'A')
25
- # UPDATE albums SET name = 'baz' WHERE (id = 1)
26
- # -- model:Album,method_type:instance,method:update
27
-
28
- Album.where(id: 1).delete
29
- # DELETE FROM albums WHERE (id = 1)
30
- # -- model:Album,method_type:dataset,method:delete
31
-
32
- This plugin requires you have loaded the sql_comments Database
33
- extension into the related Database before use.
34
-
35
- * A date_parse_input_handler extension has been added to support
36
- custom handling of input to date parsing methods. Among other
37
- things, you can use this to limit the length of strings that
38
- will be parsed, which can prevent ArgumentErrors in newer Ruby
39
- versions:
40
-
41
- Sequel.extension :date_parse_input_handler
42
- Sequel.date_parse_input_handler do |string|
43
- string.b[0, 128]
44
- end
45
-
46
- = Other Improvements
47
-
48
- * On Ruby 3.1, the core_refinements extension now avoids the
49
- deprecated Refinement#include, switching to
50
- Refinement#import_methods.
51
-
52
- * On Ruby 3.1, the subclasses plugin will use Ruby's native support
53
- for Class#subclasses.
54
-
55
- * The subclasses plugin has renamed descendents to descendants and
56
- freeze_descendents to freeze_descendants. The previous method
57
- names are still available as aliases.
58
-
59
- * The :ruby_default schema entry for datetime/timestamp columns now
60
- respects Sequel.datetime_class. Previously, the value for the
61
- :ruby_default schema entry would always be a DateTime value for
62
- such columns.
63
-
64
- * The pg_interval extension now works with ActiveSupport 7.0.
65
-
66
- * The shared postgres adapter now respects
67
- Database#default_string_column_size for setting the size of string
68
- columns that don't use text as the database type.
69
-
70
- * Database#supports_check_constraints? now returns true on MySQL
71
- 8.0.19+. This fixes drop_constraint in certain cases when combining
72
- the constraint dropping with other changes in the same alter_table
73
- block.
74
-
75
- * The mysql adapter now supports the ruby-mysql 3 API (ruby-mysql
76
- is a pure-ruby MySQL driver).
77
-
78
- * The mysql adapter no longer uses the connection's server_version
79
- method if it is defined, as the method does not return the
80
- correct value when using the ruby-mysql driver with MariaDB.
81
-
82
- * Comments added by the sql_comments extension no longer modify
83
- cached SQL for a dataset.
84
-
85
- = Other
86
-
87
- * This is Sequel's 250th release!
@@ -1,23 +0,0 @@
1
- = Improvements
2
-
3
- * The jdbc/h2 subadapter now supports H2 version 2.0. It continues to
4
- support H2 versions 1.3 and 1.4.
5
-
6
- * The mysql2 adapter's prepared statement support now reuses existing
7
- native prepared statements, instead of only binding variables on
8
- newly prepared statements. This was the intended behavior
9
- previously, and should result in increased performance in cases
10
- where preparing a query takes significant time.
11
-
12
- * The subclasses plugin now ignores an existing Class#subclasses
13
- method if it is defined in Ruby. This fixes cases where usage of
14
- ActiveSupport would break the subclasses plugin.
15
-
16
- * Database#call_sproc in the jdbc adapter will now always close the
17
- prepared call it creates. Before, if there was an exception raised
18
- when setting the arguments for the prepared call, the prepared call
19
- would not be closed.
20
-
21
- * A more appropriate error is now issued if you try to use the
22
- column_encryption plugin to encrypt a column without setting up an
23
- encryption key.
@@ -1,27 +0,0 @@
1
- = New Feature
2
-
3
- * An enum plugin has been added. This plugin allows you to create
4
- model-level enums, giving names to underlying values of a column.
5
- For example:
6
-
7
- Album.plugin :enum
8
- Album.enum :status_id, good: 1, bad: 2
9
-
10
- Adds Album#good! and Album#bad! for changing the status_id to 1 or
11
- 2 respectively. It adds Album#good? and Album#bad? for checking
12
- whether the status_id is 1 or 2 respectively. It overrides
13
- Album#status_id to return :good or :bad instead of 1 or 2,
14
- respectively, and overrides Album#status_id= to accept :good or
15
- :bad instead of 1 or 2 respectively.
16
-
17
- Additionally, it adds good and bad dataset methods for filtering
18
- the model's dataset to records where status_id is 1 or 2
19
- respectively. It also adds not_good and not_bad dataset methods
20
- for filtering the model's dataset to records where status_id is not
21
- 1 or not 2 respectively.
22
-
23
- You can use :prefix and :suffix options when calling enum to
24
- add a prefix or suffix to the method names created. You can
25
- set the :override_accessors option to false to not override
26
- the accessor methods for the column, and set the :dataset_methods
27
- option to false to not add dataset methods.
@@ -1,21 +0,0 @@
1
- = New Features
2
-
3
- * An auto_restrict_eager_graph plugin has been added for automatically
4
- disallowing the use of eager_graph with associations using blocks but
5
- lacking graph_* options. This can prevent potentionally invalid usage,
6
- as the restrictions added by the block are not used by eager_graph.
7
-
8
- * The sqlite adapter now supports the :setup_regexp_function
9
- Database option. This option will define a REGEXP function in the
10
- database that will allow regexp support in queries, such as:
11
-
12
- DB[:table].where(column: /(some|pattern)/)
13
-
14
- Note that this creates a Ruby Regexp object per column value tested,
15
- so it isn't the most optimal approach.
16
-
17
- = Other Improvements
18
-
19
- * Calling dataset aggregate methods such as #max on a model dataset now
20
- works correctly. Previously, it could fail if called enough times to
21
- optimize using a placeholder literalizer.
@@ -1,51 +0,0 @@
1
- = New Features
2
-
3
- * On SQLite, Database#create_table now supports a :strict option to
4
- use the STRICT keyword when creating the table. When this option
5
- is used, SQLite will enforce the types for each column. When using
6
- this option, you are limited to using the following column types:
7
- int, integer, real, text, blob, and any (any allows for dynamic
8
- types).
9
-
10
- * An sqlite_json_ops extension has been added, providing DSL support
11
- for JSON functions and operators supported in SQLite 3.38.0. Usage
12
- is similar to the pg_json_ops extension. First, you create an
13
- appropriate object:
14
-
15
- j = Sequel.sqlite_json_op(:json_column)
16
- # or:
17
- j = Sequel[:json_column].sqlite_json_op
18
-
19
- Then, you call methods on that object to create expressions for the
20
- JSON functions and operators:
21
-
22
- j[1] # (json_column ->> 1)
23
- j.get_text(1) # (json_column -> 1)
24
- j.extract('$.a') # json_extract(json_column, '$.a')
25
-
26
- j.array_length # json_array_length(json_column)
27
- j.type # json_type(json_column)
28
- j.valid # json_valid(json_column)
29
- j.json # json(json_column)
30
-
31
- j.insert('$.a', 1) # json_insert(json_column, '$.a', 1)
32
- j.set('$.a', 1) # json_set(json_column, '$.a', 1)
33
- j.replace('$.a', 1) # json_replace(json_column, '$.a', 1)
34
- j.remove('$.a') # json_remove(json_column, '$.a')
35
- j.patch('{"a":2}') # json_patch(json_column, '{"a":2}')
36
-
37
- j.each # json_each(json_column)
38
- j.tree # json_tree(json_column)
39
-
40
- = Other Improvements
41
-
42
- * The alter_table add_column and add_foreign_key methods now support
43
- the :index option to create an index on the added column, for
44
- compatibility with the :index option on the create_table column and
45
- foreign_key methods.
46
-
47
- * The schema_dumper extension now treats the "INTEGER" type the same
48
- as the "integer" type. This fixes some behavior when using SQLite
49
- 3.37.0+.
50
-
51
- * Sequel's website has a much improved visual design.
@@ -1,23 +0,0 @@
1
- = New Features
2
-
3
- * An is_distinct_from extension has been added with support for the
4
- SQL IS DISTINCT FROM operator. This operator is similar to the
5
- not equals operator, except in terms of NULL handling. It returns
6
- true if only one side is NULL, and false if both sides are NULL.
7
- You can call is_distinct_from on Sequel itself or on Sequel objects:
8
-
9
- Sequel.is_distinct_from(:column_a, :column_b)
10
- Sequel[:column_a].is_distinct_from(:column_b)
11
- # (column_a IS DISTINCT FROM column_b)
12
-
13
- On databases not supporting IS DISTINCT FROM, support is emulated
14
- using a CASE statement.
15
-
16
- * Column definitions on MySQL can use the :on_update_current_timestamp
17
- option for ON UPDATE CURRENT_TIMESTAMP, which creates a column that
18
- will automatically have its value set to CURRENT_TIMESTAMP on every
19
- update.
20
-
21
- * Database#create_function on PostgreSQL now supports a :parallel
22
- option to set the thread safety of the funciton. The value should
23
- be :safe, :unsafe, or :restricted.
@@ -1,31 +0,0 @@
1
- = New Features
2
-
3
- * Dataset#merge and related #merge_* methods have been added for the
4
- MERGE statement. MERGE is supported on PostgreSQL 15+, Oracle,
5
- Microsoft SQL Server, DB2, H2, HSQLDB, and Derby. You can use MERGE
6
- to insert, update, and/or delete in a single query. You call
7
- the #merge_* methods to setup the MERGE statement, and #merge to
8
- execute it on the database:
9
-
10
- ds = DB[:m1]
11
- merge_using(:m2, i1: :i2).
12
- merge_insert(i1: :i2, a: Sequel[:b]+11).
13
- merge_delete{a > 30}.
14
- merge_update(i1: Sequel[:i1]+:i2+10, a: Sequel[:a]+:b+20)
15
-
16
- ds.merge
17
- # MERGE INTO m1 USING m2 ON (i1 = i2)
18
- # WHEN NOT MATCHED THEN INSERT (i1, a) VALUES (i2, (b + 11))
19
- # WHEN MATCHED AND (a > 30) THEN DELETE
20
- # WHEN MATCHED THEN UPDATE SET i1 = (i1 + i2 + 10), a = (a + b + 20)
21
-
22
- On PostgreSQL, the following additional MERGE related methods are
23
- available:
24
-
25
- * #merge_do_nothing_when_matched
26
- * #merge_do_nothing_when_not_matched
27
-
28
- * A :disable_split_materialized Database option is now supported on
29
- MySQL. This disables split_materialized support in the optimizer,
30
- working around a bug in MariaDB 10.5+ that causes failures in
31
- Sequel's association tests.
@@ -1,73 +0,0 @@
1
- = New Features
2
-
3
- * A require_valid_schema plugin has been added, for checking that
4
- model classes have schema parsed as expected. By default, model
5
- classes are not required to have valid schema, because it is
6
- allowed to have model classes based on arbitrary datasets (such
7
- as those using joins or set-returning functions), and it is not
8
- possible to determine the schema for arbitary datasets.
9
-
10
- Sequel swallows non-connection errors when trying to parse schema
11
- for a model's dataset, but if schema parsing fails when you would
12
- expect it to succeed, it results in a model where typecasting does
13
- not work as expected.
14
-
15
- The require_valid_schema plugin will raise an error when setting
16
- the dataset for a model if schema parsing fails and the dataset
17
- uses a simple table where you would expect schema parsing to
18
- succeed. You can also provide an argument of :warn when loading
19
- the plugin, to warn instead of raising an error.
20
-
21
- This plugin may not work correctly in all cases for all adapters,
22
- especially external adapters. Adapters are not required to support
23
- schema parsing. Even if supported, adapters may not support
24
- parsing schema for qualified tables, or parsing schema for views.
25
- You should consider this plugin as a possible safety net. Users
26
- are encouraged to try using it and report any unexpected breakage,
27
- as that may help improve schema parsing in adapters that Sequel
28
- ships.
29
-
30
- * is_json and is_not_json methods have been added to the pg_json_ops
31
- extension, for the IS [NOT] JSON operator supported in PostgreSQL
32
- 15+.
33
-
34
- * Index creation methods on PostgreSQL 15+ now support a
35
- :nulls_distinct option, for NULLS [NOT] DISTINCT. This allows you
36
- to create unique indexes where NULL values are not considered
37
- distinct.
38
-
39
- * View creation methods on PostgreSQL 15+ now support a
40
- :security_invoker option to create a view where access is
41
- determined by the permissions of the role that is accessing the
42
- view, instead of the role that created the view.
43
-
44
- = Other Improvements
45
-
46
- * The :allow_eager association option is now set to false by default
47
- for associations explicitly marked as :instance_specific, if the
48
- :eager_loader association is not given.
49
-
50
- * The postgres adapter now supports the sequel-postgres-pr driver.
51
- The sequel-postgres-pr driver is a slimmed down fork of the
52
- postgres-pr driver designed specifically for use by Sequel.
53
-
54
- * Model code that explicitly does not swallow connection errors
55
- will also now not swallow disconnect errors. This can fix issues
56
- where model classes are being loaded at runtime, and the query to
57
- get the columns/schema for the model uses a connection that has
58
- been disconnected.
59
-
60
- * Model classes created from aliased expressions and literal
61
- strings no longer use the simple_table optimization, as there
62
- are cases where doing so is not safe.
63
-
64
- = Backwards Compatibility
65
-
66
- * The change to not swallow disconnect errors when not swallowing
67
- connection errors can result in exceptions being raised which
68
- weren't raised previously. In most cases, this will alert you
69
- to issues in your application that should be fixed, but it
70
- potentially it can result in regressions if you were OK with
71
- the errors being swallowed. If this does result in regressions
72
- in your application, please file an issue and we can probably
73
- add a setting controlling this feature.