diff --git a/CHANGELOG.md b/CHANGELOG.md index 8077b4075f814ed34577e68cba4de2fdeed0b192..b522361210e61ffa2c0fc90c3da35af652d85868 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +* #31 - Queries with keywords in the path (e.g. `... STORED AT 0in.txt`) +* #116 - Queries `FIND [ANY VERSION OF] *` and `FIND [ANY VERSION OF] ENTITY`. + ### Security ## [0.3.0] - 2021-02-10 diff --git a/src/main/java/org/caosdb/server/query/CQLLexer.g4 b/src/main/java/org/caosdb/server/query/CQLLexer.g4 index ec363be59893ad72cf412dbdc9d1f6d6644da5be..85061d30cacb222dd8c866d84a7abfb525a592a9 100644 --- a/src/main/java/org/caosdb/server/query/CQLLexer.g4 +++ b/src/main/java/org/caosdb/server/query/CQLLexer.g4 @@ -23,15 +23,15 @@ lexer grammar CQLLexer; AS_A: - [Aa][Ss] (EMPTY_SPACE? A)? + [Aa][Ss] (WHITE_SPACE_f? A)? WHITE_SPACE_f? ; IS_REFERENCED: - (IS_f EMPTY_SPACE?)? [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee][Dd] + (IS_f WHITE_SPACE_f?)? [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee][Dd] WHITE_SPACE_f? ; BY: - [Bb][Yy] + [Bb][Yy] WHITE_SPACE_f? ; fragment @@ -50,69 +50,73 @@ VERSION_f: ; ANY_VERSION_OF: - (ANY_f EMPTY_SPACE VERSION_f EMPTY_SPACE OF_f) + (ANY_f WHITE_SPACE_f VERSION_f WHITE_SPACE_f OF_f) WHITE_SPACE_f? ; SELECT: - [Ss][Ee][Ll][Ee][Cc][Tt] -> pushMode(SELECT_MODE) + [Ss][Ee][Ll][Ee][Cc][Tt] WHITE_SPACE_f? -> pushMode(SELECT_MODE) ; INSERTED: - [Ii][Nn][Ss][Ee][Rr][Tt][Ee][Dd] + [Ii][Nn][Ss][Ee][Rr][Tt][Ee][Dd] WHITE_SPACE_f? ; CREATED: - [Cc][Rr][Ee][Aa][Tt][Ee][Dd] + [Cc][Rr][Ee][Aa][Tt][Ee][Dd] WHITE_SPACE_f? ; UPDATED: - [Uu][Pp][Dd][Aa][Tt][Ee][Dd] + [Uu][Pp][Dd][Aa][Tt][Ee][Dd] WHITE_SPACE_f? ; ON: - [Oo][Nn] + [Oo][Nn] WHITE_SPACE_f? ; IN: - [Ii][Nn] + [Ii][Nn] WHITE_SPACE_f? ; IS_STORED_AT: - (IS_f EMPTY_SPACE?)? [Ss][Tt][Oo][Rr][Ee][Dd] (EMPTY_SPACE? AT)? + (IS_f WHITE_SPACE_f?)? [Ss][Tt][Oo][Rr][Ee][Dd] (WHITE_SPACE_f? AT)? WHITE_SPACE_f? ; AT: - [Aa][Tt] + [Aa][Tt] WHITE_SPACE_f? ; FIND: - [Ff][Ii][Nn][Dd] + [Ff][Ii][Nn][Dd] WHITE_SPACE_f? ; COUNT: - [Cc][Oo][Uu][Nn][Tt] + [Cc][Oo][Uu][Nn][Tt] WHITE_SPACE_f? ; AND: - ( - [Aa][Nn][Dd] - ) - | '&' + ( + ( + [Aa][Nn][Dd] + ) + | '&' + ) WHITE_SPACE_f? ; OR: - ( - [Oo][Rr] - ) - | '|' + ( + ( + [Oo][Rr] + ) + | '|' + ) WHITE_SPACE_f? ; LPAREN: - '(' + '(' WHITE_SPACE_f? ; RPAREN: - ')' + ')' WHITE_SPACE_f? ; SINGLE_QUOTE_START: @@ -131,19 +135,19 @@ OPERATOR: | '>' | '!=' | '->' - | [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee]([Ss]|EMPTY_SPACE? [Tt][Oo]) (EMPTY_SPACE? A {_input.LA(1) == ' '}?)? {setText("->");} + | [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee]([Ss]|WHITE_SPACE_f? [Tt][Oo]) (WHITE_SPACE_f? A {_input.LA(1) == ' '}?)? {setText("->");} ; LIKE: - [Ll][Ii][Kk][Ee] + [Ll][Ii][Kk][Ee] WHITE_SPACE_f? ; IS_NULL: - IS_f EMPTY_SPACE NULL_f + IS_f WHITE_SPACE_f NULL_f WHITE_SPACE_f? ; IS_NOT_NULL: - IS_f EMPTY_SPACE NOT_f EMPTY_SPACE NULL_f + IS_f WHITE_SPACE_f NOT_f WHITE_SPACE_f NULL_f WHITE_SPACE_f? ; fragment @@ -163,7 +167,7 @@ NOT_f: fragment DOESNT_f: - DOES_f EMPTY_SPACE? NOT_f + DOES_f WHITE_SPACE_f? NOT_f | DOES_f [Nn] SINGLE_QUOTE [Tt] ; @@ -244,88 +248,92 @@ WASNT_f: ; NEGATION: - '!' - | DOESNT_f (WHITE_SPACE? HAVE_A_f)? - | DONT_f (WHITE_SPACE? HAVE_A_f)? - | HASNT_f (WHITE_SPACE? BEEN_f)? - | ISNT_f (WHITE_SPACE? BEEN_f)? - | NOT_f (WHITE_SPACE? BEEN_f)? - | WERENT_f (WHITE_SPACE? BEEN_f)? - | WASNT_f (WHITE_SPACE? BEEN_f)? - | HAVENT_f (WHITE_SPACE? BEEN_f)? - | HADNT_f (WHITE_SPACE? BEEN_f)? + ( + '!' + | DOESNT_f (WHITE_SPACE? HAVE_A_f)? + | DONT_f (WHITE_SPACE? HAVE_A_f)? + | HASNT_f (WHITE_SPACE? BEEN_f)? + | ISNT_f (WHITE_SPACE? BEEN_f)? + | NOT_f (WHITE_SPACE? BEEN_f)? + | WERENT_f (WHITE_SPACE? BEEN_f)? + | WASNT_f (WHITE_SPACE? BEEN_f)? + | HAVENT_f (WHITE_SPACE? BEEN_f)? + | HADNT_f (WHITE_SPACE? BEEN_f)? + ) WHITE_SPACE_f? ; WITH: - [Ww][Ii][Tt][Hh] + [Ww][Ii][Tt][Hh] WHITE_SPACE_f? ; THE: - [Tt][Hh][Ee] + [Tt][Hh][Ee] WHITE_SPACE_f? ; GREATEST: - [Gg][Rr][Ee][Aa][Tt][Ee][Ss][Tt] + [Gg][Rr][Ee][Aa][Tt][Ee][Ss][Tt] WHITE_SPACE_f? ; SMALLEST: - [Ss][Mm][Aa][Ll][Ll][Ee][Ss][Tt] + [Ss][Mm][Aa][Ll][Ll][Ee][Ss][Tt] WHITE_SPACE_f? ; A: - [Aa][Nn]? + [Aa][Nn]? WHITE_SPACE_f? ; ME: - [Mm][Ee] + [Mm][Ee] WHITE_SPACE_f? ; SOMEONE: - [Ss][Oo][Mm][Ee][Oo][Nn][Ee] + [Ss][Oo][Mm][Ee][Oo][Nn][Ee] WHITE_SPACE_f? ; ELSE: - [Ee][Ll][Ss][Ee] + [Ee][Ll][Ss][Ee] WHITE_SPACE_f? ; WHERE: - [Ww][Hh][Ee][Rr][Ee] + [Ww][Hh][Ee][Rr][Ee] WHITE_SPACE_f? ; WHICH: - [Ww][Hh][Ii][Cc][Hh] + [Ww][Hh][Ii][Cc][Hh] WHITE_SPACE_f? ; HAS_A: - (HAS_f | HAD_f | HAVE_f | WERE_f | WAS_f | IS_f) ( - (EMPTY_SPACE? A) - | (EMPTY_SPACE? BEEN_f) - )? + (HAS_f | HAD_f | HAVE_f | WERE_f | WAS_f | IS_f) + ( + (WHITE_SPACE_f? A) + | (WHITE_SPACE_f? BEEN_f) + )? + ) WHITE_SPACE_f? ; PROPERTY: - [Pp][Rr][Oo][Pp][Ee][Rr][Tt]([Yy]|[Ii][Ee][Ss]) + [Pp][Rr][Oo][Pp][Ee][Rr][Tt]([Yy]|[Ii][Ee][Ss]) WHITE_SPACE_f? ; RECORDTYPE: - [Rr][Ee][Cc][Oo][Rr][Dd][Tt][Yy][Pp][Ee]([Ss])? + [Rr][Ee][Cc][Oo][Rr][Dd][Tt][Yy][Pp][Ee]([Ss])? WHITE_SPACE_f? ; RECORD: - [Rr][Ee][Cc][Oo][Rr][Dd]([Ss])? + [Rr][Ee][Cc][Oo][Rr][Dd]([Ss])? WHITE_SPACE_f? ; FILE: - [Ff][Ii][Ll][Ee]([Ss])? + [Ff][Ii][Ll][Ee]([Ss])? WHITE_SPACE_f? ; ENTITY: - [Ee][Nn][Tt][Ii][Tt]([Yy]|[Ii][Ee][Ss]) + [Ee][Nn][Tt][Ii][Tt]([Yy]|[Ii][Ee][Ss]) WHITE_SPACE_f? ; QUERYTEMPLATE: - [Qq][Uu][Ee][Rr][yY][Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee] + [Qq][Uu][Ee][Rr][yY][Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee] WHITE_SPACE_f? ; fragment @@ -334,12 +342,12 @@ IS_f: ; fragment -EMPTY_SPACE: +WHITE_SPACE_f: [ \t\n\r]+ ; WHITE_SPACE: - [ \t\n\r]+ -> channel(HIDDEN) + [ \t\n\r]+ ; fragment @@ -365,12 +373,11 @@ REGEXP_END: ; ID: - [Ii][Dd] + [Ii][Dd] WHITE_SPACE_f? ; -// Multiple slashes should be allowed in paths instead of a single slash. -SLASHES: - '/'+ +SLASH: + '/' ; STAR: @@ -382,26 +389,26 @@ DOT: ; QMARK: - '?' + '?' WHITE_SPACE_f? ; BUT: - [Bb][Uu][Tt] + [Bb][Uu][Tt] WHITE_SPACE_f? ; ESC_REGEXP_END: ESC_MARKER - '>>' + '>>' WHITE_SPACE_f? ; ESC_STAR: ESC_MARKER - '*' + '*' WHITE_SPACE_f? ; ESC_BS: ESC_MARKER - '\\' + '\\' WHITE_SPACE_f? ; fragment @@ -410,7 +417,7 @@ ESC_MARKER: ; TODAY: - [Tt][Oo][Dd][Aa][Yy] + [Tt][Oo][Dd][Aa][Yy] WHITE_SPACE_f? ; HYPHEN: @@ -422,11 +429,17 @@ COLON: ; NUM: + NUM_f + | DOT NUM_f + | NUM_f DOT NUM_f +; + +NUM_f: ('0'..'9')+ ; TXT: - ('a'..'z' | 'A'..'Z' | '_' | '-' {_input.LA(1) != '>'}? | '+' | '&' | ';' | ',' | '$' | ':' | '%' | '^' | '~' {_input.LA(1) != '='}? | '`' | '´' | 'ö' | 'ä' | 'ß' | 'ü' | 'Ö' | 'Ä' | 'Ü' | '@' | '[' | ']' | '{' | '}' )+ + ('a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '-' {_input.LA(1) != '>'}? | '+' | '&' | ';' | ',' | '$' | ':' | '%' | '^' | '~' {_input.LA(1) != '='}? | '`' | '´' | 'ö' | 'ä' | 'ß' | 'ü' | 'Ö' | 'Ä' | 'Ü' | '@' | '[' | ']' | '{' | '}' )+ ; UNKNOWN_CHAR: . ; @@ -473,7 +486,7 @@ mode DOUBLE_QUOTE_MODE; mode SELECT_MODE; FROM: - [Ff][Rr][Oo][Mm] -> mode(DEFAULT_MODE) + [Ff][Rr][Oo][Mm]([ \t\n\r])? -> mode(DEFAULT_MODE) ; SELECT_DOT: diff --git a/src/main/java/org/caosdb/server/query/CQLParser.g4 b/src/main/java/org/caosdb/server/query/CQLParser.g4 index 0daeff47a95ff38391ce3f9b8004bec642b0ccb2..452321c670d4101bc603e657023143025f12c22f 100644 --- a/src/main/java/org/caosdb/server/query/CQLParser.g4 +++ b/src/main/java/org/caosdb/server/query/CQLParser.g4 @@ -46,15 +46,15 @@ cq returns [Query.Type t, List<Query.Selection> s, Query.Pattern e, Query.Role r | FIND {$t = Query.Type.FIND;} | COUNT {$t = Query.Type.COUNT;}) (version {$v = $version.v;})? - ( - ( - role {$r = $role.r;} - (entity {$e = $entity.ep;})? - ) | entity {$e = $entity.ep;} - ) + ( role {$r = $role.r;} )? ( entity_filter {$filter = $entity_filter.filter;} - )?? + | + entity WHITE_SPACE?{$e = $entity.ep;} + ( + entity_filter {$filter = $entity_filter.filter;} + )? + )? EOF ; @@ -100,7 +100,7 @@ entity_filter returns [EntityFilterInterface filter] which_exp ( ( - LPAREN + LPAREN WHITE_SPACE? ( filter_expression {$filter = $filter_expression.efi;} | conjunction {$filter = $conjunction.c;} @@ -120,7 +120,7 @@ which_exp: | HAS_A (PROPERTY)? | WITH (A (PROPERTY)?)? | WHERE - | DOT + | DOT WHITE_SPACE? ; filter_expression returns [EntityFilterInterface efi] @@ -148,6 +148,7 @@ idfilter returns [IDFilter filter] locals [String o, String v, String a] ID ( OPERATOR {$o = $OPERATOR.text;} + WHITE_SPACE? value {$v = $value.str;} )? ; @@ -195,15 +196,14 @@ username returns [Query.Pattern ep] locals [int type] $ep = new Query.Pattern($text, Query.Pattern.TYPE_NORMAL); } : - ( STAR {$type = Query.Pattern.TYPE_LIKE;} | ESC_STAR | TXT | DOT | ESC_REGEXP_END | COLON )+ + ( STAR {$type = Query.Pattern.TYPE_LIKE;} | ~(STAR | WHITE_SPACE) )+ ; transaction_time returns [String tqp] : ( (ON | IN) - (value {$tqp = $value.text;} - | entity {$tqp = $entity.ep.toString();}) + (value {$tqp = $value.text;}) ) | TODAY {$tqp = TransactionFilter.TODAY;} ; @@ -249,10 +249,10 @@ pov returns [POV filter] locals [Query.Pattern p, String o, String v, String a] property {$p = $property.pp; $a=$property.agg;} ( ( - LIKE {$o = $LIKE.text;} + LIKE {$o = $LIKE.text.trim();} ( like_pattern {$v = $like_pattern.ep.toString();} | value {$v = $value.str;} ) - | OPERATOR {$o = $OPERATOR.text;} value {$v = $value.str;} + | OPERATOR {$o = $OPERATOR.text;} WHITE_SPACE? value {$v = $value.str;} ) | IS_NULL {$o = "0";} | IS_NOT_NULL {$o = "!0";} @@ -266,12 +266,12 @@ pov returns [POV filter] locals [Query.Pattern p, String o, String v, String a] ( like_pattern {$v = $like_pattern.ep.toString();} | value {$v = $value.str;} ) ) - | ( OPERATOR {$o = $OPERATOR.text;} value {$v = $value.str;} + | ( OPERATOR {$o = $OPERATOR.text;} WHITE_SPACE? value {$v = $value.str;} ( AS_A property {$p = $property.pp;} )? ) ) - + WHITE_SPACE? ; @@ -296,9 +296,11 @@ backreference returns [Backreference ref] locals [Query.Pattern e, Query.Pattern IS_REFERENCED (BY A? entity {$e=$entity.ep;})? ( + WHITE_SPACE? AS_A property {$p=$property.pp;} )? + WHITE_SPACE? ; storedat returns [StoredAt filter] locals [String loc] @@ -311,6 +313,7 @@ storedat returns [StoredAt filter] locals [String loc] : IS_STORED_AT location {$loc = $location.str;} + WHITE_SPACE? ; conjunction returns [Conjunction c] locals [Conjunction dummy] @@ -321,7 +324,7 @@ conjunction returns [Conjunction c] locals [Conjunction dummy] ( f1 = filter_expression {$c.add($f1.efi);} | - LPAREN + LPAREN WHITE_SPACE? ( f4 = filter_expression {$c.add($f4.efi);} | disjunction {$c.add($disjunction.d);} @@ -330,6 +333,7 @@ conjunction returns [Conjunction c] locals [Conjunction dummy] RPAREN ) ( + WHITE_SPACE? AND ( ( which_exp | A (PROPERTY)?? ) @@ -337,7 +341,7 @@ conjunction returns [Conjunction c] locals [Conjunction dummy] ( f2 = filter_expression {$c.add($f2.efi);} | ( - LPAREN + LPAREN WHITE_SPACE? ( f3 = filter_expression {$c.add($f3.efi);} | disjunction {$c.add($disjunction.d);} @@ -357,7 +361,7 @@ disjunction returns [Disjunction d] ( f1 = filter_expression {$d.add($f1.efi);} | - LPAREN + LPAREN WHITE_SPACE? ( f4 = filter_expression {$d.add($f4.efi);} | conjunction {$d.add($conjunction.c);} @@ -373,7 +377,7 @@ disjunction returns [Disjunction d] ( f2 = filter_expression {$d.add($f2.efi);} | ( - LPAREN + LPAREN WHITE_SPACE? ( f3 = filter_expression {$d.add($f3.efi);} | conjunction {$d.add($conjunction.c);} @@ -393,7 +397,7 @@ negation returns [Negation n] ( f1 = filter_expression {$n = new Negation($f1.efi);} | ( - LPAREN + LPAREN WHITE_SPACE? ( f2 = filter_expression {$n = new Negation($f2.efi);} | disjunction {$n = new Negation($disjunction.d);} @@ -408,9 +412,10 @@ entity returns [Query.Pattern ep] : regexp_pattern {$ep = $regexp_pattern.ep;} | like_pattern {$ep = $like_pattern.ep;} - | ( double_quoted {$ep = $double_quoted.ep;} ) + | ( double_quoted {$ep = $double_quoted.ep;} ) | ( single_quoted {$ep = $single_quoted.ep;} ) - | (~(SINGLE_QUOTE_START|DOUBLE_QUOTE_START|WHITE_SPACE|WHICH|DOT|WHERE|HAS_A|WITH|STAR|AND|OR))+? {$ep = new Query.Pattern((String) $text, Query.Pattern.TYPE_NORMAL);} + | ENTITY {$ep = new Query.Pattern((String) $text.trim(), Query.Pattern.TYPE_NORMAL);} + | ( ~(ENTITY |WHITE_SPACE | DOT) )+ {$ep = new Query.Pattern((String) $text.trim(), Query.Pattern.TYPE_NORMAL);} ; regexp_pattern returns [Query.Pattern ep] locals [StringBuffer sb] @@ -428,12 +433,10 @@ like_pattern returns [Query.Pattern ep] locals [StringBuffer sb] $sb = new StringBuffer(); } : - - (m=~(WHITE_SPACE|WHICH|DOT|WHERE|HAS_A|WITH|STAR|LIKE|OPERATOR|AS_A|AND|OR|IS_STORED_AT|IS_REFERENCED) {$sb.append($m.text);})*? - ( - STAR {$sb.append('*');} - (m=~(WHITE_SPACE|WHICH|DOT|WHERE|HAS_A|WITH|STAR|LIKE|OPERATOR|AS_A|AND|OR) {$sb.append($m.text);})*? - )+? {$ep = new Query.Pattern((String) $sb.toString(), Query.Pattern.TYPE_LIKE);} + ~(WHITE_SPACE|DOT|LIKE|OPERATOR|AS_A|AND|OR|IS_STORED_AT|IS_REFERENCED)*? + STAR + ~(WHITE_SPACE|DOT|STAR)*? + {$ep = new Query.Pattern((String) $text, Query.Pattern.TYPE_LIKE);} ; property returns [Query.Pattern pp, String agg]locals [StringBuffer sb] @@ -446,10 +449,11 @@ property returns [Query.Pattern pp, String agg]locals [StringBuffer sb] ( regexp_pattern {$pp = $regexp_pattern.ep;} | like_pattern {$pp = $like_pattern.ep;} - | ( double_quoted {$pp = $double_quoted.ep;} ) + | ( double_quoted {$pp = $double_quoted.ep;} ) | ( single_quoted {$pp = $single_quoted.ep;} ) | ((m=TXT | m=NUM | m=REGEXP_MARKER | m=ENTITY){$sb.append($m.text);})+ {$pp = new Query.Pattern($sb.toString(), Query.Pattern.TYPE_NORMAL);} ) + WHITE_SPACE? ; minmax returns [String agg] @@ -462,29 +466,37 @@ minmax returns [String agg] value returns [String str] : - number {$str = $text;} + number_with_unit {$str = $number_with_unit.text;} | datetime {$str = $datetime.text;} | atom {$str = $atom.ep.toString();} + WHITE_SPACE? +; + +number_with_unit +: + HYPHEN?? + NUM + (WHITE_SPACE?? unit)? ; -number +unit : - HYPHEN?? NUM* (DOT NUM+)? + TXT + | NUM SLASH TXT ; location returns [String str] : atom {$str = $atom.ep.str;} | - SLASHES ? - ((WHICH | WITH)+ SLASHES |( TXT | COLON | HYPHEN | NUM | DOT | ESC_STAR | ESC_BS | ESC_REGEXP_END | STAR )+ SLASHES ?)* {$str = $text; } + (~WHITE_SPACE)+ {$str = $text; } ; atom returns [Query.Pattern ep] : double_quoted {$ep = $double_quoted.ep;} | single_quoted {$ep = $single_quoted.ep;} - | (TXT | NUM | REGEXP_MARKER | STAR | A )+ {$ep = new Query.Pattern($text, Query.Pattern.TYPE_NORMAL);} + | (~(WHITE_SPACE | DOT ))+ {$ep = new Query.Pattern($text, Query.Pattern.TYPE_NORMAL);} ; single_quoted returns [Query.Pattern ep] locals [StringBuffer sb, int patternType] diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java index 702c6fa22a0528ec0a99b1f463e18151501d0a36..0a877fc83e2f680565181655ed92c3a61cda393b 100644 --- a/src/main/java/org/caosdb/server/query/Query.java +++ b/src/main/java/org/caosdb/server/query/Query.java @@ -181,6 +181,28 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac public Integer id; public String version; + + @Override + public String toString() { + if (version == null) { + return Integer.toString(id); + } + return Integer.toString(id) + "@" + version; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof IdVersionPair) { + IdVersionPair that = (IdVersionPair) obj; + return this.id == that.id && this.version == that.version; + } + return false; + } + + @Override + public int hashCode() { + return toString().hashCode(); + } } private static boolean filterEntitiesWithoutRetrievePermisions = @@ -445,7 +467,13 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac } } - public void parse() throws ParsingException { + /** + * Parse the query and run optimize() if the parameter `optimize` is true. + * + * @param optimize whether to run optimize() immediately. + * @throws ParsingException + */ + public void parse(boolean optimize) throws ParsingException { final long t1 = System.currentTimeMillis(); CQLLexer lexer; lexer = new CQLLexer(CharStreams.fromString(this.query)); @@ -471,29 +499,96 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac if (t2 - t1 > 1000) { addBenchmark("LONG_PARSING: " + this.query, t2 - t1); } + + if (optimize) { + optimize(); + } + } + + /** + * Parse the query and run optimize() immediately. + * + * @throws ParsingException + */ + public void parse() throws ParsingException { + parse(true); + } + + /** + * Optimize the query after parsing. The optimization is purely based on formal rules. + * + * <p>Implemented rules: + * + * <ol> + * <li>FIND * -> FIND ENTITY (which basically prevents to copy the complete entity table just to + * read out the ids immediately). + * </ol> + */ + public void optimize() { + // basic optimization + if (this.entity != null + && this.entity.type == Pattern.TYPE_LIKE + && this.entity.str.equals("*")) { + this.entity = null; + if (this.role == null) { + this.role = Role.ENTITY; + } + } } private String executeStrategy(boolean versioned) throws QueryException { if (this.entity != null) { return sourceStrategy(initQuery(versioned)); + } else if (this.role == Role.ENTITY && this.filter == null) { + return "entities"; } else { return targetStrategy(initQuery(versioned)); } } + /** + * Generate a SQL statement which reads out the resulting ids (and version ids if `versioned` is + * true). + * + * <p>If the parameter `resultSetTableName` is "entities" actually the entity_version table is + * used to fetch all ids. + * + * @param resultSetTableName name of the table with all the resulting entities + * @param versioned whether the query was versioned + * @return an SQL statement + * @throws QueryException + */ + private String generateSelectStatementForResultSet( + final String resultSetTableName, boolean versioned) { + if (resultSetTableName.equals("entities")) { + return "SELECT entity_id AS id" + + (versioned ? ", version AS version" : "") + + " FROM entity_version" + + (versioned ? "" : " WHERE `_iversion` = 1"); + } + return "SELECT results.id AS id" + + (versioned ? ", ev.version AS version" : "") + + " FROM `" + + resultSetTableName + + "` AS results" + + (versioned + ? " JOIN entity_version AS ev ON (results.id = ev.entity_id AND results._iversion = ev._iversion)" + : ""); + } + + /** + * Return a list of all resulting entities (versions of entities if `versioned` is true). + * + * @param resultSetTableName name of the table with all the resulting entities + * @param versioned whether the query was versioned + * @return list of results of this query. + * @throws QueryException + */ private List<IdVersionPair> getResultSet(final String resultSetTableName, boolean versioned) throws QueryException { ResultSet finishResultSet = null; try { - final String sql = - "Select results.id AS id" - + (versioned ? ", ev.version AS version" : "") - + " from `" - + resultSetTableName - + "` AS results" - + (versioned - ? " JOIN entity_version AS ev ON (results.id = ev.entity_id AND results._iversion = ev._iversion)" - : ""); + final String sql = generateSelectStatementForResultSet(resultSetTableName, versioned); final PreparedStatement finish = getConnection().prepareStatement(sql); finishResultSet = finish.executeQuery(); final List<IdVersionPair> rs = new LinkedList<>(); @@ -869,4 +964,12 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac if (this.filter != null) sb.append(this.filter.getCacheKey()); return sb.toString(); } + + public Pattern getEntity() { + return this.entity; + } + + public Role getRole() { + return this.role; + } } diff --git a/src/test/java/org/caosdb/server/query/QueryTest.java b/src/test/java/org/caosdb/server/query/QueryTest.java index 092ebfcf833e6e60ff4edbb095a0759739975141..edbefab78fdfb5846c59a058fdfb67b55a6707cb 100644 --- a/src/test/java/org/caosdb/server/query/QueryTest.java +++ b/src/test/java/org/caosdb/server/query/QueryTest.java @@ -1,6 +1,7 @@ package org.caosdb.server.query; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import java.io.IOException; import org.caosdb.server.CaosDBServer; @@ -48,4 +49,16 @@ public class QueryTest { "ename@(ref1,null)SUB(POV(pname,>,val1)", getCacheKey("FIND ename WHICH IS REFERENCED BY ref1 WITH pname > val1 ")); } + + @Test + public void testOptimizationOfFindStar() { + Query q = new Query("FIND *"); + q.parse(false); + assertEquals("*", q.getEntity().str); + assertNull(q.getRole()); + + q.optimize(); + assertNull(q.getEntity()); + assertEquals(Query.Role.ENTITY, q.getRole()); + } } diff --git a/src/test/java/org/caosdb/server/query/TestCQL.java b/src/test/java/org/caosdb/server/query/TestCQL.java index 2f6651cc81a2614b63f1314f35052fe2096758b0..2c28d7f59c018f90ce77e9f7691a362027655466 100644 --- a/src/test/java/org/caosdb/server/query/TestCQL.java +++ b/src/test/java/org/caosdb/server/query/TestCQL.java @@ -65,9 +65,8 @@ public class TestCQL { String query1e = "FIND ename . pname1"; String query2 = "FIND ename.pname1=val1 OR pname2=val2"; String query3 = "FIND ename.pname1=val1 AND pname2=val2 AND pname3=val3"; - // String query4 = - // "FIND ename WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY - // pname2=val2"; + String query4 = + "FIND ename WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY pname2=val2"; String query5 = "FIND ename WHICH HAS A PROPERTY pname1=val1 AND (pname2=val2 OR pname3=val3)"; String query6 = "FIND ename1 WHICH HAS A pname REFERENCE TO ename2"; String query6a = "FIND ename1 WHICH REFERENCES ename2 AS A pname"; @@ -148,8 +147,13 @@ public class TestCQL { String query27b = "FIND 'Some name with spaces and 1234 numbers and \"'"; String query27c = "FIND 'Some name with spaces and 1234 numbers and \\*'"; String query27d = "FIND 'Some name with spaces and 1234 numbers and *'"; - String query28 = "FIND ename . pname=2.0"; + String query28 = "FIND ename . pname=2.02"; String query28a = "FIND ename . pname=2.0prop=test"; + String query28b = "FIND ename . pname = 1.02m"; + String query28c = "FIND ename . pname = .02"; + String query28d = "FIND ename . pname =.02m"; + String query28e = "FIND ename . pname =.02 1/m^2"; + String ticket148 = "FIND RECORD FrequencyMeasurement WHICH HAS A PROPERTY ( BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016') AND A PROPERTY MinPeakHeight = '0.5'"; String ticket148a = @@ -213,13 +217,26 @@ public class TestCQL { String query54b = "SELECT field with spaces FROM RECORD ename"; String query54c = "SELECT field1, field2, field3 FROM RECORD ename"; String query54d = "SELECT field1.subfield1, field1.subfield2, field2.*, field3 FROM RECORD ename"; + String query54e = "SELECT id FROM ename"; String query55a = "FIND FILE WHICH IS STORED AT /dir/with/date/2016-05-15"; String query55b = "FIND FILE WHICH IS STORED AT /dir/with/date/2016-05-15/**"; String query56a = "FIND RECORD WHICH REFERENCES anna"; String query56b = "FIND RECORD WHICH REFERENCES AN ename2"; String query56c = "FIND RECORD WHICH REFERENCES atom"; String query56d = "FIND RECORD WHICH REFERENCES A tom"; + String query57a = "FIND ENTITY"; + String query57b = "FIND ENTITY WITH ID"; + String query57c = "FIND ENTITY WITH ID = 123"; + + // strange names and values + String query58a = "FIND ENTITY WITH endswith"; + String query58b = "FIND ENTITY WITH endswith = val1"; + String query58c = "FIND ENTITY WITH 0with = val1"; + String query58d = "FIND ENTITY.withdrawn=TRUE"; + String query58e = "FIND ENTITY WITH pname=with"; + String queryIssue31 = "FIND FILE WHICH IS STORED AT /data/in0.foo"; + String queryIssue116 = "FIND *"; // File paths /////////////////////////////////////////////////////////////// String filepath_verb01 = "/foo/"; @@ -259,7 +276,7 @@ public class TestCQL { // 4 children: FIND, EMPTY_SPACE, entity, entity_filter assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); @@ -306,19 +323,19 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals("WITHpname1=val1", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals("WITH pname1=val1", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WITH", entity_filter.getChild(0).getText()); + assertEquals("WITH ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname1=val1", entity_filter.getChild(1).getText()); @@ -353,19 +370,19 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals("WHICHHAS APROPERTYpname1=val1", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals("WHICH HAS A PROPERTY pname1=val1", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP,conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", entity_filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname1=val1", entity_filter.getChild(1).getText()); @@ -401,19 +418,19 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals("WHICHHAS Apname1=val1", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals("WHICH HAS A pname1=val1", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname1=val1", entity_filter.getChild(1).getText()); @@ -454,21 +471,21 @@ public class TestCQL { } System.out.println("query1d: " + sfq.toStringTree(parser)); - // 5 children: FIND, role, entity, filter, EOF + // 6 children: FIND, role, entity, WHITE_SPACE, filter, EOF // entity_filter - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("ename", sfq.getChild(2).getText()); - assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals("WHICHHAS Apname1=val1", sfq.getChild(3).getText()); - final ParseTree entity_filter = sfq.getChild(3); + assertEquals("WHICH HAS A pname1=val1", sfq.getChild(4).getText()); + assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); + final ParseTree entity_filter = sfq.getChild(4); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname1=val1", entity_filter.getChild(1).getText()); @@ -512,20 +529,19 @@ public class TestCQL { } System.out.println("query1e: " + sfq.toStringTree(parser)); - // 4 children: FIND, role, entity, EOF - // entity_filter - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals(".pname1", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals(". pname1", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals(".", entity_filter.getChild(0).getText()); + assertEquals(". ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname1", entity_filter.getChild(1).getText()); @@ -563,12 +579,12 @@ public class TestCQL { // 4 children: FIND, entity, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals(".pname1=val1ORpname2=val2", sfq.getChild(2).getText()); + assertEquals(".pname1=val1 OR pname2=val2", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, disjunction @@ -576,13 +592,13 @@ public class TestCQL { assertEquals(".", entity_filter.getChild(0).getText()); // disjunction - assertEquals("pname1=val1ORpname2=val2", entity_filter.getChild(1).getText()); + assertEquals("pname1=val1 OR pname2=val2", entity_filter.getChild(1).getText()); final ParseTree disjunction = entity_filter.getChild(1); // 3 children: pov, OR, pov assertEquals(3, disjunction.getChildCount()); - assertEquals("pname1=val1", disjunction.getChild(0).getText()); - assertEquals("OR", disjunction.getChild(1).getText()); + assertEquals("pname1=val1 ", disjunction.getChild(0).getText()); + assertEquals("OR ", disjunction.getChild(1).getText()); assertEquals("pname2=val2", disjunction.getChild(2).getText()); // pov @@ -600,7 +616,7 @@ public class TestCQL { assertEquals("=", pov1.getChild(1).getText()); assertEquals("=", pov2.getChild(1).getText()); - assertEquals("val1", pov1.getChild(2).getText()); + assertEquals("val1 ", pov1.getChild(2).getText()); assertEquals("val2", pov2.getChild(2).getText()); assertEquals("ename", sfq.e.toString()); @@ -628,14 +644,14 @@ public class TestCQL { // 4 children: FIND, entity, entity_filter EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); // entity assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity filter - assertEquals(".pname1=val1ANDpname2=val2ANDpname3=val3", sfq.getChild(2).getText()); + assertEquals(".pname1=val1 AND pname2=val2 AND pname3=val3", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction @@ -643,15 +659,16 @@ public class TestCQL { assertEquals(".", entity_filter.getChild(0).getText()); // conjunction - assertEquals("pname1=val1ANDpname2=val2ANDpname3=val3", entity_filter.getChild(1).getText()); + assertEquals( + "pname1=val1 AND pname2=val2 AND pname3=val3", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 9 children: pov, AND, pov, AND, pov assertEquals(5, conjunction.getChildCount()); - assertEquals("pname1=val1", conjunction.getChild(0).getText()); - assertEquals("AND", conjunction.getChild(1).getText()); - assertEquals("pname2=val2", conjunction.getChild(2).getText()); - assertEquals("AND", conjunction.getChild(3).getText()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(1).getText()); + assertEquals("pname2=val2 ", conjunction.getChild(2).getText()); + assertEquals("AND ", conjunction.getChild(3).getText()); assertEquals("pname3=val3", conjunction.getChild(4).getText()); // pov @@ -674,8 +691,8 @@ public class TestCQL { assertEquals("=", pov2.getChild(1).getText()); assertEquals("=", pov3.getChild(1).getText()); - assertEquals("val1", pov1.getChild(2).getText()); - assertEquals("val2", pov2.getChild(2).getText()); + assertEquals("val1 ", pov1.getChild(2).getText()); + assertEquals("val2 ", pov2.getChild(2).getText()); assertEquals("val3", pov3.getChild(2).getText()); assertEquals("ename", sfq.e.toString()); @@ -692,124 +709,82 @@ public class TestCQL { } } - // @Test - // public void testQuery4() { - // CQLLexer lexer; - // lexer = new CQLLexer(CharStreams.fromString(query4)); - // final CommonTokenStream tokens = new CommonTokenStream(lexer); - // - // final CQLParser parser = new CQLParser(tokens); - // final CqContext sfq = parser.cq(); - // - // System.out.println("query4: " + sfq.toStringTree(parser)); - // - // // 5 children: FIND, EMPTY_SPACE, entity, EMPTY_SPACE, entity_filter - // assertEquals(5, sfq.getChildCount()); - // assertEquals("FIND", sfq.getChild(0).getText()); - // assertEquals(" ", sfq.getChild(1).getText()); - // assertEquals("ename", sfq.getChild(2).getText()); - // assertEquals(" ", sfq.getChild(3).getText()); - // - // // entity_filter - // assertEquals("WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY - // pname2=val2", - // sfq - // .getChild(4).getText()); - // final ParseTree entity_filter1 = sfq.getChild(4); - // - // // 3 children: WHICH_EXP, conjunction - // assertEquals(3, entity_filter1.getChildCount()); - // assertEquals("WHICH HAS A PROPERTY", - // entity_filter1.getChild(0).getText()); - // assertEquals(" ", entity_filter1.getChild(1).getText()); - // - // // conjunction - // assertEquals("pname1=val1 AND pname1 HAS A PROPERTY pname2=val2", - // entity_filter1 - // .getChild(2).getText()); - // final ParseTree conjunction = entity_filter1.getChild(2); - // - // // 5 children: pov, AND, subproperty - // assertEquals(5, conjunction.getChildCount()); - // assertEquals("pname1=val1", conjunction.getChild(0).getText()); - // assertEquals(" ", conjunction.getChild(1).getText()); - // assertEquals("AND", conjunction.getChild(2).getText()); - // assertEquals(" ", conjunction.getChild(3).getText()); - // assertEquals("pname1 HAS A PROPERTY pname2=val2", - // conjunction.getChild(4).getText()); - // - // // pov - // final ParseTree pov1 = conjunction.getChild(0); - // - // // 3 children: property, operator, value - // assertEquals(3, pov1.getChildCount()); - // assertEquals("pname1", pov1.getChild(0).getText()); - // assertEquals("=", pov1.getChild(1).getText()); - // assertEquals("val1", pov1.getChild(2).getText()); - // - // // subproperty - // final ParseTree subproperty = conjunction.getChild(4); - // - // // 3 children: property, entity_filter - // assertEquals(3, subproperty.getChildCount()); - // assertEquals("pname1", subproperty.getChild(0).getText()); - // assertEquals(" ", subproperty.getChild(1).getText()); - // assertEquals("HAS A PROPERTY pname2=val2", - // subproperty.getChild(2).getText()); - // - // // entity_filter - // final ParseTree entity_filter2 = subproperty.getChild(2); - // - // // 3 children: WHICH_EXP pov - // assertEquals(3, entity_filter2.getChildCount()); - // assertEquals("HAS A PROPERTY", entity_filter2.getChild(0).getText()); - // assertEquals(" ", entity_filter2.getChild(1).getText()); - // assertEquals("pname2=val2", entity_filter2.getChild(2).getText()); - // - // // conjunction2 - // final ParseTree conjunction2 = entity_filter2.getChild(2); - // assertEquals(1, conjunction2.getChildCount()); - // assertEquals("pname2=val2", conjunction2.getChild(0).getText()); - // - // // pov2 - // final ParseTree pov2 = conjunction2.getChild(0); - // - // // 3 children: property, operator, value - // assertEquals(3, pov2.getChildCount()); - // assertEquals("pname2", pov2.getChild(0).getText()); - // assertEquals("=", pov2.getChild(1).getText()); - // assertEquals("val2", pov2.getChild(2).getText()); - // - // assertEquals("ename", sfq.e.toString()); - // assertNotNull(sfq.filter); - // assertEquals(Conjunction.class.getName(), - // sfq.filter.getClass().getName()); - // assertNotNull(sfq.filter.getFilters()); - // assertFalse(sfq.filter.getFilters().isEmpty()); - // - // Integer i = 0; - // EntityFilterInterface f = sfq.filter.getFilters().get(i); - // assertNotNull(f); - // assertEquals(POV.class.getName(), f.getClass().getName()); - // assertEquals("POV(pname1,=,val1)", f.toString()); - // - // i++; - // f = sfq.filter.getFilters().get(i); - // assertNotNull(f); - // assertEquals(SubProperty.class.getName(), f.getClass().getName()); - // - // assertEquals("pname1", ((SubProperty) f).getProperty()); - // assertEquals(Conjunction.class.getName(), ((SubProperty) - // f).getFilter().getClass() - // .getName()); - // assertNotNull(((SubProperty) f).getFilter().getFilters()); - // assertFalse(((SubProperty) f).getFilter().getFilters().isEmpty()); - // f = ((SubProperty) f).getFilter().getFilters().getFirst(); - // assertNotNull(f); - // assertEquals(POV.class.getName(), f.getClass().getName()); - // assertEquals("POV(pname2,=,val2)", f.toString()); - // - // } + @Test + public void testQuery4() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(query4)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println("query4: " + sfq.toStringTree(parser)); + + // 5 children: FIND, entity, EMPTY_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("ename", sfq.getChild(1).getText()); + // entity_filter + assertEquals( + "WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY pname2=val2", + sfq.getChild(3).getText()); + final ParseTree entity_filter1 = sfq.getChild(3); + + // 2 children: WHICH_EXP, conjunction + assertEquals(2, entity_filter1.getChildCount()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter1.getChild(0).getText()); + + // conjunction + assertEquals( + "pname1=val1 AND pname1 HAS A PROPERTY pname2=val2", entity_filter1.getChild(1).getText()); + final ParseTree conjunction = entity_filter1.getChild(1); + + // 3 children: pov, AND, pov + assertEquals(3, conjunction.getChildCount()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(1).getText()); + assertEquals("pname1 HAS A PROPERTY pname2=val2", conjunction.getChild(2).getText()); + + // subproperty + final ParseTree subproperty = conjunction.getChild(2); + + // 3 children: property, entity_filter + assertEquals(2, subproperty.getChildCount()); + assertEquals("pname1 ", subproperty.getChild(0).getText()); + assertEquals("HAS A PROPERTY pname2=val2", subproperty.getChild(1).getText()); + + // entity_filter + final ParseTree entity_filter2 = subproperty.getChild(1).getChild(0); + + // 3 children: WHICH_EXP pov + assertEquals(2, entity_filter2.getChildCount()); + assertEquals("HAS A PROPERTY ", entity_filter2.getChild(0).getText()); + assertEquals("pname2=val2", entity_filter2.getChild(1).getText()); + + final ParseTree pov2 = entity_filter2.getChild(1).getChild(0); + + // 3 children: property, operator, value + assertEquals(3, pov2.getChildCount()); + assertEquals("pname2", pov2.getChild(0).getText()); + assertEquals("=", pov2.getChild(1).getText()); + assertEquals("val2", pov2.getChild(2).getText()); + + assertEquals("ename", sfq.e.toString()); + assertNotNull(sfq.filter); + assertEquals(Conjunction.class.getName(), sfq.filter.getClass().getName()); + assertNotNull(sfq.filter); + + EntityFilterInterface f = sfq.filter; + assertNotNull(f); + assertEquals(Conjunction.class.getName(), f.getClass().getName()); + assertEquals("POV(pname1,=,val1)", ((Conjunction) f).getFilters().get(0).toString()); + + f = ((Conjunction) sfq.filter).getFilters().get(1); + assertEquals("POV(pname1,null,null)", f.toString()); + + f = ((POV) f).getSubProperty().getFilter(); + assertEquals("POV(pname2,=,val2)", f.toString()); + } @Test public void testQuery5() { @@ -823,30 +798,32 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); // r children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // assertEquals(4, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter assertEquals( - "WHICHHAS APROPERTYpname1=val1AND(pname2=val2ORpname3=val3)", sfq.getChild(2).getText()); - final ParseTree entity_filter1 = sfq.getChild(2); + "WHICH HAS A PROPERTY pname1=val1 AND (pname2=val2 OR pname3=val3)", + sfq.getChild(3).getText()); + final ParseTree entity_filter1 = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter1.getChildCount()); - assertEquals("WHICHHAS APROPERTY", entity_filter1.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter1.getChild(0).getText()); // conjunction - assertEquals("pname1=val1AND(pname2=val2ORpname3=val3)", entity_filter1.getChild(1).getText()); + assertEquals( + "pname1=val1 AND (pname2=val2 OR pname3=val3)", entity_filter1.getChild(1).getText()); final ParseTree conjunction = entity_filter1.getChild(1); // 5 children: pov, AND, LPAREN, disjunction, RPAREN assertEquals(5, conjunction.getChildCount()); - assertEquals("pname1=val1", conjunction.getChild(0).getText()); - assertEquals("AND", conjunction.getChild(1).getText()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(1).getText()); assertEquals("(", conjunction.getChild(2).getText()); - assertEquals("pname2=val2ORpname3=val3", conjunction.getChild(3).getText()); + assertEquals("pname2=val2 OR pname3=val3", conjunction.getChild(3).getText()); assertEquals(")", conjunction.getChild(4).getText()); // pov @@ -856,15 +833,15 @@ public class TestCQL { assertEquals(3, pov1.getChildCount()); assertEquals("pname1", pov1.getChild(0).getText()); assertEquals("=", pov1.getChild(1).getText()); - assertEquals("val1", pov1.getChild(2).getText()); + assertEquals("val1 ", pov1.getChild(2).getText()); // disjunction final ParseTree disjunction = conjunction.getChild(3); // 3 children: pov, OR, pov assertEquals(3, disjunction.getChildCount()); - assertEquals("pname2=val2", disjunction.getChild(0).getText()); - assertEquals("OR", disjunction.getChild(1).getText()); + assertEquals("pname2=val2 ", disjunction.getChild(0).getText()); + assertEquals("OR ", disjunction.getChild(1).getText()); assertEquals("pname3=val3", disjunction.getChild(2).getText()); // pov @@ -877,7 +854,7 @@ public class TestCQL { assertEquals("pname2", pov2.getChild(0).getText()); assertEquals("=", pov2.getChild(1).getText()); - assertEquals("val2", pov2.getChild(2).getText()); + assertEquals("val2 ", pov2.getChild(2).getText()); assertEquals("pname3", pov3.getChild(0).getText()); assertEquals("=", pov3.getChild(1).getText()); @@ -924,34 +901,34 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 4 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals("WHICHHAS Apname->ename2", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals("WHICH HAS A pname -> ename2", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); - assertEquals("pname->ename2", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); + assertEquals("pname -> ename2", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: pov assertEquals(1, conjunction.getChildCount()); - assertEquals("pname->ename2", conjunction.getChild(0).getText()); + assertEquals("pname -> ename2", conjunction.getChild(0).getText()); // pov final ParseTree pov1 = conjunction.getChild(0); - // 3 chidren: property, operator, value - assertEquals(3, pov1.getChildCount()); - assertEquals("pname", pov1.getChild(0).getText()); + // 4 chidren: property, operator, WHITE_SPACE, value + assertEquals(4, pov1.getChildCount()); + assertEquals("pname ", pov1.getChild(0).getText()); assertEquals("->", pov1.getChild(1).getText()); - assertEquals("ename2", pov1.getChild(2).getText()); + assertEquals("ename2", pov1.getChild(3).getText()); assertEquals("ename1", sfq.e.toString()); assertNotNull(sfq.filter); @@ -975,35 +952,35 @@ public class TestCQL { } System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals("WHICH->ename2AS Apname", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals("WHICH -> ename2 AS A pname", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("->ename2AS Apname", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("-> ename2 AS A pname", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: pov assertEquals(1, conjunction.getChildCount()); - assertEquals("->ename2AS Apname", conjunction.getChild(0).getText()); + assertEquals("-> ename2 AS A pname", conjunction.getChild(0).getText()); // pov final ParseTree pov1 = conjunction.getChild(0); - // 4 chidren: value operator, AS_A, property - assertEquals(4, pov1.getChildCount()); + // 5 children: operator, WHITE_SPACE, entity, AS_A, property + assertEquals(5, pov1.getChildCount()); assertEquals("->", pov1.getChild(0).getText()); - assertEquals("ename2", pov1.getChild(1).getText()); - assertEquals("AS A", pov1.getChild(2).getText()); - assertEquals("pname", pov1.getChild(3).getText()); + assertEquals("ename2 ", pov1.getChild(2).getText()); + assertEquals("AS A ", pov1.getChild(3).getText()); + assertEquals("pname", pov1.getChild(4).getText()); assertEquals("ename1", sfq.e.toString()); assertNotNull(sfq.filter); @@ -1022,33 +999,34 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); + assertEquals(" ", sfq.getChild(2).getText()); // entity_filter - assertEquals("WHICHHAS A->ename2", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + assertEquals("WHICH HAS A -> ename2", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); + assertEquals(5, sfq.getChildCount()); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); - assertEquals("->ename2", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); + assertEquals("-> ename2", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: pov assertEquals(1, conjunction.getChildCount()); - assertEquals("->ename2", conjunction.getChild(0).getText()); + assertEquals("-> ename2", conjunction.getChild(0).getText()); // pov final ParseTree pov1 = conjunction.getChild(0); - // 2 children: operator, value - assertEquals(2, pov1.getChildCount()); + // 3 children: operator, WHITE_SPACE, value + assertEquals(3, pov1.getChildCount()); assertEquals("->", pov1.getChild(0).getText()); - assertEquals("ename2", pov1.getChild(1).getText()); + assertEquals("ename2", pov1.getChild(2).getText()); assertEquals("ename1", sfq.e.toString()); assertNotNull(sfq.filter); @@ -1068,33 +1046,33 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals("WHICHIS REFERENCEDBYename2", sfq.getChild(2).getText()); + assertEquals("WHICH IS REFERENCED BY ename2", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS REFERENCEDBYename2", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS REFERENCED BY ename2", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: backreference assertEquals(1, conjunction.getChildCount()); - assertEquals("IS REFERENCEDBYename2", conjunction.getChild(0).getText()); + assertEquals("IS REFERENCED BY ename2", conjunction.getChild(0).getText()); // backreference final ParseTree backreference = conjunction.getChild(0); // 3 children: IS_REFERENCED, BY, entity assertEquals(3, backreference.getChildCount()); - assertEquals("IS REFERENCED", backreference.getChild(0).getText()); - assertEquals("BY", backreference.getChild(1).getText()); + assertEquals("IS REFERENCED ", backreference.getChild(0).getText()); + assertEquals("BY ", backreference.getChild(1).getText()); assertEquals("ename2", backreference.getChild(2).getText()); assertEquals("ename1", sfq.e.toString()); @@ -1116,25 +1094,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals("WHICHIS REFERENCEDBYename2AS Apname1", sfq.getChild(2).getText()); + assertEquals("WHICH IS REFERENCED BY ename2 AS A pname1", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS REFERENCEDBYename2AS Apname1", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS REFERENCED BY ename2 AS A pname1", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: backreference assertEquals(1, conjunction.getChildCount()); - assertEquals("IS REFERENCEDBYename2AS Apname1", conjunction.getChild(0).getText()); + assertEquals("IS REFERENCED BY ename2 AS A pname1", conjunction.getChild(0).getText()); // backreference final ParseTree backreference = conjunction.getChild(0); @@ -1144,13 +1122,13 @@ public class TestCQL { assertNotNull(sfq.filter); assertEquals("@(ename2,pname1)", sfq.filter.toString()); - // 5 children: IS_REFERENCED, BY, entity, AS_A, property - assertEquals(5, backreference.getChildCount()); - assertEquals("IS REFERENCED", backreference.getChild(0).getText()); - assertEquals("BY", backreference.getChild(1).getText()); + // 6 children: IS_REFERENCED, BY, entity, WHITE_SPACE, AS_A, property + assertEquals(6, backreference.getChildCount()); + assertEquals("IS REFERENCED ", backreference.getChild(0).getText()); + assertEquals("BY ", backreference.getChild(1).getText()); assertEquals("ename2", backreference.getChild(2).getText()); - assertEquals("AS A", backreference.getChild(3).getText()); - assertEquals("pname1", backreference.getChild(4).getText()); + assertEquals("AS A ", backreference.getChild(4).getText()); + assertEquals("pname1", backreference.getChild(5).getText()); assertEquals("ename1", sfq.e.toString()); assertNotNull(sfq.filter); } @@ -1164,42 +1142,42 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - assertEquals(Backreference.class.getName(), sfq.filter.getClass().getName()); - assertEquals("@(ename2,pname1)", sfq.filter.toString()); - - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals("WHICHIS REFERENCEDBYANename2AS Apname1", sfq.getChild(2).getText()); + assertEquals("WHICH IS REFERENCED BY AN ename2 AS A pname1", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS REFERENCEDBYANename2AS Apname1", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS REFERENCED BY AN ename2 AS A pname1", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: backreference assertEquals(1, conjunction.getChildCount()); - assertEquals("IS REFERENCEDBYANename2AS Apname1", conjunction.getChild(0).getText()); + assertEquals("IS REFERENCED BY AN ename2 AS A pname1", conjunction.getChild(0).getText()); // backreference final ParseTree backreference = conjunction.getChild(0); - // 6 children: IS_REFERENCED, BY, AN, entity, AS_A, property - assertEquals(6, backreference.getChildCount()); - assertEquals("IS REFERENCED", backreference.getChild(0).getText()); - assertEquals("BY", backreference.getChild(1).getText()); - assertEquals("AN", backreference.getChild(2).getText()); + // 6 children: IS_REFERENCED, BY, AN, entity, WHITE_SPACE, AS_A, property + assertEquals(7, backreference.getChildCount()); + assertEquals("IS REFERENCED ", backreference.getChild(0).getText()); + assertEquals("BY ", backreference.getChild(1).getText()); + assertEquals("AN ", backreference.getChild(2).getText()); assertEquals("ename2", backreference.getChild(3).getText()); - assertEquals("AS A", backreference.getChild(4).getText()); - assertEquals("pname1", backreference.getChild(5).getText()); + assertEquals("AS A ", backreference.getChild(5).getText()); + assertEquals("pname1", backreference.getChild(6).getText()); assertEquals("ename1", sfq.e.toString()); assertNotNull(sfq.filter); + + assertEquals(Backreference.class.getName(), sfq.filter.getClass().getName()); + assertEquals("@(ename2,pname1)", sfq.filter.toString()); } @Test @@ -1211,32 +1189,32 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals("WITHNOTpname1=val1", sfq.getChild(2).getText()); + assertEquals("WITH NOT pname1=val1", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WITH", entity_filter.getChild(0).getText()); + assertEquals("WITH ", entity_filter.getChild(0).getText()); // conjunction - assertEquals("NOTpname1=val1", entity_filter.getChild(1).getText()); + assertEquals("NOT pname1=val1", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: negation assertEquals(1, conjunction.getChildCount()); - assertEquals("NOTpname1=val1", conjunction.getChild(0).getText()); + assertEquals("NOT pname1=val1", conjunction.getChild(0).getText()); final ParseTree negation = conjunction.getChild(0); // 2 children: NOT, pov assertEquals(2, negation.getChildCount()); - assertEquals("NOT", negation.getChild(0).getText()); + assertEquals("NOT ", negation.getChild(0).getText()); assertEquals("pname1=val1", negation.getChild(1).getText()); final ParseTree pov1 = negation.getChild(1).getChild(0); @@ -1263,32 +1241,32 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals("WHICHDOES NOT HAVE Apname1!=val1", sfq.getChild(2).getText()); + assertEquals("WHICH DOES NOT HAVE A pname1!=val1", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); // conjunction - assertEquals("DOES NOT HAVE Apname1!=val1", entity_filter.getChild(1).getText()); + assertEquals("DOES NOT HAVE A pname1!=val1", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: negation assertEquals(1, conjunction.getChildCount()); - assertEquals("DOES NOT HAVE Apname1!=val1", conjunction.getChild(0).getText()); + assertEquals("DOES NOT HAVE A pname1!=val1", conjunction.getChild(0).getText()); final ParseTree negation = conjunction.getChild(0); // 2 children: DOESN'T, pov assertEquals(2, negation.getChildCount()); - assertEquals("DOES NOT HAVE A", negation.getChild(0).getText()); + assertEquals("DOES NOT HAVE A ", negation.getChild(0).getText()); assertEquals("pname1!=val1", negation.getChild(1).getText()); final ParseTree pov1 = negation.getChild(1).getChild(0); @@ -1316,11 +1294,11 @@ public class TestCQL { final CqContext sfq = parser.cq(); // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(".!pname1=val1", sfq.getChild(2).getText()); + assertEquals(4, sfq.getChildCount()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); @@ -1369,12 +1347,12 @@ public class TestCQL { // 4 children: FIND, entity, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter - assertEquals(".pname1=val1AND.pname2=val2", sfq.getChild(2).getText()); + assertEquals(".pname1=val1 AND .pname2=val2", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction @@ -1382,13 +1360,13 @@ public class TestCQL { assertEquals(".", entity_filter.getChild(0).getText()); // conjunction - assertEquals("pname1=val1AND.pname2=val2", entity_filter.getChild(1).getText()); + assertEquals("pname1=val1 AND .pname2=val2", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 4 child: pov1, AND, which_exp, pov2 assertEquals(4, conjunction.getChildCount()); - assertEquals("pname1=val1", conjunction.getChild(0).getText()); - assertEquals("AND", conjunction.getChild(1).getText()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(1).getText()); assertEquals(".", conjunction.getChild(2).getText()); assertEquals("pname2=val2", conjunction.getChild(3).getText()); final ParseTree pov1 = conjunction.getChild(0).getChild(0); @@ -1398,7 +1376,7 @@ public class TestCQL { assertEquals(3, pov1.getChildCount()); assertEquals("pname1", pov1.getChild(0).getText()); assertEquals("=", pov1.getChild(1).getText()); - assertEquals("val1", pov1.getChild(2).getText()); + assertEquals("val1 ", pov1.getChild(2).getText()); assertEquals(3, pov2.getChildCount()); assertEquals("pname2", pov2.getChild(0).getText()); @@ -1426,46 +1404,47 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); // entity_filter assertEquals( - "WHICHDOESN'T HAVE Apname1=val1ANDWHICHHAS Apname2=val2", sfq.getChild(2).getText()); - final ParseTree entity_filter = sfq.getChild(2); + "WHICH DOESN'T HAVE A pname1=val1 AND WHICH HAS A pname2=val2", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); // conjunction assertEquals( - "DOESN'T HAVE Apname1=val1ANDWHICHHAS Apname2=val2", entity_filter.getChild(1).getText()); + "DOESN'T HAVE A pname1=val1 AND WHICH HAS A pname2=val2", + entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 4 children: pov1, AND, which_exp, pov2 assertEquals(4, conjunction.getChildCount()); - assertEquals("DOESN'T HAVE Apname1=val1", conjunction.getChild(0).getText()); - assertEquals("AND", conjunction.getChild(1).getText()); - assertEquals("WHICHHAS A", conjunction.getChild(2).getText()); + assertEquals("DOESN'T HAVE A pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(1).getText()); + assertEquals("WHICH HAS A ", conjunction.getChild(2).getText()); assertEquals("pname2=val2", conjunction.getChild(3).getText()); final ParseTree pov2 = conjunction.getChild(3).getChild(0); final ParseTree negation = conjunction.getChild(0).getChild(0); // 2 children: NOT, pov assertEquals(2, negation.getChildCount()); - assertEquals("DOESN'T HAVE A", negation.getChild(0).getText()); - assertEquals("pname1=val1", negation.getChild(1).getText()); + assertEquals("DOESN'T HAVE A ", negation.getChild(0).getText()); + assertEquals("pname1=val1 ", negation.getChild(1).getText()); final ParseTree pov1 = negation.getChild(1).getChild(0); // 3 children: property, operator, value assertEquals(3, pov1.getChildCount()); assertEquals("pname1", pov1.getChild(0).getText()); assertEquals("=", pov1.getChild(1).getText()); - assertEquals("val1", pov1.getChild(2).getText()); + assertEquals("val1 ", pov1.getChild(2).getText()); assertEquals(3, pov2.getChildCount()); assertEquals("pname2", pov2.getChild(0).getText()); @@ -1502,7 +1481,7 @@ public class TestCQL { // 3 children: FIND, role, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("FILE", sfq.getChild(1).getText()); assertEquals(null, sfq.e); assertEquals(Query.Role.FILE, sfq.r); @@ -1525,27 +1504,27 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("File", sfq.getChild(1).getText()); - assertEquals("WHICHISNOTREFERENCED", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("File ", sfq.getChild(1).getText()); + assertEquals("WHICH IS NOT REFERENCED", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHIS", entity_filter.getChild(0).getText()); - assertEquals("NOTREFERENCED", entity_filter.getChild(1).getText()); + assertEquals("WHICH IS ", entity_filter.getChild(0).getText()); + assertEquals("NOT REFERENCED", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: negation assertEquals(1, conjunction.getChildCount()); - assertEquals("NOTREFERENCED", conjunction.getChild(0).getText()); + assertEquals("NOT REFERENCED", conjunction.getChild(0).getText()); final ParseTree negation = conjunction.getChild(0); // 2 children: NOT, backreference assertEquals(2, negation.getChildCount()); - assertEquals("NOT", negation.getChild(0).getText()); + assertEquals("NOT ", negation.getChild(0).getText()); assertEquals("REFERENCED", negation.getChild(1).getText()); // backreference @@ -1582,26 +1561,26 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT\"/bla/bla/bla\"", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT \"/bla/bla/bla\"", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT\"/bla/bla/bla\"", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT \"/bla/bla/bla\"", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT\"/bla/bla/bla\"", conjunction.getChild(0).getText()); + assertEquals("IS STORED AT \"/bla/bla/bla\"", conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("\"/bla/bla/bla\"", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1627,27 +1606,27 @@ public class TestCQL { assertEquals(StoredAt.class.getName(), sfq.filter.getClass().getName()); // 4 children: FIND, role, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/bla/bla/bla", sfq.getChild(2).getText()); + // assertEquals(4, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /bla/bla/bla", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT/bla/bla/bla", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla/bla", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT/bla/bla/bla", conjunction.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla/bla", conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("/bla/bla/bla", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1674,26 +1653,26 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/bla/bla/bla/", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /bla/bla/bla/", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT/bla/bla/bla/", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla/bla/", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT/bla/bla/bla/", conjunction.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla/bla/", conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("/bla/bla/bla/", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1723,27 +1702,27 @@ public class TestCQL { assertEquals(StoredAt.class.getName(), sfq.filter.getClass().getName()); // 4 children: FIND, role, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/bla/bla/bla.html", sfq.getChild(2).getText()); + // assertEquals(4, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /bla/bla/bla.html", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT/bla/bla/bla.html", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla/bla.html", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT/bla/bla/bla.html", conjunction.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla/bla.html", conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("/bla/bla/bla.html", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1775,26 +1754,26 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT//bla///bla.html", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT //bla///bla.html", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT//bla///bla.html", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT //bla///bla.html", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT//bla///bla.html", conjunction.getChild(0).getText()); + assertEquals("IS STORED AT //bla///bla.html", conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("//bla///bla.html", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1826,26 +1805,26 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/bla/bla_bla.html", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /bla/bla_bla.html", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT/bla/bla_bla.html", entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla_bla.html", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT/bla/bla_bla.html", conjunction.getChild(0).getText()); + assertEquals("IS STORED AT /bla/bla_bla.html", conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("/bla/bla_bla.html", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1879,26 +1858,26 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT" + origPath, sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT " + origPath, sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); - assertEquals("IS STORED AT" + origPath, entity_filter.getChild(1).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); + assertEquals("IS STORED AT " + origPath, entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: storedAt assertEquals(1, conjunction.getChildCount()); - assertEquals("IS STORED AT" + origPath, conjunction.getChild(0).getText()); + assertEquals("IS STORED AT " + origPath, conjunction.getChild(0).getText()); final ParseTree storedat = conjunction.getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals(origPath, storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1929,30 +1908,31 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT\"/bla/bla/bla\"ORHAS Apname2=val2", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals( + "WHICH IS STORED AT \"/bla/bla/bla\" OR HAS A pname2=val2", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); assertEquals( - "IS STORED AT\"/bla/bla/bla\"ORHAS Apname2=val2", entity_filter.getChild(1).getText()); + "IS STORED AT \"/bla/bla/bla\" OR HAS A pname2=val2", entity_filter.getChild(1).getText()); final ParseTree disjunction = entity_filter.getChild(1); // 4 child: storedAt, OR, HAS_A, POV assertEquals(4, disjunction.getChildCount()); - assertEquals("IS STORED AT\"/bla/bla/bla\"", disjunction.getChild(0).getText()); - assertEquals("OR", disjunction.getChild(1).getText()); - assertEquals("HAS A", disjunction.getChild(2).getText()); + assertEquals("IS STORED AT \"/bla/bla/bla\" ", disjunction.getChild(0).getText()); + assertEquals("OR ", disjunction.getChild(1).getText()); + assertEquals("HAS A ", disjunction.getChild(2).getText()); assertEquals("pname2=val2", disjunction.getChild(3).getText()); final ParseTree storedat = disjunction.getChild(0).getChild(0); - // 2 children: IS_STORED_AT, loc - assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + // 3 children: IS_STORED_AT, loc, WHITE_SPACE + assertEquals(3, storedat.getChildCount()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("\"/bla/bla/bla\"", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -1990,36 +1970,38 @@ public class TestCQL { // 4 children: FIND, role, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHHAS Apname2=val2ORIS STORED AT\"/bla/bla/bla\"", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals( + "WHICH HAS A pname2=val2 OR IS STORED AT \"/bla/bla/bla\"", sfq.getChild(2).getText()); // entity_filter final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); - assertEquals("pname2=val2ORIS STORED AT\"/bla/bla/bla\"", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); + assertEquals( + "pname2=val2 OR IS STORED AT \"/bla/bla/bla\"", entity_filter.getChild(1).getText()); final ParseTree disjunction = entity_filter.getChild(1); // 3 children: POV, OR, storedAt assertEquals(3, disjunction.getChildCount()); - assertEquals("pname2=val2", disjunction.getChild(0).getText()); - assertEquals("OR", disjunction.getChild(1).getText()); - assertEquals("IS STORED AT\"/bla/bla/bla\"", disjunction.getChild(2).getText()); + assertEquals("pname2=val2 ", disjunction.getChild(0).getText()); + assertEquals("OR ", disjunction.getChild(1).getText()); + assertEquals("IS STORED AT \"/bla/bla/bla\"", disjunction.getChild(2).getText()); final ParseTree pov = disjunction.getChild(0).getChild(0); // 3 children: p, o, v assertEquals(3, pov.getChildCount()); assertEquals("pname2", pov.getChild(0).getText()); assertEquals("=", pov.getChild(1).getText()); - assertEquals("val2", pov.getChild(2).getText()); + assertEquals("val2 ", pov.getChild(2).getText()); final ParseTree storedat = disjunction.getChild(2).getChild(0); // 2 children: IS_STORED_AT, loc assertEquals(2, storedat.getChildCount()); - assertEquals("IS STORED AT", storedat.getChild(0).getText()); + assertEquals("IS STORED AT ", storedat.getChild(0).getText()); assertEquals("\"/bla/bla/bla\"", storedat.getChild(1).getText()); assertEquals(null, sfq.e); @@ -2056,48 +2038,50 @@ public class TestCQL { // assertEquals(Conjunction.class.getName(), // sfq.filter.getClass().getName()); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals( - "WHICHHAS APROPERTY(pname1=val1WHICHHAS APROPERTYpname2=val2)", sfq.getChild(2).getText()); + "WHICH HAS A PROPERTY ( pname1=val1 WHICH HAS A PROPERTY pname2=val2 )", + sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 4 children: WHICH_EXP, (, conjunction, ) assertEquals(4, entity_filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", entity_filter.getChild(0).getText()); - assertEquals("(", entity_filter.getChild(1).getText()); - assertEquals("pname1=val1WHICHHAS APROPERTYpname2=val2", entity_filter.getChild(2).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter.getChild(0).getText()); + assertEquals("( ", entity_filter.getChild(1).getText()); + assertEquals( + "pname1=val1 WHICH HAS A PROPERTY pname2=val2 ", entity_filter.getChild(2).getText()); assertEquals(")", entity_filter.getChild(3).getText()); final ParseTree conjunction = entity_filter.getChild(2); // 2 children: pov subp assertEquals(2, conjunction.getChildCount()); - assertEquals("pname1=val1", conjunction.getChild(0).getText()); - assertEquals("WHICHHAS APROPERTYpname2=val2", conjunction.getChild(1).getText()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY pname2=val2 ", conjunction.getChild(1).getText()); final ParseTree pov = conjunction.getChild(0); // 3 children: p, o, v assertEquals(3, pov.getChildCount()); assertEquals("pname1", pov.getChild(0).getText()); assertEquals("=", pov.getChild(1).getText()); - assertEquals("val1", pov.getChild(2).getText()); + assertEquals("val1 ", pov.getChild(2).getText()); final ParseTree subproperty = conjunction.getChild(1); // 1 child: entity_filter assertEquals(1, subproperty.getChildCount()); - assertEquals("WHICHHAS APROPERTYpname2=val2", subproperty.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY pname2=val2 ", subproperty.getChild(0).getText()); final ParseTree subEntityFilter = subproperty.getChild(0); // 2 children: WHICH_EXP, pov assertEquals(2, subEntityFilter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", subEntityFilter.getChild(0).getText()); - assertEquals("pname2=val2", subEntityFilter.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY ", subEntityFilter.getChild(0).getText()); + assertEquals("pname2=val2 ", subEntityFilter.getChild(1).getText()); assertEquals("ename", sfq.e.toString()); assertEquals(null, sfq.r); @@ -2128,45 +2112,47 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals( - "WHICHHAS APROPERTYpname1=val1WHICHHAS APROPERTYpname2=val2", sfq.getChild(2).getText()); + "WHICH HAS A PROPERTY pname1=val1 WHICH HAS A PROPERTY pname2=val2", + sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", entity_filter.getChild(0).getText()); - assertEquals("pname1=val1WHICHHAS APROPERTYpname2=val2", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter.getChild(0).getText()); + assertEquals( + "pname1=val1 WHICH HAS A PROPERTY pname2=val2", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 2 children: pov, subp assertEquals(2, conjunction.getChildCount()); - assertEquals("pname1=val1", conjunction.getChild(0).getText()); - assertEquals("WHICHHAS APROPERTYpname2=val2", conjunction.getChild(1).getText()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY pname2=val2", conjunction.getChild(1).getText()); final ParseTree pov = conjunction.getChild(0); // 3 children: p, o, v assertEquals(3, pov.getChildCount()); assertEquals("pname1", pov.getChild(0).getText()); assertEquals("=", pov.getChild(1).getText()); - assertEquals("val1", pov.getChild(2).getText()); + assertEquals("val1 ", pov.getChild(2).getText()); final ParseTree subproperty = conjunction.getChild(1); // 1 child: entity_filter assertEquals(1, subproperty.getChildCount()); - assertEquals("WHICHHAS APROPERTYpname2=val2", subproperty.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY pname2=val2", subproperty.getChild(0).getText()); final ParseTree subEntityFilter = subproperty.getChild(0); // 2 children: WHICH_EXP, pov assertEquals(2, subEntityFilter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", subEntityFilter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", subEntityFilter.getChild(0).getText()); assertEquals("pname2=val2", subEntityFilter.getChild(1).getText()); assertEquals("ename", sfq.e.toString()); @@ -2197,14 +2183,14 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals(".pname1=val1.pname2=val2", sfq.getChild(2).getText()); + assertEquals(".pname1=val1.pname2=val2", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); @@ -2266,14 +2252,14 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals(".(pname1=val1.pname2=val2)", sfq.getChild(2).getText()); + assertEquals(".(pname1=val1.pname2=val2)", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 4 children: WHICH_EXP, (, conjunction, ) assertEquals(4, entity_filter.getChildCount()); @@ -2339,44 +2325,44 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals("WHICHHAS Apname1=val1WITHpname2=val2", sfq.getChild(2).getText()); + assertEquals("WHICH HAS A pname1=val1 WITH pname2=val2", sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); - assertEquals("pname1=val1WITHpname2=val2", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); + assertEquals("pname1=val1 WITH pname2=val2", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 2 children: pov, subp assertEquals(2, conjunction.getChildCount()); - assertEquals("pname1=val1", conjunction.getChild(0).getText()); - assertEquals("WITHpname2=val2", conjunction.getChild(1).getText()); + assertEquals("pname1=val1 ", conjunction.getChild(0).getText()); + assertEquals("WITH pname2=val2", conjunction.getChild(1).getText()); final ParseTree pov = conjunction.getChild(0); // 3 children: p, o, v assertEquals(3, pov.getChildCount()); assertEquals("pname1", pov.getChild(0).getText()); assertEquals("=", pov.getChild(1).getText()); - assertEquals("val1", pov.getChild(2).getText()); + assertEquals("val1 ", pov.getChild(2).getText()); final ParseTree subproperty = conjunction.getChild(1); // 1 child: entity_filter assertEquals(1, subproperty.getChildCount()); - assertEquals("WITHpname2=val2", subproperty.getChild(0).getText()); + assertEquals("WITH pname2=val2", subproperty.getChild(0).getText()); final ParseTree subEntityFilter = subproperty.getChild(0); // 2 children: WHICH_EXP, pov assertEquals(2, subEntityFilter.getChildCount()); - assertEquals("WITH", subEntityFilter.getChild(0).getText()); + assertEquals("WITH ", subEntityFilter.getChild(0).getText()); assertEquals("pname2=val2", subEntityFilter.getChild(1).getText()); assertEquals("ename", sfq.e.toString()); @@ -2408,50 +2394,53 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals( - "WHICHHAS A->ename2WHICHHAS A->ename3WHICHHAS APROPERTYpname1=val1", - sfq.getChild(2).getText()); + "WHICH HAS A -> ename2 WHICH HAS A -> ename3 WHICH HAS A PROPERTY pname1=val1", + sfq.getChild(3).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICHHAS A", entity_filter.getChild(0).getText()); + assertEquals("WHICH HAS A ", entity_filter.getChild(0).getText()); assertEquals( - "->ename2WHICHHAS A->ename3WHICHHAS APROPERTYpname1=val1", + "-> ename2 WHICH HAS A -> ename3 WHICH HAS A PROPERTY pname1=val1", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 2 children: pov, subp assertEquals(2, conjunction.getChildCount()); - assertEquals("->ename2", conjunction.getChild(0).getText()); + assertEquals("-> ename2 ", conjunction.getChild(0).getText()); assertEquals( - "WHICHHAS A->ename3WHICHHAS APROPERTYpname1=val1", conjunction.getChild(1).getText()); + "WHICH HAS A -> ename3 WHICH HAS A PROPERTY pname1=val1", + conjunction.getChild(1).getText()); final ParseTree pov = conjunction.getChild(0); - // 2 children: ->, ? - assertEquals(2, pov.getChildCount()); + // 3 children: ->, WHITE_SPACE, ename2 + assertEquals(3, pov.getChildCount()); assertEquals("->", pov.getChild(0).getText()); - assertEquals("ename2", pov.getChild(1).getText()); + assertEquals("ename2 ", pov.getChild(2).getText()); final ParseTree subproperty = conjunction.getChild(1); // 1 child: entity_filter assertEquals(1, subproperty.getChildCount()); assertEquals( - "WHICHHAS A->ename3WHICHHAS APROPERTYpname1=val1", subproperty.getChild(0).getText()); + "WHICH HAS A -> ename3 WHICH HAS A PROPERTY pname1=val1", + subproperty.getChild(0).getText()); final ParseTree subEntityFilter = subproperty.getChild(0); // 2 children: WHICH_EXP, subp assertEquals(2, subEntityFilter.getChildCount()); - assertEquals("WHICHHAS A", subEntityFilter.getChild(0).getText()); - assertEquals("->ename3WHICHHAS APROPERTYpname1=val1", subEntityFilter.getChild(1).getText()); + assertEquals("WHICH HAS A ", subEntityFilter.getChild(0).getText()); + assertEquals( + "-> ename3 WHICH HAS A PROPERTY pname1=val1", subEntityFilter.getChild(1).getText()); assertEquals("ename1", sfq.e.toString()); assertEquals(null, sfq.r); @@ -2489,7 +2478,7 @@ public class TestCQL { // 4 children: FIND, ename, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(".ename2.ename3.pname1=val1", sfq.getChild(2).getText()); @@ -2556,40 +2545,37 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - // assertEquals("WHICH HAS A PROPERTY ( ename2 WHICH HAS A PROPERTY - // pname1=val1)", - // sfq - // .getChild(4).getText()); - // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + assertEquals( + "WHICH HAS A PROPERTY ( WHICH HAS A PROPERTY pname1=val1)", sfq.getChild(3).getText()); + final ParseTree entity_filter = sfq.getChild(3); - // 4 children: WHICH_EXP, (, conjunction, ) + // 4 children: WHICH_EXP, (, subproperty, ) assertEquals(4, entity_filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", entity_filter.getChild(0).getText()); - assertEquals("(", entity_filter.getChild(1).getText()); - assertEquals("WHICHHAS APROPERTYpname1=val1", entity_filter.getChild(2).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter.getChild(0).getText()); + assertEquals("( ", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY pname1=val1", entity_filter.getChild(2).getText()); assertEquals(")", entity_filter.getChild(3).getText()); - final ParseTree conjunction = entity_filter.getChild(2); + final ParseTree subproperty1 = entity_filter.getChild(2); - // 1 children - assertEquals(1, conjunction.getChildCount()); - assertEquals("WHICHHAS APROPERTYpname1=val1", conjunction.getChild(0).getText()); - final ParseTree subp = conjunction.getChild(0); + // 1 child: filter + assertEquals(1, subproperty1.getChildCount()); + assertEquals("WHICH HAS A PROPERTY pname1=val1", subproperty1.getChild(0).getText()); + final ParseTree filter = subproperty1.getChild(0); // 1 children: filter - assertEquals(1, subp.getChildCount()); - assertEquals("WHICHHAS APROPERTYpname1=val1", subp.getChild(0).getText()); + assertEquals(1, filter.getChildCount()); + assertEquals("WHICH HAS A PROPERTY pname1=val1", filter.getChild(0).getText()); - final ParseTree subproperty = subp.getChild(0); + final ParseTree subproperty = filter.getChild(0); - // 2 children: entity_filter + // 2 children: WHICH entity_filter assertEquals(2, subproperty.getChildCount()); - assertEquals("WHICHHAS APROPERTY", subproperty.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", subproperty.getChild(0).getText()); assertEquals("pname1=val1", subproperty.getChild(1).getText()); assertEquals("ename1", sfq.e.toString()); @@ -2616,41 +2602,44 @@ public class TestCQL { assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); assertEquals(null, sfq.r); - // 4 children: FIND, ename, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename1", sfq.getChild(1).getText()); // entity_filter - final ParseTree entity_filter = sfq.getChild(2); + final ParseTree entity_filter = sfq.getChild(3); // 4 children: WHICH_EXP, (, conjunction, ) assertEquals(4, entity_filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", entity_filter.getChild(0).getText()); - assertEquals("(", entity_filter.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY ", entity_filter.getChild(0).getText()); + assertEquals("( ", entity_filter.getChild(1).getText()); assertEquals( - "WHICHHAS APROPERTY(WHICHHAS APROPERTY(pname1=val1))", entity_filter.getChild(2).getText()); + "WHICH HAS A PROPERTY ( WHICH HAS A PROPERTY (pname1=val1) ) ", + entity_filter.getChild(2).getText()); assertEquals(")", entity_filter.getChild(3).getText()); final ParseTree conjunction = entity_filter.getChild(2); // 1 children assertEquals(1, conjunction.getChildCount()); assertEquals( - "WHICHHAS APROPERTY(WHICHHAS APROPERTY(pname1=val1))", conjunction.getChild(0).getText()); + "WHICH HAS A PROPERTY ( WHICH HAS A PROPERTY (pname1=val1) ) ", + conjunction.getChild(0).getText()); final ParseTree subp = conjunction.getChild(0); // 1 children: filter assertEquals(1, subp.getChildCount()); - assertEquals("WHICHHAS APROPERTY(WHICHHAS APROPERTY(pname1=val1))", subp.getChild(0).getText()); + assertEquals( + "WHICH HAS A PROPERTY ( WHICH HAS A PROPERTY (pname1=val1) ) ", subp.getChild(0).getText()); final ParseTree subproperty = subp.getChild(0); // 4 children: which, (, conjunction, ) assertEquals(4, subproperty.getChildCount()); - assertEquals("WHICHHAS APROPERTY", subproperty.getChild(0).getText()); - assertEquals("(", subproperty.getChild(1).getText()); - assertEquals("WHICHHAS APROPERTY(pname1=val1)", subproperty.getChild(2).getText()); - assertEquals(")", subproperty.getChild(3).getText()); + assertEquals("WHICH HAS A PROPERTY ", subproperty.getChild(0).getText()); + assertEquals("( ", subproperty.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY (pname1=val1) ", subproperty.getChild(2).getText()); + assertEquals(") ", subproperty.getChild(3).getText()); assertEquals("ename1", sfq.e.toString()); assertEquals(null, sfq.r); @@ -2684,13 +2673,13 @@ public class TestCQL { // 4 children: FIND, ename, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals(".", entity_filter.getChild(0).getText()); + assertEquals(". ", entity_filter.getChild(0).getText()); assertEquals("pname->ename", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); @@ -2742,7 +2731,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename#", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); } @@ -2759,7 +2748,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("#ename", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); } @@ -2778,7 +2767,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("<<ename-regexp>>", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_REGEXP, sfq.e.type); assertEquals("ename-regexp", sfq.e.toString()); @@ -2801,7 +2790,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("<<ename\\>>regexp>>", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_REGEXP, sfq.e.type); assertEquals("ename>>regexp", sfq.e.toString()); @@ -2825,7 +2814,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("*ename", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_LIKE, sfq.e.type); assertEquals("%ename", sfq.e.toString()); @@ -2848,7 +2837,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("en*ame", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_LIKE, sfq.e.type); assertEquals("en%ame", sfq.e.toString()); @@ -2871,7 +2860,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("SimpleD*Property", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_LIKE, sfq.e.type); assertEquals("SimpleD%Property", sfq.e.toString()); @@ -2894,7 +2883,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename*", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_LIKE, sfq.e.type); assertEquals("ename%", sfq.e.toString()); @@ -2917,7 +2906,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("<<SimpleD.*Property>>", sfq.getChild(1).getText()); assertEquals(Query.Pattern.TYPE_REGEXP, sfq.e.type); assertEquals("SimpleD.*Property", sfq.e.toString()); @@ -2938,11 +2927,11 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals(".THEGREATESTpname", sfq.getChild(2).getText()); + assertEquals(". THE GREATEST pname", sfq.getChild(3).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); } @@ -2961,11 +2950,11 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals(".THESMALLESTpname", sfq.getChild(2).getText()); + assertEquals(". THE SMALLEST pname", sfq.getChild(3).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); } @@ -2985,17 +2974,17 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("SimpleRecordType", sfq.getChild(1).getText()); - assertEquals("WITHTHEGREATESTSimpleDoubleProperty>0", sfq.getChild(2).getText()); + assertEquals("WITH THE GREATEST SimpleDoubleProperty>0", sfq.getChild(3).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals(2, sfq.getChild(2).getChildCount()); - final ParseTree filter = sfq.getChild(2); - assertEquals("WITH", filter.getChild(0).getText()); - assertEquals("THEGREATESTSimpleDoubleProperty>0", filter.getChild(1).getText()); + assertEquals(2, sfq.getChild(3).getChildCount()); + final ParseTree filter = sfq.getChild(3); + assertEquals("WITH ", filter.getChild(0).getText()); + assertEquals("THE GREATEST SimpleDoubleProperty>0", filter.getChild(1).getText()); assertEquals(1, filter.getChild(1).getChildCount()); assertEquals(3, filter.getChild(1).getChild(0).getChildCount()); @@ -3024,13 +3013,13 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'ANDAPROPERTY(BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016')", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND A PROPERTY ( BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016')", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); assertNotNull(sfq.filter); @@ -3069,24 +3058,24 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHHAS APROPERTYpname=val1AND(pname=val2)", sfq.getChild(2).getText()); + assertEquals("WHICH HAS A PROPERTY pname=val1 AND (pname=val2)", sfq.getChild(3).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(2); + final ParseTree filter = sfq.getChild(3); assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); - assertEquals("pname=val1AND(pname=val2)", filter.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); + assertEquals("pname=val1 AND (pname=val2)", filter.getChild(1).getText()); final ParseTree conjunction1 = filter.getChild(1); // 5 children: pov, AND, (, pov, ) assertEquals(5, conjunction1.getChildCount()); - assertEquals("pname=val1", conjunction1.getChild(0).getText()); - assertEquals("AND", conjunction1.getChild(1).getText()); + assertEquals("pname=val1 ", conjunction1.getChild(0).getText()); + assertEquals("AND ", conjunction1.getChild(1).getText()); assertEquals("(", conjunction1.getChild(2).getText()); assertEquals("pname=val2", conjunction1.getChild(3).getText()); assertEquals(")", conjunction1.getChild(4).getText()); @@ -3123,41 +3112,41 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'AND(BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016')", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND ( BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016')", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); + final ParseTree filter = sfq.getChild(4); assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); assertEquals( - "ObstacleRadius='2.0'AND(BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016')", + "ObstacleRadius = '2.0' AND ( BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016')", filter.getChild(1).getText()); final ParseTree conjunction1 = filter.getChild(1); assertEquals(5, conjunction1.getChildCount()); - assertEquals("ObstacleRadius='2.0'", conjunction1.getChild(0).getText()); - assertEquals("AND", conjunction1.getChild(1).getText()); - assertEquals("(", conjunction1.getChild(2).getText()); + assertEquals("ObstacleRadius = '2.0' ", conjunction1.getChild(0).getText()); + assertEquals("AND ", conjunction1.getChild(1).getText()); + assertEquals("( ", conjunction1.getChild(2).getText()); assertEquals( - "BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", + "BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", conjunction1.getChild(3).getText()); assertEquals(")", conjunction1.getChild(4).getText()); final ParseTree sub = conjunction1.getChild(3); assertEquals(2, sub.getChildCount()); - assertEquals("BarkleyModelSimulation", sub.getChild(0).getText()); - assertEquals("WHICHHAS APROPERTYTimeStep='0.0016'", sub.getChild(1).getText()); + assertEquals("BarkleyModelSimulation ", sub.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY TimeStep='0.0016'", sub.getChild(1).getText()); final ParseTree con2 = sub.getChild(1).getChild(0); assertEquals(2, con2.getChildCount()); - assertEquals("WHICHHAS APROPERTY", con2.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", con2.getChild(0).getText()); assertEquals("TimeStep='0.0016'", con2.getChild(1).getText()); assertNotNull(sfq.filter); @@ -3197,42 +3186,42 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'ANDBarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); + final ParseTree filter = sfq.getChild(4); assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); assertEquals( - "ObstacleRadius='2.0'ANDBarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", + "ObstacleRadius = '2.0' AND BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", filter.getChild(1).getText()); final ParseTree conjunction1 = filter.getChild(1); assertEquals(3, conjunction1.getChildCount()); - assertEquals("ObstacleRadius='2.0'", conjunction1.getChild(0).getText()); - assertEquals("AND", conjunction1.getChild(1).getText()); + assertEquals("ObstacleRadius = '2.0' ", conjunction1.getChild(0).getText()); + assertEquals("AND ", conjunction1.getChild(1).getText()); assertEquals( - "BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", + "BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", conjunction1.getChild(2).getText()); final ParseTree filter_exp = conjunction1.getChild(2); assertEquals(2, filter_exp.getChildCount()); - assertEquals("BarkleyModelSimulation", filter_exp.getChild(0).getText()); - assertEquals("WHICHHAS APROPERTYTimeStep='0.0016'", filter_exp.getChild(1).getText()); + assertEquals("BarkleyModelSimulation ", filter_exp.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY TimeStep='0.0016'", filter_exp.getChild(1).getText()); final ParseTree sub = filter_exp.getChild(1); assertEquals(1, sub.getChildCount()); - assertEquals("WHICHHAS APROPERTYTimeStep='0.0016'", sub.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY TimeStep='0.0016'", sub.getChild(0).getText()); final ParseTree sub1 = sub.getChild(0); assertEquals(2, sub1.getChildCount()); - assertEquals("WHICHHAS APROPERTY", sub1.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", sub1.getChild(0).getText()); assertEquals("TimeStep='0.0016'", sub1.getChild(1).getText()); assertNotNull(sfq.filter); @@ -3274,43 +3263,43 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'ANDAPROPERTYBarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND A PROPERTY BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); + final ParseTree filter = sfq.getChild(4); assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); assertEquals( - "ObstacleRadius='2.0'ANDAPROPERTYBarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", + "ObstacleRadius = '2.0' AND A PROPERTY BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", filter.getChild(1).getText()); final ParseTree conjunction1 = filter.getChild(1); assertEquals(5, conjunction1.getChildCount()); - assertEquals("ObstacleRadius='2.0'", conjunction1.getChild(0).getText()); - assertEquals("AND", conjunction1.getChild(1).getText()); - assertEquals("A", conjunction1.getChild(2).getText()); - assertEquals("PROPERTY", conjunction1.getChild(3).getText()); + assertEquals("ObstacleRadius = '2.0' ", conjunction1.getChild(0).getText()); + assertEquals("AND ", conjunction1.getChild(1).getText()); + assertEquals("A ", conjunction1.getChild(2).getText()); + assertEquals("PROPERTY ", conjunction1.getChild(3).getText()); assertEquals( - "BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", + "BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", conjunction1.getChild(4).getText()); final ParseTree filter_exp = conjunction1.getChild(4); - assertEquals("BarkleyModelSimulation", filter_exp.getChild(0).getText()); - assertEquals("WHICHHAS APROPERTYTimeStep='0.0016'", filter_exp.getChild(1).getText()); + assertEquals("BarkleyModelSimulation ", filter_exp.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY TimeStep='0.0016'", filter_exp.getChild(1).getText()); final ParseTree sub = filter_exp.getChild(1); assertEquals(1, sub.getChildCount()); - assertEquals("WHICHHAS APROPERTYTimeStep='0.0016'", sub.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY TimeStep='0.0016'", sub.getChild(0).getText()); final ParseTree sub1 = sub.getChild(0); assertEquals(2, sub1.getChildCount()); - assertEquals("WHICHHAS APROPERTY", sub1.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", sub1.getChild(0).getText()); assertEquals("TimeStep='0.0016'", sub1.getChild(1).getText()); assertNotNull(sfq.filter); @@ -3352,30 +3341,31 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'ANDAPROPERTY(BarkleyModelSimulation)", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND A PROPERTY ( BarkleyModelSimulation )", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); + final ParseTree filter = sfq.getChild(4); assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); assertEquals( - "ObstacleRadius='2.0'ANDAPROPERTY(BarkleyModelSimulation)", filter.getChild(1).getText()); + "ObstacleRadius = '2.0' AND A PROPERTY ( BarkleyModelSimulation )", + filter.getChild(1).getText()); final ParseTree conjunction1 = filter.getChild(1); assertEquals(7, conjunction1.getChildCount()); - assertEquals("ObstacleRadius='2.0'", conjunction1.getChild(0).getText()); - assertEquals("AND", conjunction1.getChild(1).getText()); - assertEquals("A", conjunction1.getChild(2).getText()); - assertEquals("PROPERTY", conjunction1.getChild(3).getText()); - assertEquals("(", conjunction1.getChild(4).getText()); - assertEquals("BarkleyModelSimulation", conjunction1.getChild(5).getText()); + assertEquals("ObstacleRadius = '2.0' ", conjunction1.getChild(0).getText()); + assertEquals("AND ", conjunction1.getChild(1).getText()); + assertEquals("A ", conjunction1.getChild(2).getText()); + assertEquals("PROPERTY ", conjunction1.getChild(3).getText()); + assertEquals("( ", conjunction1.getChild(4).getText()); + assertEquals("BarkleyModelSimulation ", conjunction1.getChild(5).getText()); assertEquals(")", conjunction1.getChild(6).getText()); assertNotNull(sfq.filter); @@ -3412,33 +3402,33 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, entity_filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHHAS APROPERTYpname1=val1AND(pname2)", sfq.getChild(2).getText()); + assertEquals("WHICH HAS A PROPERTY pname1=val1 AND ( pname2 )", sfq.getChild(3).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(2); + final ParseTree filter = sfq.getChild(3); assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); - assertEquals("pname1=val1AND(pname2)", filter.getChild(1).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); + assertEquals("pname1=val1 AND ( pname2 )", filter.getChild(1).getText()); final ParseTree conjunction1 = filter.getChild(1); assertEquals(5, conjunction1.getChildCount()); - assertEquals("pname1=val1", conjunction1.getChild(0).getText()); - assertEquals("AND", conjunction1.getChild(1).getText()); - assertEquals("(", conjunction1.getChild(2).getText()); - assertEquals("pname2", conjunction1.getChild(3).getText()); + assertEquals("pname1=val1 ", conjunction1.getChild(0).getText()); + assertEquals("AND ", conjunction1.getChild(1).getText()); + assertEquals("( ", conjunction1.getChild(2).getText()); + assertEquals("pname2 ", conjunction1.getChild(3).getText()); assertEquals(")", conjunction1.getChild(4).getText()); final ParseTree sub = conjunction1.getChild(3); assertEquals(1, sub.getChildCount()); - assertEquals("pname2", sub.getChild(0).getText()); + assertEquals("pname2 ", sub.getChild(0).getText()); final ParseTree sub1 = sub.getChild(0); assertEquals(1, sub1.getChildCount()); - assertEquals("pname2", sub1.getChild(0).getText()); + assertEquals("pname2 ", sub1.getChild(0).getText()); assertNotNull(sfq.filter); assertEquals(Conjunction.class.getName(), sfq.filter.getClass().getName()); @@ -3469,14 +3459,14 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'ANDAPROPERTY(BarkleyModelSimulationWHICHHAS ATimeStep='0.0016')", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND A PROPERTY ( BarkleyModelSimulation WHICH HAS A TimeStep='0.0016')", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); assertNotNull(sfq.filter); @@ -3512,14 +3502,14 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYObstacleRadius='2.0'ANDAPROPERTY(BarkleyModelSimulationWHICHHASTimeStep='0.0016')", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ObstacleRadius = '2.0' AND A PROPERTY ( BarkleyModelSimulation WHICH HAS TimeStep='0.0016')", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); } @@ -3576,14 +3566,14 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, RECORD, entity, entity_filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, RECORD, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("ticket147_FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYticket147_ObstacleRadius='2.0'ANDAPROPERTY(ticket147_BarkleyModelSimulationWHICHHASticket147_TimeStep='0.0016')", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ticket147_ObstacleRadius = '2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS ticket147_TimeStep='0.0016')", + sfq.getChild(4).getText()); assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); } @@ -3604,7 +3594,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("'Some name with spaces and 1234 numbers'", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); @@ -3629,7 +3619,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("\"Some name with spaces and 1234 numbers\"", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); @@ -3654,7 +3644,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("'Some name with spaces and 1234 numbers and \"'", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); @@ -3680,7 +3670,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("'Some name with spaces and 1234 numbers and \\*'", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); @@ -3705,7 +3695,7 @@ public class TestCQL { // 3 children: FIND, entity, EOF assertEquals(3, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("'Some name with spaces and 1234 numbers and *'", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_LIKE, sfq.e.type); @@ -3714,7 +3704,7 @@ public class TestCQL { } /* - * String query28 = "FIND ename . pname=2.0"; + * String query28 = "FIND ename . pname=2.02"; */ @Test public void testQuery28() @@ -3727,20 +3717,21 @@ public class TestCQL { final CqContext sfq = parser.cq(); System.out.println(sfq.toStringTree(parser)); + assertEquals("POV(pname,=,2.02)", sfq.filter.toString()); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals(".pname=2.0", sfq.getChild(2).getText()); + assertEquals(". pname=2.02", sfq.getChild(3).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - assertEquals(2, sfq.getChild(2).getChildCount()); - assertEquals(".", sfq.getChild(2).getChild(0).getText()); - assertEquals("pname=2.0", sfq.getChild(2).getChild(1).getText()); - assertEquals(1, sfq.getChild(2).getChild(1).getChildCount()); - assertEquals("pname=2.0", sfq.getChild(2).getChild(1).getChild(0).getText()); - assertEquals("2.0", sfq.getChild(2).getChild(1).getChild(0).getChild(2).getText()); + assertEquals(2, sfq.getChild(3).getChildCount()); + assertEquals(". ", sfq.getChild(3).getChild(0).getText()); + assertEquals("pname=2.02", sfq.getChild(3).getChild(1).getText()); + assertEquals(1, sfq.getChild(3).getChild(1).getChildCount()); + assertEquals("pname=2.02", sfq.getChild(3).getChild(1).getChild(0).getText()); + assertEquals("2.02", sfq.getChild(3).getChild(1).getChild(0).getChild(2).getText()); } /* @@ -3757,58 +3748,88 @@ public class TestCQL { final CqContext sfq = parser.cq(); System.out.println(sfq.toStringTree(parser)); + assertEquals("POV(pname,=,2.0prop=test)", sfq.filter.toString()); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals(".pname=2.0prop=test", sfq.getChild(2).getText()); + assertEquals(". pname=2.0prop=test", sfq.getChild(3).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); + } - assertEquals(2, sfq.getChild(2).getChildCount()); - assertEquals(".", sfq.getChild(2).getChild(0).getText()); - assertEquals("pname=2.0prop=test", sfq.getChild(2).getChild(1).getText()); - assertEquals(2, sfq.getChild(2).getChild(1).getChildCount()); - assertEquals("pname=2", sfq.getChild(2).getChild(1).getChild(0).getText()); - assertEquals(".0prop=test", sfq.getChild(2).getChild(1).getChild(1).getText()); - assertEquals("2", sfq.getChild(2).getChild(1).getChild(0).getChild(2).getText()); - assertEquals(1, sfq.getChild(2).getChild(1).getChild(1).getChildCount()); - assertEquals(".0prop=test", sfq.getChild(2).getChild(1).getChild(1).getChild(0).getText()); - assertEquals(2, sfq.getChild(2).getChild(1).getChild(1).getChild(0).getChildCount()); - assertEquals(".", sfq.getChild(2).getChild(1).getChild(1).getChild(0).getChild(0).getText()); - assertEquals( - "0prop=test", - sfq.getChild(2).getChild(1).getChild(1).getChild(0).getChild(1).getChild(0).getText()); - assertEquals( - "0prop", - sfq.getChild(2) - .getChild(1) - .getChild(1) - .getChild(0) - .getChild(1) - .getChild(0) - .getChild(0) - .getText()); - assertEquals( - "=", - sfq.getChild(2) - .getChild(1) - .getChild(1) - .getChild(0) - .getChild(1) - .getChild(0) - .getChild(1) - .getText()); - assertEquals( - "test", - sfq.getChild(2) - .getChild(1) - .getChild(1) - .getChild(0) - .getChild(1) - .getChild(0) - .getChild(2) - .getText()); + /** String query28b = "FIND ename . pname = 1.02m"; */ + @Test + public void testQuery28b() + throws InterruptedException, SQLException, ConnectionException, QueryException { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query28b)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + assertEquals("POV(pname,=,1.02m)", sfq.filter.toString()); + + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("ename", sfq.getChild(1).getText()); + assertEquals(". pname = 1.02m", sfq.getChild(3).getText()); + assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); + + assertEquals(2, sfq.getChild(3).getChildCount()); + assertEquals(". ", sfq.getChild(3).getChild(0).getText()); + assertEquals("pname = 1.02m", sfq.getChild(3).getChild(1).getText()); + assertEquals(1, sfq.getChild(3).getChild(1).getChildCount()); + assertEquals("pname = 1.02m", sfq.getChild(3).getChild(1).getChild(0).getText()); + assertEquals("1.02m", sfq.getChild(3).getChild(1).getChild(0).getChild(3).getText()); + } + + /** String query28c = "FIND ename . pname = .02"; */ + @Test + public void testQuery28c() + throws InterruptedException, SQLException, ConnectionException, QueryException { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query28c)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + assertEquals("POV(pname,=,.02)", sfq.filter.toString()); + } + + /** String query28d = "FIND ename . pname =.02m"; */ + @Test + public void testQuery28d() + throws InterruptedException, SQLException, ConnectionException, QueryException { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query28d)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + assertEquals("POV(pname,=,.02m)", sfq.filter.toString()); + } + + /** String query28e = "FIND ename . pname =.02 1/m^2"; */ + @Test + public void testQuery28e() + throws InterruptedException, SQLException, ConnectionException, QueryException { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query28e)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + assertEquals("POV(pname,=,.02 1/m^2)", sfq.filter.toString()); } /* @@ -3828,45 +3849,45 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTY(BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016')ANDAPROPERTYMinPeakHeight='0.5'", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY ( BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016') AND A PROPERTY MinPeakHeight = '0.5'", + sfq.getChild(4).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); - // 2 children: WHICH, conjunction + final ParseTree filter = sfq.getChild(4); + // 2 children: WHICH , conjunction assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); assertEquals( - "(BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016')ANDAPROPERTYMinPeakHeight='0.5'", + "( BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016') AND A PROPERTY MinPeakHeight = '0.5'", filter.getChild(1).getText()); final ParseTree conjunction = filter.getChild(1); // 7 children: (, filter, ), AND, A, PROPERTY, filter assertEquals(7, conjunction.getChildCount()); - assertEquals("(", conjunction.getChild(0).getText()); + assertEquals("( ", conjunction.getChild(0).getText()); assertEquals( - "BarkleyModelSimulationWHICHHAS APROPERTYTimeStep='0.0016'", + "BarkleyModelSimulation WHICH HAS A PROPERTY TimeStep='0.0016'", conjunction.getChild(1).getText()); - assertEquals(")", conjunction.getChild(2).getText()); - assertEquals("AND", conjunction.getChild(3).getText()); - assertEquals("A", conjunction.getChild(4).getText()); - assertEquals("PROPERTY", conjunction.getChild(5).getText()); - assertEquals("MinPeakHeight='0.5'", conjunction.getChild(6).getText()); + assertEquals(") ", conjunction.getChild(2).getText()); + assertEquals("AND ", conjunction.getChild(3).getText()); + assertEquals("A ", conjunction.getChild(4).getText()); + assertEquals("PROPERTY ", conjunction.getChild(5).getText()); + assertEquals("MinPeakHeight = '0.5'", conjunction.getChild(6).getText()); final ParseTree pov1 = conjunction.getChild(1).getChild(0); - assertEquals("BarkleyModelSimulation", pov1.getText()); + assertEquals("BarkleyModelSimulation ", pov1.getText()); final ParseTree subp = conjunction.getChild(1).getChild(1); - assertEquals("WHICHHAS APROPERTYTimeStep='0.0016'", subp.getText()); + assertEquals("WHICH HAS A PROPERTY TimeStep='0.0016'", subp.getText()); final ParseTree pov2 = subp.getChild(0).getChild(1); assertEquals("TimeStep='0.0016'", pov2.getText()); final ParseTree pov3 = conjunction.getChild(6).getChild(0); - assertEquals("MinPeakHeight='0.5'", pov3.getText()); + assertEquals("MinPeakHeight = '0.5'", pov3.getText()); assertEquals(sfq.e.toString(), "FrequencyMeasurement"); assertEquals(sfq.r, Query.Role.RECORD); @@ -3901,44 +3922,44 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, role, entity, filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, role, entity, WHITE_SPACE, filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - ".(BarkleyModelSimulation.TimeStep='0.0016')ANDAPROPERTYMinPeakHeight='0.5'", - sfq.getChild(3).getText()); + ". ( BarkleyModelSimulation . TimeStep='0.0016') AND A PROPERTY MinPeakHeight = '0.5'", + sfq.getChild(4).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); - // 2 children: WHICH, conjunction + final ParseTree filter = sfq.getChild(4); + // 2 children: WHICH , conjunction assertEquals(2, filter.getChildCount()); - assertEquals(".", filter.getChild(0).getText()); + assertEquals(". ", filter.getChild(0).getText()); assertEquals( - "(BarkleyModelSimulation.TimeStep='0.0016')ANDAPROPERTYMinPeakHeight='0.5'", + "( BarkleyModelSimulation . TimeStep='0.0016') AND A PROPERTY MinPeakHeight = '0.5'", filter.getChild(1).getText()); final ParseTree conjunction = filter.getChild(1); // 7 children: (, filter, ), AND, A, PROPERTY, filter assertEquals(7, conjunction.getChildCount()); - assertEquals("(", conjunction.getChild(0).getText()); - assertEquals("BarkleyModelSimulation.TimeStep='0.0016'", conjunction.getChild(1).getText()); - assertEquals(")", conjunction.getChild(2).getText()); - assertEquals("AND", conjunction.getChild(3).getText()); - assertEquals("A", conjunction.getChild(4).getText()); - assertEquals("PROPERTY", conjunction.getChild(5).getText()); - assertEquals("MinPeakHeight='0.5'", conjunction.getChild(6).getText()); + assertEquals("( ", conjunction.getChild(0).getText()); + assertEquals("BarkleyModelSimulation . TimeStep='0.0016'", conjunction.getChild(1).getText()); + assertEquals(") ", conjunction.getChild(2).getText()); + assertEquals("AND ", conjunction.getChild(3).getText()); + assertEquals("A ", conjunction.getChild(4).getText()); + assertEquals("PROPERTY ", conjunction.getChild(5).getText()); + assertEquals("MinPeakHeight = '0.5'", conjunction.getChild(6).getText()); final ParseTree pov1 = conjunction.getChild(1).getChild(0); - assertEquals("BarkleyModelSimulation", pov1.getText()); + assertEquals("BarkleyModelSimulation ", pov1.getText()); final ParseTree subp = conjunction.getChild(1).getChild(1); - assertEquals(".TimeStep='0.0016'", subp.getText()); + assertEquals(". TimeStep='0.0016'", subp.getText()); final ParseTree pov2 = subp.getChild(0).getChild(1); assertEquals("TimeStep='0.0016'", pov2.getText()); final ParseTree pov3 = conjunction.getChild(6).getChild(0); - assertEquals("MinPeakHeight='0.5'", pov3.getText()); + assertEquals("MinPeakHeight = '0.5'", pov3.getText()); assertEquals(sfq.e.toString(), "FrequencyMeasurement"); assertEquals(sfq.r, Query.Role.RECORD); @@ -3972,47 +3993,47 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 5 children: FIND, role, entity, filter, EOF - assertEquals(5, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + // 6 children: FIND, role, entity, WHITE_SPACE, filter, EOF + assertEquals(6, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); assertEquals("FrequencyMeasurement", sfq.getChild(2).getText()); assertEquals( - "WHICHHAS APROPERTYMinPeakHeight='0.5'ANDAPROPERTY(BarkleyModelSimulation.TimeStep='0.0016')", - sfq.getChild(3).getText()); + "WHICH HAS A PROPERTY MinPeakHeight = '0.5' AND A PROPERTY ( BarkleyModelSimulation . TimeStep='0.0016')", + sfq.getChild(4).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(3); - // 2 children: WHICH, conjunction, + final ParseTree filter = sfq.getChild(4); + // 2 children: WHICH , conjunction, assertEquals(2, filter.getChildCount()); - assertEquals("WHICHHAS APROPERTY", filter.getChild(0).getText()); + assertEquals("WHICH HAS A PROPERTY ", filter.getChild(0).getText()); assertEquals( - "MinPeakHeight='0.5'ANDAPROPERTY(BarkleyModelSimulation.TimeStep='0.0016')", + "MinPeakHeight = '0.5' AND A PROPERTY ( BarkleyModelSimulation . TimeStep='0.0016')", filter.getChild(1).getText()); final ParseTree conjunction = filter.getChild(1); // 7 children: filter_exp, AND, A, PROPERTY, (, filter_exp, ) assertEquals(7, conjunction.getChildCount()); - assertEquals("MinPeakHeight='0.5'", conjunction.getChild(0).getText()); - assertEquals("AND", conjunction.getChild(1).getText()); - assertEquals("A", conjunction.getChild(2).getText()); - assertEquals("PROPERTY", conjunction.getChild(3).getText()); - assertEquals("(", conjunction.getChild(4).getText()); - assertEquals("BarkleyModelSimulation.TimeStep='0.0016'", conjunction.getChild(5).getText()); + assertEquals("MinPeakHeight = '0.5' ", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(1).getText()); + assertEquals("A ", conjunction.getChild(2).getText()); + assertEquals("PROPERTY ", conjunction.getChild(3).getText()); + assertEquals("( ", conjunction.getChild(4).getText()); + assertEquals("BarkleyModelSimulation . TimeStep='0.0016'", conjunction.getChild(5).getText()); assertEquals(")", conjunction.getChild(6).getText()); final ParseTree pov1 = conjunction.getChild(0).getChild(0); - assertEquals(3, pov1.getChildCount()); - assertEquals("MinPeakHeight", pov1.getChild(0).getText()); + assertEquals(4, pov1.getChildCount()); + assertEquals("MinPeakHeight ", pov1.getChild(0).getText()); assertEquals("=", pov1.getChild(1).getText()); - assertEquals("'0.5'", pov1.getChild(2).getText()); + assertEquals("'0.5' ", pov1.getChild(3).getText()); final ParseTree ref = conjunction.getChild(5); assertEquals(2, ref.getChildCount()); - assertEquals("BarkleyModelSimulation", ref.getChild(0).getText()); - assertEquals(".TimeStep='0.0016'", ref.getChild(1).getText()); + assertEquals("BarkleyModelSimulation ", ref.getChild(0).getText()); + assertEquals(". TimeStep='0.0016'", ref.getChild(1).getText()); // this is a pov final ParseTree subp = ref.getChild(1).getChild(0).getChild(1).getChild(0); @@ -4034,25 +4055,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHpnameIS NULL", sfq.getChild(2).getText()); + assertEquals("WHICH pname IS NULL", sfq.getChild(3).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(2); - // 2 children: WHICH, pov, + final ParseTree filter = sfq.getChild(3); + // 2 children: WHICH , pov, assertEquals(2, filter.getChildCount()); - assertEquals("WHICH", filter.getChild(0).getText()); - assertEquals("pnameIS NULL", filter.getChild(1).getText()); + assertEquals("WHICH ", filter.getChild(0).getText()); + assertEquals("pname IS NULL", filter.getChild(1).getText()); final ParseTree conjunction = filter.getChild(1).getChild(0); // 2 children: pname, IS_NOT_NULL assertEquals(2, conjunction.getChildCount()); - assertEquals("pname", conjunction.getChild(0).getText()); + assertEquals("pname ", conjunction.getChild(0).getText()); assertEquals("IS NULL", conjunction.getChild(1).getText()); assertEquals("POV(pname,0,null)", sfq.filter.toString()); } @@ -4069,25 +4090,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHpnameIS NOT NULL", sfq.getChild(2).getText()); + assertEquals("WHICH pname IS NOT NULL", sfq.getChild(3).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); - final ParseTree filter = sfq.getChild(2); - // 2 children: WHICH, pov, + final ParseTree filter = sfq.getChild(3); + // 2 children: WHICH , pov, assertEquals(2, filter.getChildCount()); - assertEquals("WHICH", filter.getChild(0).getText()); - assertEquals("pnameIS NOT NULL", filter.getChild(1).getText()); + assertEquals("WHICH ", filter.getChild(0).getText()); + assertEquals("pname IS NOT NULL", filter.getChild(1).getText()); final ParseTree conjunction = filter.getChild(1).getChild(0); // 2 children: pname, IS_NOT_NULL assertEquals(2, conjunction.getChildCount()); - assertEquals("pname", conjunction.getChild(0).getText()); + assertEquals("pname ", conjunction.getChild(0).getText()); assertEquals("IS NOT NULL", conjunction.getChild(1).getText()); assertEquals("POV(pname,!0,null)", sfq.filter.toString()); } @@ -4104,12 +4125,6 @@ public class TestCQL { final String on, final String date) { - if (neg && !sugar.contains("N'T")) { - sugar = sugar.replaceFirst("\\s", ""); - } - if (someone_else != null) { - someone_else = someone_else.replace(" ", ""); - } CQLLexer lexer; lexer = new CQLLexer(CharStreams.fromString(query)); final CommonTokenStream tokens = new CommonTokenStream(lexer); @@ -4117,20 +4132,22 @@ public class TestCQL { final CQLParser parser = new CQLParser(tokens); final CqContext sfq = parser.cq(); - // 4 children: FIND, ename, FILTER, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, FILTER, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals( - "WHICH" + "WHICH " + sugar + + " " + transaction + + " " + (by != null ? by : "") - + (someone_else != null ? someone_else : "") - + (but != null ? but : "") - + (person != null ? person : "") - + (on != null ? on + date : ""), - sfq.getChild(2).getText()); + + (someone_else != null ? " " + someone_else : "") + + (but != null ? " " + but : "") + + (person != null ? " " + person : "") + + (on != null ? " " + on + " " + date : ""), + sfq.getChild(3).getText()); } @Test @@ -4298,26 +4315,27 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); // 4 children: FIND, entity, filter, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("RECORD", sfq.getChild(1).getText()); - assertEquals(".CREATEDBY'henrik.tomwoerden'ANDTHEGREATESTID", sfq.getChild(2).getText()); + assertEquals(".CREATED BY 'henrik.tomwoerden' AND THE GREATEST ID", sfq.getChild(2).getText()); assertNull(sfq.e); + assertEquals(4, sfq.getChildCount()); final ParseTree filter = sfq.getChild(2); - // 2 children: WHICH, conjunction, + // 2 children: WHICH , conjunction, assertEquals(2, filter.getChildCount()); assertEquals(".", filter.getChild(0).getText()); - assertEquals("CREATEDBY'henrik.tomwoerden'ANDTHEGREATESTID", filter.getChild(1).getText()); + assertEquals( + "CREATED BY 'henrik.tomwoerden' AND THE GREATEST ID", filter.getChild(1).getText()); final ParseTree conjunction = filter.getChild(1); - // 3 children: transaction, AND, id_filter - assertEquals(3, conjunction.getChildCount()); - assertEquals("CREATEDBY'henrik.tomwoerden'", conjunction.getChild(0).getText()); - assertEquals("AND", conjunction.getChild(1).getText()); - assertEquals("THEGREATESTID", conjunction.getChild(2).getText()); + // 4 children: transaction, WHITE_SPACE, AND, id_filter + assertEquals(4, conjunction.getChildCount()); + assertEquals("CREATED BY 'henrik.tomwoerden'", conjunction.getChild(0).getText()); + assertEquals("AND ", conjunction.getChild(2).getText()); + assertEquals("THE GREATEST ID", conjunction.getChild(3).getText()); } /** String query31 = "FIND PROPERTIES WHICH ARE INSERTED TODAY"; */ @@ -4334,22 +4352,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("PROPERTIES", sfq.getChild(1).getText()); - assertEquals("WHICHWEREINSERTEDTODAY", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("PROPERTIES ", sfq.getChild(1).getText()); + assertEquals("WHICH WERE INSERTED TODAY", sfq.getChild(2).getText()); assertEquals(null, sfq.e); assertEquals(Query.Role.PROPERTY, sfq.r); assertEquals("TransactionFilter", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, transaction + // 2 children: WHICH , transaction assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICHWERE", whichclause.getChild(0).getText()); - assertEquals("INSERTEDTODAY", whichclause.getChild(1).getText()); + assertEquals("WHICH WERE ", whichclause.getChild(0).getText()); + assertEquals("INSERTED TODAY", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("INSERTED", transactionFilter.getChild(0).getText()); + assertEquals("INSERTED ", transactionFilter.getChild(0).getText()); assertEquals("TODAY", transactionFilter.getChild(1).getText()); } @@ -4368,7 +4386,7 @@ public class TestCQL { // 4 children: FIND, EMPTY_SPACE, entity, entity_filter assertEquals(4, sfq.getChildCount()); - assertEquals("COUNT", sfq.getChild(0).getText()); + assertEquals("COUNT ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); assertEquals(Pattern.TYPE_NORMAL, sfq.e.type); @@ -4421,16 +4439,16 @@ public class TestCQL { // 4 children: FIND, EMPTY_SPACE, entity, entity_filter assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("Entity", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("Entity ", sfq.getChild(1).getText()); // entity_filter - assertEquals(".pname=2.0", sfq.getChild(2).getText()); + assertEquals(". pname=2.0", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals(".", entity_filter.getChild(0).getText()); + assertEquals(". ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname=2.0", entity_filter.getChild(1).getText()); @@ -4475,35 +4493,36 @@ public class TestCQL { // 4 children: FIND, RECORD, entity_filter, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("Record", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("Record ", sfq.getChild(1).getText()); // entity_filter assertEquals( - "WHICHIS REFERENCEDBYannotationWITHcomment='blablabla'", sfq.getChild(2).getText()); + "WHICH IS REFERENCED BY annotation WITH comment='blablabla'", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, filter assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); // filter assertEquals( - "IS REFERENCEDBYannotationWITHcomment='blablabla'", entity_filter.getChild(1).getText()); + "IS REFERENCED BY annotation WITH comment='blablabla'", + entity_filter.getChild(1).getText()); final ParseTree filter = entity_filter.getChild(1); // 2 children: backref, subproperty assertEquals(2, filter.getChildCount()); - assertEquals("IS REFERENCEDBYannotation", filter.getChild(0).getText()); - assertEquals("WITHcomment='blablabla'", filter.getChild(1).getText()); + assertEquals("IS REFERENCED BY annotation ", filter.getChild(0).getText()); + assertEquals("WITH comment='blablabla'", filter.getChild(1).getText()); // backref final ParseTree backref = filter.getChild(0); // 3 children: IS_REFERENCED, BY, entity - assertEquals(3, backref.getChildCount()); - assertEquals("IS REFERENCED", backref.getChild(0).getText()); - assertEquals("BY", backref.getChild(1).getText()); + assertEquals(4, backref.getChildCount()); + assertEquals("IS REFERENCED ", backref.getChild(0).getText()); + assertEquals("BY ", backref.getChild(1).getText()); assertEquals("annotation", backref.getChild(2).getText()); // subproperty @@ -4511,14 +4530,14 @@ public class TestCQL { // 1 children: subquery assertEquals(1, subp.getChildCount()); - assertEquals("WITHcomment='blablabla'", subp.getChild(0).getText()); + assertEquals("WITH comment='blablabla'", subp.getChild(0).getText()); // subquery final ParseTree subquery = subp.getChild(0); // 2 children: WHICH_EXP filter assertEquals(2, subquery.getChildCount()); - assertEquals("WITH", subquery.getChild(0).getText()); + assertEquals("WITH ", subquery.getChild(0).getText()); assertEquals("comment='blablabla'", subquery.getChild(1).getText()); assertEquals(Query.Role.RECORD, sfq.r); @@ -4547,16 +4566,16 @@ public class TestCQL { // 4 children: FIND, EMPTY_SPACE, entity, entity_filter assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("Entity", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("Entity ", sfq.getChild(1).getText()); // entity_filter - assertEquals("WITHpname=-1", sfq.getChild(2).getText()); + assertEquals("WITH pname=-1", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WITH", entity_filter.getChild(0).getText()); + assertEquals("WITH ", entity_filter.getChild(0).getText()); // conjunction assertEquals("pname=-1", entity_filter.getChild(1).getText()); @@ -4600,32 +4619,32 @@ public class TestCQL { // 4 children: FIND, EMPTY_SPACE, entity, entity_filter assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("RECORD", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("RECORD ", sfq.getChild(1).getText()); // entity_filter - assertEquals("WHICH->10594", sfq.getChild(2).getText()); + assertEquals("WHICH -> 10594", sfq.getChild(2).getText()); final ParseTree entity_filter = sfq.getChild(2); // 2 children: WHICH_EXP, conjunction assertEquals(2, entity_filter.getChildCount()); - assertEquals("WHICH", entity_filter.getChild(0).getText()); + assertEquals("WHICH ", entity_filter.getChild(0).getText()); // conjunction - assertEquals("->10594", entity_filter.getChild(1).getText()); + assertEquals("-> 10594", entity_filter.getChild(1).getText()); final ParseTree conjunction = entity_filter.getChild(1); // 1 child: pov assertEquals(1, conjunction.getChildCount()); - assertEquals("->10594", conjunction.getChild(0).getText()); + assertEquals("-> 10594", conjunction.getChild(0).getText()); // pov final ParseTree pov1 = conjunction.getChild(0); - // 2 children: (no property), operator, value - assertEquals(2, pov1.getChildCount()); + // 3 children: (no property), operator, WHITE_SPACE, value + assertEquals(3, pov1.getChildCount()); assertEquals("->", pov1.getChild(0).getText()); - assertEquals("10594", pov1.getChild(1).getText()); + assertEquals("10594", pov1.getChild(2).getText()); assertEquals(Query.Role.RECORD, sfq.r); assertNotNull(sfq.filter); @@ -4650,25 +4669,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WITHadateIN2015", sfq.getChild(2).getText()); + assertEquals("WITH a date IN 2015", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, transaction + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , transaction assertEquals(2, whichclause.getChildCount()); - assertEquals("WITHa", whichclause.getChild(0).getText()); - assertEquals("dateIN2015", whichclause.getChild(1).getText()); + assertEquals("WITH a ", whichclause.getChild(0).getText()); + assertEquals("date IN 2015", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("date", transactionFilter.getChild(0).getText()); - assertEquals("IN", transactionFilter.getChild(1).getText()); + assertEquals("date ", transactionFilter.getChild(0).getText()); + assertEquals("IN ", transactionFilter.getChild(1).getText()); assertEquals("2015", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -4689,25 +4708,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, role, WHITE_SPACE, WHICHCLAUSE, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WITHadateIN\"2015\"", sfq.getChild(2).getText()); + assertEquals("WITH a date IN \"2015\"", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children; WHICH, transaction + final ParseTree whichclause = sfq.getChild(3); + // 2 children; WHICH , transaction assertEquals(2, whichclause.getChildCount()); - assertEquals("WITHa", whichclause.getChild(0).getText()); - assertEquals("dateIN\"2015\"", whichclause.getChild(1).getText()); + assertEquals("WITH a ", whichclause.getChild(0).getText()); + assertEquals("date IN \"2015\"", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("date", transactionFilter.getChild(0).getText()); - assertEquals("IN", transactionFilter.getChild(1).getText()); + assertEquals("date ", transactionFilter.getChild(0).getText()); + assertEquals("IN ", transactionFilter.getChild(1).getText()); assertEquals("\"2015\"", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -4728,26 +4747,26 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WITHadateNOTIN2015", sfq.getChild(2).getText()); + assertEquals("WITH a date NOT IN 2015", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WITHa", whichclause.getChild(0).getText()); - assertEquals("dateNOTIN2015", whichclause.getChild(1).getText()); + assertEquals("WITH a ", whichclause.getChild(0).getText()); + assertEquals("date NOT IN 2015", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(4, transactionFilter.getChildCount()); - assertEquals("date", transactionFilter.getChild(0).getText()); - assertEquals("NOT", transactionFilter.getChild(1).getText()); - assertEquals("IN", transactionFilter.getChild(2).getText()); + assertEquals("date ", transactionFilter.getChild(0).getText()); + assertEquals("NOT ", transactionFilter.getChild(1).getText()); + assertEquals("IN ", transactionFilter.getChild(2).getText()); assertEquals("2015", transactionFilter.getChild(3).getText()); assertTrue(sfq.filter instanceof POV); @@ -4768,26 +4787,26 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, role, WHITE_SPACE, WHICHCLAUSE, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WITHadateNOTIN\"2015\"", sfq.getChild(2).getText()); + assertEquals("WITH a date NOT IN \"2015\"", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WITHa", whichclause.getChild(0).getText()); - assertEquals("dateNOTIN\"2015\"", whichclause.getChild(1).getText()); + assertEquals("WITH a ", whichclause.getChild(0).getText()); + assertEquals("date NOT IN \"2015\"", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(4, transactionFilter.getChildCount()); - assertEquals("date", transactionFilter.getChild(0).getText()); - assertEquals("NOT", transactionFilter.getChild(1).getText()); - assertEquals("IN", transactionFilter.getChild(2).getText()); + assertEquals("date ", transactionFilter.getChild(0).getText()); + assertEquals("NOT ", transactionFilter.getChild(1).getText()); + assertEquals("IN ", transactionFilter.getChild(2).getText()); assertEquals("\"2015\"", transactionFilter.getChild(3).getText()); assertTrue(sfq.filter instanceof POV); @@ -4808,25 +4827,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WITHadateIN2015-01-01", sfq.getChild(2).getText()); + assertEquals("WITH a date IN 2015-01-01", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WITHa", whichclause.getChild(0).getText()); - assertEquals("dateIN2015-01-01", whichclause.getChild(1).getText()); + assertEquals("WITH a ", whichclause.getChild(0).getText()); + assertEquals("date IN 2015-01-01", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("date", transactionFilter.getChild(0).getText()); - assertEquals("IN", transactionFilter.getChild(1).getText()); + assertEquals("date ", transactionFilter.getChild(0).getText()); + assertEquals("IN ", transactionFilter.getChild(1).getText()); assertEquals("2015-01-01", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -4847,25 +4866,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, role, WHITE_SPACE, WHICHCLAUSE, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WITHadateIN\"2015-01-01\"", sfq.getChild(2).getText()); + assertEquals("WITH a date IN \"2015-01-01\"", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WITHa", whichclause.getChild(0).getText()); - assertEquals("dateIN\"2015-01-01\"", whichclause.getChild(1).getText()); + assertEquals("WITH a ", whichclause.getChild(0).getText()); + assertEquals("date IN \"2015-01-01\"", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("date", transactionFilter.getChild(0).getText()); - assertEquals("IN", transactionFilter.getChild(1).getText()); + assertEquals("date ", transactionFilter.getChild(0).getText()); + assertEquals("IN ", transactionFilter.getChild(1).getText()); assertEquals("\"2015-01-01\"", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -4888,23 +4907,23 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals(".pnameLIKE\"wil*card\"", sfq.getChild(2).getText()); + assertEquals(".pname LIKE \"wil*card\"", sfq.getChild(2).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); assertEquals(".", whichclause.getChild(0).getText()); - assertEquals("pnameLIKE\"wil*card\"", whichclause.getChild(1).getText()); + assertEquals("pname LIKE \"wil*card\"", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("pname", transactionFilter.getChild(0).getText()); - assertEquals("LIKE", transactionFilter.getChild(1).getText()); + assertEquals("pname ", transactionFilter.getChild(0).getText()); + assertEquals("LIKE ", transactionFilter.getChild(1).getText()); assertEquals("\"wil*card\"", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -4927,23 +4946,23 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals(".pnameLIKEwil*card", sfq.getChild(2).getText()); + assertEquals(".pname LIKE wil*card", sfq.getChild(2).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); assertEquals(".", whichclause.getChild(0).getText()); - assertEquals("pnameLIKEwil*card", whichclause.getChild(1).getText()); + assertEquals("pname LIKE wil*card", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("pname", transactionFilter.getChild(0).getText()); - assertEquals("LIKE", transactionFilter.getChild(1).getText()); + assertEquals("pname ", transactionFilter.getChild(0).getText()); + assertEquals("LIKE ", transactionFilter.getChild(1).getText()); assertEquals("wil*card", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -4964,25 +4983,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, ename, WHITE_SPACE, WHICHCLAUSE, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHHAS ApnameLIKE\"wil*\"", sfq.getChild(2).getText()); + assertEquals("WHICH HAS A pname LIKE \"wil*\"", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICHHAS A", whichclause.getChild(0).getText()); - assertEquals("pnameLIKE\"wil*\"", whichclause.getChild(1).getText()); + assertEquals("WHICH HAS A ", whichclause.getChild(0).getText()); + assertEquals("pname LIKE \"wil*\"", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("pname", transactionFilter.getChild(0).getText()); - assertEquals("LIKE", transactionFilter.getChild(1).getText()); + assertEquals("pname ", transactionFilter.getChild(0).getText()); + assertEquals("LIKE ", transactionFilter.getChild(1).getText()); assertEquals("\"wil*\"", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -5003,25 +5022,25 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHHAS ApnameLIKEwil*", sfq.getChild(2).getText()); + assertEquals("WHICH HAS A pname LIKE wil*", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICHHAS A", whichclause.getChild(0).getText()); - assertEquals("pnameLIKEwil*", whichclause.getChild(1).getText()); + assertEquals("WHICH HAS A ", whichclause.getChild(0).getText()); + assertEquals("pname LIKE wil*", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(3, transactionFilter.getChildCount()); - assertEquals("pname", transactionFilter.getChild(0).getText()); - assertEquals("LIKE", transactionFilter.getChild(1).getText()); + assertEquals("pname ", transactionFilter.getChild(0).getText()); + assertEquals("LIKE ", transactionFilter.getChild(1).getText()); assertEquals("wil*", transactionFilter.getChild(2).getText()); assertTrue(sfq.filter instanceof POV); @@ -5042,26 +5061,26 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, role, WHICHCLAUSE, EOF - assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); + // 5 children: FIND, entity, WHITE_SPACE, entity_filter, EOF + assertEquals(5, sfq.getChildCount()); + assertEquals("FIND ", sfq.getChild(0).getText()); assertEquals("ename", sfq.getChild(1).getText()); - assertEquals("WHICHHAS Apname=wil*", sfq.getChild(2).getText()); + assertEquals("WHICH HAS A pname = wil*", sfq.getChild(3).getText()); assertEquals("ename", sfq.e.toString()); assertNull(sfq.r); assertEquals("POV", sfq.filter.getClass().getSimpleName()); - final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + final ParseTree whichclause = sfq.getChild(3); + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICHHAS A", whichclause.getChild(0).getText()); - assertEquals("pname=wil*", whichclause.getChild(1).getText()); + assertEquals("WHICH HAS A ", whichclause.getChild(0).getText()); + assertEquals("pname = wil*", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); - assertEquals(3, transactionFilter.getChildCount()); - assertEquals("pname", transactionFilter.getChild(0).getText()); + assertEquals(4, transactionFilter.getChildCount()); + assertEquals("pname ", transactionFilter.getChild(0).getText()); assertEquals("=", transactionFilter.getChild(1).getText()); - assertEquals("wil*", transactionFilter.getChild(2).getText()); + assertEquals("wil*", transactionFilter.getChild(3).getText()); assertTrue(sfq.filter instanceof POV); final POV pov = (POV) sfq.filter; @@ -5083,22 +5102,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/data/bla.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /data/bla.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/data/bla.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /data/bla.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/data/bla.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5120,22 +5139,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/*", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /*", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/*", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /*", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/*", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5158,22 +5177,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/*/", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /*/", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/*/", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /*/", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/*/", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5196,22 +5215,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/**/", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /**/", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/**/", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /**/", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/**/", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5233,22 +5252,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/**/*", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /**/*", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/**/*", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /**/*", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/**/*", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5270,22 +5289,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/*/*", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /*/*", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/*/*", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /*/*", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/*/*", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5307,22 +5326,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/*/*.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /*/*.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/*/*.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /*/*.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/*/*.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5344,22 +5363,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/**/*.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /**/*.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/**/*.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /**/*.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/**/*.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5381,22 +5400,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/*.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /*.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/*.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /*.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/*.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5418,22 +5437,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT*.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT *.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT*.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT *.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("*.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5455,22 +5474,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT*", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT *", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT*", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT *", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("*", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5600,22 +5619,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT*%.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT *%.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT*%.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT *%.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("*%.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5637,22 +5656,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT*\\*.acq", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT *\\*.acq", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT*\\*.acq", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT *\\*.acq", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("*\\*.acq", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -5688,8 +5707,8 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - assertTrue(sfq.filter instanceof TransactionFilter); assertEquals("TRANS(Insert,null,Transactor(some.user,=))", sfq.filter.toString()); + assertTrue(sfq.filter instanceof TransactionFilter); } /** String ticket262a = "COUNT FILE which is not referenced"; */ @@ -5874,6 +5893,21 @@ public class TestCQL { final CqContext sfq = parser.cq(); System.out.println(sfq.toStringTree(parser)); + assertEquals(4, sfq.getChildCount()); + assertEquals( + "WHICH IS NOT REFERENCED BY AN entity WHICH WAS created by me", sfq.getChild(2).getText()); + + ParseTree filter = sfq.getChild(2).getChild(1); + assertEquals(1, filter.getChildCount()); + ParseTree negation = filter.getChild(0); + assertEquals(2, negation.getChildCount()); + assertEquals("NOT ", negation.getChild(0).getText()); + assertEquals("REFERENCED BY AN entity WHICH WAS created by me", negation.getChild(1).getText()); + ParseTree refereced = negation.getChild(1).getChild(0); + assertEquals("REFERENCED ", refereced.getChild(0).getText()); + assertEquals("BY ", refereced.getChild(1).getText()); + assertEquals("AN ", refereced.getChild(2).getText()); + assertEquals("entity ", refereced.getChild(3).getText()); assertTrue(sfq.filter instanceof Negation); final EntityFilterInterface backref = ((Negation) sfq.filter).getFilter(); @@ -6127,22 +6161,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/dir/with/date/2016-05-15", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /dir/with/date/2016-05-15", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/dir/with/date/2016-05-15", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /dir/with/date/2016-05-15", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/dir/with/date/2016-05-15", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -6162,22 +6196,22 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); - assertEquals("WHICHIS STORED AT/dir/with/date/2016-05-15/**", sfq.getChild(2).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); + assertEquals("WHICH IS STORED AT /dir/with/date/2016-05-15/**", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); - assertEquals("IS STORED AT/dir/with/date/2016-05-15/**", whichclause.getChild(1).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); + assertEquals("IS STORED AT /dir/with/date/2016-05-15/**", whichclause.getChild(1).getText()); final ParseTree transactionFilter = whichclause.getChild(1).getChild(0); assertEquals(2, transactionFilter.getChildCount()); - assertEquals("IS STORED AT", transactionFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", transactionFilter.getChild(0).getText()); assertEquals("/dir/with/date/2016-05-15/**", transactionFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -6320,25 +6354,26 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); assertEquals( - "WHICHIS STORED AT'/SimulationData/2016_single/2018-01-10/**'", sfq.getChild(2).getText()); + "WHICH IS STORED AT '/SimulationData/2016_single/2018-01-10/**'", + sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); assertEquals( - "IS STORED AT'/SimulationData/2016_single/2018-01-10/**'", + "IS STORED AT '/SimulationData/2016_single/2018-01-10/**'", whichclause.getChild(1).getText()); final ParseTree satFilter = whichclause.getChild(1).getChild(0); assertEquals(2, satFilter.getChildCount()); - assertEquals("IS STORED AT", satFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", satFilter.getChild(0).getText()); assertEquals("'/SimulationData/2016_single/2018-01-10/**'", satFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -6357,24 +6392,25 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("FIND", sfq.getChild(0).getText()); - assertEquals("FILE", sfq.getChild(1).getText()); + assertEquals("FIND ", sfq.getChild(0).getText()); + assertEquals("FILE ", sfq.getChild(1).getText()); assertEquals( - "WHICHIS STORED AT/SimulationData/2016_single/2018-01-10/**", sfq.getChild(2).getText()); + "WHICH IS STORED AT /SimulationData/2016_single/2018-01-10/**", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); - // 2 children: WHICH, POV + // 2 children: WHICH , POV assertEquals(2, whichclause.getChildCount()); - assertEquals("WHICH", whichclause.getChild(0).getText()); + assertEquals("WHICH ", whichclause.getChild(0).getText()); assertEquals( - "IS STORED AT/SimulationData/2016_single/2018-01-10/**", whichclause.getChild(1).getText()); + "IS STORED AT /SimulationData/2016_single/2018-01-10/**", + whichclause.getChild(1).getText()); final ParseTree satFilter = whichclause.getChild(1).getChild(0); assertEquals(2, satFilter.getChildCount()); - assertEquals("IS STORED AT", satFilter.getChild(0).getText()); + assertEquals("IS STORED AT ", satFilter.getChild(0).getText()); assertEquals("/SimulationData/2016_single/2018-01-10/**", satFilter.getChild(1).getText()); assertTrue(sfq.filter instanceof StoredAt); @@ -6396,8 +6432,7 @@ public class TestCQL { } /** String queryIssue31 = "FIND FILE WHICH IS STORED AT /data/in0.foo"; */ - // FIXME Remove "expected" annotation. - @Test(expected = AssertionError.class) + @Test public void testIssue31() { CQLLexer lexer; lexer = new CQLLexer(CharStreams.fromString(this.queryIssue31)); @@ -6410,7 +6445,7 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("WHICHIS STORED AT/data/in0.foo", sfq.getChild(2).getText()); + assertEquals("WHICH IS STORED AT /data/in0.foo", sfq.getChild(2).getText()); assertEquals("FILE", sfq.r.toString()); assertNull(sfq.e); assertEquals("StoredAt", sfq.filter.getClass().getSimpleName()); @@ -6441,14 +6476,14 @@ public class TestCQL { // 4 children: FIND, role, WHICHCLAUSE, EOF assertEquals(4, sfq.getChildCount()); - assertEquals("WITH((p0=v0ORp1=v1)ANDp2=v2)", sfq.getChild(2).getText()); + assertEquals("WITH ((p0 = v0 OR p1=v1) AND p2=v2)", sfq.getChild(2).getText()); assertEquals("ENTITY", sfq.r.toString()); assertEquals("Conjunction", sfq.filter.getClass().getSimpleName()); final ParseTree whichclause = sfq.getChild(2); final ParseTree conjunction = whichclause.getChild(2); - assertEquals("(p0=v0ORp1=v1)ANDp2=v2", conjunction.getText()); + assertEquals("(p0 = v0 OR p1=v1) AND p2=v2", conjunction.getText()); final ParseTree disjunction = conjunction.getChild(1); - assertEquals("p0=v0ORp1=v1", disjunction.getText()); + assertEquals("p0 = v0 OR p1=v1", disjunction.getText()); final ParseTree pov = conjunction.getChild(4); assertEquals("p2=v2", pov.getText()); } @@ -6465,10 +6500,190 @@ public class TestCQL { System.out.println(sfq.toStringTree(parser)); - // 4 children: FIND, version, role, entity, EOF + // 5 children: FIND, version, role, entity, EOF assertEquals(5, sfq.getChildCount()); assertEquals(VersionFilter.ANY_VERSION, sfq.v); assertEquals(Query.Role.ENTITY, sfq.r); assertEquals("e1", sfq.e.toString()); } + + /** String query57a = "FIND ENTITY"; */ + @Test + public void testQuery57a() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query57a)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + // 3 children: FIND, ENTITY, EOF + assertEquals(3, sfq.getChildCount()); + assertEquals(Query.Role.ENTITY, sfq.r); + assertNull(sfq.e); + } + + /** String query57b = "FIND ENTITY WITH ID"; */ + @Test + public void testQuery57b() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query57b)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + // 4 children: FIND, ENTITY, WHICHCLAUSE, EOF + assertEquals(4, sfq.getChildCount()); + assertEquals(Query.Role.ENTITY, sfq.r); + assertNull(sfq.e); + assertEquals("WITH ID", sfq.getChild(2).getText()); + } + + /** String query57c = "FIND ENTITY WITH ID = 123"; */ + @Test + public void testQuery57c() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query57c)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + // 4 children: FIND, ENTITY, WHICHCLAUSE, EOF + assertEquals(4, sfq.getChildCount()); + assertEquals(Query.Role.ENTITY, sfq.r); + assertNull(sfq.e); + assertEquals("WITH ID = 123", sfq.getChild(2).getText()); + } + + /** String queryIssue116 = "FIND *"; */ + @Test + public void testIssue116() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.queryIssue116)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + // 3 children: FIND, ENTITY, EOF + assertEquals(3, sfq.getChildCount()); + assertNull(sfq.r); + assertTrue(sfq.e.type == Query.Pattern.TYPE_LIKE); + assertEquals("%", sfq.e.toString()); + } + + /** String query54e = "SELECT id FROM ename"; */ + @Test + public void testQuery54e() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query54e)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertEquals(5, sfq.getChildCount()); + assertEquals("SELECT ", sfq.getChild(0).getText()); + assertEquals("id ", sfq.getChild(1).getText()); + assertEquals("FROM ", sfq.getChild(2).getText()); + assertEquals("ename", sfq.getChild(3).getText()); + assertEquals(Query.Pattern.TYPE_NORMAL, sfq.e.type); + assertEquals("ename", sfq.e.toString()); + assertNull(sfq.r); + assertEquals(Query.Type.FIND, sfq.t); + assertNotNull(sfq.s); + assertFalse(sfq.s.isEmpty()); + assertEquals(1, sfq.s.size()); + assertEquals("id", sfq.s.get(0).toString()); + } + + /** String query58a = "FIND ENTITY WITH endswith"; */ + @Test + public void testQuery58a() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query58a)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertEquals("POV(endswith,null,null)", sfq.filter.toString()); + } + + /** String query58b = "FIND ENTITY WITH endswith = val1"; */ + @Test + public void testQuery58b() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query58b)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertEquals("POV(endswith,=,val1)", sfq.filter.toString()); + } + + /** String query58c = "FIND ENTITY WITH 0with = val1"; */ + @Test + public void testQuery58c() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query58c)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertNull(((POV) sfq.filter).getSubProperty()); + assertEquals("POV(0with,=,val1)", sfq.filter.toString()); + } + + /** String query58d = "FIND ENTITY WITH WITH"; */ + @Test + public void testQuery58d() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query58d)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertEquals("POV(withdrawn,=,TRUE)", sfq.filter.toString()); + assertNull(((POV) sfq.filter).getSubProperty()); + } + + /** String query58e = "FIND ENTITY WITH pname=with"; */ + @Test + public void testQuery58e() { + CQLLexer lexer; + lexer = new CQLLexer(CharStreams.fromString(this.query58e)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + + final CQLParser parser = new CQLParser(tokens); + final CqContext sfq = parser.cq(); + + System.out.println(sfq.toStringTree(parser)); + + assertEquals("POV(pname,=,with)", sfq.filter.toString()); + assertNull(((POV) sfq.filter).getSubProperty()); + } }