OC, I do not see your point about the qualifierWithQualifierFormat. Unless your users are writing the format string directly, you have code to build it. Building a qualifier format string or a qualifier object is the same thing, it is just easier and less error prone to build the object using ERXAndQualifier and ERXORQualifier...
WODisplayGroup can issue fetch to a database or use an array of object as source. See setObjectArray(NSArray objects). I always use it this way. If your data size is small, you can also filter in memory and set the resulting array as your WODisplayGroup source. Regards, Samuel > Le 15 févr. 2022 à 00:59, OCsite <o...@ocs.cz> a écrit : > > Thanks to all for the answers! > > Is there a way to use the ERExistsQualifier through > qualifierWithQualifierFormat? At the particular place it would be somewhat > difficult to create the qualifier tree programmatically, there are > considerably more complex qualifiers ANDed and ORred to the thing, which I > did not show for clarity, for they do not affect the problem. > > (Also, it would be essentially impossible to do two fetches — the final > qualifier is used through a WODisplayGroup). > > Thanks a lot again, > OC > >> On 15. 2. 2022, at 0:29, Samuel Pelletier <sam...@samkar.com >> <mailto:sam...@samkar.com>> wrote: >> >> Hi, >> >> As Aaron wrote, ERExisitsQualifier will generate an SQL for your needs. You >> may also change the JOIN type to change it's behaviour in SQL. EOF apply >> table joins before qualifier, I suspect other ORM does the same too. >> >> For that kind of quarry, you will probably have better performance doing 2 >> fetches and merge the results in memory. OR is an optimisation (index) >> killer for SQL queries unless the interpreter is able to rewrite then as >> multiple select using index with UNION >> >> If your columns are not indexed, forget this comment, you are doing table >> scan anyway, >> >> Regards, >> >> Samuel >> >> >>> Le 14 févr. 2022 à 10:05, Aaron Rosenzweig via Webobjects-dev >>> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> a >>> écrit : >>> >>> Hi OC, >>> >>> That’s called the object to relational impedance mismatch. The qualifier >>> works in memory but fails when you try to invoke with SQL. >>> >>> To get around it, you can use an ERXExistsQualifier for your to-one >>> relationship. Typically you use this with to-many relationships but it >>> actually can work with to-one relationships too. The reason it works is >>> because once inside the “exists” clause of SQL, it acts a bit like a >>> namespace shield… in other words it’s not doing an inner-join so not >>> negating things that you want to OR. >>> >>> Another possibility is to do multiple fetches. One with the attribute only. >>> Then a second with the relationship only. Then merge the results. >>> >>> A third possibility is to not use an inner-join when mapping your PLIST in >>> Entity Modeler, use one of the other join types… but that’s maybe not the >>> best option unless you really know what you are doing. >>> >>> Personally, I’d give the Exists qualifier a try. >>> >>> Cheers, >>> — Aaron >>> >>> >>>> On Feb 14, 2022, at 1:13 AM, ocs--- via Webobjects-dev >>>> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> >>>> wrote: >>>> >>>> Hi there, >>>> >>>> lately, I am encountering wrong fetches (with FrontBase, if important). I >>>> log out my qualifier and SQL, and the gist of the problem is a join in the >>>> OR-part of the qualifier. I want to fetch rows where there's an empty >>>> attribute, OR when there's a specific join: >>>> >>>> 06:52:06.510 DEBUG -> ((savedPresentationEndDate = null) or >>>> (lastValidPriceOfferCache.user = (model.DBUser)'[rc/Registration >>>> centre#1000004]')) >>>> >>>> Alas, SQL-level, it boils down to something entirely different: >>>> >>>> 06:52:06.535 DEBUG "DBAuction"@318794136 expression took 1 ms: SELECT ... >>>> FROM "T_AUCTION" t0, "T_PRICE_OFFER" T1 WHERE (T1."C_CREATOR_ID" = 1000004 >>>> OR t0."C_PRESENTATION_END_DATE" is NULL) AND >>>> t0."C_LAST_VALID_PRICE_OFFER_CACHE" = T1."C_UID" >>>> >>>> The SQL generator properly sets up the OR checking the right target PK, >>>> but then, instead of placing the join into the OR-part where it belongs >>>> to, it forces the join absolute to the entire condition — even to the >>>> NULL-check which should be completely independent. >>>> >>>> That self-evidently is not what I need here: if >>>> t0."C_PRESENTATION_END_DATE" is NULL, I want to fetch the row regardless >>>> of whatever vaue there is or is not in the C_LAST_VALID_PRICE_OFFER_CACHE >>>> foreign key. Actually, if there happens to be NULL in >>>> C_PRESENTATION_END_DATE, I would prefer if the SQL-level would not try to >>>> join at all, for it is self-evidently superfluous. I've tried manually >>>> >>>> SELECT * FROM "T_AUCTION" t0, "T_PRICE_OFFER" T1 WHERE >>>> (t0."C_PRESENTATION_END_DATE" is NULL) OR (T1."C_CREATOR_ID" = 1000004 AND >>>> t0."C_LAST_VALID_PRICE_OFFER_CACHE" = T1."C_UID") >>>> >>>> which is what, I believe, the SQL generator should have created from the >>>> qualifier, and it seems to work (at least, it produces no error; I cannot >>>> easily check whether the rows returned are OK. but they seem to t the >>>> first look). >>>> >>>> Can perhaps anybody see how to fix the problem? (But for by generating >>>> directly my SQL at the application level, which I can do if need be, but >>>> would rather not, unless really the only way.) >>>> >>>> Thanks, >>>> OC >>>> >>>> _______________________________________________ >>>> Do not post admin requests to the list. They will be ignored. >>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com >>>> <mailto:Webobjects-dev@lists.apple.com>) >>>> Help/Unsubscribe/Update your Subscription: >>>> https://lists.apple.com/mailman/options/webobjects-dev/aaron%40chatnbike.com >>>> >>>> <https://lists.apple.com/mailman/options/webobjects-dev/aaron%40chatnbike.com> >>>> >>>> This email sent to aa...@chatnbike.com <mailto:aa...@chatnbike.com> >>> >>> _______________________________________________ >>> Do not post admin requests to the list. They will be ignored. >>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com >>> <mailto:Webobjects-dev@lists.apple.com>) >>> Help/Unsubscribe/Update your Subscription: >>> https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com >>> <https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com> >>> >>> This email sent to sam...@samkar.com <mailto:sam...@samkar.com> >> >
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com