ADQL 2.1: boolean literals and expressions
Dave Morris
dave.morris at metagrid.co.uk
Fri Mar 9 03:12:58 CET 2018
Hi Markus,
On 2018-03-05 14:11, Markus Demleitner wrote:
>
> (b) We already have 1=INTERSECTS, 1=CONTAINS, 1=ivo_nocase_match, and
> more. If we now create boolean functions, we'll have more explaining
> to do as to where these odd beasts come from.
>
The reason for adding boolean types and literals in 2.1, was to lay the
ground work so that in a future version we could get rid of
1=INTERSECTS, 1=CONTAINS etc.
The discussion about this goes all the way back to 2014
https://volute.g-vo.org/svn/trunk/projects/dal/TAPNotes/TAPNotes-fmt.html#af-booleans
At some point we decided that we needed to do it in two stages,
introducing the boolean type and literals in this version and then
converting INTERSECTS and CONTAINS etc. into boolean functions in the
next.
I believe that the reason for the delay was that at the time some
implementations were relying on text substitution to convert ADQL to
SQL, and they would not be able to support boolean functions. Since then
all of the implementations now use some form of grammar parsing and this
restriction no longer applies.
I would have thought that in the long term, your example
SELECT
* FROM table
WHERE
contains(pt1, circ2)
OR
col_ref
is exactly the kind of thing we would want to be able to support.
So I guess the question is do we want to be able to replace
WHERE 1 = CONTAINS(...)
with the simpler and more understandable
WHERE CONTAINS(...)
at the price of more complicated and/or unclear error messages if the
users gets the query wrong.
Hope this helps,
Dave
--------
Dave Morris
Research Software Engineer
Wide Field Astronomy Unit
Institute for Astronomy
University of Edinburgh
--------
More information about the dal
mailing list