Whoops, looked at the code and I think my answer was wrong.  The 
code is actually behaving as documented.  E.g. the docs say:

"This method adds a new criterion to the list of criterias. If a
 criterion for the requested column already exists, it is
 "OR"ed to the existing criterion...."

You are using two different columns in the or statements.  Therefore,
they are being treated as an add and not an or condition for each
column.

Not intuitive, but correctly documented. Sigh. Use the criterion 
method to create mix column or statements.

FWIW, the underlying cause is that criteria object was initially
created under Java 1.2 or 1.3 and all the Collections interfaces
where not defined.  So it is based on Hashtable.  This has caused 
some long term issues like this.  One of the goals of the 4.0 
version is to replace this with a HashList.  This will allow 
looking at the last added criterion and applying conditionals to 
it.  

> -----Original Message-----
> From: Greg Monroe
> Sent: Friday, February 05, 2010 9:35 AM
> To: 'Apache Torque Users List'
> Subject: RE: Criteria.or not working?
> 
> I think the proper syntax would be to "add" the left hand operator
> and then or the conditional with this.  Rather than 2 ors which
> are right hand conditionals. E.g., the proper syntax would be:
> 
> Criteria criteria = new Criteria();
> criteria.add("user.first_name", "John");
> criteria.or("user.last_name", "Doe");
> UserPeer.doSelect(criteria);
> 
> The syntax using two the .or methods is like trying to write an SQL
> statement like:
> 
> Select * from user where or user.first='John' or user.last='Doe';
> 
> The SQL parser would choke on this.  I suspect the code is assuming
> that since there is no right hand conditional the or should be treated
> as an and statement. E.g. "Null or X" is translated to just X.   It
> probably should throw an invalid syntax error here.
> 
> FWIW, using Criterion is really only "required" if you are using the
> same column or need parenthetical nesting.
> 
> 
> > -----Original Message-----
> > From: Ivano Luberti [mailto:lube...@archicoop.it]
> > Sent: Friday, February 05, 2010 9:08 AM
> > To: Apache Torque Users List
> > Subject: Re: Criteria.or not working?
> >
> > Sorry never tried that, I only now that is not the way the Criteria
> > class is meant to be used.
> > So I let developers talk about that.
> > Alternatively you can dig into the peer classes source code: I have
> done
> > a few times to understand Torque behaviour and is quite well written
> and
> > readable
> >
> > Ludwig Magnusson ha scritto:
> > > Yes that works, but that was not what I asked.
> > > My question was, how can the methods and(), add() and or() all
> generate
> > the
> > > same result?
> > >
> > > -----Original Message-----
> > > From: Ivano Luberti [mailto:lube...@archicoop.it]
> > > Sent: den 5 februari 2010 14:10
> > > To: Apache Torque Users List
> > > Subject: Re: Criteria.or not working?
> > >
> > > If you want to combine clauses mixinn and and or operators you should
> > > use Criterion.
> > >
> > > Look here for an introduction to how build queries using Criteria and
> > > Criterion
> > >
> > > http://db.apache.org/torque/releases/torque-
> 3.3/runtime/reference/read-
> > from-
> > > db.html
> > >
> > > Ludwig Magnusson ha scritto:
> > >
> > >> Hi!
> > >>
> > >> I have done some testing during development of a project here and it
> > seems
> > >> that criteria.and([parameters]), criteria.add([parameters]) and
> > >> criteria.or([parameters]) all generate the same query to the
> database.
> > >>
> > >>
> > >>
> > >> E.g these three code snippets:
> > >>
> > >> Criteria criteria = new Criteria();
> > >>
> > >> criteria.and("user.first_name", "John");
> > >>
> > >> criteria.and("user.last_name", "Doe");
> > >>
> > >> UserPeer.doSelect(criteria);
> > >>
> > >>
> > >>
> > >> Criteria criteria = new Criteria();
> > >>
> > >> criteria.add("user.first_name", "John");
> > >>
> > >> criteria.add("user.last_name", "Doe");
> > >>
> > >> UserPeer.doSelect(criteria);
> > >>
> > >>
> > >>
> > >> Criteria criteria = new Criteria();
> > >>
> > >> criteria.or("user.first_name", "John");
> > >>
> > >> criteria.or("user.last_name", "Doe");
> > >>
> > >> UserPeer.doSelect(criteria);
> > >>
> > >>
> > >>
> > >> . would all generate the Sql query
> > >>
> > >> SELECT * FROM USER WHERE first_name = "John" AND last_name = "Doe";
> > >>
> > >>
> > >>
> > >> How can this be?
> > >>
> > >> /Ludwig
> > >>
> > >>
> > >>
> > >>
> > >
> > >
> >
> > --
> > ==================================================
> > dott. Ivano Mario Luberti
> > Archimede Informatica societa' cooperativa a r. l.
> > Sede Operativa
> > Via Gereschi 36 - 56126- Pisa
> > tel.: +39-050- 580959
> > tel/fax: +39-050-9711344
> > web: www.archicoop.it
> > ==================================================
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
> > For additional commands, e-mail: torque-user-h...@db.apache.org
> 
> DukeCE Privacy Statement:
> Please be advised that this e-mail and any files transmitted with
> it are confidential communication or may otherwise be privileged or
> confidential and are intended solely for the individual or entity
> to whom they are addressed. If you are not the intended recipient
> you may not rely on the contents of this email or any attachments,
> and we ask that you please not read, copy or retransmit this
> communication, but reply to the sender and destroy the email, its
> contents, and all copies thereof immediately. Any unauthorized
> dissemination, distribution or copying of this communication is
> strictly prohibited.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
> For additional commands, e-mail: torque-user-h...@db.apache.org

DukeCE Privacy Statement:
Please be advised that this e-mail and any files transmitted with
it are confidential communication or may otherwise be privileged or
confidential and are intended solely for the individual or entity
to whom they are addressed. If you are not the intended recipient
you may not rely on the contents of this email or any attachments,
and we ask that you please not read, copy or retransmit this
communication, but reply to the sender and destroy the email, its
contents, and all copies thereof immediately. Any unauthorized
dissemination, distribution or copying of this communication is
strictly prohibited.

---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
For additional commands, e-mail: torque-user-h...@db.apache.org

Reply via email to