@@ -755,12 +755,10 @@ public Object visitCte(HqlParser.CteContext ctx) {
755755 final var oldCte = currentPotentialRecursiveCte ;
756756 try {
757757 currentPotentialRecursiveCte = null ;
758- if ( queryExpressionContext instanceof HqlParser .SetQueryGroupContext setContext ) {
759- // A recursive query is only possible if the child count is lower than 5 e.g. `withClause? q1 op q2`
760- if ( setContext .getChildCount () < 5 ) {
761- if ( handleRecursive ( ctx , setContext , cteContainer , name , cte , materialization ) ) {
762- return null ;
763- }
758+ // A recursive query is only possible if there are 2 ordered queries e.g. `q1 op q2`
759+ if ( queryExpressionContext .orderedQuery ().size () == 2 ) {
760+ if ( handleRecursive ( ctx , queryExpressionContext , cteContainer , name , cte , materialization ) ) {
761+ return null ;
764762 }
765763 }
766764 queryExpressionContext .accept ( this );
@@ -778,7 +776,7 @@ public Object visitCte(HqlParser.CteContext ctx) {
778776
779777 private boolean handleRecursive (
780778 HqlParser .CteContext cteContext ,
781- HqlParser .SetQueryGroupContext setContext ,
779+ HqlParser .QueryExpressionContext setContext ,
782780 SqmCteContainer cteContainer ,
783781 String name ,
784782 SqmSelectQuery <Object > cte ,
@@ -941,15 +939,6 @@ private static CteSearchClauseKind getCteSearchClauseKind(HqlParser.SearchClause
941939 return ctx .BREADTH () != null ? CteSearchClauseKind .BREADTH_FIRST : CteSearchClauseKind .DEPTH_FIRST ;
942940 }
943941
944- @ Override
945- public SqmQueryPart <?> visitSimpleQueryGroup (HqlParser .SimpleQueryGroupContext ctx ) {
946- final var withClauseContext = ctx .withClause ();
947- if ( withClauseContext != null ) {
948- withClauseContext .accept ( this );
949- }
950- return (SqmQueryPart <?>) ctx .orderedQuery ().accept ( this );
951- }
952-
953942 @ Override
954943 public SqmQueryPart <?> visitQueryOrderExpression (HqlParser .QueryOrderExpressionContext ctx ) {
955944 final var sqmQuerySpec = currentQuerySpec ();
@@ -986,24 +975,27 @@ public SqmQueryPart<?> visitNestedQueryExpression(HqlParser.NestedQueryExpressio
986975 }
987976
988977 @ Override
989- public SqmQueryGroup <?> visitSetQueryGroup (HqlParser .SetQueryGroupContext ctx ) {
978+ public SqmQueryPart <?> visitQueryExpression (HqlParser .QueryExpressionContext ctx ) {
990979 var withClauseContext = ctx .withClause ();
991980 if ( withClauseContext != null ) {
992981 withClauseContext .accept ( this );
993982 }
994- final var firstQueryPart = (SqmQueryPart <?>) ctx .orderedQuery (0 ).accept ( this );
983+ final var orderedQueryContexts = ctx .orderedQuery ();
984+ final var firstQueryPart = (SqmQueryPart <?>) orderedQueryContexts .get ( 0 ).accept ( this );
985+ if ( orderedQueryContexts .size () == 1 ) {
986+ return firstQueryPart ;
987+ }
995988 SqmQueryGroup <?> queryGroup =
996989 firstQueryPart instanceof SqmQueryGroup <?> sqmQueryGroup
997990 ? sqmQueryGroup
998991 : new SqmQueryGroup <>( firstQueryPart );
999992 setCurrentQueryPart ( queryGroup );
1000- final var orderedQueryContexts = ctx .orderedQuery ();
1001993 final var setOperatorContexts = ctx .setOperator ();
1002994 final var firstProcessingState = processingStateStack .pop ();
1003995 for ( int i = 0 ; i < setOperatorContexts .size (); i ++ ) {
1004996 queryGroup = getSqmQueryGroup (
1005997 visitSetOperator ( setOperatorContexts .get (i ) ),
1006- orderedQueryContexts .get ( i + 1 ),
998+ orderedQueryContexts .get ( i + 1 ),
1007999 queryGroup ,
10081000 setOperatorContexts .size (),
10091001 firstProcessingState ,
0 commit comments