Commit fe4c3e97 authored by gmantele's avatar gmantele
Browse files

[ADQL] Also append an HINT message in the ParseException message when a SQL

reserved word is encountered instead of a column/table/schema name/alias.

On the contrary to the previous commit, this time a list of SQL reserved words
has been added into the ADQL grammar. In this way, the parser will ensure that
no word of this list is used in an ADQL query. The raised error is then enriched
of an HINT message stating that this word is part of SQL, is not supported
by ADQL and must be written between double quotes if used as an identifier.

The list of SQL reserved words comes from the ADQL-2.0 standard, after removal
of all potentially used ADQL words, in order to avoid a conflict with the
already existing tokens in the ADQL grammar.
parent db0dfdad
Loading
Loading
Loading
Loading
+113 −113
Original line number Diff line number Diff line
@@ -3948,96 +3948,14 @@ public class ADQLParser implements ADQLParserConstants {
		}
	}

	private boolean jj_3R_65(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_107()){
			jj_scanpos = xsp;
			if (jj_3R_108()){
				jj_scanpos = xsp;
				if (jj_3R_109()){
					jj_scanpos = xsp;
					if (jj_3R_110()){
						jj_scanpos = xsp;
						if (jj_3R_111())
							return true;
					}
				}
			}
		}
		return false;
	}

	private boolean jj_3R_137(){
		if (jj_3R_112())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_112())
			return true;
		return false;
	}

	private boolean jj_3R_134(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(48)){
			jj_scanpos = xsp;
			if (jj_scan_token(49)){
				jj_scanpos = xsp;
				if (jj_scan_token(50)){
					jj_scanpos = xsp;
					if (jj_scan_token(51))
						return true;
				}
			}
		}
		if (jj_scan_token(LEFT_PAR))
			return true;
		xsp = jj_scanpos;
		if (jj_scan_token(19))
			jj_scanpos = xsp;
		if (jj_3R_51())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_117(){
		if (jj_scan_token(RIGHT))
			return true;
		return false;
	}

	private boolean jj_3R_133(){
		if (jj_scan_token(COUNT))
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(19))
			jj_scanpos = xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(10)){
			jj_scanpos = xsp;
			if (jj_3R_146())
				return true;
		}
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_126(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(98)){
			jj_scanpos = xsp;
		if (jj_scan_token(99)){
			jj_scanpos = xsp;
				if (jj_scan_token(100))
			if (jj_scan_token(100)){
				jj_scanpos = xsp;
				if (jj_scan_token(101))
					return true;
			}
		}
@@ -4078,7 +3996,7 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_54(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(24)){
		if (jj_scan_token(25)){
			jj_scanpos = xsp;
			if (jj_3R_73())
				return true;
@@ -4124,7 +4042,7 @@ public class ADQLParser implements ADQLParserConstants {
			}
		}
		xsp = jj_scanpos;
		if (jj_scan_token(25))
		if (jj_scan_token(26))
			jj_scanpos = xsp;
		return false;
	}
@@ -4132,7 +4050,7 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_55(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(24)){
		if (jj_scan_token(25)){
			jj_scanpos = xsp;
			if (jj_3R_74())
				return true;
@@ -4173,7 +4091,7 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_28(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(35))
		if (jj_scan_token(36))
			jj_scanpos = xsp;
		if (jj_scan_token(BETWEEN))
			return true;
@@ -4204,7 +4122,7 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(35))
		if (jj_scan_token(36))
			jj_scanpos = xsp;
		if (jj_scan_token(LIKE))
			return true;
@@ -4274,7 +4192,7 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3_14(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(41)){
		if (jj_scan_token(42)){
			jj_scanpos = xsp;
			if (jj_3R_27())
				return true;
@@ -4930,7 +4848,7 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_45(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(8)){
		if (jj_scan_token(9)){
			jj_scanpos = xsp;
			if (jj_3R_61())
				return true;
@@ -4953,9 +4871,9 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_135(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(10)){
		if (jj_scan_token(11)){
			jj_scanpos = xsp;
			if (jj_scan_token(11))
			if (jj_scan_token(12))
				return true;
		}
		if (jj_3R_128())
@@ -5012,9 +4930,9 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_129(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(8)){
		if (jj_scan_token(9)){
			jj_scanpos = xsp;
			if (jj_scan_token(9))
			if (jj_scan_token(10))
				return true;
		}
		if (jj_3R_112())
@@ -5079,13 +4997,13 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(8)){
			jj_scanpos = xsp;
		if (jj_scan_token(9)){
			jj_scanpos = xsp;
			if (jj_scan_token(10)){
				jj_scanpos = xsp;
					if (jj_scan_token(11))
				if (jj_scan_token(11)){
					jj_scanpos = xsp;
					if (jj_scan_token(12))
						return true;
				}
			}
@@ -5204,7 +5122,7 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3_5(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(64)){
		if (jj_scan_token(65)){
			jj_scanpos = xsp;
			if (jj_3R_20())
				return true;
@@ -5226,9 +5144,9 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_18(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(8)){
		if (jj_scan_token(9)){
			jj_scanpos = xsp;
			if (jj_scan_token(9))
			if (jj_scan_token(10))
				return true;
		}
		return false;
@@ -5612,9 +5530,9 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_107(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(59)){
		if (jj_scan_token(60)){
			jj_scanpos = xsp;
			if (jj_scan_token(60))
			if (jj_scan_token(61))
				return true;
		}
		if (jj_scan_token(LEFT_PAR))
@@ -5639,9 +5557,9 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_152(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(8)){
		if (jj_scan_token(9)){
			jj_scanpos = xsp;
			if (jj_scan_token(9))
			if (jj_scan_token(10))
				return true;
		}
		return false;
@@ -5657,6 +5575,88 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_65(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_107()){
			jj_scanpos = xsp;
			if (jj_3R_108()){
				jj_scanpos = xsp;
				if (jj_3R_109()){
					jj_scanpos = xsp;
					if (jj_3R_110()){
						jj_scanpos = xsp;
						if (jj_3R_111())
							return true;
					}
				}
			}
		}
		return false;
	}

	private boolean jj_3R_137(){
		if (jj_3R_112())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_112())
			return true;
		return false;
	}

	private boolean jj_3R_134(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(49)){
			jj_scanpos = xsp;
			if (jj_scan_token(50)){
				jj_scanpos = xsp;
				if (jj_scan_token(51)){
					jj_scanpos = xsp;
					if (jj_scan_token(52))
						return true;
				}
			}
		}
		if (jj_scan_token(LEFT_PAR))
			return true;
		xsp = jj_scanpos;
		if (jj_scan_token(20))
			jj_scanpos = xsp;
		if (jj_3R_51())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_117(){
		if (jj_scan_token(RIGHT))
			return true;
		return false;
	}

	private boolean jj_3R_133(){
		if (jj_scan_token(COUNT))
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(20))
			jj_scanpos = xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(11)){
			jj_scanpos = xsp;
			if (jj_3R_146())
				return true;
		}
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

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

	private static void jj_la1_init_0(){
		jj_la1_0 = new int[]{0x41,0x0,0x0,0x0,0x0,0x80000,0x100000,0x20,0x0,0x0,0x400000,0x400000,0x400,0x304,0x20,0x20,0x20,0x0,0x10,0x10,0x10,0x0,0x0,0x0,0x400000,0x400000,0x400000,0x0,0x4,0x3d800000,0x1c000000,0x2000000,0x1d000000,0x1d000000,0x1c000000,0x2000000,0x1d000000,0x1d000000,0x20,0xc0000000,0x3d800000,0x0,0x0,0x0,0x300,0x300,0x4,0x4,0x0,0x300,0x300,0xc00,0xc00,0x300,0x300,0x4,0x80,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x3f000,0x0,0x0,0x304,0x3f000,0x0,0x0,0x20,0x4,0x80000,0x704,0x0,0x80000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x304,0x20,0x20,0x0,0x0,0x20,0x304,};
		jj_la1_0 = new int[]{0x81,0x0,0x0,0x0,0x0,0x100000,0x200000,0x40,0x0,0x0,0x800000,0x800000,0x800,0x608,0x40,0x40,0x40,0x0,0x20,0x20,0x20,0x0,0x0,0x0,0x800000,0x800000,0x800000,0x0,0x8,0x7b000000,0x38000000,0x4000000,0x3a000000,0x3a000000,0x38000000,0x4000000,0x3a000000,0x3a000000,0x40,0x80000000,0x7b000000,0x0,0x0,0x0,0x600,0x600,0x8,0x8,0x0,0x600,0x600,0x1800,0x1800,0x600,0x600,0x8,0x100,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x7e000,0x0,0x0,0x608,0x7e000,0x0,0x0,0x40,0x8,0x100000,0xe08,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x608,0x40,0x40,0x0,0x0,0x40,0x608,};
	}

	private static void jj_la1_init_1(){
		jj_la1_1 = new int[]{0x0,0x1,0x800,0x1000,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000,0xc000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f0000,0x0,0x0,0x0,0x7e00000,0x8,0x6,0x6,0x8,0x0,0x8,0x8,0x0,0x108,0x200,0xffff0000,0x0,0x8,0x8,0x0,0x0,0x0,0xffff0000,0xf0000,0x0,0x1f0000,0x18000000,0x1000000,0x1000000,0x1000000,0x1000000,0xf8000000,0x0,0x7e00000,0xf8000000,0xf81f0000,0x0,0x0,0x0,0x0,0x0,0xffff0000,};
		jj_la1_1 = new int[]{0x0,0x2,0x1000,0x2000,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfffe0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18000,0x18000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0000,0x0,0x0,0x0,0xfc00000,0x10,0xc,0xc,0x10,0x0,0x10,0x10,0x0,0x210,0x400,0xfffe0000,0x0,0x10,0x10,0x0,0x0,0x0,0xfffe0000,0x1e0000,0x0,0x3e0000,0x30000000,0x2000000,0x2000000,0x2000000,0x2000000,0xf0000000,0x0,0xfc00000,0xf0000000,0xf03e0000,0x0,0x0,0x0,0x0,0x0,0xfffe0000,};
	}

	private static void jj_la1_init_2(){
		jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x0,0x80000000,0x0,0x91ffffff,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x0,0x80000000,0x90000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0x1,0x90000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x91ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x91ffffff,0x0,0x0,0x0,0x0,0x80000000,0x80000000,0x80000000,0x80000000,0x2,0x0,0x0,0x1fffffe,0x81fffffe,0x0,0x0,0x1fffc,0x1fe0000,0x0,0x91ffffff,};
		jj_la1_2 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23ffffff,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,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x23ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x3fffffd,0x3fffffd,0x0,0x0,0x3fff8,0x3fc0000,0x0,0x23ffffff,};
	}

	private static void jj_la1_init_3(){
		jj_la1_3 = new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1d,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x18,0x0,0x0,0x1d,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x1d,};
		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,0x3,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,};
	}

	final private JJCalls[] jj_2_rtns = new JJCalls[18];
@@ -5922,7 +5922,7 @@ public class ADQLParser implements ADQLParserConstants {
	/** Generate ParseException. */
	public ParseException generateParseException(){
		jj_expentries.clear();
		boolean[] la1tokens = new boolean[102];
		boolean[] la1tokens = new boolean[103];
		if (jj_kind >= 0){
			la1tokens[jj_kind] = true;
			jj_kind = -1;
@@ -5945,7 +5945,7 @@ public class ADQLParser implements ADQLParserConstants {
				}
			}
		}
		for(int i = 0; i < 102; i++){
		for(int i = 0; i < 103; i++){
			if (la1tokens[i]){
				jj_expentry = new int[1];
				jj_expentry[0] = i;
+101 −98
Original line number Diff line number Diff line
@@ -11,195 +11,197 @@ public interface ADQLParserConstants {
  /** End of File. */
  int EOF = 0;
  /** RegularExpression Id. */
  int LEFT_PAR = 2;
  int SQL_RESERVED_WORD = 2;
  /** RegularExpression Id. */
  int RIGHT_PAR = 3;
  int LEFT_PAR = 3;
  /** RegularExpression Id. */
  int DOT = 4;
  int RIGHT_PAR = 4;
  /** RegularExpression Id. */
  int COMMA = 5;
  int DOT = 5;
  /** RegularExpression Id. */
  int EOQ = 6;
  int COMMA = 6;
  /** RegularExpression Id. */
  int CONCAT = 7;
  int EOQ = 7;
  /** RegularExpression Id. */
  int PLUS = 8;
  int CONCAT = 8;
  /** RegularExpression Id. */
  int MINUS = 9;
  int PLUS = 9;
  /** RegularExpression Id. */
  int ASTERISK = 10;
  int MINUS = 10;
  /** RegularExpression Id. */
  int DIVIDE = 11;
  int ASTERISK = 11;
  /** RegularExpression Id. */
  int EQUAL = 12;
  int DIVIDE = 12;
  /** RegularExpression Id. */
  int NOT_EQUAL = 13;
  int EQUAL = 13;
  /** RegularExpression Id. */
  int LESS_THAN = 14;
  int NOT_EQUAL = 14;
  /** RegularExpression Id. */
  int LESS_EQUAL_THAN = 15;
  int LESS_THAN = 15;
  /** RegularExpression Id. */
  int GREATER_THAN = 16;
  int LESS_EQUAL_THAN = 16;
  /** RegularExpression Id. */
  int GREATER_EQUAL_THAN = 17;
  int GREATER_THAN = 17;
  /** RegularExpression Id. */
  int SELECT = 18;
  int GREATER_EQUAL_THAN = 18;
  /** RegularExpression Id. */
  int QUANTIFIER = 19;
  int SELECT = 19;
  /** RegularExpression Id. */
  int TOP = 20;
  int QUANTIFIER = 20;
  /** RegularExpression Id. */
  int FROM = 21;
  int TOP = 21;
  /** RegularExpression Id. */
  int AS = 22;
  int FROM = 22;
  /** RegularExpression Id. */
  int NATURAL = 23;
  int AS = 23;
  /** RegularExpression Id. */
  int INNER = 24;
  int NATURAL = 24;
  /** RegularExpression Id. */
  int OUTER = 25;
  int INNER = 25;
  /** RegularExpression Id. */
  int RIGHT = 26;
  int OUTER = 26;
  /** RegularExpression Id. */
  int LEFT = 27;
  int RIGHT = 27;
  /** RegularExpression Id. */
  int FULL = 28;
  int LEFT = 28;
  /** RegularExpression Id. */
  int JOIN = 29;
  int FULL = 29;
  /** RegularExpression Id. */
  int ON = 30;
  int JOIN = 30;
  /** RegularExpression Id. */
  int USING = 31;
  int ON = 31;
  /** RegularExpression Id. */
  int WHERE = 32;
  int USING = 32;
  /** RegularExpression Id. */
  int AND = 33;
  int WHERE = 33;
  /** RegularExpression Id. */
  int OR = 34;
  int AND = 34;
  /** RegularExpression Id. */
  int NOT = 35;
  int OR = 35;
  /** RegularExpression Id. */
  int IS = 36;
  int NOT = 36;
  /** RegularExpression Id. */
  int NULL = 37;
  int IS = 37;
  /** RegularExpression Id. */
  int BETWEEN = 38;
  int NULL = 38;
  /** RegularExpression Id. */
  int LIKE = 39;
  int BETWEEN = 39;
  /** RegularExpression Id. */
  int IN = 40;
  int LIKE = 40;
  /** RegularExpression Id. */
  int EXISTS = 41;
  int IN = 41;
  /** RegularExpression Id. */
  int BY = 42;
  int EXISTS = 42;
  /** RegularExpression Id. */
  int GROUP = 43;
  int BY = 43;
  /** RegularExpression Id. */
  int HAVING = 44;
  int GROUP = 44;
  /** RegularExpression Id. */
  int ORDER = 45;
  int HAVING = 45;
  /** RegularExpression Id. */
  int ASC = 46;
  int ORDER = 46;
  /** RegularExpression Id. */
  int DESC = 47;
  int ASC = 47;
  /** RegularExpression Id. */
  int AVG = 48;
  int DESC = 48;
  /** RegularExpression Id. */
  int MAX = 49;
  int AVG = 49;
  /** RegularExpression Id. */
  int MIN = 50;
  int MAX = 50;
  /** RegularExpression Id. */
  int SUM = 51;
  int MIN = 51;
  /** RegularExpression Id. */
  int COUNT = 52;
  int SUM = 52;
  /** RegularExpression Id. */
  int BOX = 53;
  int COUNT = 53;
  /** RegularExpression Id. */
  int CENTROID = 54;
  int BOX = 54;
  /** RegularExpression Id. */
  int CIRCLE = 55;
  int CENTROID = 55;
  /** RegularExpression Id. */
  int POINT = 56;
  int CIRCLE = 56;
  /** RegularExpression Id. */
  int POLYGON = 57;
  int POINT = 57;
  /** RegularExpression Id. */
  int REGION = 58;
  int POLYGON = 58;
  /** RegularExpression Id. */
  int CONTAINS = 59;
  int REGION = 59;
  /** RegularExpression Id. */
  int INTERSECTS = 60;
  int CONTAINS = 60;
  /** RegularExpression Id. */
  int AREA = 61;
  int INTERSECTS = 61;
  /** RegularExpression Id. */
  int COORD1 = 62;
  int AREA = 62;
  /** RegularExpression Id. */
  int COORD2 = 63;
  int COORD1 = 63;
  /** RegularExpression Id. */
  int COORDSYS = 64;
  int COORD2 = 64;
  /** RegularExpression Id. */
  int DISTANCE = 65;
  int COORDSYS = 65;
  /** RegularExpression Id. */
  int ABS = 66;
  int DISTANCE = 66;
  /** RegularExpression Id. */
  int CEILING = 67;
  int ABS = 67;
  /** RegularExpression Id. */
  int DEGREES = 68;
  int CEILING = 68;
  /** RegularExpression Id. */
  int EXP = 69;
  int DEGREES = 69;
  /** RegularExpression Id. */
  int FLOOR = 70;
  int EXP = 70;
  /** RegularExpression Id. */
  int LOG = 71;
  int FLOOR = 71;
  /** RegularExpression Id. */
  int LOG10 = 72;
  int LOG = 72;
  /** RegularExpression Id. */
  int MOD = 73;
  int LOG10 = 73;
  /** RegularExpression Id. */
  int PI = 74;
  int MOD = 74;
  /** RegularExpression Id. */
  int POWER = 75;
  int PI = 75;
  /** RegularExpression Id. */
  int RADIANS = 76;
  int POWER = 76;
  /** RegularExpression Id. */
  int RAND = 77;
  int RADIANS = 77;
  /** RegularExpression Id. */
  int ROUND = 78;
  int RAND = 78;
  /** RegularExpression Id. */
  int SQRT = 79;
  int ROUND = 79;
  /** RegularExpression Id. */
  int TRUNCATE = 80;
  int SQRT = 80;
  /** RegularExpression Id. */
  int ACOS = 81;
  int TRUNCATE = 81;
  /** RegularExpression Id. */
  int ASIN = 82;
  int ACOS = 82;
  /** RegularExpression Id. */
  int ATAN = 83;
  int ASIN = 83;
  /** RegularExpression Id. */
  int ATAN2 = 84;
  int ATAN = 84;
  /** RegularExpression Id. */
  int COS = 85;
  int ATAN2 = 85;
  /** RegularExpression Id. */
  int COT = 86;
  int COS = 86;
  /** RegularExpression Id. */
  int SIN = 87;
  int COT = 87;
  /** RegularExpression Id. */
  int TAN = 88;
  int SIN = 88;
  /** RegularExpression Id. */
  int STRING_LITERAL = 92;
  int TAN = 89;
  /** RegularExpression Id. */
  int DELIMITED_IDENTIFIER = 95;
  int STRING_LITERAL = 93;
  /** RegularExpression Id. */
  int REGULAR_IDENTIFIER = 96;
  int DELIMITED_IDENTIFIER = 96;
  /** RegularExpression Id. */
  int Letter = 97;
  int REGULAR_IDENTIFIER = 97;
  /** RegularExpression Id. */
  int SCIENTIFIC_NUMBER = 98;
  int Letter = 98;
  /** RegularExpression Id. */
  int UNSIGNED_FLOAT = 99;
  int SCIENTIFIC_NUMBER = 99;
  /** RegularExpression Id. */
  int UNSIGNED_INTEGER = 100;
  int UNSIGNED_FLOAT = 100;
  /** RegularExpression Id. */
  int DIGIT = 101;
  int UNSIGNED_INTEGER = 101;
  /** RegularExpression Id. */
  int DIGIT = 102;

  /** Lexical state. */
  int DEFAULT = 0;
@@ -212,6 +214,7 @@ public interface ADQLParserConstants {
  String[] tokenImage = {
    "<EOF>",
    "<token of kind 1>",
    "<SQL_RESERVED_WORD>",
    "\"(\"",
    "\")\"",
    "\".\"",
@@ -299,12 +302,12 @@ public interface ADQLParserConstants {
    "\"COT\"",
    "\"SIN\"",
    "\"TAN\"",
    "<token of kind 89>",
    "<token of kind 90>",
    "\"\\\'\"",
    "<token of kind 91>",
    "<token of kind 92>",
    "\"\\\'\"",
    "\"\\\"\"",
    "<token of kind 94>",
    "<token of kind 95>",
    "\"\\\"\"",
    "<REGULAR_IDENTIFIER>",
    "<Letter>",
+6809 −1005

File changed.

Preview size limit exceeded, changes collapsed.

+19 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@
 * 
 * Modified by Gr&eacute;gory Mantelet (ARI), on Sept. 2017
 * Modifications:
 *     - addition of a HINT in the error message when an ADQL reserved
 *     - addition of a HINT in the error message when an ADQL or SQL reserved
 *       word is at the origin of the error (see initialise(...))
 * 
 * /!\ DO NOT RE-GENERATE THIS FILE /!\
@@ -121,6 +121,22 @@ public class ParseException extends Exception {
	 * </i></p> */
	private final static String ADQL_RESERVED_WORDS_REGEX = "(ABS|ACOS|AREA|ASIN|ATAN|ATAN2|BOX|CEILING|CENTROID|CIRCLE|CONTAINS|COORD1|COORD2|COORDSYS|COS|DEGREES|DISTANCE|EXP|FLOOR|INTERSECTS|LOG|LOG10|MOD|PI|POINT|POLYGON|POWER|RADIANS|REGION|RAND|ROUND|SIN|SQRT|TOP|TAN|TRUNCATE|SELECT|TOP|DISTINCT|ALL|AS|COUNT|AVG|MAX|MIN|SUM|FROM|JOIN|CROSS|INNER|OUTER|LEFT|RIGHT|FULL|NATURAL|USING|ON|WHERE|IS|NOT|AND|OR|EXISTS|IN|LIKE|NULL|BETWEEN|ORDER|ASC|DESC|GROUP|BY|HAVING)";

	/** Regular expression listing all SQL reserved words.
	 * 
	 * <p><i>Note 1:
	 * 	This list is built from the list given in the ADQL-2.0 standard,
	 * 	after removal of all words potentially used in an ADQL query
	 * 	(see {@link #ADQL_RESERVED_WORDS_REGEX}).
	 * </i></p>
	 * 
	 * <p><i>Note 2:
	 * 	This regular expression is only used to display an appropriate hint
	 * 	to the user in the error message if a such word is at the origin of
	 * 	the error. (see {@link #initialise(Token, int[][], String[])} for more
	 * 	details).
	 * </i></p> */
	private final static String SQL_RESERVED_WORDS_REGEX = "(ABSOLUTE|ACTION|ADD|ALLOCATE|ALTER|ANY|ARE|ASSERTION|AT|AUTHORIZATION|BEGIN|BIT|BIT_LENGTH|BOTH|CASCADE|CASCADED|CASE|CAST|CATALOG|CHAR|CHARACTER|CHAR_LENGTH|CHARACTER_LENGTH|CHECK|CLOSE|COALESCE|COLLATE|COLLATION|COLUMN|COMMIT|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONTINUE|CONVERT|CORRESPONDING|CREATE|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATE|DAY|DEALLOCATE|DECIMAL|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DESCRIBE|DESCRIPTOR|DIAGNOSTICS|DISCONNECT|DOMAIN|DOUBLE|DROP|ELSE|END|END-EXEC|ESCAPE|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXTERNAL|EXTRACT|FALSE|FETCH|FIRST|FLOAT|FOR|FOREIGN|FOUND|GET|GLOBAL|GO|GOTO|GRANT|HOUR|IDENTITY|IMMEDIATE|INDICATOR|INITIALLY|INPUT|INSENSITIVE|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|ISOLATION|KEY|LANGUAGE|LAST|LEADING|LEVEL|LOCAL|LOWER|MATCH|MINUTE|MODULE|MONTH|NAMES|NATIONAL|NCHAR|NEXT|NO|NULLIF|NUMERIC|OCTET_LENGTH|OF|ONLY|OPEN|OPTION|OUTPUT|OVERLAPS|PAD|PARTIAL|POSITION|PRECISION|PREPARE|PRESERVE|PRIMARY|PRIOR|PRIVILEGES|PROCEDURE|PUBLIC|READ|REAL|REFERENCES|RELATIVE|RESTRICT|REVOKE|ROLLBACK|ROWS|SCHEMA|SCROLL|SECOND|SECTION|SESSION|SESSION_USER|SET|SIZE|SMALLINT|SOME|SPACE|SQL|SQLCODE|SQLERROR|SQLSTATE|SUBSTRING|SYSTEM_USER|TABLE|TEMPORARY|THEN|TIME|TIMESTAMP|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TRAILING|TRANSACTION|TRANSLATE|TRANSLATION|TRIM|TRUE|UNION|UNIQUE|UNKNOWN|UPDATE|UPPER|USAGE|USER|VALUE|VALUES|VARCHAR|VARYING|VIEW|WHEN|WHENEVER|WITH|WORK|WRITE|YEAR|ZONE)";

	/**
	 * Gets the position in the ADQL query of the token which generates this exception.
	 * 
@@ -181,6 +197,8 @@ public class ParseException extends Exception {
		String word = tokenName.toString().trim();
		if (word.toUpperCase().matches(ADQL_RESERVED_WORDS_REGEX))
			msg.append(System.getProperty("line.separator", "\n")).append("(HINT: \"").append(word).append("\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)");
		else if (word.toUpperCase().matches(SQL_RESERVED_WORDS_REGEX))
			msg.append(System.getProperty("line.separator", "\n")).append("(HINT: \"").append(word).append("\" is not supported in ADQL, but is however a reserved word. To use it as a column/table/schema name/alias, write it between double quotes.)");

		return msg.toString();
		/*String eol = System.getProperty("line.separator", "\n");
+19 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@
 * 
 * Modified by Gr&eacute;gory Mantelet (ARI), on Sept. 2017
 * Modifications:
 *     - addition of a HINT in the error message when an ADQL reserved
 *     - addition of a HINT in the error message when an ADQL or SQL reserved
 *       word is at the origin of the error (see initialise(...))
 * 
 * /!\ DO NOT RE-GENERATE THIS FILE /!\
@@ -121,6 +121,22 @@ public class ParseException extends Exception {
	 * </i></p> */
	private final static String ADQL_RESERVED_WORDS_REGEX = "(ABS|ACOS|AREA|ASIN|ATAN|ATAN2|BOX|CEILING|CENTROID|CIRCLE|CONTAINS|COORD1|COORD2|COORDSYS|COS|DEGREES|DISTANCE|EXP|FLOOR|INTERSECTS|LOG|LOG10|MOD|PI|POINT|POLYGON|POWER|RADIANS|REGION|RAND|ROUND|SIN|SQRT|TOP|TAN|TRUNCATE|SELECT|TOP|DISTINCT|ALL|AS|COUNT|AVG|MAX|MIN|SUM|FROM|JOIN|CROSS|INNER|OUTER|LEFT|RIGHT|FULL|NATURAL|USING|ON|WHERE|IS|NOT|AND|OR|EXISTS|IN|LIKE|NULL|BETWEEN|ORDER|ASC|DESC|GROUP|BY|HAVING)";

	/** Regular expression listing all SQL reserved words.
	 * 
	 * <p><i>Note 1:
	 * 	This list is built from the list given in the ADQL-2.0 standard,
	 * 	after removal of all words potentially used in an ADQL query
	 * 	(see {@link #ADQL_RESERVED_WORDS_REGEX}).
	 * </i></p>
	 * 
	 * <p><i>Note 2:
	 * 	This regular expression is only used to display an appropriate hint
	 * 	to the user in the error message if a such word is at the origin of
	 * 	the error. (see {@link #initialise(Token, int[][], String[])} for more
	 * 	details).
	 * </i></p> */
	private final static String SQL_RESERVED_WORDS_REGEX = "(ABSOLUTE|ACTION|ADD|ALLOCATE|ALTER|ANY|ARE|ASSERTION|AT|AUTHORIZATION|BEGIN|BIT|BIT_LENGTH|BOTH|CASCADE|CASCADED|CASE|CAST|CATALOG|CHAR|CHARACTER|CHAR_LENGTH|CHARACTER_LENGTH|CHECK|CLOSE|COALESCE|COLLATE|COLLATION|COLUMN|COMMIT|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONTINUE|CONVERT|CORRESPONDING|CREATE|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATE|DAY|DEALLOCATE|DECIMAL|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DESCRIBE|DESCRIPTOR|DIAGNOSTICS|DISCONNECT|DOMAIN|DOUBLE|DROP|ELSE|END|END-EXEC|ESCAPE|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXTERNAL|EXTRACT|FALSE|FETCH|FIRST|FLOAT|FOR|FOREIGN|FOUND|GET|GLOBAL|GO|GOTO|GRANT|HOUR|IDENTITY|IMMEDIATE|INDICATOR|INITIALLY|INPUT|INSENSITIVE|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|ISOLATION|KEY|LANGUAGE|LAST|LEADING|LEVEL|LOCAL|LOWER|MATCH|MINUTE|MODULE|MONTH|NAMES|NATIONAL|NCHAR|NEXT|NO|NULLIF|NUMERIC|OCTET_LENGTH|OF|ONLY|OPEN|OPTION|OUTPUT|OVERLAPS|PAD|PARTIAL|POSITION|PRECISION|PREPARE|PRESERVE|PRIMARY|PRIOR|PRIVILEGES|PROCEDURE|PUBLIC|READ|REAL|REFERENCES|RELATIVE|RESTRICT|REVOKE|ROLLBACK|ROWS|SCHEMA|SCROLL|SECOND|SECTION|SESSION|SESSION_USER|SET|SIZE|SMALLINT|SOME|SPACE|SQL|SQLCODE|SQLERROR|SQLSTATE|SUBSTRING|SYSTEM_USER|TABLE|TEMPORARY|THEN|TIME|TIMESTAMP|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TRAILING|TRANSACTION|TRANSLATE|TRANSLATION|TRIM|TRUE|UNION|UNIQUE|UNKNOWN|UPDATE|UPPER|USAGE|USER|VALUE|VALUES|VARCHAR|VARYING|VIEW|WHEN|WHENEVER|WITH|WORK|WRITE|YEAR|ZONE)";

	/**
	 * Gets the position in the ADQL query of the token which generates this exception.
	 * 
@@ -181,6 +197,8 @@ public class ParseException extends Exception {
		String word = tokenName.toString().trim();
		if (word.toUpperCase().matches(ADQL_RESERVED_WORDS_REGEX))
			msg.append(System.getProperty("line.separator", "\n")).append("(HINT: \"").append(word).append("\" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)");
		else if (word.toUpperCase().matches(SQL_RESERVED_WORDS_REGEX))
			msg.append(System.getProperty("line.separator", "\n")).append("(HINT: \"").append(word).append("\" is not supported in ADQL, but is however a reserved word. To use it as a column/table/schema name/alias, write it between double quotes.)");

		return msg.toString();
		/*String eol = System.getProperty("line.separator", "\n");
Loading