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()));