Strabon
changeset 1399:7de3ab5fb09e
geof:geoSRID was returning the default SRID when argument was not a value from the database; now it returns the appropriate SRID
author | Babis Nikolaou <charnik@di.uoa.gr> |
---|---|
date | Fri Sep 19 12:54:33 2014 +0300 (2014-09-19) |
parents | 08acbf7620dc |
children | 59c935dc81e4 |
files | monetdb/src/main/java/org/openrdf/sail/monetdb/evaluation/MonetDBQueryBuilder.java postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java |
line diff
1.1 --- a/monetdb/src/main/java/org/openrdf/sail/monetdb/evaluation/MonetDBQueryBuilder.java Fri Sep 19 12:22:04 2014 +0300 1.2 +++ b/monetdb/src/main/java/org/openrdf/sail/monetdb/evaluation/MonetDBQueryBuilder.java Fri Sep 19 12:54:33 2014 +0300 1.3 @@ -835,8 +835,6 @@ 1.4 protected void appendSrid(GeneralDBSqlAbstractGeoSrid expr, GeneralDBSqlExprBuilder filter) throws UnsupportedRdbmsOperatorException 1.5 { 1.6 // appendMonetDBSpatialFunctionUnary(expr, filter, SpatialFunctionsMonetDB.ST_SRID); 1.7 - 1.8 - boolean sridNeeded = true; 1.9 filter.openBracket(); 1.10 1.11 boolean check1 = expr.getArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull"); 1.12 @@ -876,15 +874,7 @@ 1.13 { 1.14 child = ((UnaryGeneralDBOperator) tmp).getArg(); 1.15 } 1.16 - else if(tmp instanceof GeneralDBStringValue) 1.17 - { 1.18 - //Constant!! 1.19 - sridNeeded = false; 1.20 - break; 1.21 - } 1.22 - 1.23 - tmp = child; 1.24 - if(tmp instanceof GeneralDBLabelColumn) 1.25 + else if(tmp instanceof GeneralDBLabelColumn) 1.26 { 1.27 //Reached the innermost left var -> need to capture its SRID 1.28 String alias; 1.29 @@ -906,46 +896,39 @@ 1.30 } 1.31 else if(tmp instanceof GeneralDBStringValue) 1.32 { 1.33 - //Constant!! 1.34 - sridNeeded = false; 1.35 + // see why at PostGISQueryBuilder.appendSrid 1.36 break; 1.37 } 1.38 - 1.39 + 1.40 + tmp = child; 1.41 } 1.42 } 1.43 1.44 - if(sridNeeded) 1.45 + filter.appendFunction("ST_SRID"); 1.46 + filter.openBracket(); 1.47 + if(expr.getArg() instanceof GeneralDBStringValue) 1.48 { 1.49 - filter.appendFunction("ST_SRID"); 1.50 - filter.openBracket(); 1.51 - if(expr.getArg() instanceof GeneralDBStringValue) 1.52 - { 1.53 - appendWKT(expr.getArg(),filter); 1.54 - } 1.55 - else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary) 1.56 - { 1.57 - appendConstructFunction(expr.getArg(), filter); 1.58 - } 1.59 - else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary) 1.60 - { 1.61 - appendConstructFunction(expr.getArg(), filter); 1.62 - } 1.63 - else if(expr.getArg() instanceof GeneralDBSqlCase) 1.64 - { 1.65 - GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getArg()).getEntries().get(0).getResult(); 1.66 - appendMBB(onlyLabel,filter); 1.67 - } 1.68 - else 1.69 - { 1.70 - appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter); 1.71 - } 1.72 - 1.73 - filter.closeBracket(); 1.74 + appendWKT(expr.getArg(),filter); 1.75 + } 1.76 + else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary) 1.77 + { 1.78 + appendConstructFunction(expr.getArg(), filter); 1.79 + } 1.80 + else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary) 1.81 + { 1.82 + appendConstructFunction(expr.getArg(), filter); 1.83 + } 1.84 + else if(expr.getArg() instanceof GeneralDBSqlCase) 1.85 + { 1.86 + GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getArg()).getEntries().get(0).getResult(); 1.87 + appendMBB(onlyLabel,filter); 1.88 } 1.89 else 1.90 { 1.91 - filter.append(String.valueOf(GeoConstants.defaultSRID)); 1.92 + appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter); 1.93 } 1.94 + 1.95 + filter.closeBracket(); 1.96 } 1.97 1.98 filter.closeBracket();
2.1 --- a/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java Fri Sep 19 12:22:04 2014 +0300 2.2 +++ b/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java Fri Sep 19 12:54:33 2014 +0300 2.3 @@ -861,7 +861,6 @@ 2.4 * in the select clause and not call the st_srid() function, which will always give me 4326. 2.5 */ 2.6 protected void appendSrid(GeneralDBSqlAbstractGeoSrid expr, GeneralDBSqlExprBuilder filter) throws UnsupportedRdbmsOperatorException { 2.7 - boolean sridNeeded = true; 2.8 filter.openBracket(); 2.9 2.10 boolean check1 = expr.getArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull"); 2.11 @@ -884,7 +883,7 @@ 2.12 } 2.13 else 2.14 { 2.15 - //XXX Incorporating SRID 2.16 + // Incorporating SRID 2.17 GeneralDBSqlExpr tmp = expr; 2.18 if(tmp.getParentNode() == null) 2.19 { 2.20 @@ -901,15 +900,7 @@ 2.21 { 2.22 child = ((UnaryGeneralDBOperator) tmp).getArg(); 2.23 } 2.24 - else if(tmp instanceof GeneralDBStringValue) 2.25 - { 2.26 - //Constant!! 2.27 - sridNeeded = false; 2.28 - break; 2.29 - } 2.30 - 2.31 - tmp = child; 2.32 - if(tmp instanceof GeneralDBLabelColumn) 2.33 + else if(tmp instanceof GeneralDBLabelColumn) 2.34 { 2.35 //Reached the innermost left var -> need to capture its SRID 2.36 String alias; 2.37 @@ -928,57 +919,53 @@ 2.38 filter.append(sridExpr); 2.39 filter.closeBracket(); 2.40 return; 2.41 - //break; 2.42 } 2.43 else if(tmp instanceof GeneralDBStringValue) 2.44 { 2.45 - //Constant!! 2.46 - sridNeeded = false; 2.47 + // We need the srid, since this is a constant in the query, so we 2.48 + // should not return just the default SRID, but instead we should 2.49 + // determine it. 2.50 + // Computing it based on the following code using ST_SRID, ST_GeomFromText, 2.51 + // and appendWKT is not the best way, but it does the job good. 2.52 break; 2.53 } 2.54 - 2.55 + 2.56 + tmp = child; 2.57 } 2.58 } 2.59 2.60 - if(sridNeeded) 2.61 + // we have to compute it 2.62 + filter.appendFunction("ST_SRID"); 2.63 + filter.openBracket(); 2.64 + if(expr.getArg() instanceof GeneralDBStringValue) 2.65 { 2.66 - filter.appendFunction("ST_SRID"); 2.67 - filter.openBracket(); 2.68 - if(expr.getArg() instanceof GeneralDBStringValue) 2.69 - { 2.70 - appendWKT(expr.getArg(),filter); 2.71 - } 2.72 - else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary) 2.73 - { 2.74 - appendConstructFunction(expr.getArg(), filter); 2.75 - } 2.76 - else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary) 2.77 - { 2.78 - appendConstructFunction(expr.getArg(), filter); 2.79 - } 2.80 - else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructTriple) 2.81 - { 2.82 - appendConstructFunction(expr.getArg(), filter); 2.83 - } 2.84 - else if(expr.getArg() instanceof GeneralDBSqlCase) 2.85 - { 2.86 - GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getArg()).getEntries().get(0).getResult(); 2.87 - appendMBB(onlyLabel,filter); 2.88 - } 2.89 - else 2.90 - { 2.91 - appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter); 2.92 - } 2.93 - 2.94 - filter.closeBracket(); 2.95 + appendWKT(expr.getArg(),filter); 2.96 + } 2.97 + else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary) 2.98 + { 2.99 + appendConstructFunction(expr.getArg(), filter); 2.100 + } 2.101 + else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary) 2.102 + { 2.103 + appendConstructFunction(expr.getArg(), filter); 2.104 + } 2.105 + else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructTriple) 2.106 + { 2.107 + appendConstructFunction(expr.getArg(), filter); 2.108 + } 2.109 + else if(expr.getArg() instanceof GeneralDBSqlCase) 2.110 + { 2.111 + GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getArg()).getEntries().get(0).getResult(); 2.112 + appendMBB(onlyLabel,filter); 2.113 } 2.114 else 2.115 { 2.116 - // set default SRID ({@link GeoConstants#defaultSRID}) 2.117 - filter.append(String.valueOf(GeoConstants.defaultSRID)); 2.118 + appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter); 2.119 } 2.120 + 2.121 + filter.closeBracket(); 2.122 } 2.123 - 2.124 + 2.125 filter.closeBracket(); 2.126 } 2.127 2.128 @@ -1000,7 +987,6 @@ 2.129 /** 2.130 * 'helper' functions 2.131 */ 2.132 - 2.133 @Override 2.134 protected String appendWKT(GeneralDBSqlExpr expr, GeneralDBSqlExprBuilder filter) 2.135 { 2.136 @@ -1264,7 +1250,7 @@ 2.137 sridExpr = alias; 2.138 break; 2.139 } 2.140 - else if (tmp instanceof GeneralDBStringValue) //Constant!! 2.141 + else if (tmp instanceof GeneralDBStringValue) // constant!! 2.142 { 2.143 sridNeeded = false; 2.144 sridExpr = String.valueOf(WKTHelper.getSRID(((GeneralDBStringValue) tmp).getValue()));