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,63 +0,0 @@
1
- = New Features
2
-
3
- * The :nulls option when creating ordered expressions is now supported
4
- on all databases that Sequel ships support for. For databases that
5
- do not support NULLS FIRST/NULLS LAST, support is emulated.
6
-
7
- ds.order(Sequel.asc(:name, :nulls=>:last))
8
- # When emulated:
9
- # ORDER BY (CASE WHEN (name IS NULL) THEN 2 ELSE 1 END), name ASC
10
-
11
- * Model#pk_equal? has been added as a more descriptive name for
12
- Model#===. Model#=== is now an alias of Model#pk_equal?.
13
-
14
- * The roots and roots_dataset class methods in the tree plugin are now
15
- also available as dataset methods.
16
-
17
- = Other Improvements
18
-
19
- * Inverting expressions using the ANY/SOME/ALL SQL operators now works
20
- correctly:
21
-
22
- # Sequel <5.14.0
23
- Sequel.~(:a=>Sequel.function(:any, :x))
24
- # "(a != any(x))"
25
-
26
- # Sequel >=5.14.0
27
- Sequel.~(:a=>Sequel.function(:any, :x))
28
- # "NOT (a = any(x))"
29
-
30
- Sequel has always tried to push inversion down to create SQL that is
31
- easier to reason about. However, inversion cannot be pushed down if
32
- an ANY/SOME/ALL SQL operator is used, because that is a different
33
- type of operation that just happens to use the same syntax. Sequel
34
- now avoids inversion push down for boolean operators where the
35
- right hand side is an SQL::Function, LiteralString, or
36
- SQL::PlaceholderLiteralString.
37
-
38
- * When creating a boolean expression from a hash or array of pairs, if
39
- the right hand side is an unfrozen array and string, use a frozen
40
- copy in the expression, so that mutating the array or string
41
- argument later does not affect the expression.
42
-
43
- * When using the defaults_setter plugin with the :cache option, do not
44
- cache values for columns without parseable defaults. If the default
45
- value exists but is not parseable, caching such values could result
46
- in incorrect behavior if the model instance is saved later.
47
-
48
- * For models with composite primary keys, Model#=== now returns false
49
- if any primary key value is nil, mirroring the behavior for the
50
- scalar primary key case.
51
-
52
- * Model datasets no longer cache SQL if they include a subquery that
53
- cannot cache SQL.
54
-
55
- * The SQL used for constraints in the constraint_validations
56
- extension when the :allow_nil option is used is now clearer and
57
- easier to understand.
58
-
59
- * The postgres adapter no longer specifies a default port when using
60
- the pg driver, in order to work with configurations where the
61
- :service option is used in the :driver_options hash. The pg driver
62
- defaults to port 5432 if no port is given, so this should not affect
63
- backwards compatibility.
@@ -1,39 +0,0 @@
1
- = New Features
2
-
3
- * A :qualify_tables option has been added to the
4
- class_table_inheritance plugin, which will automatically qualify
5
- subclass tables with the same qualifier as the superclass table
6
- if the superclass table is qualified.
7
-
8
- * Model#save_validation_on_next_save! has been added, which skips all
9
- validation on the next save to the object, including the running
10
- of validation related hooks. This method is designed for use only
11
- when Model#valid? is called on the object before saving, to avoid
12
- running validations on the object twice. This method takes
13
- precedence even over an explicit validate: true option passed to
14
- Model#save, and as such should be used with care.
15
-
16
- * The postgres adapter now supports a :conn_str Database option to
17
- use a PostgreSQL connection string (e.g. "host=foo port=2442") when
18
- connecting. This option has preference over other connection
19
- related options if it is present.
20
-
21
- = Other Improvements
22
-
23
- * If a foreign key for a model object is changed from a nil value to
24
- a non-nil value, any cached associated objects related to the
25
- foreign key are no longer removed. Such associated objects could
26
- only be set manually, and if they have been set manually, it is
27
- probably not a good idea to remove them automatically.
28
-
29
- * When using the nested_attributes plugin, new *_to_many associated
30
- objects are not validated twice when saving.
31
-
32
- * The default table alias when using the class_table_inheritance
33
- plugin now correctly handles qualified tables.
34
-
35
- * A theoretical thread safety issue when assigning connections
36
- in the threaded connection pools has been fixed.
37
-
38
- * Renaming columns is now supported without emulation when using
39
- SQLite 3.25+.
@@ -1,110 +0,0 @@
1
- = New Features
2
-
3
- * Database#rollback_on_exit has been added, which allows you to
4
- rollback transactions instead of committing them when exiting
5
- the transaction block. Previously, the only way to rollback
6
- a transaction from inside a transaction block was to raise
7
- an exception. This allows you to tell Sequel to roll the
8
- transaction back on exit, and then use return or throw to exit
9
- the transaction block.
10
-
11
- Database#rollback_on_exit supports savepoints, including
12
- multiple savepoint levels, as well as canceling rollbacks:
13
-
14
- DB.transaction do # BEGIN
15
- DB.rollback_on_exit
16
- end # ROLLBACK
17
-
18
- DB.transaction do # BEGIN
19
- DB.transaction(savepoint: true) do # SAVEPOINT
20
- DB.rollback_on_exit(savepoint: true)
21
- end # ROLLBACK TO SAVEPOINT
22
- end # COMMIT
23
-
24
- DB.transaction do # BEGIN
25
- DB.transaction(savepoint: true) do # SAVEPOINT
26
- DB.transaction(savepoint: true) do # SAVEPOINT
27
- DB.rollback_on_exit(savepoint: true)
28
- end # ROLLBACK TO SAVEPOINT
29
- end # RELEASE SAVEPOINT
30
- end # COMMIT
31
-
32
- DB.transaction do # BEGIN
33
- DB.transaction(savepoint: true) do # SAVEPOINT
34
- DB.rollback_on_exit(savepoint: true)
35
- end # ROLLBACK TO SAVEPOINT
36
- end # COMMIT
37
-
38
- DB.transaction do # BEGIN
39
- DB.transaction(savepoint: true) do # SAVEPOINT
40
- DB.transaction(savepoint: true) do # SAVEPOINT
41
- DB.rollback_on_exit(savepoint: 2)
42
- end # ROLLBACK TO SAVEPOINT
43
- end # ROLLBACK TO SAVEPOINT
44
- end # COMMIT
45
-
46
- DB.transaction do # BEGIN
47
- DB.transaction(savepoint: true) do # SAVEPOINT
48
- DB.transaction(savepoint: true) do # SAVEPOINT
49
- DB.rollback_on_exit(savepoint: 3)
50
- end # ROLLBACK TO SAVEPOINT
51
- end # ROLLBACK TO SAVEPOINT
52
- end # ROLLBACK
53
-
54
- DB.transaction do # BEGIN
55
- DB.rollback_on_exit
56
- DB.rollback_on_exit(cancel: true)
57
- end # COMMIT
58
-
59
- * Sequel now supports window functions on SQLite 3.26.0+. SQLite
60
- technically supports window functions on 3.25.0+, but enabling
61
- window function support in Sequel opens up a code path that
62
- generates queries that cause older versions of SQLite to produce a
63
- segmentation fault. This bug in SQLite has been fixed in 3.26.0.
64
-
65
- = Other Improvements
66
-
67
- * Sequel::Model no longer overrides existing methods when defining
68
- getters and setters. Historically, it only checked for existing
69
- method definitions for methods that could be directly expressed
70
- (e.g. not requiring send). Sequel 5 broke the check for setter
71
- methods that could be directly expressed. This fixes cases where
72
- model inheritance is used and the setter methods are overridden
73
- in a parent class.
74
-
75
- * Alter table emulation now works correctly on SQLite 3.26.0+.
76
-
77
- * The one_to_one association setter does not modify reciprocal
78
- associations in cases where doing so is not necessary. This can
79
- fix some cases where the nested_attributes plugin is used.
80
-
81
- * The class_table_inheritance plugin can now take advantage of the
82
- schema_caching extension to prevent database queries to determine
83
- column information when the class is created.
84
-
85
- * The nested_attributes plugin no longer validates one_to_one
86
- associations twice when saving.
87
-
88
- * The class_table_inheritance plugin :qualify_tables option now
89
- correctly qualifies subclasses of subclasses.
90
-
91
- * SQL expressions that are subscripted are now wrapped in parentheses.
92
- This fixes at least subscripting a function expression on
93
- PostgreSQL:
94
-
95
- DB[:t].select{array_agg(column).sql_subscript(1)}
96
- # SELECT (array_agg(column))[1] FROM t
97
-
98
- * Sequel::Migrator now uses more descriptive error messages if a
99
- missing or empty migration directory is given.
100
-
101
- * bin/sequel -C when converting from SQLite to another database
102
- type will now use 64-bit integer columns in the other database when
103
- the SQLite column type is integer, as SQLite supports storing
104
- 64-bit values in integer columns, and most other databases only
105
- support 32-bit values in integer columns.
106
-
107
- = Backwards Compatibility
108
-
109
- * The mysql adapter no longer attempts to load the mysqlplus driver,
110
- it now only attempts to load the mysql driver.
@@ -1,31 +0,0 @@
1
- = New Features
2
-
3
- * An instance-level skip_auto_validations method has been added to
4
- the auto_validations plugin, allowing you to skip all or specific
5
- types of auto validations inside the block:
6
-
7
- model_instance.skip_auto_validations(:unique) do
8
- puts model_instance.valid?
9
- end
10
-
11
- * A Database :preconnect_extensions option has been added. This
12
- option is similar to :extensions, but the extensions are loaded
13
- before the :preconnect option is processed. This allows you to
14
- use the server_logging extension with the :preconnect option.
15
-
16
- * For specifying custom table aliases when using eager_graph and
17
- association_join, you can now use:
18
-
19
- Sequel[:association].as(:table_alias)
20
-
21
- in addition to:
22
-
23
- Sequel.as(:association, :table_alias)
24
-
25
- = Other Improvements
26
-
27
- * The ado/mssql adapter now retrieves the number of deleted or
28
- updated rows for a query without issuing a separate query.
29
-
30
- * Sequel now avoids the use of Proc.new with an implicit block, as
31
- that feature will be deprecated starting in Ruby 2.7.
@@ -1,69 +0,0 @@
1
- = New Features
2
-
3
- * A throw_failures plugin has been added for throwing ValidationFailed
4
- and HookFailed exceptions instead of raising them. This can improve
5
- performance by up to 10x on JRuby and 10-15% on CRuby. However,
6
- you would need to modify your exception handling from:
7
-
8
- begin
9
- # model.save
10
- rescue Sequel::ValidationFailed => e
11
- # handle failure
12
- end
13
-
14
- to:
15
-
16
- e = catch(Sequel::ValidationFailed) do
17
- # model.save
18
- end
19
- if e.is_a?(Sequel::ValidationFailed)
20
- # handle failure
21
- end
22
-
23
- The throw_failures plugin will still work if you are not catching
24
- the exception, falling back to the default behavior of raising
25
- the exception.
26
-
27
- * SQL::Blob.call has been added, so that SQL::Blob can be used
28
- directly as a callable to create a new instance, resulting in
29
- better performance in cases where a callable is needed.
30
-
31
- = Other Improvements
32
-
33
- * Type conversion is many adapters is now faster by switching from
34
- Proc/Method instances to using singleton call methods on plain
35
- objects. This can improve performance of row fetching by up to
36
- 10% in some cases.
37
-
38
- * Row fetching is slightly faster in the jdbc and sqlite adapters,
39
- by switching from each to while.
40
-
41
- * tzinfo 2 is now supported when using the named_timezones extension.
42
- tzinfo 1 remains supported.
43
-
44
- * The optimized Dataset#paged_each methods in the postgres and mysql2
45
- adapters now support being called without a block, returning an
46
- Enumerator in that case, to mirror the behavior of the default
47
- Dataset#paged_each method.
48
-
49
- * Sequel no longer uses flow-control exceptions in the
50
- connection_expiration and connection_validator extensions,
51
- significantly improving performance on JRuby.
52
-
53
- * The after_initialize plugin no longer makes the argument to
54
- Model.call optional.
55
-
56
- = Backwards Compatibility
57
-
58
- * Some internal by not private constants and methods previously used
59
- for type conversion in adapters have been removed:
60
-
61
- * JDBC::Oracle.OracleDecimal
62
- * JDBC::Oracle.OracleClob
63
- * JDBC::Postgres.RubyPGArray
64
- * JDBC::Postgres.RubyPGHstore
65
- * JDBC::SqlAnywhere.SqlAnywhereBoolean
66
- * JDBC::SQLServer.MSSQLRubyTime
67
- * MySQL::TYPE_TRANSLATOR
68
- * Postgres::TYPE_TRANSLATOR
69
-
@@ -1,28 +0,0 @@
1
- = New Features
2
-
3
- * A Database#rename_enum_value method has been added to the pg_enum
4
- extension. It is supported on PostgreSQL 10+:
5
-
6
- DB.rename_enum_value(:enum_type, 'old_name', 'new_name')
7
-
8
- = Other Improvements
9
-
10
- * The performance of row fetching and type conversion in the
11
- sqlanywhere adapter has been improved.
12
-
13
- * The performance of row fetching in the sqlite adapter has been
14
- improved.
15
-
16
- * Calling Database#drop_table now drops any constraint validations
17
- metadata for the table if using the constraint_validations
18
- extension. However, modifying the table using Database#alter_table
19
- does not affect the constraint validations metadata.
20
-
21
- * The sqlite adapter when used with ruby-sqlite3 1.4.0+ now uses
22
- SQLite extended result codes for a more accurate determination of
23
- specific database errors types.
24
-
25
- * Performance for typecasting to decimal and floats has been improved
26
- slightly.
27
-
28
- * Performance when merging hashes has been improved slightly.
@@ -1,33 +0,0 @@
1
- = New Features
2
-
3
- * A pg_extended_date_support extension has been added. This
4
- extension adds support for infinite and BC dates/timestamps on
5
- PostgreSQL.
6
-
7
- The postgres adapter already had a convert_infinite_timestamps
8
- setting, but it wasn't supported in the jdbc/postgresql adapter
9
- and it didn't handle BC dates/timestamps. Setting a non-default
10
- convert_infinite_timestamps setting in the postgres adapter will
11
- now automatically load the extension for backwards compatibility.
12
-
13
- The pg_extended_date_support extension by default just fixes the
14
- handling of BC dates/timestamps. To get it to handle infinite
15
- timestamps, you need to choose the appropriate setting for your
16
- application:
17
-
18
- DB.extension :pg_extended_date_support
19
- DB.convert_infinite_timestamps = :string # or :float or :nil
20
-
21
- This extension also enables the handling of timezone offsets
22
- with seconds, which is not natively supported by ruby's Time
23
- class in ruby <2.5.
24
-
25
- = Improvements
26
-
27
- * The jdbc/mysql adapter now handles smallint unsigned and
28
- integer unsigned column types where the value for the column
29
- is outside of the range of a Java short or integer.
30
-
31
- * Sequel::Model.inherited no longer modifies an existing @dataset
32
- instance variable if one has already been set. This fixes a
33
- regression that was introduced in Sequel 5.0.0.
@@ -1,89 +0,0 @@
1
- = New Features
2
-
3
- * Database#after_commit and #after_rollback transaction hook methods
4
- now support a :savepoint option. Using the :savepoint option makes
5
- the hooks savepoint-aware, so after_commit will only be called if
6
- all enclosing savepoints and the transaction are committed, and
7
- after_rollback will be called when any of the enclosing savepoints
8
- are rolled back (which may be before transaction commit/rollback).
9
- Examples:
10
-
11
- x = nil
12
- DB.transaction do # BEGIN
13
- DB.transaction(savepoint: true) do # SAVEPOINT
14
- DB.after_commit(savepoint: true){x = 1}
15
- DB.after_rollback(savepoint: true){x = 2}
16
- x # nil
17
- end # RELEASE SAVEPOINT
18
- x # nil
19
- end # COMMIT
20
- x # 1
21
-
22
- x = nil
23
- DB.transaction do # BEGIN
24
- DB.transaction(savepoint: true) do # SAVEPOINT
25
- DB.after_commit(savepoint: true){x = 1}
26
- DB.after_rollback(savepoint: true){x = 2}
27
- x # nil
28
- raise Sequel::Rollback
29
- end # ROLLBACK TO SAVEPOINT
30
- x # 2
31
- end # COMMIT
32
- x # 2
33
-
34
- x = nil
35
- DB.transaction do # BEGIN
36
- DB.transaction(savepoint: true) do # SAVEPOINT
37
- DB.after_commit(savepoint: true){x = 1}
38
- DB.after_rollback(savepoint: true){x = 2}
39
- end # RELEASE SAVEPOINT
40
- x # nil
41
- raise Sequel::Rollback
42
- end
43
- x # 2
44
-
45
- * The pg_auto_constraint_validations plugin now supports a
46
- pg_auto_constraint_validation_override method for overriding
47
- the columns and message for a specific constraint. This is
48
- useful if the database cannot determine the columns (due
49
- to the constraint containing a database function call), or
50
- if you would like to customize the message per constraint.
51
-
52
- = Other Improvements
53
-
54
- * The one_to_one association setter now works with models that use
55
- joined datasets, such as child models when using the
56
- class_table_inheritance plugin.
57
-
58
- * Database#check_constraints on PostgreSQL now also includes CHECK
59
- constraints where the related columns are not known. The :columns
60
- entry in the hash will be an empty array in such cases. The
61
- exclusion of such constraints in previous versions was not
62
- intentional, and the documentation implied that all CHECK
63
- constraints were returned.
64
-
65
- * Many cases where instance_exec was previously used on model
66
- instances have been changed so that instance methods are defined
67
- and called instead. This avoids the creation of singleton classes
68
- for model instances, and can significantly improve performance in
69
- some cases. This affects all associations as well as the
70
- following plugins:
71
-
72
- * composition
73
- * hook_class_methods
74
- * validation_class_methods
75
-
76
- Other cases where instance_exec is now avoided and a different
77
- approach is used:
78
-
79
- * association_dependencies plugin
80
- * PlaceholderLiteralString#with_dataset
81
-
82
- * The auto_validations plugin now works with child models when using
83
- the class_table_inheritance plugin.
84
-
85
- * Database#server_version now works correctly in the mysql2 adapter
86
- when using the MySQL driver with MariaDB 10+.
87
-
88
- * The float unsigned type is now recognized and supported in the
89
- schema parser and schema_dumper extension.
@@ -1,87 +0,0 @@
1
- = New Features
2
-
3
- * The pg_json extension now adds a Database#wrap_json_primitives
4
- accessor. When set to true, JSON primitive values (string, number,
5
- true, false, and null) will be wrapped by delegate Ruby objects
6
- instead of using Ruby primitives. This allows the values to round
7
- trip, so the following code will work even for primitive values in
8
- json_column:
9
-
10
- DB.extension :pg_json
11
- DB.wrap_json_primitives = true
12
- value = DB[:table].get(:json_column)
13
- DB[:other_table].insert(json_column: value)
14
-
15
- This should be enabled with care, especially in cases where false
16
- and null JSON values are used, as the behavior will change if
17
- the objects are used in a boolean context in Ruby, as only false
18
- and nil in Ruby are treated as false:
19
-
20
- # assume JSON false or null value
21
- value = DB[:table].get(:json_column)
22
-
23
- if value
24
- # executed if wrap_json_primitives is true
25
- else
26
- # executed by default
27
- end
28
-
29
- When typecasting input in model objects to a JSON type, string
30
- input will still be parsed as JSON. However, you can set the
31
- Database#typecast_json_strings accessor to true, and then string
32
- input will be considered as a JSON string instead of parsing the
33
- string as JSON.
34
-
35
- To prevent backwards compatibility issues, Sequel.pg_json/pg_jsonb
36
- behavior has not changed. To support wrapping Ruby primitives in
37
- the delegate objects, new Sequel.pg_json_wrap/pg_jsonb_wrap methods
38
- have been added. These methods only handle the Ruby primitives,
39
- they cannot be used if the existing object is already a delegate
40
- object.
41
-
42
- As model objects always consider a nil value as SQL NULL and do
43
- not typecast it, if you want to explicitly set a JSON null value,
44
- you need to wrap it explicitly:
45
-
46
- model_object.json_column = Sequel.pg_json_wrap(nil)
47
-
48
- = Other Improvements
49
-
50
- * Sequel now supports window function options :window, :exclude, and
51
- :frame :type=>:groups, :start, and :end on SQLite 3.28.0+.
52
-
53
- * The server_block extension now respects the :servers_hash Database
54
- option. This makes it more similar to Sequel's default behavior.
55
- However, that means by default, the server_block extension will
56
- default to handling unknown shards as the default shard, instead
57
- of raising an error for them.
58
-
59
- * The rcte_tree plugin now disallows eager graphing of the ancestors
60
- and descendants associations. Previously, eager graphing of these
61
- associations generated incorrect results. It is not possible to
62
- eager graph these extensions, but normal eager loading does work.
63
-
64
- * The ado adapter's performance has been improved by using faster
65
- callables for type conversion and a more efficient inner loop.
66
-
67
- * The sqlite adapter now converts a :timeout option given as a string
68
- to an integer. This allows you to use the option inside of a
69
- connection string.
70
-
71
- * The mysql and mysql2 adapters now recognize an additional
72
- DatabaseLockTimeout error.
73
-
74
- * The jdbc/mysql adapter now works correctly when using JRuby with
75
- Java 11.
76
-
77
- * The ado adapter now handles numeric values when using locales that
78
- use comma instead of period as the decimal separator.
79
-
80
- = Backwards Compatibility
81
-
82
- * In the pg_json extension, the following singleton methods of
83
- Sequel::Postgres::JSONDatabaseMethods are now deprecated:
84
-
85
- * parse_json
86
- * db_parse_json
87
- * db_parse_jsonb
@@ -1,48 +0,0 @@
1
- = New Features
2
-
3
- * Sequel now supports Ruby 2.7+ startless ranges in filters:
4
-
5
- DB[:table].where(:column=>(..10))
6
- # SELECT * FROM table WHERE (column <= 10)
7
-
8
- DB[:table].where(:column=>(...10))
9
- # SELECT * FROM table WHERE (column < 10)
10
-
11
- It also supports startless, endless ranges in filters, using a
12
- condition that is always true:
13
-
14
- DB[:table].where(:column=>(nil..nil))
15
- # SELECT * FROM table WHERE (1 = 1)
16
-
17
- * Sequel now supports startless ranges in the pg_range extension:
18
-
19
- DB.extension :pg_range
20
-
21
- DB[:table].insert(:column=>(..10))
22
- # INSERT INTO "table" ("column") VALUES ('[,10]') RETURNING "id"
23
-
24
- DB[:table].insert(:column=>(...10))
25
- # INSERT INTO "table" ("column") VALUES ('[,10)') RETURNING "id"
26
-
27
- DB[:table].insert(:column=>(nil..nil))
28
- # INSERT INTO "table" ("column") VALUES ('[,]') RETURNING "id"
29
-
30
- * Sequel now supports a :materialized option in Dataset#with on
31
- PostgreSQL 12+, to control the inlining of common table expressions:
32
-
33
- DB[:t].with(:t, DB[:t2], :materialized=>false)
34
- # WITH "t" AS NOT MATERIALIZED (SELECT * FROM "t2")
35
- # SELECT * FROM "t"
36
-
37
- DB[:t].with(:t, DB[:t2], :materialized=>true)
38
- # WITH "t" AS MATERIALIZED (SELECT * FROM "t2")
39
- # SELECT * FROM "t"
40
-
41
- = Other Improvements
42
-
43
- * Database#primary_key_sequence now works for tables without serial
44
- sequences on PostgreSQL 12+.
45
-
46
- * Dataset#multi_insert and #import with return: :primary_key option
47
- on Microsoft SQL Server now work correctly if the dataset uses
48
- a row_proc (e.g. for model datasets).
@@ -1,56 +0,0 @@
1
- = New Features
2
-
3
- * An insert_conflict plugin has been added for automatically handling
4
- constraint conflicts when saving new model instances. It is
5
- supported on PostgreSQL 9.5+ and SQLite 3.24.0+.
6
-
7
- Album.new(name: 'Foo', copies_sold: 1000).
8
- insert_conflict(
9
- target: :name,
10
- update: {copies_sold: Sequel[:excluded][:b]}
11
- ).
12
- save
13
-
14
- * On Microsoft SQL Server, the Database :ansi option has been added,
15
- which sets the following ANSI related options:
16
-
17
- * ANSI_NULLS
18
- * ANSI_PADDING
19
- * ANSI_WARNINGS
20
- * ANSI_NULL_DFLT_ON
21
- * QUOTED_IDENTIFIER
22
- * CONCAT_NULL_YIELDS_NULL
23
-
24
- = Other Improvements
25
-
26
- * Sequel.datetime_class = Time is now supported when using the
27
- named_timezones extension. For backwards compatibility, the
28
- named_timezones extension still sets
29
- Sequel.datetime_class = DateTime. When using Ruby 2.6+, the
30
- Time instances have the timezone set on them using Ruby 2.6+'s
31
- timezone support, but basic support works correctly in earlier
32
- versions of Ruby.
33
-
34
- * On Microsoft SQL Server, Sequel now handles parsing schema for
35
- tables in another database on the same server or in a database
36
- on a linked server.
37
-
38
- * The pg_json extension now correctly handles subclasses of core
39
- classes when wrapping objects. This stopped working in Sequel
40
- 5.21.0, when support for wrapping JSON primitives was added.
41
-
42
- * Sequel now works around a couple bugs in jdbc-sqlite 3.27.2.1,
43
- allowing schema parsing and foreign key parsing to work.
44
-
45
- * Dataset#execute* private methods now respect an explicitly given
46
- :server option, fixing Dataset#paged_each in the postgres adapter
47
- when using sharding.
48
-
49
- * Timezone offsets are now handled correctly when typecasting an array
50
- or hash to datetime when Sequel.datetime_class = Time.
51
-
52
- * Sequel now avoids errors when parsing schema when using the mock
53
- SQLite adapter.
54
-
55
- * A minor thread-safety issue has been fixed in the named_timezones
56
- extension.