Tom Chiverton ([info]thefalken) wrote,
@ 2006-09-25 18:47:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Nested ands and ors in Reactor's OO queries
From On:

Or, to put it another way, how can I put brackets in the where clause of Reactor's query ?
(Reactor ? That's a framework for ColdFusion that transparently
generates a variety of objects which can be used to interact with a variety
of database systems.)

So, I want to be able to say in my query:
        where
        ( a or b or c)
        and
        ( x or y )
but Reactor flattens this to:
        where  
        a or b or c
        and
        x or y
which is a totally different thing.
Gah.

So, what to do ? Make use of Reactor's Where.addWhere() of course !

My code might start out looking like:
    q.getWhere().setMode('Or');
    q.getWhere().isEqual('cases','clientCode',arguments.clientID3);
    q.getWhere().isEqual('cases','clientCode',arguments.clientID2);
    q.getWhere().isEqual('cases','clientCode',arguments.clientID1);
    q.getWhere().setMode('And');
    q.getWhere().isLike('cases','debtorName',searchTerms.debtorname);
    q.getWhere().setMode('Or');
    q.getWhere().isLike('cases','debtorName2',searchTerms.debtorname);

This just needs a few changes to construct seperate where's for each part inside brackets:
    w2=gw.createQuery();
    w2.getWhere().setMode('Or');
    w2.getWhere().isEqual('cases','clientCode',arguments.clientID3);
    w2.getWhere().isEqual('cases','clientCode',arguments.clientID2);
    w2.getWhere().isEqual('cases','clientCode',arguments.clientID1);
    q.getWhere().addWhere(w2.getWhere());
    w2=gw.createQuery();
    w2.getWhere().isLike('cases','debtorName',searchTerms.debtorname);
    w2.getWhere().setMode('Or');
    w2.getWhere().isLike('cases','debtorName2',searchTerms.debtorname);
    q.getWhere().addWhere(w2.getWhere());
 



Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…