vollt
vollt copied to clipboard
subqueries not permitted after an operator like: =, !=, <, <= , >, >=
The following ADQL query:
SELECT top 20 t_min, obs_publisher_did, access_url FROM ivoa.ObsCore WHERE proposal_id like '072.C-0488%' AND t_min >= (SELECT t_min FROM ivoa.ObsCore WHERE obs_publisher_did = 'ivo://eso.org/ID?ADP.2014-09-26T16:51:34.173' ) ORDER BY t_min
is perfectly accepted and successfully executed by the SQLServer. That query works in SQLServer because the subquery returns only one record. Had the subquery returned more than one record, than SQLServer would have thrown an exception:
com.microsoft.sqlserver.jdbc.SQLServerException: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Within TAPLIB, such query is not even attempted, as the parser throws an exception without checking if the subquery returns or not multiple records; here the error message:
Incorrect ADQL query: Encountered "SELECT". Was expecting one of: """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ <REGULAR_IDENTIFIER_CANDIDATE> <REGULAR_IDENTIFIER_CANDIDATE> """ (HINT: "SELECT" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)
Would it be possible to change the parser and implement the more dynamic SQLServer behaviour? Thanks!