diff --git a/src/adql/db/DBChecker.java b/src/adql/db/DBChecker.java index 2f476e51548f0ad76d5b2b7b983ab90979dbb399..876cf2a6840a494dba6ed08b28dc3637bf0e89df 100644 --- a/src/adql/db/DBChecker.java +++ b/src/adql/db/DBChecker.java @@ -1306,13 +1306,13 @@ public class DBChecker implements QueryChecker { * </p> * * @author Grégory Mantelet (ARI) - * @version 1.4 (04/2017) + * @version 1.4 (05/2017) * @since 1.4 */ private static class SearchColumnOutsideGroupByHandler extends SearchColumnHandler { @Override protected boolean goInto(final ADQLObject obj){ - return !(obj instanceof ClauseADQL<?> && ((ClauseADQL<?>)obj).getName().equalsIgnoreCase("GROUP BY")) && super.goInto(obj); + return !(obj instanceof ClauseADQL<?> && ((ClauseADQL<?>)obj).getName() != null && ((ClauseADQL<?>)obj).getName().equalsIgnoreCase("GROUP BY")) && super.goInto(obj); } } diff --git a/test/adql/db/TestDBChecker.java b/test/adql/db/TestDBChecker.java index c2b978a67f2b4e1cd33035e3f9216ba042cb5c8d..685eaaf8129f53fe64ff4da6713e38e5f500ec87 100644 --- a/test/adql/db/TestDBChecker.java +++ b/test/adql/db/TestDBChecker.java @@ -96,6 +96,23 @@ public class TestDBChecker { assertEquals(expected[i], names[i]); } + @Test + public void testClauseADQLWithNameNull(){ + /* The name of an ADQLClause is got in DBChecker by SearchColumnOutsideGroupByHandler.goInto(...) + * and possibly in other locations in the future. If this name is NULL, no NullPointerException + * should be thrown. + * + * This issue can be tested by creating a ConstraintsGroup (i.e. in a constraints location like WHERE or JOIN...ON, + * a constraint (or more) between parenthesis). */ + ADQLParser parser = new ADQLParser(new DBChecker(tables, new ArrayList<FunctionDef>(0))); + try{ + parser.parseQuery("SELECT * FROM foo WHERE (colI BETWEEN 1 AND 10)"); + }catch(ParseException pe){ + pe.printStackTrace(); + fail(); + } + } + @Test public void testGroupByWithQualifiedColName(){ ADQLParser parser = new ADQLParser(new DBChecker(tables, new ArrayList<FunctionDef>(0)));