Serdes v2: Refactor entire serdes flow to use real Toucan, not low level (#25981)
Previously, some automatic behavior was causing problems in serdes. (The worst example is generating an `entity_id` on insert while deserializing an entity we don't own - if deserialized again it would be duplicated.) A whole cascade of design choices fell out of this problem: - `insert!` would generate `entity_id`s, so use `simple-insert!` - But `simple-insert!` doesn't convert eg. MBQL `:definition` maps back into JSON strings - We got the maps as Clojure data and not JSON strings because `select` and `simple-select` both run `post-select` and parse the JSON. - So we ended up with a raw query on the select side and `simple-insert!` on the storage side. This change unwinds that whole stack, and instead uses a dynamic var to suppress the few pieces of `pre-insert` and `pre-update` logic that causes problems. The end result is much cleaner, and much more consistent with the rest of Metabase's backend logic.
Showing
- dev/src/dev/render_png.clj 2 additions, 2 deletionsdev/src/dev/render_png.clj
- enterprise/backend/src/metabase_enterprise/serialization/v2/extract.clj 36 additions, 15 deletions...kend/src/metabase_enterprise/serialization/v2/extract.clj
- enterprise/backend/src/metabase_enterprise/serialization/v2/load.clj 16 additions, 4 deletions...backend/src/metabase_enterprise/serialization/v2/load.clj
- enterprise/backend/test/metabase_enterprise/serialization/v2/e2e/yaml_test.clj 277 additions, 188 deletions...st/metabase_enterprise/serialization/v2/e2e/yaml_test.clj
- enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj 80 additions, 70 deletions...est/metabase_enterprise/serialization/v2/extract_test.clj
- enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj 9 additions, 9 deletions...d/test/metabase_enterprise/serialization/v2/load_test.clj
- src/metabase/models/card.clj 4 additions, 11 deletionssrc/metabase/models/card.clj
- src/metabase/models/collection.clj 4 additions, 16 deletionssrc/metabase/models/collection.clj
- src/metabase/models/dashboard.clj 2 additions, 10 deletionssrc/metabase/models/dashboard.clj
- src/metabase/models/dashboard_card.clj 10 additions, 14 deletionssrc/metabase/models/dashboard_card.clj
- src/metabase/models/database.clj 1 addition, 0 deletionssrc/metabase/models/database.clj
- src/metabase/models/dimension.clj 2 additions, 2 deletionssrc/metabase/models/dimension.clj
- src/metabase/models/field_values.clj 11 additions, 1 deletionsrc/metabase/models/field_values.clj
- src/metabase/models/interface.clj 10 additions, 1 deletionsrc/metabase/models/interface.clj
- src/metabase/models/metric.clj 3 additions, 6 deletionssrc/metabase/models/metric.clj
- src/metabase/models/native_query_snippet.clj 5 additions, 13 deletionssrc/metabase/models/native_query_snippet.clj
- src/metabase/models/pulse.clj 1 addition, 1 deletionsrc/metabase/models/pulse.clj
- src/metabase/models/pulse_card.clj 3 additions, 2 deletionssrc/metabase/models/pulse_card.clj
- src/metabase/models/pulse_channel.clj 10 additions, 6 deletionssrc/metabase/models/pulse_channel.clj
- src/metabase/models/segment.clj 2 additions, 2 deletionssrc/metabase/models/segment.clj
Loading
Please register or sign in to comment