[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