You may have noticed that I moved cayenne-mixins from github to Apache SVN. Now I am applying the mixin design to a set of real-life problems, and it works pretty well in some scenarios and less so in others (notably the issue with mixin property access code generation is in the later category).
Now I am getting to the interesting area of working with implicit mixin relationships. E.g. an audit object may have an (unmapped, implicit) relationship to a set of unrelated entities based on UUID String stored in an audit object column. UUID looks like "Artist:3487" or "Join:1:2:3", etc. This is essentially vertical inheritance, just without the mapping, and I want to keep it that way instead of creating an open-ended number of subclasses. So meta-ORM...
Problem #1: fetching a list of N Audit objects, prefetching a list of N related auditable objects from M (M <= N) tables. I am solving that with a generic property in Audit and a POST_LOAD callback reading Auditable. I don't want to execute N Auditable queries, instead I would like to prefetch them in batches. To do that, POST_LOAD would record UUID of Audit object, and then when all POST_LOAD's are called, I'd run M prefetch queries organized by Auditable type. But since callbacks are invoked outside a transaction, we don't have a context to gather UUIDs, and don't know when the query ended.
So a few solutions that I see here:
* extend the scope of the Transaction object, and add post-callbacks hook to it. Also add a property map to transaction that would allow user apps to attach arbitrary stuff to it. I wanted to do it some time back. Now is a good occasion.
* create a special callbacks context spanning either POST_<commit> or POST_LOAD, so it would allow to look at all objects processed in a given transaction. It will have its own callback events.
There are probably other solutions as well. Just thinking out loud...
Andrus
This archive was generated by hypermail 2.0.0 : Thu Nov 11 2010 - 17:46:44 UTC