bug fix in UNION column ordering

Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/228ab09f
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/228ab09f
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/228ab09f

Branch: refs/heads/develop
Commit: 228ab09f8200c3a5e5c445ff4c9d89121de1a7bf
Parents: 960c404
Author: Sebastian Schaffert <[email protected]>
Authored: Thu Sep 25 12:31:01 2014 +0200
Committer: Sebastian Schaffert <[email protected]>
Committed: Thu Sep 25 12:31:01 2014 +0200

----------------------------------------------------------------------
 .../marmotta/kiwi/sparql/builder/SQLUnion.java  | 38 ++++++++++++++------
 .../kiwi/sparql/builder/SQLVariable.java        |  4 +++
 2 files changed, 32 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/228ab09f/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
----------------------------------------------------------------------
diff --git 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
index 6fd779a..a87558a 100644
--- 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
+++ 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLUnion.java
@@ -58,32 +58,50 @@ public class SQLUnion extends SQLAbstractSubquery {
         int c = 0;
         Map<String,SQLVariable> leftVars = new HashMap<>();
         for(SQLVariable svl : left.getVariables().values()) {
-            leftVars.put(svl.getName(), svl);
+            leftVars.put(svl.getSparqlName(), svl);
         }
 
         Map<String,SQLVariable> rightVars = new HashMap<>();
         for(SQLVariable svr : right.getVariables().values()) {
-            rightVars.put(svr.getName(), svr);
+            rightVars.put(svr.getSparqlName(), svr);
         }
 
+        // we have to homogenize variable names in both subqueries and make 
sure they have the same number of columns
+        Map<String,String> sparqlToSQL = new HashMap<>();
+        for(SQLVariable svl : left.getVariables().values()) {
+            if(sparqlToSQL.containsKey(svl.getSparqlName())) {
+                svl.setName(sparqlToSQL.get(svl.getSparqlName()));
+            } else {
+                svl.setName("U"+ (++c));
+                sparqlToSQL.put(svl.getSparqlName(), svl.getName());
+            }
+        }
+        for(SQLVariable svl : right.getVariables().values()) {
+            if(sparqlToSQL.containsKey(svl.getSparqlName())) {
+                svl.setName(sparqlToSQL.get(svl.getSparqlName()));
+            } else {
+                svl.setName("U"+ (++c));
+                sparqlToSQL.put(svl.getSparqlName(), svl.getName());
+            }
+        }
+
+
         for(SQLVariable svl : leftVars.values()) {
-            if(!rightVars.containsKey(svl.getName())) {
-                String vname = "_u_"+alias+"_" + (++c);
-                SQLVariable svr = new SQLVariable(svl.getName(), vname);
+            if(!rightVars.containsKey(svl.getSparqlName())) {
+                SQLVariable svr = new SQLVariable(svl.getName(), 
svl.getSparqlName());
                 svr.getExpressions().add("NULL");
                 svr.setProjectionType(ProjectionType.NODE);
-                right.getVariables().put(vname,svr);
+                right.getVariables().put(svl.getSparqlName(),svr);
             }
             variables.add(svl);
         }
 
         for(SQLVariable svr : rightVars.values()) {
-            if(!leftVars.containsKey(svr.getName())) {
-                String vname = "_u_"+alias+"_" + (++c);
-                SQLVariable svl = new SQLVariable(svr.getName(), vname);
+            if(!leftVars.containsKey(svr.getSparqlName())) {
+                SQLVariable svl = new SQLVariable(svr.getName(), 
svr.getSparqlName());
                 svl.getExpressions().add("NULL");
                 svl.setProjectionType(ProjectionType.NODE);
-                left.getVariables().put(vname,svl);
+                left.getVariables().put(svr.getSparqlName(),svl);
             }
             variables.add(svr);
         }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/228ab09f/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLVariable.java
----------------------------------------------------------------------
diff --git 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLVariable.java
 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLVariable.java
index bd1f85e..42515da 100644
--- 
a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLVariable.java
+++ 
b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLVariable.java
@@ -81,6 +81,10 @@ public class SQLVariable  implements Cloneable{
         return name;
     }
 
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public String getSparqlName() {
         return sparqlName;
     }

Reply via email to