Strabon

changeset 158:ffff6d31c23d

Fixed additional issues with strdf:transform when no spatial literal is bound
author Manos Karpathiotakis <mk@di.uoa.gr>
date Fri May 18 13:48:04 2012 +0300 (2012-05-18)
parents af51dd4c3c37
children 18a4e7fd3922
files postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java
line diff
     1.1 --- a/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java	Fri May 18 01:14:56 2012 +0300
     1.2 +++ b/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java	Fri May 18 13:48:04 2012 +0300
     1.3 @@ -104,6 +104,12 @@
     1.4   */
     1.5  public class PostGISQueryBuilder extends GeneralDBQueryBuilder {
     1.6  
     1.7 +	/**
     1.8 +	 * If (spatial) label column met is null, I must not try to retrieve its srid. 
     1.9 +	 * Opting to ask for 'null' instead
    1.10 +	 */
    1.11 +	boolean nullLabel = false;
    1.12 +	
    1.13  	public enum SpatialOperandsPostGIS { anyInteract, equals, contains, inside, left, right, above, below; }
    1.14  	public enum SpatialFunctionsPostGIS 
    1.15  	{ 	//stSPARQL++
    1.16 @@ -211,6 +217,7 @@
    1.17  	protected void append(GeneralDBLabelColumn var, GeneralDBSqlExprBuilder filter) {
    1.18  		if (var.getRdbmsVar().isResource()) {
    1.19  			filter.appendNull();
    1.20 +			nullLabel = true;
    1.21  		}
    1.22  		else {
    1.23  			if(var.isSpatial())
    1.24 @@ -759,8 +766,17 @@
    1.25  					if(tmp instanceof GeneralDBLabelColumn)
    1.26  					{
    1.27  						//Reached the innermost left var -> need to capture its SRID
    1.28 -						String alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
    1.29 -						alias=alias+".srid";
    1.30 +						String alias;
    1.31 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
    1.32 +							//Predicates used in triple patterns non-existent in db
    1.33 +							alias="NULL";
    1.34 +						}
    1.35 +						else
    1.36 +						{
    1.37 +							//Reached the innermost left var -> need to capture its SRID
    1.38 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
    1.39 +							alias=alias+".srid";
    1.40 +						}
    1.41  						sridExpr = alias;
    1.42  						filter.append(sridExpr);
    1.43  						filter.closeBracket();
    1.44 @@ -1085,7 +1101,6 @@
    1.45  							alias=alias+".srid";
    1.46  						}
    1.47  						sridExpr = alias;
    1.48 -						//						((GeneralDBSqlSpatialConstructBinary)expr).setSrid(alias);
    1.49  						break;
    1.50  					}
    1.51  					else if (tmp instanceof GeneralDBStringValue) //Constant!!
    1.52 @@ -1219,10 +1234,18 @@
    1.53  					if(tmp instanceof GeneralDBLabelColumn)
    1.54  					{
    1.55  						//Reached the innermost left var -> need to capture its SRID
    1.56 -						String alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
    1.57 -						alias=alias+".srid";
    1.58 +						String alias;
    1.59 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
    1.60 +							//Predicates used in triple patterns non-existent in db
    1.61 +							alias="NULL";
    1.62 +						}
    1.63 +						else
    1.64 +						{
    1.65 +							//Reached the innermost left var -> need to capture its SRID
    1.66 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
    1.67 +							alias=alias+".srid";
    1.68 +						}
    1.69  						sridExpr = alias;
    1.70 -						//						((GeneralDBSqlSpatialConstructBinary)expr).setSrid(alias);
    1.71  						break;
    1.72  					}
    1.73  					else if (tmp instanceof GeneralDBStringValue) //Constant!!
    1.74 @@ -1415,9 +1438,17 @@
    1.75  					if(tmp instanceof GeneralDBLabelColumn)
    1.76  					{
    1.77  						//Reached the innermost left var -> need to capture its SRID
    1.78 -						String alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
    1.79 -						alias=alias+".srid";
    1.80 -						//((GeneralDBSqlSpatialConstructUnary)expr).setSrid(alias);
    1.81 +						String alias;
    1.82 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
    1.83 +							//Predicates used in triple patterns non-existent in db
    1.84 +							alias="NULL";
    1.85 +						}
    1.86 +						else
    1.87 +						{
    1.88 +							//Reached the innermost left var -> need to capture its SRID
    1.89 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
    1.90 +							alias=alias+".srid";
    1.91 +						}
    1.92  						sridExpr = alias;
    1.93  						break;
    1.94  					}