Jakob,

You are correct; all of the logic is in the Builder class.  As you say,
there are lots of possibilities for these constraints.  I think that the
best way to express them is to use Java, rather than trying to invent some
new syntax that fits inside of XML.  And I bet that a fairly small set of
stock builders, appropriately parameterized, would hit the vast majority
of cases.

Hmmm ... I bet it would be quite easy to write an OqlQueryBuilder
which would take a single parameter, an OQL string, and parse it.
Imagine this:

<class-descriptor class="Employee" ...
 <collection-descriptor
  name="recentOutsideProjects"
  elementClass="Project"
  ... >
  <inverse-foreignkey field-ref="employeeId" />
  <query class="OqlQueryBuilder">
   <attribute 
    attribute-name="queryString"
    attribute-value="project.startDate.year > 2000 and project.org <> emp.org"
   />
  </query>
 </collection-descriptor>

Heck, maybe we could even write:

 <collection-descriptor
  name="recentOutsideProjects"
  elementClass="Project"
  ... >
  <inverse-foreignkey field-ref="employeeId" />
  <query language="oql"
         queryString="project.startDate.year > 2000 and project.org <> emp.org"
  />
 </collection-descriptor>

One of the reasons that I prefer a Builder to a Refiner is that I have 
relationships which don't involve FK's at all, so I'd like a way to
express those and never get any of the default Criteria in there.  But
maybe it's sufficient to use a refinement approach, and make the FX spec
optional in repository.xml if there's a query.  That way if I have FK's,
I can refine; if there aren't FK's, then I can just start from scratch.

-steve


>From: Jakob Braeuchi <[EMAIL PROTECTED]>
>
>hi steve,
>
>what i miss in this approach is the operation (=, <>, like, between etc.) .
>as far as i understand your proposal, the operation and the whole logic 
>is dependent of the query-builder.  
>this makes it quite easy for us to implement it in ojb, but  it moves 
>the burden of implementation to the user.  especially when you think of 
>accessing the 'originator' object as bill pointed out.
>
>as there are lots of possibilities for query-constraints, i'm not sure 
>whether we'll be able to provide the most useful ones (from a user's 
>point of view). on the other hand your approach provides all the 
>flexibility one might need...
>
>imo we should just provide a standard query-restrictor using static 
>parameters and operations for those who need simple restrictions only.
>
>just my 0.02 chf
>
>jakob
>
>sclark wrote:
>
>>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
>>
>>  
>>
>>>Date: Fri, 21 Feb 2003 17:49:32 +0100
>>>From: Jakob Braeuchi <[EMAIL PROTECTED]>
>>>To: OJB Users List <[EMAIL PROTECTED]>
>>>Subject: Re: 1:M querys constraints
>>>
>>>hi bill,
>>>
>>>what kind of restrictions woukd you need in the collection-descriptor ?
>>>do we need the full blown criteria there ?
>>>have you already any ideas about the definition of these restrictions ?
>>>
>>>i'm asking these questions because i do not want to parse restrictions 
>>>in the collection-descriptor.
>>>i prefer a simpler solution like :
>>>
>>><restriction field="firstname" operation="=" value="Mark" />
>>><restriction field="lastname" operation="like" value="M%" />
>>>
>>>how could we handle 'AND' / 'OR' ?
>>>
>>>what do yout think about ?
>>>
>>>jakob
>>>    
>>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>  
>>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to