@@ -551,13 +551,14 @@ appendJsonPathExprNode(ExtractedNode *result, ExtractedNode *node, PathItem *pat
551
551
}
552
552
553
553
static ExtractedNode *
554
- extractJsonPathExists (JsonPathItem * jpi , int flags , bool indirect , PathItem * path )
554
+ extractJsonPathExists (JsonPathItem * jpi , int flags , bool indirect , bool unwrap ,
555
+ PathItem * path )
555
556
{
556
557
List * paths ;
557
558
ListCell * lc ;
558
559
ExtractedNode * result ;
559
560
560
- if (!(paths = extractJsonPath (jpi , flags , false , path )))
561
+ if (!(paths = extractJsonPath (jpi , flags , unwrap , path )))
561
562
return NULL ;
562
563
563
564
result = NULL ;
@@ -668,7 +669,20 @@ extractJsonPathExpr(JsonPathItem *jpi, int flags, bool not, bool indirect,
668
669
greater = !greater ;
669
670
}
670
671
else
671
- return NULL ;
672
+ {
673
+ ExtractedNode * lnode ;
674
+ ExtractedNode * rnode ;
675
+
676
+ lnode = extractJsonPathExists (& larg , flags , indirect , true, path );
677
+ rnode = extractJsonPathExists (& rarg , flags , indirect , true, path );
678
+
679
+ if (lnode && rnode )
680
+ return makeBinaryNode (eAnd , path , indirect , lnode , rnode );
681
+ else if (lnode )
682
+ return lnode ;
683
+ else
684
+ return rnode ;
685
+ }
672
686
673
687
if (!(paths = extractJsonPath (patharg , flags , true, path )))
674
688
return NULL ;
@@ -755,7 +769,7 @@ extractJsonPathExpr(JsonPathItem *jpi, int flags, bool not, bool indirect,
755
769
756
770
jspGetArg (jpi , & elem );
757
771
758
- return extractJsonPathExists (& elem , flags , indirect , path );
772
+ return extractJsonPathExists (& elem , flags , indirect , false, path );
759
773
}
760
774
761
775
default :
@@ -1374,7 +1388,7 @@ extractJsonPathQuery(JsonPath *jp, bool exists, bool arrayPathItems, int optimiz
1374
1388
1375
1389
jspInit (& jsp , jp );
1376
1390
root = exists
1377
- ? extractJsonPathExists (& jsp , flags , false, NULL )
1391
+ ? extractJsonPathExists (& jsp , flags , false, false, NULL )
1378
1392
: extractJsonPathExpr (& jsp , flags , false, false, NULL );
1379
1393
1380
1394
return emitExtractedQuery (root , optimize , makeHandler , checkHandler , extra );
0 commit comments