From 7a40f41115d88d3ef4601adb44871d7d19ed7688 Mon Sep 17 00:00:00 2001 From: Judith Silverman Date: Sat, 11 Jul 2026 20:57:08 -0700 Subject: [PATCH] IRSA-7854: Add support for POSITION_ANGLE() --- .../init_non_predicate_geometry_function.cxx | 3 ++- test/parse_adql.cxx | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Query/ADQL_parser/ADQL_parser/init_non_predicate_geometry_function.cxx b/src/Query/ADQL_parser/ADQL_parser/init_non_predicate_geometry_function.cxx index 6eb34c2..04d3490 100644 --- a/src/Query/ADQL_parser/ADQL_parser/init_non_predicate_geometry_function.cxx +++ b/src/Query/ADQL_parser/ADQL_parser/init_non_predicate_geometry_function.cxx @@ -8,7 +8,8 @@ void ADQL_parser::init_non_predicate_geometry_function() { geo_one_arg_names %= ascii::no_case[ascii::string("COORD1")] | ascii::no_case[ascii::string("COORD2")]; - geo_two_arg_names %= ascii::no_case[ascii::string("DISTANCE")]; + geo_two_arg_names %= ascii::no_case[ascii::string("DISTANCE")] | + ascii::no_case[ascii::string("POSITION_ANGLE")]; non_predicate_geometry_function_one_arg %= (hold[lexeme[geo_one_arg_names >> &nonidentifier_character]] > '(' > diff --git a/test/parse_adql.cxx b/test/parse_adql.cxx index 909d678..54a62e6 100644 --- a/test/parse_adql.cxx +++ b/test/parse_adql.cxx @@ -750,7 +750,6 @@ int main(int argc, char *argv[]) { "IN a.uri) > 0", // IRSA-7681 flexible WHERE revisited - "WITH SIA2_MINIMAL_JOIN AS (SELECT o.obsid as obsid, p.planeid as planeid, " "CAST ('1' AS BIGINT) as upload_row_id FROM (caom.observation o JOIN " "caom.plane p ON o.obsid = p.obsid) WHERE ((o.collection = " @@ -902,6 +901,23 @@ int main(int argc, char *argv[]) { "= o.telescope_name) AND (SIA2_CLOSEST_SUBQUERY.instrument IS NULL OR " "SIA2_CLOSEST_SUBQUERY.instrument = o.instrument_name)", + // IRSA-7854: support position_angle + "SELECT TAP_UPLOAD.pos.cntr as in_row_id, " + "POSITION_ANGLE(POINT('ICRS', dbtable.ra, dbtable.dec), POINT('ICRS', " + "mytable.ra, mytable.dec)) as unwise_posang " + "FROM wise.wise_allwise_p3am_cdd dbtable, " + "TAP_UPLOAD.pos WHERE " + "(ST_Intersects(TAP_UPLOAD.pos.poly,dbtable.poly)) ", + + "SELECT TAP_UPLOAD.pos.cntr as in_row_id, " + "DISTANCE(POINT('ICRS', dbtable.ra, dbtable.dec), POINT('ICRS', " + "mytable.ra, mytable.dec)) as unwise_dist, " + "POSITION_ANGLE(POINT('ICRS', dbtable.ra, dbtable.dec), POINT('ICRS', " + "mytable.ra, mytable.dec)) as unwise_posang " + "FROM wise.wise_allwise_p3am_cdd dbtable, " + "TAP_UPLOAD.pos WHERE " + "(ST_Intersects(TAP_UPLOAD.pos.poly,dbtable.poly)) ", + #endif // RUN_ALL };