Thanks, Andy, it makes perfect sense now!

--
diogo patrão




On Sun, Mar 24, 2013 at 7:55 PM, Andy Seaborne <[email protected]> wrote:

> On 24/03/13 21:12, Diogo FC Patrao wrote:
>
>> Hi Andy
>>
>> In any case, why is there the need for the assign node?  Why not simply:
>>
>>  (project (?p ?asvar)
>>>     (group (?p) ((?asvar (count ?b)))
>>>
>>
> Each aggregate is done once, even if used multiple times:
>
> 1/ ==>
> SELECT (count(*) AS ?x) (1/count(*) AS ?y) { .. }
>
> 2/ ==>
> SELECT (avg(?o) AS ?x)
> { ?s ?p ?o }
> GROUP BY ?s
> HAVING ( avg(?o) > 156 )
>
> and (extend) which is used in the current ARQ, not (assign), is very cheap
> in ARQ.
>
>         Andy
>
>
>
>>
>> --
>> diogo patrão
>>
>>
>>
>>
>> On Sun, Mar 24, 2013 at 2:54 PM, Andy Seaborne <[email protected]> wrote:
>>
>>  On 22/03/13 17:43, Damian Steer wrote:
>>>
>>>
>>>> On 22 Mar 2013, at 17:01, Diogo FC Patrao <[email protected]>
>>>> wrote:
>>>>
>>>>   I'm rendering back the query, implementing the OpAsQuery missing
>>>> methods.
>>>>
>>>>> However I got another doubt, check the query below:
>>>>>
>>>>> select ?p count( ?b ) { ?p a <http://marafo.com#Paciente>. ?a <
>>>>> http://marafo.com#tem> ?b. LET ( ?marafo := ?b+1 ) } group by ?p
>>>>>
>>>>>
>>>>> The generated algebra is:
>>>>>
>>>>> (project (?p ?.1)
>>>>>
>>>>>    (assign ((?.1 ?.0))
>>>>>
>>>>>      (group (?p) ((?.0 (count ?b)))
>>>>>
>>>>> I didn't get why is there this "(assign (?.1 ?.0) ) " thing... can
>>>>> someone
>>>>> enlighten me?
>>>>>
>>>>>
>>>> AFAIK it's simply an artifact of way the compiler works.
>>>>
>>>> OpAsQuery handles this by remembering the aggregation as it goes (in
>>>> varExpression) and undoes the split later:
>>>>
>>>> <https://github.com/apache/****jena/blob/trunk/jena-arq/src/****<https://github.com/apache/**jena/blob/trunk/jena-arq/src/**>
>>>> main/java/com/hp/hpl/jena/****sparql/algebra/OpAsQuery.java#****L523<
>>>> https://github.com/**apache/jena/blob/trunk/jena-**
>>>> arq/src/main/java/com/hp/hpl/**jena/sparql/algebra/OpAsQuery.**
>>>> java#L523<https://github.com/apache/jena/blob/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java#L523>
>>>> >
>>>>
>>>>>
>>>>>
>>>> <https://github.com/apache/****jena/blob/trunk/jena-arq/src/****<https://github.com/apache/**jena/blob/trunk/jena-arq/src/**>
>>>> main/java/com/hp/hpl/jena/****sparql/algebra/OpAsQuery.java#****L56<
>>>> https://github.com/**apache/jena/blob/trunk/jena-**
>>>> arq/src/main/java/com/hp/hpl/**jena/sparql/algebra/OpAsQuery.**java#L56<https://github.com/apache/jena/blob/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java#L56>
>>>> >
>>>>
>>>>>
>>>>>
>>>> Damian
>>>>
>>>>
>>>>  Here, it's not SPARQL 1.1 because there is no AS on the count(?b)
>>> otherwise the (assign) would be (assign ((?AS_VAR ?.0)).  The ?.1 is a
>>> generated variable for the lack of AS with count().
>>>
>>>          Andy
>>>
>>>
>>>
>>
>

Reply via email to