You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/02/08 15:13:56 UTC

svn commit: r1444022 - /jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Jena389_FilterNotExistsSubQuery.java

Author: andy
Date: Fri Feb  8 14:13:56 2013
New Revision: 1444022

URL: http://svn.apache.org/r1444022
Log: (empty)

Modified:
    jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Jena389_FilterNotExistsSubQuery.java

Modified: jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Jena389_FilterNotExistsSubQuery.java
URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Jena389_FilterNotExistsSubQuery.java?rev=1444022&r1=1444021&r2=1444022&view=diff
==============================================================================
--- jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Jena389_FilterNotExistsSubQuery.java (original)
+++ jena/Scratch/AFS/Jena-Dev/trunk/src/dev/Jena389_FilterNotExistsSubQuery.java Fri Feb  8 14:13:56 2013
@@ -35,10 +35,55 @@ public class Jena389_FilterNotExistsSubQ
     
     public static void caseSubQueryExisits()
     {
+        // Issue:
+        // Transformer (for {} in expressions) and NodeTransformOp walk into expressions - can happen twice.
+        // ExprTrans
+        
+        // See Transformer and commented out 
+        
+//      @Override
+//      public void visit(OpLeftJoin op) 
+//      { 
+//          Op left = null ;
+//          Op right = null ;
+//  
+//          // Must do right-left because the pushes onto the stack were left-right. 
+//          if ( op.getRight() != null )
+//              right = pop() ;
+//          if ( op.getLeft() != null )
+//              left = pop() ;
+//          
+//          ExprList exprList = transform(op.getExprs(), exprTransform) ;
+//          
+//          boolean changed = ( left != op.getLeft() || right != op.getRight() || exprList != op.getExprs() ) ;
+//          OpLeftJoin op2 = changed ? OpLeftJoin.createLeftJoin(left, right, exprList) : op ;
+//          Op opX = op2.apply(transform, left, right) ;
+//          push(opX) ;
+//      }
+
+        // ----- NodeTransformOp
+        // This finds everywhere that node can lurk in an alegbra expression:
+        //   BGPs, paths, triples, quads
+        //   GRAPH, GRAPH{} (DatasetNames)
+        //   Project
+        // ???? Needs checking.
+        // But not in expressions (that's handled by Transformer)
+        //    Filters, including inside EXISTS and expressions in LeftJoin
+        //    OrderBy, GroupBy
+        //    Tables
+        //    Projects
+        // Just the AS variable:
+        //    Extend, Assign
+        // ----- NodeTransformOp
+        
+        // Nor:
+        //   Conditional (no expression)
+        
+        
         // JENA-389
         // Wrong rewrite of FILTER -- too many //  
-        String qs = StrUtils.strjoinNL(
-                                       "SELECT ?Z # bad",
+        String qs1 = StrUtils.strjoinNL(
+                                       "SELECT ?Z # bad -- forces rename and it's renaming that is broken.",
                                        //"SELECT * # good",
                                        "{",
                                        "  SELECT (COUNT(?x1) as ?Z)",
@@ -47,6 +92,18 @@ public class Jena389_FilterNotExistsSubQ
                                        "    FILTER NOT EXISTS {?x1 ?q ?z}",
                                        "   }",
                                        "}") ;
+        
+        String qs2 = StrUtils.strjoinNL(
+                                       "SELECT ?Z # force.",
+                                       //"SELECT * # good",
+                                       "{",
+                                       "  SELECT ?Z",
+                                       "  WHERE {",
+                                       "    ?x1 ?p ?z",
+                                       "    OPTIONAL{ ?x ?y ?z FILTER NOT EXISTS {?x1 ?q ?z} }",
+                                       "   }",
+                                       "}") ;
+        String qs = qs1 ;
         System.out.println(qs) ;
         Query query = QueryFactory.create(qs) ;
         Op op0 = Algebra.compile(query) ;