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; }
