diff --git a/core/oql/build/build.cmd b/core/oql/build/build.cmd index 9edd6d3d47..b31c58bfd6 100644 --- a/core/oql/build/build.cmd +++ b/core/oql/build/build.cmd @@ -1,6 +1,6 @@ rem must be run with current directory = the directory of the batch rem PEAR is required to build -php -d include_path=".;C:\iTop\PHP\PEAR" ".\PHP\LexerGenerator\cli.php" ..\oql-lexer.plex +php -d include_path=".;C:\Dev\wamp64\bin\php\php5.6.31\pear" ".\PHP\LexerGenerator\cli.php" ..\oql-lexer.plex php ".\PHP\ParserGenerator\cli.php" ..\oql-parser.y php -r "echo date('Y-m-d');" > ..\version.txt pause \ No newline at end of file diff --git a/core/oql/oql-lexer.plex b/core/oql/oql-lexer.plex index fc0101b424..c08a2f852b 100644 --- a/core/oql/oql-lexer.plex +++ b/core/oql/oql-lexer.plex @@ -88,6 +88,7 @@ where = "WHERE" join = "JOIN" on = "ON" coma = "," +matches = "MATCHES" par_open = "(" par_close = ")" math_div = "/" diff --git a/core/oql/oql-parser.y b/core/oql/oql-parser.y index 03bb3fe525..b0aff4537c 100644 --- a/core/oql/oql-parser.y +++ b/core/oql/oql-parser.y @@ -105,6 +105,7 @@ expression_basic(A) ::= PAR_OPEN expression_prio4(X) PAR_CLOSE. { A = X; } expression_basic(A) ::= expression_basic(X) list_operator(Y) list(Z). { A = new BinaryOqlExpression(X, Y, Z); } expression_prio1(A) ::= expression_basic(X). { A = X; } +expression_prio1(A) ::= match_expression(X). { A = X; } expression_prio1(A) ::= expression_prio1(X) operator1(Y) expression_basic(Z). { A = new BinaryOqlExpression(X, Y, Z); } expression_prio2(A) ::= expression_prio1(X). { A = X; } @@ -117,6 +118,9 @@ expression_prio4(A) ::= expression_prio3(X). { A = X; } expression_prio4(A) ::= expression_prio4(X) operator4(Y) expression_prio3(Z). { A = new BinaryOqlExpression(X, Y, Z); } +match_expression(A) ::= field_id(X) MATCHES scalar(Y). { A = new MatchOqlExpression(X, Y); } + + list(A) ::= PAR_OPEN list_items(X) PAR_CLOSE. { A = new ListOqlExpression(X); } @@ -235,7 +239,6 @@ func_name(A) ::= F_FLOOR(X). { A=X; } func_name(A) ::= F_INET_ATON(X). { A=X; } func_name(A) ::= F_INET_NTOA(X). { A=X; } - %code { class OQLParserException extends OQLException