1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
= New Features
* Database#after_commit and #after_rollback transaction hook methods
now support a :savepoint option. Using the :savepoint option makes
the hooks savepoint-aware, so after_commit will only be called if
all enclosing savepoints and the transaction are committed, and
after_rollback will be called when any of the enclosing savepoints
are rolled back (which may be before transaction commit/rollback).
Examples:
x = nil
DB.transaction do # BEGIN
DB.transaction(savepoint: true) do # SAVEPOINT
DB.after_commit(savepoint: true){x = 1}
DB.after_rollback(savepoint: true){x = 2}
x # nil
end # RELEASE SAVEPOINT
x # nil
end # COMMIT
x # 1
x = nil
DB.transaction do # BEGIN
DB.transaction(savepoint: true) do # SAVEPOINT
DB.after_commit(savepoint: true){x = 1}
DB.after_rollback(savepoint: true){x = 2}
x # nil
raise Sequel::Rollback
end # ROLLBACK TO SAVEPOINT
x # 2
end # COMMIT
x # 2
x = nil
DB.transaction do # BEGIN
DB.transaction(savepoint: true) do # SAVEPOINT
DB.after_commit(savepoint: true){x = 1}
DB.after_rollback(savepoint: true){x = 2}
end # RELEASE SAVEPOINT
x # nil
raise Sequel::Rollback
end
x # 2
* The pg_auto_constraint_validations plugin now supports a
pg_auto_constraint_validation_override method for overriding
the columns and message for a specific constraint. This is
useful if the database cannot determine the columns (due
to the constraint containing a database function call), or
if you would like to customize the message per constraint.
= Other Improvements
* The one_to_one association setter now works with models that use
joined datasets, such as child models when using the
class_table_inheritance plugin.
* Database#check_constraints on PostgreSQL now also includes CHECK
constraints where the related columns are not known. The :columns
entry in the hash will be an empty array in such cases. The
exclusion of such constraints in previous versions was not
intentional, and the documentation implied that all CHECK
constraints were returned.
* Many cases where instance_exec was previously used on model
instances have been changed so that instance methods are defined
and called instead. This avoids the creation of singleton classes
for model instances, and can significantly improve performance in
some cases. This affects all associations as well as the
following plugins:
* composition
* hook_class_methods
* validation_class_methods
Other cases where instance_exec is now avoided and a different
approach is used:
* association_dependencies plugin
* PlaceholderLiteralString#with_dataset
* The auto_validations plugin now works with child models when using
the class_table_inheritance plugin.
* Database#server_version now works correctly in the mysql2 adapter
when using the MySQL driver with MariaDB 10+.
* The float unsigned type is now recognized and supported in the
schema parser and schema_dumper extension.
|