Bill,
It looks like you didn't send this to the list, only to me.
I wanted to clarify a couple of things, especially where you thought that my
approach would require extensive metadata mods. My intention is that the only
addition would be the <query> element, which has a 'class' attribute and then
the existing custom <attribute> tag. Knowledge of hard coded values,
child/parent references, AND/OR, etc. would be in the concrete Builder
implementation class itself - Java is a much better language than XML to express
this kind of stuff.
So, looking at my example, the BuildProjectsQuery would know its job is to add a
couple of criteria to handle the requested date range. The Builder would in
this case be specific to a particular relationship. A given Builder
implementation would document the specific attribute names (which really are
parameters, as you wrote) which it expected to find in its CollectionDescriptor.
As far as being overkill for a simple restriction, I was thinking that OJB would
eventually ship with a number of basic Builders - NonFKCollectionQueryBuilder,
ConstantFieldQueryBuilder, DateRangeQueryBuilder, etc. That way we get the best
of both worlds - simple end-user specification of simple restrictions, and lots
of flexibility for those who need it.
-steve
>Date: Fri, 21 Feb 2003 10:13:30 -0800 (GMT-08:00)
>From: V B Skrypnyk <[EMAIL PROTECTED]>
>To: sclark <[EMAIL PROTECTED]>
>Subject: Re: 1:M querys constraints
>
>Hi,
>
>I would agree with Steve's approach. I think it would require fairly
>extensive configuration addition to metadata to support all
>possible types of restrictions, as they can reference hard coded
>values, as well as references to child and/or parent fields
>(with appended hard coded tokens like '%' for like restrictions),
>as well as AND / OR, etc.
>
>On the other hand, having a wholly custom query defined for
>a collection may be an overkill for a simple restriction. Perhaps,
>it may simplify matters, if there is a provision for a callback class
>that would modify a naturally existing association, like so:
>
><collection-descriptor
> name="projects"
> elementClass="gov.doi.cap.ojb.dataobjects.Project"
> ..>
>
> <constraint class="my.custom.query.restrictor">
> <parameter key="key1" value="value1"/>
> <parameter key="key2" value="value2"/>
> </constraint>
>
></collection-descriptor>
>
>The query restrictor would get an access to the already existing
>Query and can add or remove terms from it.
>
>In any case, there is still an issue of how to pass dynamic
>parameters for query restriction at runtime. Any other options besides metadata
manipulation?
>
>It would be nice to do something like this:
>
>Engineer e = < get engineer from data store >
>e.setProjectCollectionConstraints( firstDate, secondDate );
>Iterator it = e.getProjects();
>while( it.hasNext() ) {
> ...
>}
>
>In this case the restrictor callback or query builder would have
>to have an access to the instance of the object that 'originates'
>the query. Any ideas?
>
>--Bill.
>
>
>
>
>>Here's an idea on the collection restriction discussion. How about something
>>like this:
>>
>>/**
>> * Interface implemented by classes which are used to create a custom
>> * query for the contents of a
>>collection property, when the usual
>> * fk/pk approach is insufficient.
>> */
>>interface org.apache.ojb.broker.query.QueryBuilder
>> /** Build the query to retrieve the specified collection property
>>*/
>> Query buildQuery(Object obj, ClassDescriptor cld, CollectionDescriptor
cds);
>>}
>>
>>class PersistenceBrokerImpl {
>> private void retrieveCollection(...) {
>> if (cds.getQueryBuilder()
>>!= null)
>> {
>> fkQuery = cds.getQueryBuilder.buildQuery(obj, cld, cls);
>> }
>> else if (cds.isMtoNRelation())
>> {
>> fkQuery = getMtoNQuery(obj, cld, cds);
>>
>> }
>> else
>> {
>> fkQuery = getForeignKeyQuery(obj, cld, cds);
>> }
>> }
>>}
>>
>>Then in my app I would write something like this:
>>
>>class gov.doi.cap.ojb.query.BuildProjectsQuery
>>implements QueryBuilder { ... }
>>
>><collection-descriptor
>> name="projects"
>> elementClass="gov.doi.cap.ojb.dataobjects.Project"
>> ... >
>> <query class="gov.doi.cap.ojb.query.BuildProjectsQuery">
>>
>> <attribute
>> attribute-name="earliestStart"
>> attribute-value="1999"
>> />
>> <attribute
>> attribute-name="latestStart"
>> attribute-value="2001"
>> />
>> </query>
>></collection-descriptor>
>>
>>
>>This would allow great flexibility in the specification of the collection
>>contents, without requiring a query syntax to be defined in XML.
>>
>>-steve
>>
>>Steve Clark
>>Technology Applications Team
>>Natural
>>Resources Research Center/USGS
>>[EMAIL PROTECTED]
>>(970)226-9291
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]