* extracting get_column_def from create_table_from_entity to make it available for database upgrade processes.
* Align code example formatting
* Converting the foreign key related code from create_table_from_entity into From<RelationDef> implementations to make its usage easier in different context, like updating a database.
* Refactor
* Fixup
Co-authored-by: Billy Chan <ccw.billy.123@gmail.com>
Mark transaction as closed *only* after commit/rollback succeeds.
Previously, `open` on the transaction would be set to `false` prior to attempting
to commit or rollback the transaction. When the operation failed, for example, due
to a serialization failure with a serializable isolation level, this would leave
the transaction in an inconsistent state, where it thought it was closed but really
it was still open. The connection would then be returned to the connection pool with
a transaction depth of 1, causing a savepoint to be erroneously created the next time
a transaction was created for the connection.
By waiting to set `open` to `false` until the commit/rollback succeeds, a failure
to do either will result in us correctly rolling back the transaction when dropping
it, ensuring that the connection is returned to the pool with a transaction depth
of 0. Note that this is consistent with how `sqlx` handles transactions.
We attempted to write a test, but had a very difficult time forcing postgres to fail
to commit a transaction. We found that it would block our requests instead when creating
conflicting updates, and we couldn't find any information about when it blocks vs when
transaction commits fail.
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
Co-authored-by: Nathan Sobo <nathan@zed.dev>
* Support Vector of enum for Postgres
* Fix clippy
* Add tests for integer array
* Fix dependency
* Bump sea-query to 0.27.2
Co-authored-by: Chris Tsang <chris.2y3@outlook.com>
* Changelog
* Enable convert from ActiveModel to Model (#725)
* feat: enable convert from ActiveModel to Model
* feat: add tests for converting from ActiveModel to Model
* cargo fmt
* Refactoring
Co-authored-by: Billy Chan <ccw.billy.123@gmail.com>
* Fix clippy warnings
* Use error type
Co-authored-by: Chris Tsang <chris.2y3@outlook.com>
Co-authored-by: greenhandatsjtu <40566803+greenhandatsjtu@users.noreply.github.com>
* Implement `IntoActiveValue` for `time` types.
I tried to implement a [custom active
model](https://www.sea-ql.org/SeaORM/docs/advanced-query/custom-active-model/),
and one of the columns was `Option<TimeDateTimeWithTimeZone>`. I got a
compiler error:
```
error[E0277]: the trait bound `std::option::Option<sea_orm::prelude::TimeDateTimeWithTimeZone>: IntoActiveValue<_>` is not satisfied
```
Looking into the source code, it seemed a simple oversight that this
trait was implemented for the `chrono` types but not the `time` types,
and it was easy enough to fix since there's already a macro to implement
it for new types.
I also noticed that the `time` types are not accounted for in
`src/query/json.rs` while the `chrono` types are, which I assume is also
an oversight. However, I don't have a need for that at this point and
the fix for that seemed less trivial, so I'm just bringing it to your
attention.
Thanks for SeaORM!
* Implement `IntoActiveValue` for `Vec<u8>` types
* Add tests to double check and prevent it from happening again
* Add docs
* Fixup
* Serialize `time` types as `serde_json::Value`
Co-authored-by: Jimmy Cuadra <jimmy@jimmycuadra.com>