I made some small comments directly in the commit [1] (easier to comment on individual queries…)
Overall it looks good to me :) [1] https://github.com/anistor/infinispan/commit/c4e7a6049790f41016d20e73152fd353ce53b051 On Jun 7, 2013, at 5:56 PM, Adrian Nistor <anis...@redhat.com> wrote: > Hi all, > > As per ISPN-3169 "Define a Query API that will be common for library mode + > remote" we set out to define a simple dsl for writing queries against > embedded and remote caches that should be agnostic to the actual engine that > executes the query (lucene in our case now but might be others later) and yet > be easy to be translated into the native query language of the said engine. > > Our dsl aims to support filtering cached entities: > * by attributes allowing equality and range filters (less than, greater > than, between) > * some very simple collections tests (contains(value), > containsAll(setOfValues), containsAny(setOfValues)) that can be applied to > attributes that are collections of values > * string 'like' operator similar to SQL > * 'in' filter, to test if the attribute value belongs to a given fixed set > of values > * The filters can be composed of subfilters connected by logical and/or > operators. Operator precedence can be changed using nested subfilters. > * Negation is also allowed of course > * besides filtering based on attributes of the root entity it should also > be able to filter on attributes of embedded entities (eg. > person.address.postalCode == "123") at any nesting level > > As for type safety, the dsl should not allow the user to build syntactically > invalid queries. > Having a dsl that is also typesafe with regard to the domain model is > desirable, but not a must for this early stage. > > Here is a simple domain model I've used for writing some sample queries. > <Mail Attachment.png> > // a typesafe version > > User $user = $(User.class); > Query q0 = from($user) > .having($user.getName()).eq("John") > &nb! > sp; & > nbsp; > .and() > .having($user.getAddress().getPostCode()).eq("NW123") > .build > (); > > // non typesafe field references > > Query q1 = from(User.class) > .having("name").eq("John") > .and() > .having("surname").eq("Doe") > .build > (); > > > > More query samples on github here: > https://github.com/anistor/infinispan/blob/t_3169_m/query/src/main/java/org/infinispan/query/sandbox/sample_domain_model/QuerySamples.java > > This is just an interface sketch, not an implementation. > Your thoughts and comments regarding this dsl are very welcome! I'll add all > of the above to the wiki too. > > Cheers > > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev -- Galder Zamarreño gal...@redhat.com twitter.com/galderz Project Lead, Escalante http://escalante.io Engineer, Infinispan http://infinispan.org _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev