[Mulgara-svn] r1932 - in trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational: . d2rq

alexhall at mulgara.org alexhall at mulgara.org
Wed Mar 24 19:07:11 UTC 2010


Author: alexhall
Date: 2010-03-24 12:07:10 -0700 (Wed, 24 Mar 2010)
New Revision: 1932

Modified:
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java
Log:
Applying patch from Alex Miller to support the d2rq:containsDuplicates property in the relational resolver

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java	2010-03-18 21:26:58 UTC (rev 1931)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java	2010-03-24 19:07:10 UTC (rev 1932)
@@ -78,6 +78,7 @@
   private Set<String> restrictionSet;
   private Map<Variable,VariableDesc> variableMap;
   private Set<Variable> variableSet;
+  private boolean distinct = false;
 
   private Map<LiteralDesc,List<UnionCase>> unionCases;
 
@@ -144,9 +145,14 @@
     restrictionSet.add(restriction);
   }
 
+  public void makeDistinct() {
+    this.distinct = true;
+  }
+  
   public List<String> getQuery() {
     if (unionCases.size() == 0) {
-      String sql = "SELECT " + toList(columnList, ", ") + " FROM " + toList(tableSet, ", ");
+      String distinctStr = distinct ? "DISTINCT " : "";
+      String sql = "SELECT " + distinctStr + toList(columnList, ", ") + " FROM " + toList(tableSet, ", ");
       if (restrictionSet.size() > 0) {
         sql += " WHERE " + toList(restrictionSet, " AND ");
       }
@@ -165,7 +171,6 @@
     }
   }
 
-
   private List<LiteralDesc> assignIndicies() {
     List<LiteralDesc> indexList = new ArrayList<LiteralDesc>();
     for (LiteralDesc desc: unionCases.keySet()) {

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java	2010-03-18 21:26:58 UTC (rev 1931)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java	2010-03-24 19:07:10 UTC (rev 1932)
@@ -435,6 +435,7 @@
     } finally {
       answer.close();
     }
+    
     try {
       st = TuplesOperations.sort(lt);
     } finally {
@@ -480,6 +481,7 @@
       for (String c: classMap.condition) {
         query.addRestriction(c);
       }
+      
     } else { // subj !instanceof Variable
       VariableDesc desc;
       if (classMap.uriColumn != null) {
@@ -500,6 +502,10 @@
         query.addRestriction(r);
       }
     }
+    
+    if(classMap.containsDuplicates) {
+      query.makeDistinct();
+    }
   }
 
   private void includePropertyBridge(RelationalQuery query, Constraint c, Map<String,? extends PropertyBridgeElem> propBs)

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java	2010-03-18 21:26:58 UTC (rev 1931)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java	2010-03-24 19:07:10 UTC (rev 1932)
@@ -59,7 +59,7 @@
   public final String bNodeIdColumns;
   public final TranslationTableElem translateWith;
   public final String dataStorage;
-//  public final String containsDuplicates;
+  public final boolean containsDuplicates;
   public final List<AdditionalPropertyElem> additionalProperties;
   public final List<String> condition;
 
@@ -74,7 +74,9 @@
     bNodeIdColumns = getStringObject(map, Constants.bNodeIdColumns, model, true);
     dataStorage = getStringObject(map, Constants.dataStorage, model, true);
     condition = getStringObjects(map, Constants.condition, model);
-
+    String duplicateStr = getStringObject(map, Constants.containsDuplicates, model, true);
+    containsDuplicates = "true".equalsIgnoreCase(duplicateStr);
+    
     LocalNode ttable = getLocalNodeObject(map, Constants.translateWith, model, true);
     translateWith = (ttable != null) ? new TranslationTableElem(resolver, session, ttable, defModel) : null;
 




More information about the Mulgara-svn mailing list