|
31 | 31 | *
|
32 | 32 | * @author Greg Turnquist
|
33 | 33 | * @author Christoph Strobl
|
| 34 | + * @author Oscar Fanchin |
34 | 35 | * @since 3.1
|
35 | 36 | */
|
36 | 37 | @SuppressWarnings({ "ConstantConditions", "DuplicatedCode", "UnreachableCode" })
|
@@ -63,6 +64,24 @@ public QueryTokenStream visitStart(HqlParser.StartContext ctx) {
|
63 | 64 | return visit(ctx.ql_statement());
|
64 | 65 | }
|
65 | 66 |
|
| 67 | + @Override |
| 68 | + public QueryTokenStream visitFunctionCallAsFromSource(HqlParser.FunctionCallAsFromSourceContext ctx) { |
| 69 | + |
| 70 | + QueryRendererBuilder builder = QueryRenderer.builder(); |
| 71 | + |
| 72 | + builder.append(visit(ctx.identifier())); |
| 73 | + |
| 74 | + builder.append(TOKEN_OPEN_PAREN); |
| 75 | + |
| 76 | + if (!ctx.expression().isEmpty()) { |
| 77 | + builder.append(QueryTokenStream.concatExpressions(ctx.expression(), this::visit, TOKEN_COMMA)); |
| 78 | + } |
| 79 | + |
| 80 | + builder.append(TOKEN_CLOSE_PAREN); |
| 81 | + |
| 82 | + return builder; |
| 83 | + } |
| 84 | + |
66 | 85 | @Override
|
67 | 86 | public QueryTokenStream visitQl_statement(HqlParser.Ql_statementContext ctx) {
|
68 | 87 |
|
@@ -376,6 +395,14 @@ public QueryTokenStream visitFromRoot(HqlParser.FromRootContext ctx) {
|
376 | 395 |
|
377 | 396 | builder.appendExpression(nested);
|
378 | 397 |
|
| 398 | + if (ctx.variable() != null) { |
| 399 | + builder.appendExpression(visit(ctx.variable())); |
| 400 | + } |
| 401 | + |
| 402 | + } else if (ctx.functionCallAsFromSource() != null) { |
| 403 | + |
| 404 | + builder.appendExpression(visit(ctx.functionCallAsFromSource())); |
| 405 | + |
379 | 406 | if (ctx.variable() != null) {
|
380 | 407 | builder.appendExpression(visit(ctx.variable()));
|
381 | 408 | }
|
@@ -442,6 +469,39 @@ public QueryTokenStream visitJoinSubquery(HqlParser.JoinSubqueryContext ctx) {
|
442 | 469 | return builder;
|
443 | 470 | }
|
444 | 471 |
|
| 472 | + @Override |
| 473 | + public QueryTokenStream visitJoinFunctionCall(HqlParser.JoinFunctionCallContext ctx) { |
| 474 | + |
| 475 | + QueryRendererBuilder builder = QueryRenderer.builder(); |
| 476 | + |
| 477 | + builder.append(visit(ctx.functionCallAsJoinTarget())); |
| 478 | + |
| 479 | + if (ctx.variable() != null) { |
| 480 | + builder.appendExpression(visit(ctx.variable())); |
| 481 | + } |
| 482 | + |
| 483 | + return builder; |
| 484 | + |
| 485 | + } |
| 486 | + |
| 487 | + @Override |
| 488 | + public QueryTokenStream visitFunctionCallAsJoinTarget(HqlParser.FunctionCallAsJoinTargetContext ctx) { |
| 489 | + |
| 490 | + QueryRendererBuilder builder = QueryRenderer.builder(); |
| 491 | + |
| 492 | + builder.append(visit(ctx.identifier())); |
| 493 | + |
| 494 | + builder.append(TOKEN_OPEN_PAREN); |
| 495 | + |
| 496 | + if (!ctx.expression().isEmpty()) { |
| 497 | + builder.append(QueryTokenStream.concatExpressions(ctx.expression(), this::visit, TOKEN_COMMA)); |
| 498 | + } |
| 499 | + |
| 500 | + builder.append(TOKEN_CLOSE_PAREN); |
| 501 | + |
| 502 | + return builder; |
| 503 | + } |
| 504 | + |
445 | 505 | @Override
|
446 | 506 | public QueryTokenStream visitUpdateStatement(HqlParser.UpdateStatementContext ctx) {
|
447 | 507 |
|
|
0 commit comments