-
-
Notifications
You must be signed in to change notification settings - Fork 521
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rework ActiveEnum to support TryGetable for Vec<Json> #1898
Conversation
1406115
to
b2cb513
Compare
@anshap1719 I think I figured out something within the type system. At least it compiles, so we won't be too far away from complete. I can't really explain my course of thinking, but it wandered a bit and ah-ha! If you have time, can you help verify and perhaps add back some of the test cases you made? |
@tyt2y3 Perfect! Thank you. My first approach was to try to get rid of ValueVec, but I didn't persue it because of lack of a holistic picture of the project. In any case, I'll re-add the test files and fixtures this weekend if you haven't added them already by then. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@tyt2y3 I'm not sure how I feel about having to manually implement NotU8
for types where I need to use them as root JSON arrays. It feels like that's an internal implementation detail that shouldn't be exposed to users of the crate.
Not sure what the solution would be either, in my mind the straightforward one would be to have a derive macro that either just implements NotU8 for target, or something like FromJsonQueryArrayResult
that internally just derives FromJsonQueryResult
as well as NotU8
.
Oh by the way, apart from things that I mentioned above, this does solve the original issue. I'm able to use root JSON arrays just fine with this branch. |
How cool is that! Let's get this done this few days. |
* Add Tests For Root JSON Arrays And Active Enum Vectors * Fix Build Issue When Using `DeriveActiveEnum`
I figured we could make this work even on SQLite, provided we enable the |
Hi @tyt2y3 Sorry for not being able to get back in time. The changes you had to make in Thank you for merging the PR and continuing on with necessary changes. |
Is it going to pass this time? I am thrilled |
Hey @tyt2y3 @anshap1719! Will this PR fix #1517? |
Awesome! Any ETA as to when it would be merged? |
dc7aa93
to
93623f0
Compare
Thanks for all the efforts @tyt2y3 |
@anshap1719 What underlying data type are you using for this column? |
Thank you everyone. I am happy for what we've achieved out of this collaboration! |
@tyt2y3 Do you know when we can expect the next release? Not trying to push for it, just want to understand the timeline. Thanks. |
I am trying to do it this week :) |
🎉 Released In 0.12.4 🎉Thank you everyone for the contribution! |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [sea-orm](https://www.sea-ql.org/SeaORM) ([source](https://github.com/SeaQL/sea-orm)) | dev-dependencies | patch | `0.12.3` -> `0.12.15` | | [sea-orm](https://www.sea-ql.org/SeaORM) ([source](https://github.com/SeaQL/sea-orm)) | dependencies | patch | `0.12.3` -> `0.12.15` | --- ### Release Notes <details> <summary>SeaQL/sea-orm (sea-orm)</summary> ### [`v0.12.15`](https://github.com/SeaQL/sea-orm/releases/tag/0.12.15) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.14...0.12.15) ##### Enhancements - `DerivePartialModel` macro attribute `entity` now supports `syn::Type` [https://github.com/SeaQL/sea-orm/pull/2137](https://github.com/SeaQL/sea-orm/pull/2137) ```rust #[derive(DerivePartialModel)] #[sea_orm(entity = "<entity::Model as ModelTrait>::Entity")] struct EntityNameNotAIdent { #[sea_orm(from_col = "foo2")] _foo: i32, #[sea_orm(from_col = "bar2")] _bar: String, } ``` - Added `RelationDef::from_alias()` [https://github.com/SeaQL/sea-orm/pull/2146](https://github.com/SeaQL/sea-orm/pull/2146) ```rust assert_eq!( cake::Entity::find() .join_as( JoinType::LeftJoin, cake_filling::Relation::Cake.def().rev(), cf.clone() ) .join( JoinType::LeftJoin, cake_filling::Relation::Filling.def().from_alias(cf) ) .build(DbBackend::MySql) .to_string(), [ "SELECT `cake`.`id`, `cake`.`name` FROM `cake`", "LEFT JOIN `cake_filling` AS `cf` ON `cake`.`id` = `cf`.`cake_id`", "LEFT JOIN `filling` ON `cf`.`filling_id` = `filling`.`id`", ] .join(" ") ); ``` ### [`v0.12.14`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#01214---2024-02-05) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.12...0.12.14) - Added feature flag `sqlite-use-returning-for-3_35` to use SQLite's returning [https://github.com/SeaQL/sea-orm/pull/2070](https://github.com/SeaQL/sea-orm/pull/2070) - Added Loco example [https://github.com/SeaQL/sea-orm/pull/2092](https://github.com/SeaQL/sea-orm/pull/2092) ### [`v0.12.12`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#01212---2024-01-22) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.11...0.12.12) ##### Bug Fixes - \[sea-orm-cli] Fix entity generation for non-alphanumeric enum variants[https://github.com/SeaQL/sea-orm/pull/1821](https://github.com/SeaQL/sea-orm/pull/1821)1 - \[sea-orm-cli] Fix entity generation for relations with composite keys[https://github.com/SeaQL/sea-orm/pull/2071](https://github.com/SeaQL/sea-orm/pull/2071)1 ##### Enhancements - Added `ConnectOptions::test_before_acquire` ### [`v0.12.11`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#01211---2024-01-14) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.10...0.12.11) ##### New Features - Added `desc` to `Cursor` paginator [https://github.com/SeaQL/sea-orm/pull/2037](https://github.com/SeaQL/sea-orm/pull/2037) ##### Enhancements - Improve query performance of `Paginator`'s `COUNT` query [https://github.com/SeaQL/sea-orm/pull/2030](https://github.com/SeaQL/sea-orm/pull/2030) - Added SQLx slow statements logging to `ConnectOptions` [https://github.com/SeaQL/sea-orm/pull/2055](https://github.com/SeaQL/sea-orm/pull/2055) - Added `QuerySelect::lock_with_behavior` [https://github.com/SeaQL/sea-orm/pull/1867](https://github.com/SeaQL/sea-orm/pull/1867) ##### Bug Fixes - \[sea-orm-macro] Qualify types in `DeriveValueType` macro [https://github.com/SeaQL/sea-orm/pull/2054](https://github.com/SeaQL/sea-orm/pull/2054) ##### House keeping - Fix clippy warnings on 1.75 [https://github.com/SeaQL/sea-orm/pull/2057](https://github.com/SeaQL/sea-orm/pull/2057) ### [`v0.12.10`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#01210---2023-12-14) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.9...0.12.10) ##### New Features - \[sea-orm-macro] Comment attribute for Entity (`#[sea_orm(comment = "action")]`); `create_table_from_entity` supports comment [https://github.com/SeaQL/sea-orm/pull/2009](https://github.com/SeaQL/sea-orm/pull/2009) - Added "proxy" (feature flag `proxy`) to database backend [https://github.com/SeaQL/sea-orm/pull/1881](https://github.com/SeaQL/sea-orm/pull/1881), [https://github.com/SeaQL/sea-orm/pull/2000](https://github.com/SeaQL/sea-orm/pull/2000) ##### Enhancements - Cast enums in `is_in` and `is_not_in` [https://github.com/SeaQL/sea-orm/pull/2002](https://github.com/SeaQL/sea-orm/pull/2002) ##### Upgrades - Updated `sea-query` to `0.30.5` https://github.com/SeaQL/sea-query/releases/tag/0.30.5 ### [`v0.12.9`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#0129---2023-12-08) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.8...0.12.9) ##### Enhancements - Add source annotations to errors [https://github.com/SeaQL/sea-orm/pull/1999](https://github.com/SeaQL/sea-orm/pull/1999) ##### Upgrades - Updated `sea-query` to `0.30.4` https://github.com/SeaQL/sea-query/releases/tag/0.30.4 ### [`v0.12.8`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#0128---2023-12-04) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.7...0.12.8) ##### Enhancements - Implement `StatementBuilder` for `sea_query::WithQuery` [https://github.com/SeaQL/sea-orm/issues/1960](https://github.com/SeaQL/sea-orm/issues/1960) ##### Upgrades - Upgrade `axum` example to `0.7` [https://github.com/SeaQL/sea-orm/pull/1984](https://github.com/SeaQL/sea-orm/pull/1984) ### [`v0.12.7`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#0127---2023-11-22) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.6...0.12.7) ##### Enhancements - Added method `expr_as_` that accepts `self` [https://github.com/SeaQL/sea-orm/pull/1979](https://github.com/SeaQL/sea-orm/pull/1979) ##### Upgrades - Updated `sea-query` to `0.30.3` https://github.com/SeaQL/sea-query/releases/tag/0.30.3 ### [`v0.12.6`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#0126---2023-11-13) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.5...0.12.6) ##### New Features - Added `#[sea_orm(skip)]` for `FromQueryResult` derive macro [https://github.com/SeaQL/sea-orm/pull/1954](https://github.com/SeaQL/sea-orm/pull/1954) ### [`v0.12.5`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#0125---2023-11-12) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.4...0.12.5) ##### Bug Fixes - \[sea-orm-cli] Fix duplicated active enum use statements on generated entities[https://github.com/SeaQL/sea-orm/pull/1953](https://github.com/SeaQL/sea-orm/pull/1953)3 - \[sea-orm-cli] Added `--enum-extra-derives` [https://github.com/SeaQL/sea-orm/pull/1934](https://github.com/SeaQL/sea-orm/pull/1934) - \[sea-orm-cli] Added `--enum-extra-attributes` [https://github.com/SeaQL/sea-orm/pull/1952](https://github.com/SeaQL/sea-orm/pull/1952) ### [`v0.12.4`](https://github.com/SeaQL/sea-orm/blob/HEAD/CHANGELOG.md#0124---2023-10-19) [Compare Source](https://github.com/SeaQL/sea-orm/compare/0.12.3...0.12.4) ##### New Features - Add support for root JSON arrays [https://github.com/SeaQL/sea-orm/pull/1898](https://github.com/SeaQL/sea-orm/pull/1898) Now the following works (requires the `json-array` / `postgres-array` feature)! ```rust #[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "json_struct_vec")] pub struct Model { #[sea_orm(primary_key)] pub id: i32, #[sea_orm(column_type = "Json")] pub struct_vec: Vec<JsonColumn>, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, FromJsonQueryResult)] pub struct JsonColumn { pub value: String, } ``` ##### Enhancements - Loader: use `ValueTuple` as hash key [https://github.com/SeaQL/sea-orm/pull/1868](https://github.com/SeaQL/sea-orm/pull/1868) ##### Upgrades - Updated `sea-query` to `0.30.2` https://github.com/SeaQL/sea-query/releases/tag/0.30.2 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Succeeds #1834
Step 1: remove the reliance on ValueVec