Commit 9bc530cd authored by gmantele's avatar gmantele
Browse files

[ADQL] Fix Error when a query ends by a comment with no ending new line.

parent ab555333
Loading
Loading
Loading
Loading
+46 −46
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ import adql.translator.TranslationException;
* @see ADQLQueryFactory
*
* @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
* @version 1.4 (09/2016)
* @version 1.4 (03/2017)
*/
public class ADQLParser implements ADQLParserConstants {

@@ -3935,6 +3935,40 @@ public class ADQLParser implements ADQLParserConstants {
		}
	}

	private boolean jj_3R_117(){
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_27())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_122(){
		if (jj_scan_token(BOX))
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_134())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_135())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_101())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_101())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_116(){
		if (jj_3R_21())
			return true;
@@ -3970,14 +4004,14 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_115(){
		if (jj_3R_22())
	private boolean jj_3R_44(){
		if (jj_scan_token(SELECT))
			return true;
		return false;
	}

	private boolean jj_3R_44(){
		if (jj_scan_token(SELECT))
	private boolean jj_3R_115(){
		if (jj_3R_22())
			return true;
		return false;
	}
@@ -4322,11 +4356,11 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_128(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(99)){
		if (jj_scan_token(97)){
			jj_scanpos = xsp;
			if (jj_scan_token(100)){
			if (jj_scan_token(98)){
				jj_scanpos = xsp;
				if (jj_scan_token(101))
				if (jj_scan_token(99))
					return true;
			}
		}
@@ -5601,40 +5635,6 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_117(){
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_27())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_122(){
		if (jj_scan_token(BOX))
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_134())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_135())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_101())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_101())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	/** Generated Token Manager. */
	public ADQLParserTokenManager token_source;
	SimpleCharStream jj_input_stream;
@@ -5667,11 +5667,11 @@ public class ADQLParser implements ADQLParserConstants {
	}

	private static void jj_la1_init_2(){
		jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0xffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x20ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xffffff,0xffffff,0x0,0x0,0xfffe,0xff0000,0x0,0x20ffffff,};
		jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000000,0xc0000000,0x0,0xc0000000,0x0,0xc8ffffff,0x0,0x0,0x0,0xc0000000,0x0,0x0,0x0,0xc0000000,0x0,0x0,0x0,0xc0000000,0x0,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x0,0x0,0x0,0xc0000000,0xc8000000,0x0,0xc0ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000000,0x0,0x0,0xc8000000,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc8ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0xc8ffffff,0x0,0x0,0x0,0x0,0xc0000000,0xc0000000,0xc0000000,0xc0000000,0x1,0x0,0x0,0x80ffffff,0xc0ffffff,0x0,0x0,0xfffe,0xff0000,0x0,0xc8ffffff,};
	}

	private static void jj_la1_init_3(){
		jj_la1_3 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x3,0x0,0x3b,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x30,0x0,0x0,0x3b,0x3,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x2,0x3b,0x0,0x0,0x0,0x0,0x0,0x3b,};
		jj_la1_3 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xc,0x0,0x0,0xe,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0xe,};
	}

	final private JJCalls[] jj_2_rtns = new JJCalls[16];
@@ -5900,7 +5900,7 @@ public class ADQLParser implements ADQLParserConstants {
	/** Generate ParseException. */
	public ParseException generateParseException(){
		jj_expentries.clear();
		boolean[] la1tokens = new boolean[103];
		boolean[] la1tokens = new boolean[101];
		if (jj_kind >= 0){
			la1tokens[jj_kind] = true;
			jj_kind = -1;
@@ -5923,7 +5923,7 @@ public class ADQLParser implements ADQLParserConstants {
				}
			}
		}
		for(int i = 0; i < 103; i++){
		for(int i = 0; i < 101; i++){
			if (la1tokens[i]){
				jj_expentry = new int[1];
				jj_expentry[0] = i;
+12 −16
Original line number Diff line number Diff line
@@ -183,30 +183,28 @@ public interface ADQLParserConstants {
  /** RegularExpression Id. */
  int TAN = 87;
  /** RegularExpression Id. */
  int STRING_LITERAL = 93;
  int STRING_LITERAL = 91;
  /** RegularExpression Id. */
  int DELIMITED_IDENTIFIER = 96;
  int DELIMITED_IDENTIFIER = 94;
  /** RegularExpression Id. */
  int REGULAR_IDENTIFIER = 97;
  int REGULAR_IDENTIFIER = 95;
  /** RegularExpression Id. */
  int Letter = 98;
  int Letter = 96;
  /** RegularExpression Id. */
  int SCIENTIFIC_NUMBER = 99;
  int SCIENTIFIC_NUMBER = 97;
  /** RegularExpression Id. */
  int UNSIGNED_FLOAT = 100;
  int UNSIGNED_FLOAT = 98;
  /** RegularExpression Id. */
  int UNSIGNED_INTEGER = 101;
  int UNSIGNED_INTEGER = 99;
  /** RegularExpression Id. */
  int DIGIT = 102;
  int DIGIT = 100;

  /** Lexical state. */
  int DEFAULT = 0;
  /** Lexical state. */
  int WithinComment = 1;
  int WithinString = 1;
  /** Lexical state. */
  int WithinString = 2;
  /** Lexical state. */
  int WithinDelimitedId = 3;
  int WithinDelimitedId = 2;

  /** Literal token values. */
  String[] tokenImage = {
@@ -299,13 +297,11 @@ public interface ADQLParserConstants {
    "\"SIN\"",
    "\"TAN\"",
    "<token of kind 88>",
    "<token of kind 89>",
    "<token of kind 90>",
    "\"\\\'\"",
    "<token of kind 92>",
    "<token of kind 90>",
    "\"\\\'\"",
    "\"\\\"\"",
    "<token of kind 95>",
    "<token of kind 93>",
    "\"\\\"\"",
    "<REGULAR_IDENTIFIER>",
    "<Letter>",
+362 −420

File changed.

Preview size limit exceeded, changes collapsed.

+4 −6
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * You should have received a copy of the GNU Lesser General Public License
 * along with ADQLLibrary.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Copyright 2012-2016 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
 * Copyright 2012-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
 *                       Astronomisches Rechen Institute (ARI)
 */

@@ -26,7 +26,7 @@
*  If the syntax is not conform to the ADQL definition an error message is printed else it will be the message "Correct syntax".
*
*  Author:  Gr&eacute;gory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
*  Version: 1.4 (09/2016)
*  Version: 1.4 (03/2017)
*/

							/* ########### */
@@ -89,7 +89,7 @@ import adql.translator.TranslationException;
* @see ADQLQueryFactory
*
* @author Gr&eacute;gory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
* @version 1.4 (09/2016)
* @version 1.4 (03/2017)
*/
public class ADQLParser {
	
@@ -653,9 +653,7 @@ TOKEN : {
/* ******* */
/* Comment */
/* ******* */
<DEFAULT> MORE : { < <MINUS>(<MINUS>)+ >: WithinComment }
<WithinComment> SKIP : { < "\n" | "\r" | "\r\n" >: DEFAULT }
<WithinComment> MORE : { < ~[] > }
SKIP : { < <MINUS><MINUS> (~["\n","\r"])* ("\n"|"\r"|"\r\n")? > }

/* ****** */
/* String */
+10 −1
Original line number Diff line number Diff line
@@ -148,13 +148,22 @@ public class TestADQLParser {
	public void test(){
		ADQLParser parser = new ADQLParser();
		try{
			ADQLQuery query = parser.parseQuery("SELECT 'truc''machin'  	'bidule' -- why not a comment now ^^\n'FIN' FROM foo;");
			ADQLQuery query = parser.parseQuery("SELECT 'truc''machin'  	'bidule' --- why not a comment now ^^\n'FIN' FROM foo;");
			assertNotNull(query);
			assertEquals("truc'machinbiduleFIN", ((StringConstant)(query.getSelect().get(0).getOperand())).getValue());
			assertEquals("'truc''machinbiduleFIN'", query.getSelect().get(0).getOperand().toADQL());
		}catch(Exception ex){
			fail("String litteral concatenation is perfectly legal according to the ADQL standard.");
		}

		// With a comment ending the query
		try{
			ADQLQuery query = parser.parseQuery("SELECT TOP 1 * FROM ivoa.ObsCore -- comment");
			assertNotNull(query);
		}catch(Exception ex){
			ex.printStackTrace();
			fail("String litteral concatenation is perfectly legal according to the ADQL standard.");
		}
	}

}