> -----Original Message-----
> From: [email protected] [mailto:public-sparql-dev-
> [email protected]] On Behalf Of Lee Feigenbaum
> Sent: 25 August 2009 14:02
> To: Toby Inkster
> Cc: [email protected]
> Subject: Re: SPARQL Query Problem - perhaps solvable in 1.1?
> 
> Toby Inkster wrote:
> > A very simple solution, which would solve the ordering problem (and also
> > greatly simplify the filter) would be for SPARQL to borrow the COALESCE
> > function from SQL. For those not familiar with COALESCE, it takes a
> > variable number of arguments, and returns the first of those arguments
> > which is not null. (In the SPARQL case, it would be the first which is
> > bound.)
> >
> > That would make my filter as simple as:
> >
> >     FILTER (inRange(COALESCE(?date1,?date2,?date3,?date4)))
> >
> > And my sorting as easy as:
> >
> >     ORDER BY (COALESCE(?date1,?date2,?date3,?date4))
> >
> 
> I should also mention that implementations are, of course, free to
> extend SPARQL with arbitrary functions, which could include COALESCE.
> 
> Lee
>

An operation like COALESCE isn't a true function because it does not operate on 
the values of it's arguments.  Like BOUND(?x), it sees arguments as give before 
evaluation (or can catch the eval error if you prefer), and COALESCE should 
choose the first legal value.

?x unbound
?y = 9
 e.g. COALESCE(?x, ?y, 1/0) 
is presumably 9 and not an error due to the 1/0 or unbound ?x 

SPARQL already has some special forms that behave not as functions in the 
presence of errors, including unbound variables.  bound(?var), || and &&  as 
they behave differently from pure functions.

Personally, I'd like to see the forms COALESCE and/or some kind of IF added to 
SPARQL if time permits because they occur sometimes in natural usage and even 
when not strictly necessary as language features the alternative can be 
verbosely painful.  But time is the critical factor - we don't have a long time 
in this round and resources are limited. 

[When translating multiple OPTIONALs when the OPTIONALs share a variable like 
?date not in the initial pattern, then Jena/SDB generates SQL using SQL 
COALESCE.]

        Andy

Reply via email to