sequel 5.83.1 → 5.84.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sequel/adapters/shared/sqlite.rb +3 -1
  3. data/lib/sequel/database/schema_methods.rb +2 -0
  4. data/lib/sequel/extensions/pg_json_ops.rb +328 -1
  5. data/lib/sequel/sql.rb +8 -5
  6. data/lib/sequel/version.rb +2 -2
  7. metadata +2 -236
  8. data/CHANGELOG +0 -1397
  9. data/README.rdoc +0 -936
  10. data/doc/advanced_associations.rdoc +0 -884
  11. data/doc/association_basics.rdoc +0 -1859
  12. data/doc/bin_sequel.rdoc +0 -146
  13. data/doc/cheat_sheet.rdoc +0 -255
  14. data/doc/code_order.rdoc +0 -104
  15. data/doc/core_extensions.rdoc +0 -405
  16. data/doc/dataset_basics.rdoc +0 -96
  17. data/doc/dataset_filtering.rdoc +0 -222
  18. data/doc/extensions.rdoc +0 -77
  19. data/doc/fork_safety.rdoc +0 -84
  20. data/doc/mass_assignment.rdoc +0 -98
  21. data/doc/migration.rdoc +0 -660
  22. data/doc/model_dataset_method_design.rdoc +0 -129
  23. data/doc/model_hooks.rdoc +0 -254
  24. data/doc/model_plugins.rdoc +0 -270
  25. data/doc/mssql_stored_procedures.rdoc +0 -43
  26. data/doc/object_model.rdoc +0 -563
  27. data/doc/opening_databases.rdoc +0 -439
  28. data/doc/postgresql.rdoc +0 -611
  29. data/doc/prepared_statements.rdoc +0 -144
  30. data/doc/querying.rdoc +0 -1070
  31. data/doc/reflection.rdoc +0 -120
  32. data/doc/release_notes/5.0.0.txt +0 -159
  33. data/doc/release_notes/5.1.0.txt +0 -31
  34. data/doc/release_notes/5.10.0.txt +0 -84
  35. data/doc/release_notes/5.11.0.txt +0 -83
  36. data/doc/release_notes/5.12.0.txt +0 -141
  37. data/doc/release_notes/5.13.0.txt +0 -27
  38. data/doc/release_notes/5.14.0.txt +0 -63
  39. data/doc/release_notes/5.15.0.txt +0 -39
  40. data/doc/release_notes/5.16.0.txt +0 -110
  41. data/doc/release_notes/5.17.0.txt +0 -31
  42. data/doc/release_notes/5.18.0.txt +0 -69
  43. data/doc/release_notes/5.19.0.txt +0 -28
  44. data/doc/release_notes/5.2.0.txt +0 -33
  45. data/doc/release_notes/5.20.0.txt +0 -89
  46. data/doc/release_notes/5.21.0.txt +0 -87
  47. data/doc/release_notes/5.22.0.txt +0 -48
  48. data/doc/release_notes/5.23.0.txt +0 -56
  49. data/doc/release_notes/5.24.0.txt +0 -56
  50. data/doc/release_notes/5.25.0.txt +0 -32
  51. data/doc/release_notes/5.26.0.txt +0 -35
  52. data/doc/release_notes/5.27.0.txt +0 -21
  53. data/doc/release_notes/5.28.0.txt +0 -16
  54. data/doc/release_notes/5.29.0.txt +0 -22
  55. data/doc/release_notes/5.3.0.txt +0 -121
  56. data/doc/release_notes/5.30.0.txt +0 -20
  57. data/doc/release_notes/5.31.0.txt +0 -148
  58. data/doc/release_notes/5.32.0.txt +0 -46
  59. data/doc/release_notes/5.33.0.txt +0 -24
  60. data/doc/release_notes/5.34.0.txt +0 -40
  61. data/doc/release_notes/5.35.0.txt +0 -56
  62. data/doc/release_notes/5.36.0.txt +0 -60
  63. data/doc/release_notes/5.37.0.txt +0 -30
  64. data/doc/release_notes/5.38.0.txt +0 -28
  65. data/doc/release_notes/5.39.0.txt +0 -19
  66. data/doc/release_notes/5.4.0.txt +0 -80
  67. data/doc/release_notes/5.40.0.txt +0 -40
  68. data/doc/release_notes/5.41.0.txt +0 -25
  69. data/doc/release_notes/5.42.0.txt +0 -136
  70. data/doc/release_notes/5.43.0.txt +0 -98
  71. data/doc/release_notes/5.44.0.txt +0 -32
  72. data/doc/release_notes/5.45.0.txt +0 -34
  73. data/doc/release_notes/5.46.0.txt +0 -87
  74. data/doc/release_notes/5.47.0.txt +0 -59
  75. data/doc/release_notes/5.48.0.txt +0 -14
  76. data/doc/release_notes/5.49.0.txt +0 -59
  77. data/doc/release_notes/5.5.0.txt +0 -61
  78. data/doc/release_notes/5.50.0.txt +0 -78
  79. data/doc/release_notes/5.51.0.txt +0 -47
  80. data/doc/release_notes/5.52.0.txt +0 -87
  81. data/doc/release_notes/5.53.0.txt +0 -23
  82. data/doc/release_notes/5.54.0.txt +0 -27
  83. data/doc/release_notes/5.55.0.txt +0 -21
  84. data/doc/release_notes/5.56.0.txt +0 -51
  85. data/doc/release_notes/5.57.0.txt +0 -23
  86. data/doc/release_notes/5.58.0.txt +0 -31
  87. data/doc/release_notes/5.59.0.txt +0 -73
  88. data/doc/release_notes/5.6.0.txt +0 -31
  89. data/doc/release_notes/5.60.0.txt +0 -22
  90. data/doc/release_notes/5.61.0.txt +0 -43
  91. data/doc/release_notes/5.62.0.txt +0 -132
  92. data/doc/release_notes/5.63.0.txt +0 -33
  93. data/doc/release_notes/5.64.0.txt +0 -50
  94. data/doc/release_notes/5.65.0.txt +0 -21
  95. data/doc/release_notes/5.66.0.txt +0 -24
  96. data/doc/release_notes/5.67.0.txt +0 -32
  97. data/doc/release_notes/5.68.0.txt +0 -61
  98. data/doc/release_notes/5.69.0.txt +0 -26
  99. data/doc/release_notes/5.7.0.txt +0 -108
  100. data/doc/release_notes/5.70.0.txt +0 -35
  101. data/doc/release_notes/5.71.0.txt +0 -21
  102. data/doc/release_notes/5.72.0.txt +0 -33
  103. data/doc/release_notes/5.73.0.txt +0 -66
  104. data/doc/release_notes/5.74.0.txt +0 -45
  105. data/doc/release_notes/5.75.0.txt +0 -35
  106. data/doc/release_notes/5.76.0.txt +0 -86
  107. data/doc/release_notes/5.77.0.txt +0 -63
  108. data/doc/release_notes/5.78.0.txt +0 -67
  109. data/doc/release_notes/5.79.0.txt +0 -28
  110. data/doc/release_notes/5.8.0.txt +0 -170
  111. data/doc/release_notes/5.80.0.txt +0 -40
  112. data/doc/release_notes/5.81.0.txt +0 -31
  113. data/doc/release_notes/5.82.0.txt +0 -61
  114. data/doc/release_notes/5.83.0.txt +0 -56
  115. data/doc/release_notes/5.9.0.txt +0 -99
  116. data/doc/schema_modification.rdoc +0 -679
  117. data/doc/security.rdoc +0 -443
  118. data/doc/sharding.rdoc +0 -286
  119. data/doc/sql.rdoc +0 -648
  120. data/doc/testing.rdoc +0 -204
  121. data/doc/thread_safety.rdoc +0 -15
  122. data/doc/transactions.rdoc +0 -250
  123. data/doc/validations.rdoc +0 -558
  124. 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.