Commit e4f38c95 authored by gmantele's avatar gmantele
Browse files

[ADQL] Fix the parsing and translation of a concatenation expression.

* The parsing did not allow unsigned numerics and SQL SET functions as
  specified in the ADQL 2.0 grammar

* It was even forbidden to put a column whose the type is not String.

* The translation of a concatenation expression was always prefixed by the
  ADQLList's name: CONCAT_STR. Of course, no database likes that...

Regarding this last point, this commit fixes the GitHub issue #54
parent b648da34
Loading
Loading
Loading
Loading
+222 −174
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ import adql.translator.TranslationException;
* @see ADQLQueryFactory
*
* @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
* @version 1.4 (09/2017)
* @version 1.4 (01/2018)
*/
public class ADQLParser implements ADQLParserConstants {

@@ -1847,10 +1847,32 @@ public class ADQLParser implements ADQLParserConstants {
						}
						break;
					}
					case SCIENTIFIC_NUMBER:
					case UNSIGNED_FLOAT:
					case UNSIGNED_INTEGER:{
						op = UnsignedNumeric();
						{
							if ("" != null)
								return op;
						}
						break;
					}
					case AVG:
					case MAX:
					case MIN:
					case SUM:
					case COUNT:{
						op = SqlFunction();
						{
							if ("" != null)
								return op;
						}
						break;
					}
					case DELIMITED_IDENTIFIER:
					case REGULAR_IDENTIFIER:{
						column = Column();
						column.setExpectedType('S');
						column.setExpectedType('*');
						{
							if ("" != null)
								return column;
@@ -1859,7 +1881,7 @@ public class ADQLParser implements ADQLParserConstants {
					}
					case LEFT_PAR:{
						left = jj_consume_token(LEFT_PAR);
						op = StringExpression();
						op = ValueExpression();
						right = jj_consume_token(RIGHT_PAR);
						WrappedOperand wop = queryFactory.createWrappedOperand(op);
						wop.setPosition(new TextPosition(left, right));
@@ -2190,9 +2212,17 @@ public class ADQLParser implements ADQLParserConstants {
					}else{
						switch((jj_ntk == -1) ? jj_ntk_f() : jj_ntk){
							case LEFT_PAR:
							case AVG:
							case MAX:
							case MIN:
							case SUM:
							case COUNT:
							case STRING_LITERAL:
							case DELIMITED_IDENTIFIER:
							case REGULAR_IDENTIFIER:{
							case REGULAR_IDENTIFIER:
							case SCIENTIFIC_NUMBER:
							case UNSIGNED_FLOAT:
							case UNSIGNED_INTEGER:{
								op = StringValueExpressionPrimary();
								break;
							}
@@ -3948,7 +3978,7 @@ public class ADQLParser implements ADQLParserConstants {
		}
	}

	private boolean jj_3R_126(){
	private boolean jj_3R_128(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(99)){
@@ -3962,6 +3992,17 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_129(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_135()){
			jj_scanpos = xsp;
			if (jj_3R_136())
				return true;
		}
		return false;
	}

	private boolean jj_3R_113(){
		if (jj_scan_token(LEFT))
			return true;
@@ -3982,17 +4023,6 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_127(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_133()){
			jj_scanpos = xsp;
			if (jj_3R_134())
				return true;
		}
		return false;
	}

	private boolean jj_3R_54(){
		Token xsp;
		xsp = jj_scanpos;
@@ -4047,6 +4077,12 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3_18(){
		if (jj_3R_16())
			return true;
		return false;
	}

	private boolean jj_3R_55(){
		Token xsp;
		xsp = jj_scanpos;
@@ -4058,12 +4094,6 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3_18(){
		if (jj_3R_16())
			return true;
		return false;
	}

	private boolean jj_3R_35(){
		Token xsp;
		xsp = jj_scanpos;
@@ -4161,7 +4191,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_132(){
	private boolean jj_3R_134(){
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_51())
@@ -4208,19 +4238,13 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_22(){
		if (jj_3R_43())
			return true;
		return false;
	}

	private boolean jj_3R_120(){
		if (jj_3R_51())
			return true;
		Token xsp;
		while(true){
			xsp = jj_scanpos;
			if (jj_3R_132()){
			if (jj_3R_134()){
				jj_scanpos = xsp;
				break;
			}
@@ -4228,18 +4252,24 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_148(){
	private boolean jj_3R_22(){
		if (jj_3R_43())
			return true;
		return false;
	}

	private boolean jj_3R_150(){
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_151())
		if (jj_3R_153())
			return true;
		return false;
	}

	private boolean jj_3R_147(){
	private boolean jj_3R_149(){
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_151())
		if (jj_3R_153())
			return true;
		return false;
	}
@@ -4254,7 +4284,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_125(){
	private boolean jj_3R_127(){
		if (jj_scan_token(DOT))
			return true;
		if (jj_3R_14())
@@ -4262,7 +4292,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_124(){
	private boolean jj_3R_126(){
		if (jj_scan_token(DOT))
			return true;
		if (jj_3R_14())
@@ -4275,10 +4305,10 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_124())
		if (jj_3R_126())
			jj_scanpos = xsp;
		xsp = jj_scanpos;
		if (jj_3R_125())
		if (jj_3R_127())
			jj_scanpos = xsp;
		return false;
	}
@@ -4289,14 +4319,14 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_30(){
		if (jj_scan_token(REGULAR_IDENTIFIER))
	private boolean jj_3R_133(){
		if (jj_3R_21())
			return true;
		return false;
	}

	private boolean jj_3R_131(){
		if (jj_3R_21())
	private boolean jj_3R_30(){
		if (jj_scan_token(REGULAR_IDENTIFIER))
			return true;
		return false;
	}
@@ -4315,7 +4345,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_139(){
	private boolean jj_3R_141(){
		if (jj_3R_112())
			return true;
		return false;
@@ -4332,7 +4362,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_130(){
	private boolean jj_3R_132(){
		if (jj_3R_22())
			return true;
		return false;
@@ -4341,9 +4371,9 @@ public class ADQLParser implements ADQLParserConstants {
	private boolean jj_3R_119(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_130()){
		if (jj_3R_132()){
			jj_scanpos = xsp;
			if (jj_3R_131())
			if (jj_3R_133())
				return true;
		}
		return false;
@@ -4373,12 +4403,6 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_58(){
		if (jj_3R_78())
			return true;
		return false;
	}

	private boolean jj_3R_104(){
		if (jj_scan_token(COT))
			return true;
@@ -4391,6 +4415,12 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_58(){
		if (jj_3R_78())
			return true;
		return false;
	}

	private boolean jj_3_13(){
		if (jj_3R_26())
			return true;
@@ -4525,7 +4555,7 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_148())
		if (jj_3R_150())
			jj_scanpos = xsp;
		if (jj_scan_token(RIGHT_PAR))
			return true;
@@ -4553,7 +4583,7 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_147())
		if (jj_3R_149())
			jj_scanpos = xsp;
		if (jj_scan_token(RIGHT_PAR))
			return true;
@@ -4567,7 +4597,7 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_139())
		if (jj_3R_141())
			jj_scanpos = xsp;
		if (jj_scan_token(RIGHT_PAR))
			return true;
@@ -4808,14 +4838,6 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_32(){
		if (jj_3R_14())
			return true;
		if (jj_scan_token(DOT))
			return true;
		return false;
	}

	private boolean jj_3R_47(){
		if (jj_3R_63())
			return true;
@@ -4839,6 +4861,14 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_32(){
		if (jj_3R_14())
			return true;
		if (jj_scan_token(DOT))
			return true;
		return false;
	}

	private boolean jj_3_12(){
		if (jj_3R_25())
			return true;
@@ -4868,7 +4898,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_135(){
	private boolean jj_3R_137(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(11)){
@@ -4876,7 +4906,7 @@ public class ADQLParser implements ADQLParserConstants {
			if (jj_scan_token(12))
				return true;
		}
		if (jj_3R_128())
		if (jj_3R_130())
			return true;
		return false;
	}
@@ -4907,27 +4937,27 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_143(){
	private boolean jj_3R_145(){
		if (jj_3R_22())
			return true;
		return false;
	}

	private boolean jj_3R_141(){
	private boolean jj_3R_143(){
		if (jj_3R_22())
			return true;
		return false;
	}

	private boolean jj_3R_138(){
	private boolean jj_3R_140(){
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		return false;
	}

	private boolean jj_3R_129(){
	private boolean jj_3R_131(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(9)){
@@ -4945,23 +4975,23 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_136())
		if (jj_3R_138())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_128(){
	private boolean jj_3R_130(){
		if (jj_3R_24())
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_135())
		if (jj_3R_137())
			jj_scanpos = xsp;
		return false;
	}
@@ -4978,20 +5008,6 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3_1(){
		if (jj_3R_14())
			return true;
		if (jj_scan_token(DOT))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_15())
			jj_scanpos = xsp;
		if (jj_scan_token(ASTERISK))
			return true;
		return false;
	}

	private boolean jj_3R_19(){
		if (jj_3R_24())
			return true;
@@ -5011,6 +5027,20 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3_1(){
		if (jj_3R_14())
			return true;
		if (jj_scan_token(DOT))
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_15())
			jj_scanpos = xsp;
		if (jj_scan_token(ASTERISK))
			return true;
		return false;
	}

	private boolean jj_3R_20(){
		if (jj_3R_36())
			return true;
@@ -5024,24 +5054,24 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_136())
		if (jj_3R_138())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		Token xsp;
		while(true){
			xsp = jj_scanpos;
			if (jj_3R_138()){
			if (jj_3R_140()){
				jj_scanpos = xsp;
				break;
			}
@@ -5070,11 +5100,11 @@ public class ADQLParser implements ADQLParserConstants {
	}

	private boolean jj_3R_112(){
		if (jj_3R_128())
		if (jj_3R_130())
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_129())
		if (jj_3R_131())
			jj_scanpos = xsp;
		return false;
	}
@@ -5104,11 +5134,11 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_136())
		if (jj_3R_138())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		if (jj_scan_token(COMMA))
			return true;
@@ -5209,11 +5239,11 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_136())
		if (jj_3R_138())
			return true;
		if (jj_scan_token(COMMA))
			return true;
		if (jj_3R_137())
		if (jj_3R_139())
			return true;
		if (jj_scan_token(COMMA))
			return true;
@@ -5234,48 +5264,40 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_53(){
		if (jj_scan_token(SELECT))
	private boolean jj_3R_66(){
		if (jj_3R_112())
			return true;
		return false;
	}

	private boolean jj_3R_66(){
		if (jj_3R_112())
	private boolean jj_3R_152(){
		if (jj_3R_22())
			return true;
		return false;
	}

	private boolean jj_3R_150(){
		if (jj_3R_22())
	private boolean jj_3R_53(){
		if (jj_scan_token(SELECT))
			return true;
		return false;
	}

	private boolean jj_3R_123(){
	private boolean jj_3R_125(){
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_29())
		if (jj_3R_51())
			return true;
		if (jj_scan_token(RIGHT_PAR))
			return true;
		return false;
	}

	private boolean jj_3R_142(){
	private boolean jj_3R_144(){
		if (jj_3R_59())
			return true;
		return false;
	}

	private boolean jj_3R_16(){
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_21(){
		Token xsp;
		xsp = jj_scanpos;
@@ -5299,19 +5321,19 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_146(){
	private boolean jj_3R_148(){
		if (jj_3R_51())
			return true;
		return false;
	}

	private boolean jj_3R_140(){
	private boolean jj_3R_142(){
		if (jj_3R_59())
			return true;
		return false;
	}

	private boolean jj_3R_122(){
	private boolean jj_3R_124(){
		if (jj_3R_22())
			return true;
		return false;
@@ -5349,36 +5371,62 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_145(){
	private boolean jj_3R_147(){
		if (jj_3R_22())
			return true;
		return false;
	}

	private boolean jj_3R_121(){
		if (jj_3R_23())
	private boolean jj_3R_123(){
		if (jj_3R_129())
			return true;
		return false;
	}

	private boolean jj_3R_149(){
	private boolean jj_3R_151(){
		if (jj_3R_59())
			return true;
		return false;
	}

	private boolean jj_3R_136(){
	private boolean jj_3R_16(){
		if (jj_scan_token(LEFT_PAR))
			return true;
		if (jj_3R_33())
			return true;
		return false;
	}

	private boolean jj_3R_138(){
		if (jj_3R_29())
			return true;
		return false;
	}

	private boolean jj_3R_122(){
		if (jj_3R_128())
			return true;
		return false;
	}

	private boolean jj_3R_121(){
		if (jj_3R_23())
			return true;
		return false;
	}

	private boolean jj_3R_115(){
		if (jj_scan_token(FULL))
			return true;
		return false;
	}

	private boolean jj_3R_146(){
		if (jj_3R_59())
			return true;
		return false;
	}

	private boolean jj_3R_83(){
		if (jj_scan_token(LEFT_PAR))
			return true;
@@ -5389,14 +5437,8 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_144(){
		if (jj_3R_59())
			return true;
		return false;
	}

	private boolean jj_3R_82(){
		if (jj_3R_127())
		if (jj_3R_129())
			return true;
		return false;
	}
@@ -5408,10 +5450,16 @@ public class ADQLParser implements ADQLParserConstants {
			jj_scanpos = xsp;
			if (jj_3R_122()){
				jj_scanpos = xsp;
				if (jj_3R_123())
				if (jj_3R_123()){
					jj_scanpos = xsp;
					if (jj_3R_124()){
						jj_scanpos = xsp;
						if (jj_3R_125())
							return true;
					}
				}
			}
		}
		return false;
	}

@@ -5422,13 +5470,7 @@ public class ADQLParser implements ADQLParserConstants {
	}

	private boolean jj_3R_80(){
		if (jj_3R_126())
			return true;
		return false;
	}

	private boolean jj_3R_118(){
		if (jj_scan_token(FULL))
		if (jj_3R_128())
			return true;
		return false;
	}
@@ -5440,17 +5482,17 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_144()){
		if (jj_3R_146()){
			jj_scanpos = xsp;
			if (jj_3R_145())
			if (jj_3R_147())
				return true;
		}
		if (jj_scan_token(COMMA))
			return true;
		xsp = jj_scanpos;
		if (jj_3R_149()){
		if (jj_3R_151()){
			jj_scanpos = xsp;
			if (jj_3R_150())
			if (jj_3R_152())
				return true;
		}
		if (jj_scan_token(RIGHT_PAR))
@@ -5465,9 +5507,9 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_142()){
		if (jj_3R_144()){
			jj_scanpos = xsp;
			if (jj_3R_143())
			if (jj_3R_145())
				return true;
		}
		if (jj_scan_token(RIGHT_PAR))
@@ -5482,9 +5524,9 @@ public class ADQLParser implements ADQLParserConstants {
			return true;
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_140()){
		if (jj_3R_142()){
			jj_scanpos = xsp;
			if (jj_3R_141())
			if (jj_3R_143())
				return true;
		}
		if (jj_scan_token(RIGHT_PAR))
@@ -5504,6 +5546,12 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_118(){
		if (jj_scan_token(FULL))
			return true;
		return false;
	}

	private boolean jj_3R_62(){
		Token xsp;
		xsp = jj_scanpos;
@@ -5554,7 +5602,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_152(){
	private boolean jj_3R_154(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(9)){
@@ -5565,10 +5613,10 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_151(){
	private boolean jj_3R_153(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_3R_152())
		if (jj_3R_154())
			jj_scanpos = xsp;
		if (jj_scan_token(UNSIGNED_INTEGER))
			return true;
@@ -5595,7 +5643,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_137(){
	private boolean jj_3R_139(){
		if (jj_3R_112())
			return true;
		if (jj_scan_token(COMMA))
@@ -5605,7 +5653,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

	private boolean jj_3R_134(){
	private boolean jj_3R_136(){
		Token xsp;
		xsp = jj_scanpos;
		if (jj_scan_token(49)){
@@ -5631,13 +5679,7 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

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

	private boolean jj_3R_133(){
	private boolean jj_3R_135(){
		if (jj_scan_token(COUNT))
			return true;
		if (jj_scan_token(LEFT_PAR))
@@ -5649,7 +5691,7 @@ public class ADQLParser implements ADQLParserConstants {
		xsp = jj_scanpos;
		if (jj_scan_token(11)){
			jj_scanpos = xsp;
			if (jj_3R_146())
			if (jj_3R_148())
				return true;
		}
		if (jj_scan_token(RIGHT_PAR))
@@ -5657,6 +5699,12 @@ public class ADQLParser implements ADQLParserConstants {
		return false;
	}

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

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

	private static void jj_la1_init_1(){
		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,};
		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,0x3e0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3e0000,0x0,0x0,0x3e0000,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(){
@@ -5693,7 +5741,7 @@ public class ADQLParser implements ADQLParserConstants {
	}

	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,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,};
		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,0x3b,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x0,0x0,0x3b,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];
+9 −5
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-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
 * Copyright 2012-2018 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
 *                       Astronomisches Rechen Institute (ARI)
 */

@@ -31,7 +31,7 @@
* 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/2017)
*  Version: 1.4 (01/2018)
*/

							/* ########### */
@@ -109,7 +109,7 @@ import adql.translator.TranslationException;
* @see ADQLQueryFactory
*
* @author Gr&eacute;gory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de
* @version 1.4 (09/2017)
* @version 1.4 (01/2018)
*/
public class ADQLParser {
	
@@ -1191,10 +1191,14 @@ ADQLOperand StringValueExpressionPrimary(): {StringConstant expr; ADQLColumn col
	try{
		(// string
		  expr=String() {return expr;}
		// unsigned numeric
		| op=UnsignedNumeric() {return op;}
		// set_function_specification
		| op=SqlFunction() {return op;}
		// column_reference
		| column=Column() {column.setExpectedType('S'); return column;}
		| column=Column() {column.setExpectedType('*'); return column;}
		// LEFT_PAR value_expression RIGHT_PAR
		| (left=<LEFT_PAR> (op=StringExpression()) right=<RIGHT_PAR>) { WrappedOperand wop = queryFactory.createWrappedOperand(op); wop.setPosition(new TextPosition(left, right)); return wop; })
		| (left=<LEFT_PAR> (op=ValueExpression()) right=<RIGHT_PAR>) { WrappedOperand wop = queryFactory.createWrappedOperand(op); wop.setPosition(new TextPosition(left, right)); return wop; })
	}catch(Exception ex){
		throw generateParseException(ex);
	}
+71 −45

File changed.

Preview size limit exceeded, changes collapsed.

+52 −49
Original line number Diff line number Diff line
@@ -44,9 +44,12 @@ import adql.query.operand.function.geometry.PointFunction;
import adql.query.operand.function.geometry.PolygonFunction;

/**
 * <p>Translates all ADQL objects into the SQL adaptation of Postgres+PgSphere.
 * Actually only the geometrical functions are translated in this class.
 * The other functions are managed by {@link PostgreSQLTranslator}.</p>
 * Translates all ADQL objects into the SQL adaptation of Postgres+PgSphere.
 *
 * <p>
 * 	Actually only the geometrical functions and types are translated in this
 * 	class. The other functions are managed by {@link PostgreSQLTranslator}.
 * </p>
 *
 * @author Gr&eacute;gory Mantelet (CDS;ARI)
 * @version 1.4 (07/2017)
+27 −13
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import adql.db.STCS.Region;
import adql.parser.ParseException;
import adql.query.IdentifierField;
import adql.query.operand.StringConstant;
import adql.query.operand.function.ADQLFunction;
import adql.query.operand.function.MathFunction;
import adql.query.operand.function.geometry.AreaFunction;
import adql.query.operand.function.geometry.BoxFunction;
@@ -41,12 +42,25 @@ import adql.query.operand.function.geometry.PolygonFunction;
import adql.query.operand.function.geometry.RegionFunction;

/**
 * <p>Translates all ADQL objects into an SQL interrogation query designed for PostgreSQL.</p>
 * Translates all ADQL objects into an SQL interrogation query designed for
 * PostgreSQL.
 *
 * <p>
 * 	It overwrites the translation of mathematical functions whose some have
 * 	a different name or signature. Besides, it is also implementing the
 * 	translation of the geometrical functions. However, it does not really
 * 	translate them. It is just returning the ADQL expression (by calling
 * 	{@link #getDefaultADQLFunction(ADQLFunction)}). And so, of course, the
 * 	execution of a SQL query containing geometrical functions and translated
 * 	using this translator will not work. It is just a default implementation in
 * 	case there is no interest of these geometrical functions.
 * </p>
 *
 * <p><i><b>Important</b>:
 * 	The geometrical functions are translated exactly as in ADQL.
 * 	You will probably need to extend this translator to correctly manage the geometrical functions.
 * 	An extension is already available for PgSphere: {@link PgSphereTranslator}.
 * 	You will probably need to extend this translator to correctly manage the
 * 	geometrical functions. An extension is already available for PgSphere:
 * 	{@link PgSphereTranslator}.
 * </i></p>
 *
 * @author Gr&eacute;gory Mantelet (CDS;ARI)
Loading