[Rt-devel] Subclause Aggregation with SearchBuilder

Ruslan Zakirov ruslan.zakirov at gmail.com
Wed Feb 18 09:58:11 EST 2009


different subclauses are always joined with AND

On Wed, Feb 18, 2009 at 1:30 PM, Jon Wood <jonathan.wood at uk.clara.net> wrote:
> Using subclauses I've already got thing grouped correctly (the
> Open/CloseParen calls aren't neccesary), the problem is getting them
> matched using OR instead of AND.
>
> Thanks,
>
> Jon
>
> On Tue, 2009-02-17 at 21:11 +0300, Ruslan Zakirov wrote:
>> Subclause is the way to group multiple conditions with different
>> aggregators, something like:
>>
>>  my $txs =$tkt->Transactions;
>>  $txs->Limit(FIELD => "Type",
>>             VALUE => "Status",
>>             SUBCLAUSE => "XXX");
>>
>>  $txs->_OpenParen("XXX");
>>
>>  $txs->Limit(FIELD => "Type",
>>             VALUE => "CustomField",
>>             ENTRYAGGREGATOR => "OR",
>>             SUBCLAUSE => "XXX");
>>
>>  $txs->Limit(FIELD => "ReferenceType",
>>             VALUE => "RT::ObjectCustomFieldValue",
>>             SUBCLAUSE => "XXX");
>>
>>  $txs->Limit(FIELD => "CustomField",
>>             VALUE => "4",
>>             SUBCLAUSE => "XXX");
>>
>>  $txs->_CloseParen("XXX");
>>
>> I think it should work, but I have not tested.
>>
>> 2009/2/17 Jon Wood <jonathan.wood at uk.clara.net>:
>> > Hi,
>> >
>> > This may be the wrong list for this, but it does seem to be relevant to
>> > RT.
>> >
>> > I'm trying to extract a list of Transactions on a ticket which are
>> > either a status update, or a change to a specific customfield. Currently
>> > I'm using this:
>> >
>> >
>> >  my $txs =$tkt->Transactions;
>> >  $txs->Limit(FIELD => "Type",
>> >             VALUE => "Status",
>> >             SUBCLAUSE => "status");
>> >
>> >  $txs->Limit(FIELD => "Type",
>> >             VALUE => "CustomField",
>> >             SUBCLAUSE => "cf");
>> >
>> >  $txs->Limit(FIELD => "ReferenceType",
>> >             VALUE => "RT::ObjectCustomFieldValue",
>> >             ENTRYAGGREGATOR => "AND",
>> >             SUBCLAUSE => "cf");
>> >
>> >  $txs->Limit(FIELD => "CustomField",
>> >             VALUE => "4",
>> >             ENTRYAGGREGATOR => "AND",
>> >             SUBCLAUSE => "cf");
>> >
>> > Which gives me the following SQL:
>> >
>> >  SELECT DISTINCT main.*
>> >  FROM Transactions main
>> >  JOIN Tickets Tickets_1  ON ( Tickets_1.id = main.ObjectId )
>> >  WHERE (main.Type = 'Status')
>> >   AND (main.Type = 'CustomField'
>> >        AND main.ReferenceType = 'RT::ObjectCustomFieldValue'
>> >        AND main.CustomField = '4')
>> >   AND (main.ObjectType = 'RT::Ticket')
>> >   AND (Tickets_1.EffectiveId = '6')
>> >  ORDER BY main.Created ASC, main.id ASC
>> >
>> > Which is not going to work at all, since there will never be a
>> > transaction which matches both types. I've hit a brick wall on getting
>> > to be:
>> >
>> >  SELECT DISTINCT main.*
>> >  FROM Transactions main
>> >  JOIN Tickets Tickets_1  ON ( Tickets_1.id = main.ObjectId )
>> >  WHERE (main.Type = 'Status')
>> >    OR (main.Type = 'CustomField'
>> >        AND main.ReferenceType = 'RT::ObjectCustomFieldValue'
>> >        AND main.CustomField = '4')
>> >   AND (main.ObjectType = 'RT::Ticket')
>> >   AND (Tickets_1.EffectiveId = '6')
>> >  ORDER BY main.Created ASC, main.id ASC
>> >
>> > I'm sure there must be a way to do it, but no combination of
>> > ENTRYAGGREGATOR parameters seems to be giving me the desired result.
>> >
>> > Could somebody point me in the right direction please?
>> >
>> > Thanks,
>> > --
>> > Jon Wood
>> > SYSTEMS DEVELOPER
>> >
>> > Claranet Limited
>> > 21 Southampton Row
>> > London - WC1B 5HA
>> > United Kingdom
>> >
>> > +44 (0)20 7685 8643
>> > jonathan.wood at uk.clara.net
>> > www.uk.clara.net
>> >
>> > Company registration no: 3152737
>> > Place of registration: England
>> >
>> > All the information contained within this this electronic message from
>> > Claranet Ltd is covered by the disclaimer at
>> > http://www.uk.clara.net/disclaimer
>> >
>> > _______________________________________________
>> > List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel
>> >
>> >
>>
>>
>>
> --
> Jon Wood
> SYSTEMS DEVELOPER
>
> Claranet Limited
> 21 Southampton Row
> London - WC1B 5HA
> United Kingdom
>
> +44 (0)20 7685 8643
> jonathan.wood at uk.clara.net
> www.uk.clara.net
>
> Company registration no: 3152737
> Place of registration: England
>
> All the information contained within this this electronic message from
> Claranet Ltd is covered by the disclaimer at
> http://www.uk.clara.net/disclaimer
>



-- 
Best regards, Ruslan.


More information about the Rt-devel mailing list