23
23
import org .antlr .v4 .runtime .tree .ParseTree ;
24
24
25
25
import org .springframework .data .jpa .repository .query .QueryRenderer .QueryRendererBuilder ;
26
+ import org .springframework .util .CollectionUtils ;
26
27
import org .springframework .util .ObjectUtils ;
27
28
28
29
/**
@@ -50,7 +51,7 @@ public QueryTokenStream visitQl_statement(EqlParser.Ql_statementContext ctx) {
50
51
} else if (ctx .delete_statement () != null ) {
51
52
return visit (ctx .delete_statement ());
52
53
} else {
53
- return QueryRenderer . builder ();
54
+ return QueryTokenStream . empty ();
54
55
}
55
56
}
56
57
@@ -1009,8 +1010,6 @@ public QueryTokenStream visitScalar_expression(EqlParser.Scalar_expressionContex
1009
1010
return visit (ctx .case_expression ());
1010
1011
} else if (ctx .entity_type_expression () != null ) {
1011
1012
return visit (ctx .entity_type_expression ());
1012
- } else if (ctx .cast_function () != null ) {
1013
- return (visit (ctx .cast_function ()));
1014
1013
}
1015
1014
1016
1015
return QueryTokenStream .empty ();
@@ -1362,8 +1361,8 @@ public QueryTokenStream visitStringComparison(EqlParser.StringComparisonContext
1362
1361
1363
1362
QueryRendererBuilder builder = QueryRenderer .builder ();
1364
1363
1365
- builder .appendExpression (visit (ctx .string_expression (0 )));
1366
- builder .appendExpression (visit (ctx .comparison_operator ()));
1364
+ builder .appendInline (visit (ctx .string_expression (0 )));
1365
+ builder .appendInline (visit (ctx .comparison_operator ()));
1367
1366
1368
1367
if (ctx .string_expression (1 ) != null ) {
1369
1368
builder .appendExpression (visit (ctx .string_expression (1 )));
@@ -1419,7 +1418,7 @@ public QueryTokenStream visitDatetimeComparison(EqlParser.DatetimeComparisonCont
1419
1418
QueryRendererBuilder builder = QueryRenderer .builder ();
1420
1419
1421
1420
builder .appendInline (visit (ctx .datetime_expression (0 )));
1422
- builder .append ( QueryTokens . ventilated (ctx .comparison_operator (). op ));
1421
+ builder .appendInline ( visit (ctx .comparison_operator ()));
1423
1422
1424
1423
if (ctx .datetime_expression (1 ) != null ) {
1425
1424
builder .appendExpression (visit (ctx .datetime_expression (1 )));
@@ -1452,8 +1451,8 @@ public QueryTokenStream visitArithmeticComparison(EqlParser.ArithmeticComparison
1452
1451
1453
1452
QueryRendererBuilder builder = QueryRenderer .builder ();
1454
1453
1455
- builder .appendExpression (visit (ctx .arithmetic_expression (0 )));
1456
- builder .appendExpression (visit (ctx .comparison_operator ()));
1454
+ builder .appendInline (visit (ctx .arithmetic_expression (0 )));
1455
+ builder .appendInline (visit (ctx .comparison_operator ()));
1457
1456
1458
1457
if (ctx .arithmetic_expression (1 ) != null ) {
1459
1458
builder .appendExpression (visit (ctx .arithmetic_expression (1 )));
@@ -1490,7 +1489,7 @@ public QueryTokenStream visitRegexpComparison(EqlParser.RegexpComparisonContext
1490
1489
1491
1490
@ Override
1492
1491
public QueryTokenStream visitComparison_operator (EqlParser .Comparison_operatorContext ctx ) {
1493
- return QueryTokenStream .ofToken ( ctx .op );
1492
+ return QueryTokenStream .from ( QueryTokens . ventilated ( ctx .op ) );
1494
1493
}
1495
1494
1496
1495
@ Override
@@ -1559,8 +1558,10 @@ public QueryTokenStream visitArithmetic_primary(EqlParser.Arithmetic_primaryCont
1559
1558
builder .append (visit (ctx .aggregate_expression ()));
1560
1559
} else if (ctx .case_expression () != null ) {
1561
1560
builder .append (visit (ctx .case_expression ()));
1562
- } else if (ctx .cast_function () != null ) {
1563
- builder .append (visit (ctx .cast_function ()));
1561
+ } else if (ctx .arithmetic_cast_function () != null ) {
1562
+ builder .append (visit (ctx .arithmetic_cast_function ()));
1563
+ } else if (ctx .type_cast_function () != null ) {
1564
+ builder .append (visit (ctx .type_cast_function ()));
1564
1565
} else if (ctx .function_invocation () != null ) {
1565
1566
builder .append (visit (ctx .function_invocation ()));
1566
1567
} else if (ctx .subquery () != null ) {
@@ -1590,6 +1591,10 @@ public QueryTokenStream visitString_expression(EqlParser.String_expressionContex
1590
1591
builder .append (visit (ctx .aggregate_expression ()));
1591
1592
} else if (ctx .case_expression () != null ) {
1592
1593
builder .append (visit (ctx .case_expression ()));
1594
+ } else if (ctx .string_cast_function () != null ) {
1595
+ builder .append (visit (ctx .string_cast_function ()));
1596
+ } else if (ctx .type_cast_function () != null ) {
1597
+ builder .append (visit (ctx .type_cast_function ()));
1593
1598
} else if (ctx .function_invocation () != null ) {
1594
1599
builder .append (visit (ctx .function_invocation ()));
1595
1600
} else if (ctx .subquery () != null ) {
@@ -1971,17 +1976,36 @@ public QueryTokenStream visitTrim_specification(EqlParser.Trim_specificationCont
1971
1976
}
1972
1977
1973
1978
@ Override
1974
- public QueryTokenStream visitCast_function (EqlParser .Cast_functionContext ctx ) {
1979
+ public QueryTokenStream visitArithmetic_cast_function (EqlParser .Arithmetic_cast_functionContext ctx ) {
1980
+
1981
+ QueryRendererBuilder builder = QueryRenderer .builder ();
1982
+
1983
+ builder .append (QueryTokens .token (ctx .CAST ()));
1984
+ builder .append (TOKEN_OPEN_PAREN );
1985
+ builder .appendExpression (visit (ctx .string_expression ()));
1986
+ if (ctx .AS () != null ) {
1987
+ builder .append (QueryTokens .expression (ctx .AS ()));
1988
+ }
1989
+ builder .append (QueryTokens .token (ctx .f ));
1990
+ builder .append (TOKEN_CLOSE_PAREN );
1991
+
1992
+ return builder ;
1993
+ }
1994
+
1995
+ @ Override
1996
+ public QueryTokenStream visitType_cast_function (EqlParser .Type_cast_functionContext ctx ) {
1975
1997
1976
1998
QueryRendererBuilder builder = QueryRenderer .builder ();
1977
1999
1978
2000
builder .append (QueryTokens .token (ctx .CAST ()));
1979
2001
builder .append (TOKEN_OPEN_PAREN );
1980
- builder .appendInline (visit (ctx .single_valued_path_expression ()));
1981
- builder .append (TOKEN_SPACE );
1982
- builder .appendInline (QueryTokenStream .concat (ctx .identification_variable (), this ::visit , TOKEN_SPACE ));
2002
+ builder .appendExpression (visit (ctx .scalar_expression ()));
2003
+ if (ctx .AS () != null ) {
2004
+ builder .append (QueryTokens .expression (ctx .AS ()));
2005
+ }
2006
+ builder .appendInline (visit (ctx .identification_variable ()));
1983
2007
1984
- if (!ObjectUtils .isEmpty (ctx .numeric_literal ())) {
2008
+ if (!CollectionUtils .isEmpty (ctx .numeric_literal ())) {
1985
2009
1986
2010
builder .append (TOKEN_OPEN_PAREN );
1987
2011
builder .appendInline (QueryTokenStream .concat (ctx .numeric_literal (), this ::visit , TOKEN_COMMA ));
@@ -1992,6 +2016,23 @@ public QueryTokenStream visitCast_function(EqlParser.Cast_functionContext ctx) {
1992
2016
return builder ;
1993
2017
}
1994
2018
2019
+ @ Override
2020
+ public QueryTokenStream visitString_cast_function (EqlParser .String_cast_functionContext ctx ) {
2021
+
2022
+ QueryRendererBuilder builder = QueryRenderer .builder ();
2023
+
2024
+ builder .append (QueryTokens .token (ctx .CAST ()));
2025
+ builder .append (TOKEN_OPEN_PAREN );
2026
+ builder .appendExpression (visit (ctx .scalar_expression ()));
2027
+ if (ctx .AS () != null ) {
2028
+ builder .append (QueryTokens .expression (ctx .AS ()));
2029
+ }
2030
+ builder .append (QueryTokens .token (ctx .STRING ()));
2031
+ builder .append (TOKEN_CLOSE_PAREN );
2032
+
2033
+ return builder ;
2034
+ }
2035
+
1995
2036
@ Override
1996
2037
public QueryTokenStream visitFunction_invocation (EqlParser .Function_invocationContext ctx ) {
1997
2038
0 commit comments