Use ExpressionFactory.matchExp instead. Building any sort of expression from strings is a bad idea in my opinion.
On Fri, Jun 1, 2012 at 9:44 AM, Andrew Faust <[email protected]> wrote: > Hey John appreciate the fast response...thanks. > > So.... > String myFilter = "lastName = 'andy'" > I understand that.... However > String myFilter = "isStaffMember = 'true'" > How do you translate that into it's "object" form as you recommended? The > Expression.*fromString* method requires a String. Are you suggesting I use > a different filtering method that takes objects as parametes and not > strings? Thanks again.. > > On Fri, Jun 1, 2012 at 10:31 AM, John Huss <[email protected]> wrote: > > > The string 'true' is not the same as the literal value true. Same for > > dates. You need to pass these objects in object form, not as strings. > > > > On Fri, Jun 1, 2012 at 8:59 AM, Andrew Faust <[email protected]> wrote: > > > > > Good morning everybody. I am using the following code with (mostly) > good > > > results: > > > > > > > > > ============================================================= > > > > > > String filterExpr = "*lastName* = 'Simth'; > > > > > > SelectQuery personQuery = new SelectQuery(Person.*class*); > > > > > > List<Person> fullPersonList = ormContext.performQuery(personQuery); > > > > > > Expression filterExp = Expression.*fromString*(filterExpr); > > > > > > List<Person> filteredPersonList = > > filterExp.filterObjects(fullPersonList); > > > > > > ============================================================= > > > > > > This works well on any combination of operators such as =, >, <, and so > > > on. This also worrks ok with numeric fields. So, for string and > numeric > > > fields this code works ok. > > > > > > > > > > > > *HOWEVER*; when I try to filter fields that are booleans or dates then > I > > * > > > always* get back an empty results set. For example... > > > > > > > > > > > > Change filterExpr to *filterExpr = "isStaffMember = 'true'"* runs ok > but > > > returns 0 records which is NOT correct. Note that if I don't use the ' > > > character then I get runtime EXCEPTIONS. > > > > > > Change filterExpr to *filterExpr = "startDate = '2012-02-01'" *again > runs > > > ok but returns 0 records which is NOT correct. > > > > > > > > > > > > Here are some of my runtime particulars: > > > > > > JDK/JRE: 1.6.0_31 > > > > > > Cayenne version: 3.0.2 > > > > > > DerbyDB version: 10.8.1.2 > > > > > > The database/java fields are: String=VARCHAR/String; numbers are > > > integer/Integer; dates are DATE/Date; and booleans are boolean/Boolean. > > > > > > > > > > > > In summary, the filterExpFilterObjects(...) seems to work fine IF the > > > fields are strings or numbers; but is NOT working as expected with > Dates > > or > > > Booleans. Any ideas anyone? > > > > > >
