[Mulgara-svn] r905 - trunk/src/jar/sparql-interpreter/java/org/mulgara/sparql

pag at mulgara.org pag at mulgara.org
Wed May 7 14:28:28 UTC 2008


Author: pag
Date: 2008-05-07 07:28:27 -0700 (Wed, 07 May 2008)
New Revision: 905

Modified:
   trunk/src/jar/sparql-interpreter/java/org/mulgara/sparql/PatternMapper.java
Log:
Optional joins now parameterize the filter inside the join operation for scoping compatibility. Conjunctions and disjunctions are now factored out if they have a single element

Modified: trunk/src/jar/sparql-interpreter/java/org/mulgara/sparql/PatternMapper.java
===================================================================
--- trunk/src/jar/sparql-interpreter/java/org/mulgara/sparql/PatternMapper.java	2008-05-07 14:26:04 UTC (rev 904)
+++ trunk/src/jar/sparql-interpreter/java/org/mulgara/sparql/PatternMapper.java	2008-05-07 14:28:27 UTC (rev 905)
@@ -246,6 +246,7 @@
       List<GroupGraphPattern> list = pattern.getElements();
       List<ConstraintExpression> newList = new ArrayList<ConstraintExpression>(list.size());
       for (GroupGraphPattern p: list) newList.add(mapper.mapPattern(p));
+      if (newList.size() == 1) return newList.get(0);
       return new ConstraintConjunction(newList);
     }
   }
@@ -257,6 +258,7 @@
       List<GroupGraphPattern> list = pattern.getElements();
       List<ConstraintExpression> newList = new ArrayList<ConstraintExpression>(list.size());
       for (GroupGraphPattern p: list) newList.add(mapper.mapPattern(p));
+      if (newList.size() == 1) return newList.get(0);
       return new ConstraintDisjunction(newList);
     }
   }
@@ -265,7 +267,13 @@
   private static class GraphPatternOptionalToConstraint extends PatternToConstraintMapper<GraphPatternOptional> {
     public Class<GraphPatternOptional> getMapType() { return GraphPatternOptional.class; }
     ConstraintExpression typedMap(GraphPatternOptional pattern, PatternMapper mapper) throws MulgaraParserException {
-      return new ConstraintOptionalJoin(mapper.mapPattern(pattern.getMain()), mapper.mapPattern(pattern.getOptional()));
+      ConstraintExpression opt = mapper.mapPattern(pattern.getOptional());
+      if (opt instanceof ConstraintFilter) {
+        ConstraintFilter f = (ConstraintFilter)opt;
+        return new ConstraintOptionalJoin(mapper.mapPattern(pattern.getMain()), f.getUnfilteredConstraint(), f.getFilter());
+      } else {
+        return new ConstraintOptionalJoin(mapper.mapPattern(pattern.getMain()), opt);
+      }
     }
   }
 




More information about the Mulgara-svn mailing list