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,31 +0,0 @@
1
- = Improvements
2
-
3
- * Running migrations using one of the included migrators on separate
4
- Database objects in separate threads simultaneously is now
5
- supported. Previously, the migrators were not thread-safe.
6
-
7
- * On Ruby 2.5+, :db_type entries in the schema hashes are now deduped
8
- for a slight memory savings when using many columns with the same
9
- database type.
10
-
11
- * The schema_caching extension now freezes string values in the
12
- resulting hashes, just as the default schema parsing code started
13
- doing in 5.5.0.
14
-
15
- * The schema_caching extension now supports the :callable_default
16
- schema values used by the pg_json, pg_array, and pg_hstore
17
- extensions, by removing the entry before caching and resetting it
18
- after restoring the cache.
19
-
20
- * Identifier mangling rules are now respected when renaming columns on
21
- Microsoft SQL Server.
22
-
23
- = Backwards Compatibility
24
-
25
- * The migrator internals were modified in order to support
26
- thread-safety. The private Migrator#remove_migration_classes
27
- method has been removed, and #load_migration_file now returns the
28
- migration object/class instead of populating Migration.descendants.
29
- Migration.descendants is now only used for temporary storage, and
30
- will no longer contain all migration objects/classes used by the
31
- migrator.
@@ -1,22 +0,0 @@
1
- = New Features
2
-
3
- * The date_arithmetic extension now supports arbitrary expressions
4
- as interval values on PostgreSQL 9.4+. Previously, only integers
5
- were supported for the interval values.
6
-
7
- = Other Improvements
8
-
9
- * Most Kernel#respond_to? calls have been converted to equivalent
10
- defined? calls for better performance. defined? is a keyword
11
- and is about 50% faster for the same behavior.
12
-
13
- * The is_distinct_from extension now supports the IS DISTINCT FROM
14
- syntax natively on SQLite 3.39+, instead of emulating it.
15
-
16
- * HAVING without GROUP BY is now supported on SQLite 3.39+.
17
-
18
- * Coverage testing has been significantly expanded. Previously,
19
- the core, model, plugin, and extension code had 100% line/branch
20
- coverage. 100% line/branch coverage has been added for the
21
- core extensions, bin/sequel, and the postgres adapter with the
22
- pg driver.
@@ -1,43 +0,0 @@
1
- = Improvements
2
-
3
- * When typecasting strings to other types, Sequel::Database will now
4
- by default not typecast strings that are much longer than expected
5
- for the underlying type. Depending on the underlying type, there
6
- is a limit of either 100 or 1000 bytes on the input string. This
7
- avoids potential performance issues when trying to convert
8
- arbitrary sized user input to specific types.
9
-
10
- * The respond_to? to defined? change made in 5.60.0 was reverted in
11
- 5.60.1 as it broke cases on Ruby < 3 where the object had an unused
12
- refinement that added the method.
13
-
14
- * When typecasting strings to integer, strings such as -0xa are now
15
- treated as negative hexidecimal strings, similar to how 0xa is
16
- treated as a positive hexidecimal string.
17
-
18
- * Database#foreign_key_list now returns results for partitioned
19
- tables on PostgreSQL 11+.
20
-
21
- * Timestamps before the date of calendar reform are now handled
22
- correctly by the pg_extended_date_support extension when using
23
- Ruby 3.2 preview 2+.
24
-
25
- = Backwards Compatibility
26
-
27
- * The change to not typecast strings that are too long can break
28
- backwards compatibility for applications that expect typecasting
29
- for input beyond Sequel's limits. You can disable the string
30
- bytesize checking by setting:
31
-
32
- DB.check_string_typecast_bytesize = false
33
-
34
- or by passing the check_string_typecast_bytesize: false option when
35
- creating the Database instance.
36
-
37
- * Code to workaround a bug in JRuby 9.2.0.0 has been removed from the
38
- pg_extended_date_support extension. Users of the extension should
39
- upgrade to a newer JRuby version.
40
-
41
- * The is_json and is_not_json methods have been removed from the
42
- pg_json_ops extension, as the underlying support was removed in
43
- PostgreSQL 15 beta 4.
@@ -1,132 +0,0 @@
1
- = New Features
2
-
3
- * The pg_auto_parameterize extension for automatically using bound
4
- variables when using postgres adapter with the pg driver has been
5
- added back to Sequel. This extension was originally added in Sequel
6
- 3.34.0, but was removed in 4.0.0 due to the many corner cases it
7
- had. Almost all of the corner cases have now been fixed, and
8
- the extension is now recommended for production use. Compared
9
- to the original version in Sequel 3, the reintroduced version
10
- of the extension includes the following changes:
11
-
12
- * Handles integers used in LIMIT/ORDER
13
- * Respects explicit CASTs
14
- * Tries to convert column IN (int, ...) into column = ANY($) with an
15
- array parameter
16
- * Uses the same parameter for the same object used more than once in
17
- a query
18
- * Uses parameters when inserting multiple rows via Dataset#import
19
- * Supports automatically parameterizing all of the
20
- PostgreSQL-specific types that Sequel ships support for in pg_*
21
- extensions (though some values of those types may not support
22
- automatic parameterization).
23
- * Supports skipping auto parameterization for specific values.
24
-
25
- Automatic parameterization is generally slower than Sequel's default
26
- behavior, since some optimizations Sequel uses by default do not
27
- currently support automatic parameterization.
28
-
29
- Applications may need changes to work correctly with the
30
- pg_auto_parameterize extension, such as the addition of explicit
31
- casts. Please read the extension documentation for more details.
32
-
33
- * Integer column schema entries now include :min_value and :max_value
34
- entries on most databases, indicating the minimum and maximum values
35
- supported for the column.
36
-
37
- The validation_helpers plugin now has validates_max_value and
38
- validates_min_value for testing the column value is not greater
39
- than the given maximum value and not less than the given minimum
40
- value, respectively.
41
-
42
- The auto_validations plugin now automatically uses the :min_value
43
- and :max_value column schema entries with the new validation_helpers
44
- methods to validate that the column values for integer columns are
45
- in the allowed range.
46
-
47
- * A primary_key_lookup_check_values plugin has been added for
48
- automatically typecasting and checking the primary key values are
49
- in the allowed range (given by :min_value and :max_value column
50
- schema entries) during lookup. If typecasting fails or the value
51
- is outside the allowed range, the primary key lookup will return
52
- nil without issuing a query (or will raise a NoMatchingRow error
53
- if using with_pk!).
54
-
55
- Note that this can change behavior in some cases if you are
56
- passing filter conditions during lookup instead of passing primary
57
- key values. The plugin tries to support most common filter
58
- conditions, but there are still cases that will break.
59
-
60
- * Sequel now supports shard-specific :after_connect and :connect_sqls
61
- Database options, allowing you to customize behavior for specific
62
- shards:
63
-
64
- DB = Sequel.connect('url', servers: {
65
- :shard1 => {host: '...', after_connect: proc{|conn|}},
66
- :shard2 => {host: '...', connect_sqls: ['...']},
67
- })
68
-
69
- Note that these shard-specific options will not be respected if you
70
- are calling after_connect= or connect_sqls= on the Database's
71
- connection pool.
72
-
73
- = Other Improvements
74
-
75
- * A Sequel::Postgres::IntegerOutsideBigintRange exception will now be
76
- raised if trying to literalize an integer outside PostgreSQL bigint
77
- range, to avoid PostgreSQL treating the integer as a numeric type
78
- and not respecting indexes on the related column.
79
-
80
- A pg_extended_integer_support extension has been added for
81
- customizing the behavior when literalizing an integer outside
82
- PostgreSQL bigint range, either quoting it or getting the
83
- historical behavior of using it directly in the query.
84
-
85
- * Dataset#import and #multi_insert no longer use transactions when
86
- they only run a single query.
87
-
88
- * Fractional seconds in timestamps are now respected in the
89
- named_timezones extension.
90
-
91
- * Using hstore[] types as bound variables now works on PostgreSQL.
92
-
93
- * Using BC dates and timestamps in bound variables now works on
94
- PostgreSQL.
95
-
96
- * A corner case has been fixed in eager loading where the window
97
- function eager limit strategy would be used without removing the
98
- row_number entries from the result.
99
-
100
- * The shared postgres adapter now caches reflection datasets, speeding
101
- up Database#indexes and similar methods.
102
-
103
- * The mock postgres adapter now assumes PostgreSQL 15 instead of
104
- PostgreSQL 14 by default.
105
-
106
- = Backwards Compatibility
107
-
108
- * If you are using Ruby integers outside PostgreSQL bigint range when
109
- dealing with PostgreSQL numeric column values, this version may
110
- not be compatible. It is recommended you explicitly convert the
111
- Ruby integers to BigDecimal objects if you are using them for
112
- numeric column values. You can also use the
113
- pg_extended_integer_support extension introduced in this version.
114
-
115
- = Workaround for Older Versions
116
-
117
- * If you cannot upgrade to Sequel 5.62.0, but still want to avoid the
118
- problems that come from using literal large integers on PostgreSQL,
119
- you can use the following code, where DB is your Sequel::Database
120
- object:
121
-
122
- DB.extend_datasets do
123
- def literal_integer(v)
124
- if v > 9223372036854775807 || v < -9223372036854775808
125
- raise Sequel::InvalidValue, "PostgreSQL int too large: #{v}"
126
- end
127
- super
128
- end
129
- end
130
-
131
- This workaround should work all the way back to Sequel 3.29.0,
132
- released in November 2011.
@@ -1,33 +0,0 @@
1
- = New Features
2
-
3
- * On Ruby 3.2, the pool_class: :timed_queue Database option can now
4
- be used to use an alternative connection pool that stores
5
- connections in a queue, and uses the new Queue#pop :timeout option
6
- in Ruby 3.2 to implement the pool timeout. This new connection
7
- pool is simpler than the default connection pool. It is not yet
8
- the default connection pool on Ruby 3.2, but it may become the
9
- default in a later version. Users of Ruby 3.2 are encouraged to
10
- try out the pool_class: :timed_queue Database option and provide
11
- feedback on how it works in their application.
12
-
13
- = Other Improvements
14
-
15
- * The tactical_eager_loading plugin now works in combination with the
16
- single_table_inheritance and class_table_inheritance plugins, when
17
- loading an association only defined in a specific subclass.
18
- Previously, eager loading would be skipped in such a case. Now,
19
- an eager load will be attempted for all instances supporting the
20
- association.
21
-
22
- * The validate_associated plugin now avoids database type errors for
23
- non-integer association keys. In cases where the associated object
24
- doesn't have a value for the associated key, and the current object
25
- does not have a key value that can be set in the associated object,
26
- validation errors in the associated object related to the associated
27
- key will be ignored.
28
-
29
- * Thread-keyed connection pool hashes now use compare_by_identity for
30
- better performance.
31
-
32
- * The JRuby workaround in the named_timezones extension is no longer
33
- used on JRuby 9.3.9.0+, as JRuby fixed the related bug.
@@ -1,50 +0,0 @@
1
- = New Features
2
-
3
- * A :graph_use_association_block association option has been added,
4
- which makes eager_graph use the association block (as eager does),
5
- generally resulting in a JOIN to a subquery:
6
-
7
- Artist.one_to_many :tracks, graph_use_association_block: true do |ds|
8
- ds.where(foo: 3)
9
- end
10
- Artist.eager_graph(:tracks)
11
- # SELECT albums.id, tracks.id AS tracks_id, tracks.album_id
12
- # FROM albums
13
- # LEFT OUTER JOIN (SELECT * FROM tracks WHERE (foo = 3)) AS tracks
14
- # ON (tracks.album_id = albums.id)
15
-
16
- Assuming that the database can optimize the query correctly, using
17
- the :graph_use_association_block option is probably simpler than
18
- than using other :graph_* options to duplicate the conditions added
19
- by the association block.
20
-
21
- * Numeric/Decimal column schema entries now include :min_value and
22
- :max_value entries on most databases, indicating the minimum and
23
- maximum values supported for the column. Similar to the support
24
- for integer columns added in 5.62.0, this allows the
25
- auto_validations plugin to automatically validate the values of
26
- the columns are in the allowed range.
27
-
28
- = Other Improvements
29
-
30
- * many_through_{one,many} associations now support eager_graph
31
- callbacks.
32
-
33
- * The :db_type column schema entries on SQLAnywhere now include
34
- precision/scale information, to work with the numeric/decimal
35
- column min_value/max_value support.
36
-
37
- * The oracle adapter now includes a :column_size column schema
38
- entry containing the precision of the columns, to work with the
39
- numeric/decimal column min_value/max_value support.
40
-
41
- = Backwards Compatibility
42
-
43
- * The private Database#column_schema_integer_min_max_values method
44
- added in 5.62.0 now takes a column schema hash instead of a
45
- database type string.
46
-
47
- * Code that previously looked at the :db_type column schema entry on
48
- SQLAnywhere should be updated to look at the :domain_name entry, and
49
- code that looked at the :domain_name_with_size entry should be
50
- updated to look at the :db_type entry.
@@ -1,21 +0,0 @@
1
- = Improvements
2
-
3
- * The pg_auto_parameterize extension now uses a modified placeholder
4
- literalizer for speeding up the generation of SQL queries in the same
5
- cases where a standard dataset would use a placeholder literalizer.
6
- This can provide a 4% speedup for simple queries, with greater
7
- speedups for more complex queries.
8
-
9
- * Database#indexes now returns indexes for partitioned tables on
10
- PostgreSQL 11+.
11
-
12
- * MySQL versions not supporting CHECK constraints no longer include
13
- :min_value/:max_value schema entries for decimal/numeric columns.
14
-
15
- = Backwards Compatibility
16
-
17
- * The Dataset::PlaceholderLiterlizer::Record.loader API has changed,
18
- it now accepts the Dataset::PlaceholderLiterlizer class to use as
19
- the first argument. This makes it easier to create
20
- Dataset::PlaceholderLiterlizer subclasses, such as the one now used
21
- by the pg_auto_parameterize extension.
@@ -1,24 +0,0 @@
1
- = Improvements
2
-
3
- * Dataset#empty? now correctly handles datasets using custom SQL or
4
- Dataset#values where the first value in the first row is NULL.
5
-
6
- * Dataset#count without an argument or block now works correctly on
7
- Microsoft SQL Server when using custom SQL that uses ORDER BY.
8
-
9
- * Dataset#count now works correctly for datasets using Dataset#values.
10
-
11
- * Sequel now recognizes an additional SQLite constraint violation
12
- error that occurs with recent versions of amalgalite.
13
-
14
- * Dataset#values will now raise an exception when called with an empty
15
- array. Previously, an exception would not be raised until the query
16
- was sent to the database.
17
-
18
- = Backwards Compatibility
19
-
20
- * The changes to make Dataset#empty? and #count work with custom SQL
21
- on Microsoft SQL Server now result in running the custom SQL, which
22
- could result in worse performance than in previous versions. You can
23
- wrap such datasets with Dataset#from_self manually to restore the
24
- previous behavior.
@@ -1,32 +0,0 @@
1
- = New Features
2
-
3
- * A set_literalizer extension has been added, for treating Set
4
- instances in datasets similar to Array instances:
5
-
6
- DB.extension :set_literalizer
7
- DB[:table].where(column: Set.new([1, 2, 3]))
8
- # SELECT FROM table WHERE (column IN (1, 2, 3))
9
-
10
- = Improvements
11
-
12
- * Sequel now avoids the use of singleton classes for datasets on Ruby
13
- 2.4+, instead creating a regular subclass whenever a dataset would
14
- be extended via #extension or #with_extend. This significantly
15
- improves performance, up to 20-40% for common dataset usage,
16
- because it avoids creating new singleton classes for every dataset
17
- clone, and it allows for cached method lookup.
18
-
19
- * Database#tables and #views now support a :qualify option on Microsoft
20
- SQL Server to returned qualified identifiers.
21
-
22
- * The schema_dumper extension can now dump tables in non-default schemas
23
- when using Microsoft SQL Server.
24
-
25
- * The schema_dumper extension now correctly dumps string column sizes
26
- when using Microsoft SQL Server.
27
-
28
- = Backwards Compatibility
29
-
30
- * Calling Sequel::Dataset.register_extension where the second argument
31
- is not a module now issues a deprecation warning. Support for this
32
- will be removed in Sequel 6.
@@ -1,61 +0,0 @@
1
- = New Features
2
-
3
- * On PostgreSQL 9.6+, date, timestamp, and timestamptz columns now
4
- have min_value and max_value column schema entries, allowing the
5
- auto_validations plugin to automatically enforce minimum and
6
- maximum values for these column types, raising a validation error
7
- before saving, instead of database error when the query is sent
8
- to the database.
9
-
10
- * A validation_helpers_generic_type_messages plugin has been added,
11
- which improves the default type validation error messages in
12
- validation_helpers. This change was not made directly to
13
- validation_helpers for backwards compatibility reasons, but will
14
- probably become the default behavior in Sequel 6. Some examples
15
- of the improvements:
16
-
17
- # :blob type
18
- # validation_helpers default: "value is not a valid sequel::sql::blob"
19
- # with this plugin: "value is not a blob"
20
-
21
- # :boolean type
22
- # validation_helpers default: "value is not a valid trueclass or falseclass"
23
- # with this plugin: "value is not true or false"
24
-
25
- # :datetime type
26
- # validation_helpers default: "value is not a valid time or datetime"
27
- # with this plugin: "value is not a valid timestamp"
28
-
29
- # custom/database-specific types
30
- # validation_helpers default: "value is not a valid sequel::class_name"
31
- # with this plugin: "value is not the expected type"
32
-
33
- = Improvements
34
-
35
- * The constraint_validations plugin no longer raises validation
36
- errors for missing columns that have a default value. If a column
37
- is missing but has a default value, we can assume the default
38
- value is valid. Additionally, the constraint validations are now
39
- based on the underlying column value and not any deserialized
40
- value, so that the validation matches the constraint.
41
-
42
- * On PostgreSQL, normal type name parsing is skipped for enum,
43
- array, composite, range, and multirange types, ensuring that
44
- such types will not be treated incorrectly based on their
45
- type name.
46
-
47
- * The pg_extended_date_support extension now works correctly with
48
- the jdbc/postgresql adapter if there is already an entry in the
49
- oid_convertor_map for the timestamp and timestamptz types.
50
-
51
- = Backwards Compatibility
52
-
53
- * Database#schema_column_type is no longer called for all columns
54
- on PostgreSQL when parsing schema. Enum, array, composite, range,
55
- and multirange types each have their own separate type parsing
56
- method. So if you were overriding Database#schema_column_type to
57
- implement custom column schema parsing, you may need to adjust
58
- your code.
59
-
60
- * The Sequel::Postgres::ExtendedDateSupport::DATE_YEAR_1 constant
61
- has been removed.
@@ -1,26 +0,0 @@
1
- = New Features
2
-
3
- * An adapter has been added for the trilogy MySQL driver. One large
4
- advantage over mysql2 is that trilogy does not require any MySQL
5
- client libraries installed on the machine. The trilogy adapter
6
- has basically the same issues/skipped specs as the mysql2 adapter,
7
- but it also does not support an application_timezone different
8
- than the database_timezone.
9
-
10
- * Model dataset modules now have a model accessor, allowing for
11
- code such as:
12
-
13
- class Foo < Sequel::Model
14
- dataset_module do
15
- where :kept, Sequel[model.table_name][:discarded_at] => nil
16
- end
17
- end
18
-
19
- = Improvements
20
-
21
- * The mysql adapter now works with ruby-mysql 4 (the pure-ruby
22
- MySQL driver). Note that multi-results support does not work
23
- with ruby-mysql 4 (it doesn't work with mysql2, trilogy, or
24
- other Sequel adapters in general).
25
-
26
- * Warnings for unsupported flags are now avoided on ruby-mysql 3.
@@ -1,108 +0,0 @@
1
- = New Features
2
-
3
- * An integer64 extension has been added, which treats the Integer
4
- class as a generic 64-bit integer type. Sequel's default behavior
5
- for Integer is to use the integer type, which on most databases
6
- is a 32-bit type.
7
-
8
- This affects all internal use of the Integer class as a generic
9
- database type, so that methods like primary_key and foreign_key
10
- also default to using a 64-bit integer type when using this
11
- extension.
12
-
13
- * When using PostgreSQL 10+, you can use the :identity option when
14
- creating columns to create identity columns:
15
-
16
- DB.create_table(:table){Integer :id, identity: true}
17
- # CREATE TABLE "table" ("id" integer GENERATED BY DEFAULT AS IDENTITY)
18
-
19
- If you want to disallow using a user provided value when inserting,
20
- or updating you can use a value of :always:
21
-
22
- DB.create_table(:table){Integer :id, identity: :always}
23
- # CREATE TABLE "table" ("id" integer GENERATED ALWAYS AS IDENTITY)
24
-
25
- * Database#convert_serial_to_identity has been added on PostgreSQL 10.2+.
26
- This method can convert existing serial columns to identity columns
27
- in most cases, but it currently requires superuser permissions as it
28
- modifies the system tables directly.
29
-
30
- * Dataset#overriding_system_value and #overriding_user_value are
31
- now supported on PostgreSQL to work with identity columns. You can
32
- use #overriding_system_value to force the use of a user provided
33
- value for identity columns that are GENERATED ALWAYS, and you can
34
- use #overriding_user_value to ignore any user value for identity
35
- columns and always use the next entry in the sequence.
36
-
37
- = Other Improvements
38
-
39
- * On PostgreSQL 10.2+, identity columns are now used instead of serial
40
- columns as the default for auto incrementing primary keys:
41
-
42
- DB.create_table(:table){primary_key :id}
43
-
44
- # Sequel 5.7.0+ and PostgreSQL 10.2+
45
- # CREATE TABLE "table" ("id" integer
46
- # GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY)
47
-
48
- # Older Sequel version or older PostgreSQL version
49
- # CREATE TABLE "table" ("id" serial PRIMARY KEY)
50
-
51
- Identity columns fix many issues that serial columns have, in
52
- addition to being the SQL standard way to support auto incrementing
53
- columns.
54
-
55
- * PostgreSQL identity columns are now correctly recognized and the
56
- :auto_increment schema entry is now populated for them.
57
-
58
- * Dataset#with_sql_{all,each,first,single_value} now use a cached
59
- dataset to avoid clobbering the current dataset's columns.
60
- Previously, the clobbering of the current dataset's columns was
61
- documented and the method warned against using SQL with
62
- different columns. These methods are now safe to use in such
63
- cases, but will not have the same performance advantages if the
64
- current dataset is not cached.
65
-
66
- * On ruby 2.1+, Sequel now uses Process::CLOCK_MONOTONIC when
67
- performing elapsed time calculations so that it is not affected by
68
- modifications to the system's time.
69
-
70
- * In the postgres adapter, prepared statement errors related to
71
- changing types are now treated as disconnect errors. While they
72
- are not technically disconnect errors, treating them as such
73
- will in general reduce the total number of exceptions generated
74
- from 1 per affected statement per connection to 1 per
75
- connection.
76
-
77
- * In the pg_array_associations plugin, the array_type for
78
- pg_array_to_many and many_to_pg_array association reflections is
79
- now always the scalar type for the array (e.g. integer). Previously,
80
- the array type (e.g. integer[]) was used in some cases. This didn't
81
- previously result in issues as PostgreSQL considers integer[][] the
82
- same type as integer[].
83
-
84
- * In the pg_array_associations plugin, the many_to_pg_array
85
- association remove_all_* method now uses the appropriate cast to
86
- work for non-integer array types such as bigint[].
87
-
88
- * Database#server_version on PostgreSQL 10.1+ now works correctly
89
- when the connection does not support the server_version method.
90
- Now the server_version_num database setting is always used to
91
- ensure consistent behavior across adapters.
92
-
93
- * In the jdbc/oracle adapter, temporary clobs are now manually
94
- freed to prevent a memory leak, in line with the Oracle JDBC
95
- driver recommendations.
96
-
97
- * The Sequel <4 release notes and changelog are no longer shipped
98
- with the gem, decreasing the size of the gem by 20%.
99
-
100
- = Backwards Compatibility
101
-
102
- * The switch to using identity columns instead of serial columns
103
- by default on PostgreSQL 10.2+ may break backwards compatibilty
104
- in some situations, such as code that relies on what are generally
105
- considered bugs in serial columns, such as CREATE TABLE LIKE
106
- using the same sequence for the column in both the existing table
107
- and the new table, or that dropping the default value for the
108
- column does not drop the related sequence.
@@ -1,35 +0,0 @@
1
- = New Features
2
-
3
- * A sharded_timed_queue connection pool has been added. This offers
4
- most of the same features as the sharded_threaded connection pool,
5
- but uses the new Queue#pop :timeout features added in Ruby 3.2 to
6
- allow for a simpler and possibly faster and more robust
7
- implementation.
8
-
9
- * If a :pool_class option is not specified when creating a Database,
10
- Sequel will now look at the SEQUEL_DEFAULT_CONNECTION_POOL
11
- environment variable to determine the connection pool class to use.
12
- This allows you to set SEQUEL_DEFAULT_CONNECTION_POOL=timed_queue
13
- on Ruby 3.2 to test with the timed_queue connection pool without
14
- making any code changes. If the :servers Database option is given,
15
- Sequel will automatically use the sharded version of the connection
16
- pool specified by SEQUEL_DEFAULT_CONNECTION_POOL.
17
-
18
- = Other Improvements
19
-
20
- * The connection_validator, connection_expiration, and
21
- async_thread_pool extensions now work with the timed_queue and
22
- sharded_timed_queue connection pools.
23
-
24
- * The sharded_threaded connection pool now disconnects connections
25
- for all specified servers instead of just the last specified server
26
- when using remove_server.
27
-
28
- * The static_cache plugin now recognizes when the forbid_lazy_load
29
- plugin is already loaded, and does not return instances that
30
- forbid lazy load for methods that return a single object, such as
31
- Database.{[],cache_get_pk,first}.
32
-
33
- * Sequel now displays an informative error message if attempting to
34
- load the connection_validator or connection_expiration extensions
35
- when using the single threaded connection pool.
@@ -1,21 +0,0 @@
1
- = New Features
2
-
3
- * A pg_xmin_optimistic_locking plugin has been added. This plugin
4
- uses PostgreSQL's xmin system column to implement optimistic
5
- locking. The xmin system column is automatically updated whenever
6
- the database row is updated. You can load this plugin into a
7
- base model and have all models that subclass from it use optimistic
8
- locking, without needing any user-defined lock columns.
9
-
10
- = Other Improvements
11
-
12
- * set_column_allow_null is now a reversible migration method inside
13
- alter_table blocks.
14
-
15
- * The use of ILIKE no longer forces the ESCAPE clause on PostgreSQL,
16
- which allows the use of ILIKE ANY and other constructions. There
17
- is no need to use the ESCAPE clause with ILIKE, because the value
18
- Sequel uses is PostgreSQL's default.
19
-
20
- * The xid PostgreSQL type is now recognized as an integer type in the
21
- jdbc/postgresql adapter.