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]

Reply via email to