Have the first cut of a progamatically doing Joins at an API level between DataStores...
My test for sucess is:
- Can make SQL out of this for Postgis
- Can postprocess this for Shapefiles
- Can do cross DataStore opperations
- Can do Catalog Queries
Others have other goals ... like http://docs.codehaus.org/display/GEOTOOLS/Community+Schema+Support+and+Complex+Types.
The idea is that the Expr is defined to reference attibutes via XPath expressions.
We then "resolve" a named thing (Map, Feature, or Metadata) against the Expr - replacing the AttributeExpr with LiteralExpr
When everything is literal we can evaulate for an answer.
Handling of metadata is done in a similar fashion....
h3 Q: What does reduce do?
jrmacgill: what does reduce do?
Jody Garnett: The other thing that Expr does nicely is "flow" when you are writing it as a Java programmer. A couple lines of Expr code is similar to a page of using the FilterFactory.
Jody Garnett: Reduce knocked off a level of xpath. Reducing the expression to something that could be used directly.
Jody Garnett: So Exprs.attribute("river/name").reduce("river") == Exprs.attribute("name")
Jody Garnett: Basically this is used when untangling a Join so we can make a Filter.
Jody Garnett: Could combine the "reduce" and Filter into one opperation. Hey wait that is a great idea.
Jody Garnett: Much clearer.
Jody Garnett: Turn it into something like Exprs.attribute("river/name").filter( "river") would create a Filter that opperated against the "river" FeatureType.
Jody Garnett: Hmm could be done more simply - Need to pass in the FeatureType for late binding, could automatically "reduce" based on the typeName.
Jody Garnett: (As you can see James this is still a work in progress)
And now an idea from RobA: