[Mulgara-svn] r1898 - trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser

pag at mulgara.org pag at mulgara.org
Thu Jan 28 20:53:58 UTC 2010


Author: pag
Date: 2010-01-28 12:53:57 -0800 (Thu, 28 Jan 2010)
New Revision: 1898

Modified:
   trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java
   trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj
Log:
Associating out-of-order filters with the closest graph pattern

Modified: trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java
===================================================================
--- trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java	2010-01-27 19:24:29 UTC (rev 1897)
+++ trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java	2010-01-28 20:53:57 UTC (rev 1898)
@@ -529,9 +529,9 @@
 /* [20]    GroupGraphPattern    ::=    '{' TriplesBlock? ( ( GraphPatternNotTriples | Filter ) '.'? TriplesBlock? )* '}' */
   final public GroupGraphPattern GroupGraphPattern() throws ParseException {
   GroupGraphPattern g = null, g2;
-  GraphPatternConjunction c = null;
+  GroupGraphPattern c = null;
   Expression f;
-          g = GroupGraphPattern.EMPTY;
+          g = new EmptyGraphPattern();
     jj_consume_token(44);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case TRUE:
@@ -634,8 +634,12 @@
             if (g == null) g = g2;
             else {
                     // preferentially choose c so we get the right constructor
-                    if (c == null) c = new GraphPatternConjunction(g, g2);
-                    else c = new GraphPatternConjunction(c, g2);
+                    if (c == null) {
+                      if (g instanceof EmptyGraphPattern) {
+                        c = g2;
+                        if (g.getFilter() != null) g2.setFilter(g.getFilter());
+                      } else c = new GraphPatternConjunction(g, g2);
+                    } else c = new GraphPatternConjunction(c, g2);
                     g = c;
             }
         break;

Modified: trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj
===================================================================
--- trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj	2010-01-27 19:24:29 UTC (rev 1897)
+++ trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj	2010-01-28 20:53:57 UTC (rev 1898)
@@ -292,10 +292,10 @@
 /* [20]    GroupGraphPattern    ::=    '{' TriplesBlock? ( ( GraphPatternNotTriples | Filter ) '.'? TriplesBlock? )* '}' */
 GroupGraphPattern GroupGraphPattern() : {
   GroupGraphPattern g = null, g2;
-  GraphPatternConjunction c = null;
+  GroupGraphPattern c = null;
   Expression f;
 } {
-	{ g = GroupGraphPattern.EMPTY; }
+	{ g = new EmptyGraphPattern(); }
     "{"
     ( g=TriplesBlock() )?
     (
@@ -312,8 +312,12 @@
             if (g == null) g = g2;
             else {
 	            // preferentially choose c so we get the right constructor
-	            if (c == null) c = new GraphPatternConjunction(g, g2);
-	            else c = new GraphPatternConjunction(c, g2);
+	            if (c == null) {
+	              if (g instanceof EmptyGraphPattern) {
+	                c = g2;
+	                if (g.getFilter() != null) g2.setFilter(g.getFilter());
+	              } else c = new GraphPatternConjunction(g, g2);
+	            } else c = new GraphPatternConjunction(c, g2);
 	            g = c;
             }
         }




More information about the Mulgara-svn mailing list