Strabon

changeset 897:0b89344c4375 experiments-2

geo:sf* functions are evaluated the same way as strdf:* functions
author George Garbis <ggarbis@di.uoa.gr>
date Sat Mar 09 16:12:11 2013 +0200 (2013-03-09)
parents d7babe43a0c4
children 93d1b4ce44a6
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 Mar 08 21:15:08 2013 +0200
     1.2 +++ b/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java	Sat Mar 09 16:12:11 2013 +0200
     1.3 @@ -103,7 +103,8 @@
     1.4  import org.openrdf.sail.rdbms.exceptions.UnsupportedRdbmsOperatorException;
     1.5  
     1.6  /**
     1.7 - * Constructs an SQL query from {@link GeneralDBSqlExpr}s and {@link GeneralDBFromItem}s.
     1.8 + * Constructs an SQL query from {@link GeneralDBSqlExpr}s and
     1.9 + * {@link GeneralDBFromItem}s.
    1.10   * 
    1.11   * @author Manos Karpathiotakis <mk@di.uoa.gr>
    1.12   * 
    1.13 @@ -115,95 +116,64 @@
    1.14  	public static final String ST_TRANSFORM = "ST_Transform";
    1.15  	public static final String ST_ASBINARY = "ST_AsBinary";
    1.16  	/**
    1.17 -	 * If (spatial) label column met is null, I must not try to retrieve its srid. 
    1.18 -	 * Opting to ask for 'null' instead
    1.19 +	 * If (spatial) label column met is null, I must not try to retrieve its
    1.20 +	 * srid. Opting to ask for 'null' instead
    1.21  	 */
    1.22  	boolean nullLabel = false;
    1.23  
    1.24 -	public enum SpatialOperandsPostGIS { intersects, equals, contains, inside, left, right, above, below; }
    1.25 -	public enum SpatialFunctionsPostGIS 
    1.26 -	{ 	//stSPARQL++
    1.27 -		//Spatial Relationships
    1.28 -		ST_Equals,
    1.29 -		ST_Disjoint,
    1.30 -		ST_Intersects,
    1.31 -		ST_Touches, 
    1.32 -		ST_Crosses,
    1.33 -		ST_Within,
    1.34 -		ST_Contains,
    1.35 -		ST_Overlaps,
    1.36 -		ST_Relate,
    1.37 -		
    1.38 -		//Spatial Constructs - Binary
    1.39 -		ST_Union, 
    1.40 -		ST_Intersection, 
    1.41 -		ST_Difference,
    1.42 -		ST_Buffer,
    1.43 -		ST_Transform,
    1.44 -		ST_SymDifference,
    1.45 +	public enum SpatialOperandsPostGIS {
    1.46 +		intersects, equals, contains, inside, left, right, above, below;
    1.47 +	}
    1.48  
    1.49 +	public enum SpatialFunctionsPostGIS { // stSPARQL++
    1.50 +											// Spatial Relationships
    1.51 +		ST_Equals, ST_Disjoint, ST_Intersects, ST_Touches, ST_Crosses, ST_Within, ST_Contains, ST_Overlaps, ST_Relate,
    1.52  
    1.53 -		//Spatial Constructs - Unary
    1.54 -		ST_Envelope,
    1.55 -		ST_ConvexHull,
    1.56 -		ST_Boundary,
    1.57 +		// Spatial Constructs - Binary
    1.58 +		ST_Union, ST_Intersection, ST_Difference, ST_Buffer, ST_Transform, ST_SymDifference,
    1.59  
    1.60 -		//Spatial Metrics - Binary
    1.61 +		// Spatial Constructs - Unary
    1.62 +		ST_Envelope, ST_ConvexHull, ST_Boundary,
    1.63 +
    1.64 +		// Spatial Metrics - Binary
    1.65  		ST_Distance,
    1.66  
    1.67 -		//Spatial Metrics - Unary
    1.68 +		// Spatial Metrics - Unary
    1.69  		ST_Area,
    1.70  
    1.71 -		//Spatial Properties - All Unary
    1.72 -		ST_Dimension,
    1.73 -		ST_GeometryType,
    1.74 -		ST_AsGML,
    1.75 -		ST_AsText,
    1.76 -		ST_SRID,
    1.77 -		ST_IsEmpty,
    1.78 -		ST_IsSimple,
    1.79 +		// Spatial Properties - All Unary
    1.80 +		ST_Dimension, ST_GeometryType, ST_AsGML, ST_AsText, ST_SRID, ST_IsEmpty, ST_IsSimple,
    1.81  
    1.82 -		//GeoSPARQL
    1.83 -		//Simple Features
    1.84 -		SF_Equals,
    1.85 -		SF_Disjoint,
    1.86 -		SF_Intersects,
    1.87 -		SF_Touches,
    1.88 -		SF_Within,
    1.89 -		SF_Contains,
    1.90 -		SF_Overlaps,
    1.91 -		SF_Crosses,
    1.92 +		// GeoSPARQL
    1.93 +		// Simple Features
    1.94 +		SF_Equals, // ST_Equals,
    1.95 +		SF_Disjoint, // ST_Disjoint,
    1.96 +		SF_Intersects, // ST_Intersects,
    1.97 +		SF_Touches, // ST_Touches,
    1.98 +		SF_Within, // ST_Within,
    1.99 +		SF_Contains, // ST_Contains,
   1.100 +		SF_Overlaps, // ST_Overlaps,
   1.101 +		SF_Crosses, // ST_Crosses,
   1.102  
   1.103 -		//RCC8
   1.104 -		RCC8_Eq,
   1.105 -		RCC8_Dc,
   1.106 -		RCC8_Ec,
   1.107 -		RCC8_Po,
   1.108 -		RCC8_Tppi,
   1.109 -		RCC8_Tpp,
   1.110 -		RCC8_Ntppi,
   1.111 -		RCC8_Ntpp,
   1.112 +		// RCC8
   1.113 +		RCC8_Eq, RCC8_Dc, RCC8_Ec, RCC8_Po, RCC8_Tppi, RCC8_Tpp, RCC8_Ntppi, RCC8_Ntpp,
   1.114  
   1.115 -		//Egenhofer
   1.116 -		EH_Equals,
   1.117 -		EH_Disjoint,
   1.118 -		EH_Meet,
   1.119 -		EH_Overlap,
   1.120 -		EH_Covers,
   1.121 -		EH_CoveredBy,
   1.122 -		EH_Inside,
   1.123 -		EH_Contains,
   1.124 -		; 
   1.125 +		// Egenhofer
   1.126 +		EH_Equals, EH_Disjoint, EH_Meet, EH_Overlap, EH_Covers, EH_CoveredBy, EH_Inside, EH_Contains, ;
   1.127  	}
   1.128  
   1.129 -	/** Addition for datetime metric functions
   1.130 +	/**
   1.131 +	 * Addition for datetime metric functions
   1.132  	 * 
   1.133  	 * @author George Garbis <ggarbis@di.uoa.gr>
   1.134  	 * 
   1.135  	 */
   1.136 -	public enum DateTimeFunctionPostGIS { Difference; }
   1.137 +	public enum DateTimeFunctionPostGIS {
   1.138 +		Difference;
   1.139 +	}
   1.140 +
   1.141  	/***/
   1.142 -	
   1.143 +
   1.144  	public PostGISQueryBuilder() {
   1.145  		super();
   1.146  	}
   1.147 @@ -219,67 +189,64 @@
   1.148  	}
   1.149  
   1.150  	@Override
   1.151 -	protected void append(GeneralDBSqlIsNull expr, GeneralDBSqlExprBuilder filter)
   1.152 -			throws UnsupportedRdbmsOperatorException
   1.153 -			{
   1.154 +	protected void append(GeneralDBSqlIsNull expr,
   1.155 +			GeneralDBSqlExprBuilder filter)
   1.156 +			throws UnsupportedRdbmsOperatorException {
   1.157  		dispatch(expr.getArg(), filter);
   1.158  		filter.isNull();
   1.159 -			}
   1.160 +	}
   1.161  
   1.162  	@Override
   1.163  	protected void append(GeneralDBSqlNot expr, GeneralDBSqlExprBuilder filter)
   1.164 -			throws UnsupportedRdbmsOperatorException
   1.165 -			{
   1.166 +			throws UnsupportedRdbmsOperatorException {
   1.167  		if (expr.getArg() instanceof GeneralDBSqlIsNull) {
   1.168 -			GeneralDBSqlIsNull arg = (GeneralDBSqlIsNull)expr.getArg();
   1.169 +			GeneralDBSqlIsNull arg = (GeneralDBSqlIsNull) expr.getArg();
   1.170  			dispatch(arg.getArg(), filter);
   1.171  			filter.isNotNull();
   1.172 -		}
   1.173 -		else {
   1.174 +		} else {
   1.175  			GeneralDBSqlBracketBuilder open = filter.not();
   1.176  			dispatch(expr.getArg(), (GeneralDBSqlExprBuilder) open);
   1.177  			open.close();
   1.178  		}
   1.179 -			}
   1.180 +	}
   1.181  
   1.182  	@Override
   1.183 -	protected void append(GeneralDBDateTimeColumn var, GeneralDBSqlExprBuilder filter) {
   1.184 +	protected void append(GeneralDBDateTimeColumn var,
   1.185 +			GeneralDBSqlExprBuilder filter) {
   1.186  		String alias = getDateTimeAlias(var.getRdbmsVar());
   1.187  		filter.column(alias, "value");
   1.188  	}
   1.189 -	
   1.190 +
   1.191  	@Override
   1.192 -	protected void append(GeneralDBLabelColumn var, GeneralDBSqlExprBuilder filter) {
   1.193 +	protected void append(GeneralDBLabelColumn var,
   1.194 +			GeneralDBSqlExprBuilder filter) {
   1.195  		if (var.getRdbmsVar().isResource()) {
   1.196  			filter.appendNull();
   1.197  			nullLabel = true;
   1.198 -		}
   1.199 -		else {
   1.200 -			if(var.isSpatial())
   1.201 -			{
   1.202 +		} else {
   1.203 +			if (var.isSpatial()) {
   1.204  				filter.appendFunction(ST_ASBINARY);
   1.205  				filter.openBracket();
   1.206 -				//XXX SRID
   1.207 +				// XXX SRID
   1.208  				filter.appendFunction(ST_TRANSFORM);
   1.209  				filter.openBracket();
   1.210  				//
   1.211  				String alias = getLabelAlias(var.getRdbmsVar());
   1.212  
   1.213  				filter.column(alias, STRDFGEO_FIELD);
   1.214 -				//XXX SRID
   1.215 +				// XXX SRID
   1.216  				filter.appendComma();
   1.217  				filter.column(alias, SRID_FIELD);
   1.218  				filter.closeBracket();
   1.219  				//
   1.220  				filter.closeBracket();
   1.221  
   1.222 -				//Adding srid field explicitly for my StrabonPolyhedron constructor later on!
   1.223 +				// Adding srid field explicitly for my StrabonPolyhedron
   1.224 +				// constructor later on!
   1.225  				filter.appendComma();
   1.226  				filter.column(alias, SRID_FIELD);
   1.227 -			}
   1.228 -			else
   1.229 -			{
   1.230 -				//XXX original/default case
   1.231 +			} else {
   1.232 +				// XXX original/default case
   1.233  				String alias = getLabelAlias(var.getRdbmsVar());
   1.234  				filter.column(alias, "value");
   1.235  			}
   1.236 @@ -288,20 +255,20 @@
   1.237  
   1.238  	@Override
   1.239  	protected void append(GeneralDBSqlAnd expr, GeneralDBSqlExprBuilder filter)
   1.240 -			throws UnsupportedRdbmsOperatorException
   1.241 -			{
   1.242 +			throws UnsupportedRdbmsOperatorException {
   1.243  		dispatch(expr.getLeftArg(), filter);
   1.244  		filter.and();
   1.245  		dispatch(expr.getRightArg(), filter);
   1.246 -			}
   1.247 +	}
   1.248  
   1.249 -	protected GeneralDBSqlJoinBuilder subJoinAndFilter(GeneralDBSqlJoinBuilder query, GeneralDBFromItem from)
   1.250 -			throws RdbmsException, UnsupportedRdbmsOperatorException
   1.251 -			{
   1.252 +	protected GeneralDBSqlJoinBuilder subJoinAndFilter(
   1.253 +			GeneralDBSqlJoinBuilder query, GeneralDBFromItem from)
   1.254 +			throws RdbmsException, UnsupportedRdbmsOperatorException {
   1.255  		if (from instanceof GeneralDBUnionItem) {
   1.256 -			GeneralDBUnionItem union = (GeneralDBUnionItem)from;
   1.257 +			GeneralDBUnionItem union = (GeneralDBUnionItem) from;
   1.258  			List<String> names = union.getSelectVarNames();
   1.259 -			List<GeneralDBColumnVar> vars = union.appendVars(new ArrayList<GeneralDBColumnVar>());
   1.260 +			List<GeneralDBColumnVar> vars = union
   1.261 +					.appendVars(new ArrayList<GeneralDBColumnVar>());
   1.262  			GeneralDBSqlQueryBuilder subquery = query.subquery();
   1.263  			for (GeneralDBFromItem item : union.getUnion()) {
   1.264  				for (int i = 0, n = names.size(); i < n; i++) {
   1.265 @@ -309,11 +276,9 @@
   1.266  					GeneralDBSqlExprBuilder select = subquery.select();
   1.267  					if (var == null) {
   1.268  						select.appendNull();
   1.269 -					}
   1.270 -					else if (var.isImplied()) {
   1.271 +					} else if (var.isImplied()) {
   1.272  						select.appendNumeric(vf.getInternalId(var.getValue()));
   1.273 -					}
   1.274 -					else {
   1.275 +					} else {
   1.276  						select.column(var.getAlias(), var.getColumn());
   1.277  					}
   1.278  					select.as(vars.get(i).getColumn());
   1.279 @@ -329,1007 +294,1052 @@
   1.280  			dispatch(expr, query.on().and());
   1.281  		}
   1.282  		return query;
   1.283 -			}
   1.284 +	}
   1.285  
   1.286 -	//FIXME my addition from here on
   1.287 +	// FIXME my addition from here on
   1.288  
   1.289 -	//Issue with this function: crashes when MathExpr is present in Select but does not
   1.290 -	//involve spatial variables! must escape this somehow
   1.291 +	// Issue with this function: crashes when MathExpr is present in Select but
   1.292 +	// does not
   1.293 +	// involve spatial variables! must escape this somehow
   1.294  	@Override
   1.295 -	public GeneralDBQueryBuilder construct(GeneralDBSqlExpr expr) throws UnsupportedRdbmsOperatorException
   1.296 -	{
   1.297 -		if(!(expr instanceof GeneralDBSqlSpatialMetricBinary) 
   1.298 -				&&!(expr instanceof GeneralDBSqlSpatialMetricUnary)
   1.299 -				&&!(expr instanceof GeneralDBSqlMathExpr)
   1.300 -				&&!(expr instanceof GeneralDBSqlSpatialProperty))
   1.301 -		{
   1.302 +	public GeneralDBQueryBuilder construct(GeneralDBSqlExpr expr)
   1.303 +			throws UnsupportedRdbmsOperatorException {
   1.304 +		if (!(expr instanceof GeneralDBSqlSpatialMetricBinary)
   1.305 +				&& !(expr instanceof GeneralDBSqlSpatialMetricUnary)
   1.306 +				&& !(expr instanceof GeneralDBSqlMathExpr)
   1.307 +				&& !(expr instanceof GeneralDBSqlSpatialProperty)) {
   1.308  			query.select().appendFunction(ST_ASBINARY);
   1.309 -		}
   1.310 -		else
   1.311 -		{
   1.312 +		} else {
   1.313  			query.select();
   1.314  		}
   1.315 -		if(expr instanceof BinaryGeneralDBOperator)
   1.316 -		{
   1.317 -			dispatchBinarySqlOperator((BinaryGeneralDBOperator) expr, query.select);
   1.318 +		if (expr instanceof BinaryGeneralDBOperator) {
   1.319 +			dispatchBinarySqlOperator((BinaryGeneralDBOperator) expr,
   1.320 +					query.select);
   1.321 +		} else if (expr instanceof UnaryGeneralDBOperator) {
   1.322 +			dispatchUnarySqlOperator((UnaryGeneralDBOperator) expr,
   1.323 +					query.select);
   1.324  		}
   1.325 -		else if(expr instanceof UnaryGeneralDBOperator)
   1.326 -		{
   1.327 -			dispatchUnarySqlOperator((UnaryGeneralDBOperator) expr, query.select);
   1.328 -		}
   1.329 -		//SRID support must be explicitly added!
   1.330 +		// SRID support must be explicitly added!
   1.331  
   1.332  		return this;
   1.333  	}
   1.334  
   1.335 -	//Spatial Relationship Functions	
   1.336 +	// Spatial Relationship Functions
   1.337  	@Override
   1.338 -	protected void append(GeneralDBSqlEqualsSpatial expr, GeneralDBSqlExprBuilder filter)
   1.339 +	protected void append(GeneralDBSqlEqualsSpatial expr,
   1.340 +			GeneralDBSqlExprBuilder filter)
   1.341  			throws UnsupportedRdbmsOperatorException {
   1.342  
   1.343 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Equals);
   1.344 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.345 +				SpatialFunctionsPostGIS.ST_Equals);
   1.346  	}
   1.347 -	
   1.348 +
   1.349  	@Override
   1.350 -	protected void append(GeneralDBSqlDisjoint expr, GeneralDBSqlExprBuilder filter)
   1.351 +	protected void append(GeneralDBSqlDisjoint expr,
   1.352 +			GeneralDBSqlExprBuilder filter)
   1.353  			throws UnsupportedRdbmsOperatorException {
   1.354  
   1.355 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Disjoint);
   1.356 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.357 +				SpatialFunctionsPostGIS.ST_Disjoint);
   1.358  	}
   1.359 -	
   1.360 +
   1.361  	@Override
   1.362 -	protected void append(GeneralDBSqlIntersects expr, 	GeneralDBSqlExprBuilder filter)
   1.363 +	protected void append(GeneralDBSqlIntersects expr,
   1.364 +			GeneralDBSqlExprBuilder filter)
   1.365  			throws UnsupportedRdbmsOperatorException {
   1.366 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Intersects);
   1.367 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.368 +				SpatialFunctionsPostGIS.ST_Intersects);
   1.369  	}
   1.370 -	
   1.371 +
   1.372  	@Override
   1.373 -	protected void append(GeneralDBSqlTouches expr, GeneralDBSqlExprBuilder filter)
   1.374 +	protected void append(GeneralDBSqlTouches expr,
   1.375 +			GeneralDBSqlExprBuilder filter)
   1.376  			throws UnsupportedRdbmsOperatorException {
   1.377  
   1.378 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Touches);
   1.379 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.380 +				SpatialFunctionsPostGIS.ST_Touches);
   1.381  	}
   1.382 -	
   1.383 +
   1.384  	@Override
   1.385 -	protected void append(GeneralDBSqlCrosses expr, GeneralDBSqlExprBuilder filter)
   1.386 +	protected void append(GeneralDBSqlCrosses expr,
   1.387 +			GeneralDBSqlExprBuilder filter)
   1.388  			throws UnsupportedRdbmsOperatorException {
   1.389  
   1.390 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Crosses);
   1.391 -	}	
   1.392 -	
   1.393 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.394 +				SpatialFunctionsPostGIS.ST_Crosses);
   1.395 +	}
   1.396 +
   1.397  	@Override
   1.398 -	protected void append(GeneralDBSqlWithin expr, GeneralDBSqlExprBuilder filter)
   1.399 +	protected void append(GeneralDBSqlWithin expr,
   1.400 +			GeneralDBSqlExprBuilder filter)
   1.401  			throws UnsupportedRdbmsOperatorException {
   1.402  
   1.403 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Within);
   1.404 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.405 +				SpatialFunctionsPostGIS.ST_Within);
   1.406  
   1.407  	}
   1.408 -	
   1.409 +
   1.410  	@Override
   1.411 -	protected void append(GeneralDBSqlContains expr, GeneralDBSqlExprBuilder filter)
   1.412 +	protected void append(GeneralDBSqlContains expr,
   1.413 +			GeneralDBSqlExprBuilder filter)
   1.414  			throws UnsupportedRdbmsOperatorException {
   1.415  
   1.416 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Contains);
   1.417 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.418 +				SpatialFunctionsPostGIS.ST_Contains);
   1.419  	}
   1.420 -	
   1.421 +
   1.422  	@Override
   1.423 -	protected void append(GeneralDBSqlOverlaps expr, GeneralDBSqlExprBuilder filter)
   1.424 +	protected void append(GeneralDBSqlOverlaps expr,
   1.425 +			GeneralDBSqlExprBuilder filter)
   1.426  			throws UnsupportedRdbmsOperatorException {
   1.427  
   1.428 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Overlaps);
   1.429 -	}
   1.430 -	
   1.431 -	@Override
   1.432 -	protected void append(GeneralDBSqlRelate expr, GeneralDBSqlExprBuilder filter)
   1.433 -			throws UnsupportedRdbmsOperatorException {
   1.434 -		appendGeneralDBSpatialFunctionTriple(expr, filter, SpatialFunctionsPostGIS.ST_Relate);
   1.435 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.436 +				SpatialFunctionsPostGIS.ST_Overlaps);
   1.437  	}
   1.438  
   1.439 -//	@Override
   1.440 -//	protected void append(GeneralDBSqlCovers expr, GeneralDBSqlExprBuilder filter)
   1.441 -//			throws UnsupportedRdbmsOperatorException {
   1.442 -//
   1.443 -//		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Covers);
   1.444 -//	}
   1.445 -//
   1.446 -//	@Override
   1.447 -//	protected void append(GeneralDBSqlCoveredBy expr, GeneralDBSqlExprBuilder filter)
   1.448 -//			throws UnsupportedRdbmsOperatorException {
   1.449 -//
   1.450 -//		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_CoveredBy);
   1.451 -//	}
   1.452 +	@Override
   1.453 +	protected void append(GeneralDBSqlRelate expr,
   1.454 +			GeneralDBSqlExprBuilder filter)
   1.455 +			throws UnsupportedRdbmsOperatorException {
   1.456 +		appendGeneralDBSpatialFunctionTriple(expr, filter,
   1.457 +				SpatialFunctionsPostGIS.ST_Relate);
   1.458 +	}
   1.459  
   1.460 -	
   1.461 +	// @Override
   1.462 +	// protected void append(GeneralDBSqlCovers expr, GeneralDBSqlExprBuilder
   1.463 +	// filter)
   1.464 +	// throws UnsupportedRdbmsOperatorException {
   1.465 +	//
   1.466 +	// appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.467 +	// SpatialFunctionsPostGIS.ST_Covers);
   1.468 +	// }
   1.469 +	//
   1.470 +	// @Override
   1.471 +	// protected void append(GeneralDBSqlCoveredBy expr, GeneralDBSqlExprBuilder
   1.472 +	// filter)
   1.473 +	// throws UnsupportedRdbmsOperatorException {
   1.474 +	//
   1.475 +	// appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.476 +	// SpatialFunctionsPostGIS.ST_CoveredBy);
   1.477 +	// }
   1.478  
   1.479 -	
   1.480 -
   1.481 -	
   1.482 -	@Override	
   1.483 +	@Override
   1.484  	protected void append(GeneralDBSqlLeft expr, GeneralDBSqlExprBuilder filter)
   1.485 -			throws UnsupportedRdbmsOperatorException
   1.486 -			{
   1.487 +			throws UnsupportedRdbmsOperatorException {
   1.488  		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.left);
   1.489 -			}
   1.490 +	}
   1.491  
   1.492  	@Override
   1.493  	protected void append(GeneralDBSqlRight expr, GeneralDBSqlExprBuilder filter)
   1.494 -			throws UnsupportedRdbmsOperatorException
   1.495 -			{
   1.496 +			throws UnsupportedRdbmsOperatorException {
   1.497  		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.right);
   1.498 -			}
   1.499 +	}
   1.500  
   1.501  	@Override
   1.502  	protected void append(GeneralDBSqlAbove expr, GeneralDBSqlExprBuilder filter)
   1.503 -			throws UnsupportedRdbmsOperatorException
   1.504 -			{
   1.505 +			throws UnsupportedRdbmsOperatorException {
   1.506  		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.above);
   1.507 -			}
   1.508 +	}
   1.509  
   1.510  	@Override
   1.511  	protected void append(GeneralDBSqlBelow expr, GeneralDBSqlExprBuilder filter)
   1.512 -			throws UnsupportedRdbmsOperatorException
   1.513 -			{
   1.514 +			throws UnsupportedRdbmsOperatorException {
   1.515  		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.below);
   1.516 -			}
   1.517 -
   1.518 -	@Override
   1.519 -	protected void append(GeneralDBSqlMbbIntersects expr, GeneralDBSqlExprBuilder filter)
   1.520 -			throws UnsupportedRdbmsOperatorException {
   1.521 -		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.intersects);
   1.522  	}
   1.523  
   1.524  	@Override
   1.525 -	protected void append(GeneralDBSqlMbbWithin expr, GeneralDBSqlExprBuilder filter)
   1.526 +	protected void append(GeneralDBSqlMbbIntersects expr,
   1.527 +			GeneralDBSqlExprBuilder filter)
   1.528  			throws UnsupportedRdbmsOperatorException {
   1.529 -		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.inside);
   1.530 +		appendStSPARQLSpatialOperand(expr, filter,
   1.531 +				SpatialOperandsPostGIS.intersects);
   1.532  	}
   1.533  
   1.534 -	
   1.535  	@Override
   1.536 -	protected void append(GeneralDBSqlMbbContains expr, GeneralDBSqlExprBuilder filter)
   1.537 +	protected void append(GeneralDBSqlMbbWithin expr,
   1.538 +			GeneralDBSqlExprBuilder filter)
   1.539  			throws UnsupportedRdbmsOperatorException {
   1.540 -		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.contains);
   1.541 +		appendStSPARQLSpatialOperand(expr, filter,
   1.542 +				SpatialOperandsPostGIS.inside);
   1.543  	}
   1.544  
   1.545 -	
   1.546  	@Override
   1.547 -	protected void append(GeneralDBSqlMbbEquals expr, GeneralDBSqlExprBuilder filter)
   1.548 +	protected void append(GeneralDBSqlMbbContains expr,
   1.549 +			GeneralDBSqlExprBuilder filter)
   1.550  			throws UnsupportedRdbmsOperatorException {
   1.551 -		appendStSPARQLSpatialOperand(expr, filter, SpatialOperandsPostGIS.equals);
   1.552 +		appendStSPARQLSpatialOperand(expr, filter,
   1.553 +				SpatialOperandsPostGIS.contains);
   1.554  	}
   1.555  
   1.556 -	//GeoSPARQL - Spatial Relationship Functions 
   1.557 -	//Simple Features
   1.558  	@Override
   1.559 -	protected void append(GeneralDBSqlSF_Contains expr, GeneralDBSqlExprBuilder filter)
   1.560 -			throws UnsupportedRdbmsOperatorException
   1.561 -			{
   1.562 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Contains);
   1.563 -			}
   1.564 +	protected void append(GeneralDBSqlMbbEquals expr,
   1.565 +			GeneralDBSqlExprBuilder filter)
   1.566 +			throws UnsupportedRdbmsOperatorException {
   1.567 +		appendStSPARQLSpatialOperand(expr, filter,
   1.568 +				SpatialOperandsPostGIS.equals);
   1.569 +	}
   1.570 +
   1.571 +	// GeoSPARQL - Spatial Relationship Functions
   1.572 +	// Simple Features
   1.573 +	@Override
   1.574 +	protected void append(GeneralDBSqlSF_Contains expr,
   1.575 +			GeneralDBSqlExprBuilder filter)
   1.576 +			throws UnsupportedRdbmsOperatorException {
   1.577 +		// appendgeoSPARQLSpatialRelation(expr,
   1.578 +		// filter,SpatialFunctionsPostGIS.SF_Contains);
   1.579 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.580 +				SpatialFunctionsPostGIS.SF_Contains);
   1.581 +	}
   1.582  
   1.583  	@Override
   1.584 -	protected void append(GeneralDBSqlSF_Crosses expr, GeneralDBSqlExprBuilder filter)
   1.585 -			throws UnsupportedRdbmsOperatorException
   1.586 -			{
   1.587 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Crosses);
   1.588 -			}
   1.589 +	protected void append(GeneralDBSqlSF_Crosses expr,
   1.590 +			GeneralDBSqlExprBuilder filter)
   1.591 +			throws UnsupportedRdbmsOperatorException {
   1.592 +		// appendgeoSPARQLSpatialRelation(expr,
   1.593 +		// filter,SpatialFunctionsPostGIS.SF_Crosses);
   1.594 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.595 +				SpatialFunctionsPostGIS.SF_Crosses);
   1.596 +	}
   1.597  
   1.598  	@Override
   1.599 -	protected void append(GeneralDBSqlSF_Disjoint expr, GeneralDBSqlExprBuilder filter)
   1.600 -			throws UnsupportedRdbmsOperatorException
   1.601 -			{
   1.602 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Disjoint);
   1.603 -			}
   1.604 +	protected void append(GeneralDBSqlSF_Disjoint expr,
   1.605 +			GeneralDBSqlExprBuilder filter)
   1.606 +			throws UnsupportedRdbmsOperatorException {
   1.607 +		// appendgeoSPARQLSpatialRelation(expr,
   1.608 +		// filter,SpatialFunctionsPostGIS.SF_Disjoint);
   1.609 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.610 +				SpatialFunctionsPostGIS.SF_Disjoint);
   1.611 +	}
   1.612  
   1.613  	@Override
   1.614 -	protected void append(GeneralDBSqlSF_Equals expr, GeneralDBSqlExprBuilder filter)
   1.615 -			throws UnsupportedRdbmsOperatorException
   1.616 -			{
   1.617 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Equals);
   1.618 -			}
   1.619 +	protected void append(GeneralDBSqlSF_Equals expr,
   1.620 +			GeneralDBSqlExprBuilder filter)
   1.621 +			throws UnsupportedRdbmsOperatorException {
   1.622 +		// appendgeoSPARQLSpatialRelation(expr,
   1.623 +		// filter,SpatialFunctionsPostGIS.SF_Equals);
   1.624 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.625 +				SpatialFunctionsPostGIS.SF_Equals);
   1.626 +	}
   1.627  
   1.628  	@Override
   1.629 -	protected void append(GeneralDBSqlSF_Intersects expr, GeneralDBSqlExprBuilder filter)
   1.630 -			throws UnsupportedRdbmsOperatorException
   1.631 -			{
   1.632 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Intersects);
   1.633 -			}
   1.634 +	protected void append(GeneralDBSqlSF_Intersects expr,
   1.635 +			GeneralDBSqlExprBuilder filter)
   1.636 +			throws UnsupportedRdbmsOperatorException {
   1.637 +		// appendgeoSPARQLSpatialRelation(expr,
   1.638 +		// filter,SpatialFunctionsPostGIS.SF_Intersects);
   1.639 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.640 +				SpatialFunctionsPostGIS.SF_Intersects);
   1.641 +	}
   1.642  
   1.643  	@Override
   1.644 -	protected void append(GeneralDBSqlSF_Overlaps expr, GeneralDBSqlExprBuilder filter)
   1.645 -			throws UnsupportedRdbmsOperatorException
   1.646 -			{
   1.647 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Overlaps);
   1.648 -			}
   1.649 +	protected void append(GeneralDBSqlSF_Overlaps expr,
   1.650 +			GeneralDBSqlExprBuilder filter)
   1.651 +			throws UnsupportedRdbmsOperatorException {
   1.652 +		// appendgeoSPARQLSpatialRelation(expr,
   1.653 +		// filter,SpatialFunctionsPostGIS.SF_Overlaps);
   1.654 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.655 +				SpatialFunctionsPostGIS.SF_Overlaps);
   1.656 +	}
   1.657  
   1.658  	@Override
   1.659 -	protected void append(GeneralDBSqlSF_Touches expr, GeneralDBSqlExprBuilder filter)
   1.660 -			throws UnsupportedRdbmsOperatorException
   1.661 -			{
   1.662 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Touches);
   1.663 -			}
   1.664 +	protected void append(GeneralDBSqlSF_Touches expr,
   1.665 +			GeneralDBSqlExprBuilder filter)
   1.666 +			throws UnsupportedRdbmsOperatorException {
   1.667 +		// appendgeoSPARQLSpatialRelation(expr,
   1.668 +		// filter,SpatialFunctionsPostGIS.SF_Touches);
   1.669 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.670 +				SpatialFunctionsPostGIS.SF_Touches);
   1.671 +	}
   1.672  
   1.673  	@Override
   1.674 -	protected void append(GeneralDBSqlSF_Within expr, GeneralDBSqlExprBuilder filter)
   1.675 -			throws UnsupportedRdbmsOperatorException
   1.676 -			{
   1.677 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.SF_Within);
   1.678 -			}
   1.679 +	protected void append(GeneralDBSqlSF_Within expr,
   1.680 +			GeneralDBSqlExprBuilder filter)
   1.681 +			throws UnsupportedRdbmsOperatorException {
   1.682 +		// appendgeoSPARQLSpatialRelation(expr,
   1.683 +		// filter,SpatialFunctionsPostGIS.SF_Within);
   1.684 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.685 +				SpatialFunctionsPostGIS.SF_Within);
   1.686 +	}
   1.687  
   1.688 -	//Egenhofer
   1.689 +	// Egenhofer
   1.690  	@Override
   1.691 -	protected void append(GeneralDBSqlEgenhofer_CoveredBy expr, GeneralDBSqlExprBuilder filter)
   1.692 -			throws UnsupportedRdbmsOperatorException
   1.693 -			{
   1.694 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_CoveredBy);
   1.695 -			}
   1.696 +	protected void append(GeneralDBSqlEgenhofer_CoveredBy expr,
   1.697 +			GeneralDBSqlExprBuilder filter)
   1.698 +			throws UnsupportedRdbmsOperatorException {
   1.699 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.700 +				SpatialFunctionsPostGIS.EH_CoveredBy);
   1.701 +	}
   1.702  
   1.703  	@Override
   1.704 -	protected void append(GeneralDBSqlEgenhofer_Covers expr, GeneralDBSqlExprBuilder filter)
   1.705 -			throws UnsupportedRdbmsOperatorException
   1.706 -			{
   1.707 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Covers);
   1.708 -			}
   1.709 +	protected void append(GeneralDBSqlEgenhofer_Covers expr,
   1.710 +			GeneralDBSqlExprBuilder filter)
   1.711 +			throws UnsupportedRdbmsOperatorException {
   1.712 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.713 +				SpatialFunctionsPostGIS.EH_Covers);
   1.714 +	}
   1.715  
   1.716  	@Override
   1.717 -	protected void append(GeneralDBSqlEgenhofer_Contains expr, GeneralDBSqlExprBuilder filter)
   1.718 -			throws UnsupportedRdbmsOperatorException
   1.719 -			{
   1.720 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Contains);
   1.721 -			}
   1.722 +	protected void append(GeneralDBSqlEgenhofer_Contains expr,
   1.723 +			GeneralDBSqlExprBuilder filter)
   1.724 +			throws UnsupportedRdbmsOperatorException {
   1.725 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.726 +				SpatialFunctionsPostGIS.EH_Contains);
   1.727 +	}
   1.728  
   1.729  	@Override
   1.730 -	protected void append(GeneralDBSqlEgenhofer_Disjoint expr, GeneralDBSqlExprBuilder filter)
   1.731 -			throws UnsupportedRdbmsOperatorException
   1.732 -			{
   1.733 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Disjoint);
   1.734 -			}
   1.735 +	protected void append(GeneralDBSqlEgenhofer_Disjoint expr,
   1.736 +			GeneralDBSqlExprBuilder filter)
   1.737 +			throws UnsupportedRdbmsOperatorException {
   1.738 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.739 +				SpatialFunctionsPostGIS.EH_Disjoint);
   1.740 +	}
   1.741  
   1.742  	@Override
   1.743 -	protected void append(GeneralDBSqlEgenhofer_Equals expr, GeneralDBSqlExprBuilder filter)
   1.744 -			throws UnsupportedRdbmsOperatorException
   1.745 -			{
   1.746 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Equals);
   1.747 -			}
   1.748 +	protected void append(GeneralDBSqlEgenhofer_Equals expr,
   1.749 +			GeneralDBSqlExprBuilder filter)
   1.750 +			throws UnsupportedRdbmsOperatorException {
   1.751 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.752 +				SpatialFunctionsPostGIS.EH_Equals);
   1.753 +	}
   1.754  
   1.755  	@Override
   1.756 -	protected void append(GeneralDBSqlEgenhofer_Inside expr, GeneralDBSqlExprBuilder filter)
   1.757 -			throws UnsupportedRdbmsOperatorException
   1.758 -			{
   1.759 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Inside);
   1.760 -			}
   1.761 +	protected void append(GeneralDBSqlEgenhofer_Inside expr,
   1.762 +			GeneralDBSqlExprBuilder filter)
   1.763 +			throws UnsupportedRdbmsOperatorException {
   1.764 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.765 +				SpatialFunctionsPostGIS.EH_Inside);
   1.766 +	}
   1.767  
   1.768  	@Override
   1.769 -	protected void append(GeneralDBSqlEgenhofer_Meet expr, GeneralDBSqlExprBuilder filter)
   1.770 -			throws UnsupportedRdbmsOperatorException
   1.771 -			{
   1.772 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Meet);
   1.773 -			}
   1.774 +	protected void append(GeneralDBSqlEgenhofer_Meet expr,
   1.775 +			GeneralDBSqlExprBuilder filter)
   1.776 +			throws UnsupportedRdbmsOperatorException {
   1.777 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.778 +				SpatialFunctionsPostGIS.EH_Meet);
   1.779 +	}
   1.780  
   1.781  	@Override
   1.782 -	protected void append(GeneralDBSqlEgenhofer_Overlap expr, GeneralDBSqlExprBuilder filter)
   1.783 -			throws UnsupportedRdbmsOperatorException
   1.784 -			{
   1.785 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.EH_Overlap);
   1.786 -			}
   1.787 +	protected void append(GeneralDBSqlEgenhofer_Overlap expr,
   1.788 +			GeneralDBSqlExprBuilder filter)
   1.789 +			throws UnsupportedRdbmsOperatorException {
   1.790 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.791 +				SpatialFunctionsPostGIS.EH_Overlap);
   1.792 +	}
   1.793  
   1.794 -	//RCC8
   1.795 +	// RCC8
   1.796  	@Override
   1.797 -	protected void append(GeneralDBSqlRCC8_Dc expr, GeneralDBSqlExprBuilder filter)
   1.798 -			throws UnsupportedRdbmsOperatorException
   1.799 -			{
   1.800 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Dc);
   1.801 -			}
   1.802 +	protected void append(GeneralDBSqlRCC8_Dc expr,
   1.803 +			GeneralDBSqlExprBuilder filter)
   1.804 +			throws UnsupportedRdbmsOperatorException {
   1.805 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.806 +				SpatialFunctionsPostGIS.RCC8_Dc);
   1.807 +	}
   1.808  
   1.809  	@Override
   1.810 -	protected void append(GeneralDBSqlRCC8_Eq expr, GeneralDBSqlExprBuilder filter)
   1.811 -			throws UnsupportedRdbmsOperatorException
   1.812 -			{
   1.813 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Eq);
   1.814 -			}
   1.815 +	protected void append(GeneralDBSqlRCC8_Eq expr,
   1.816 +			GeneralDBSqlExprBuilder filter)
   1.817 +			throws UnsupportedRdbmsOperatorException {
   1.818 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.819 +				SpatialFunctionsPostGIS.RCC8_Eq);
   1.820 +	}
   1.821  
   1.822  	@Override
   1.823 -	protected void append(GeneralDBSqlRCC8_Ec expr, GeneralDBSqlExprBuilder filter)
   1.824 -			throws UnsupportedRdbmsOperatorException
   1.825 -			{
   1.826 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Ec);
   1.827 -			}
   1.828 +	protected void append(GeneralDBSqlRCC8_Ec expr,
   1.829 +			GeneralDBSqlExprBuilder filter)
   1.830 +			throws UnsupportedRdbmsOperatorException {
   1.831 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.832 +				SpatialFunctionsPostGIS.RCC8_Ec);
   1.833 +	}
   1.834  
   1.835  	@Override
   1.836 -	protected void append(GeneralDBSqlRCC8_Po expr, GeneralDBSqlExprBuilder filter)
   1.837 -			throws UnsupportedRdbmsOperatorException
   1.838 -			{
   1.839 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Po);
   1.840 -			}
   1.841 +	protected void append(GeneralDBSqlRCC8_Po expr,
   1.842 +			GeneralDBSqlExprBuilder filter)
   1.843 +			throws UnsupportedRdbmsOperatorException {
   1.844 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.845 +				SpatialFunctionsPostGIS.RCC8_Po);
   1.846 +	}
   1.847  
   1.848  	@Override
   1.849 -	protected void append(GeneralDBSqlRCC8_Tppi expr, GeneralDBSqlExprBuilder filter)
   1.850 -			throws UnsupportedRdbmsOperatorException
   1.851 -			{
   1.852 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Tppi);
   1.853 -			}
   1.854 +	protected void append(GeneralDBSqlRCC8_Tppi expr,
   1.855 +			GeneralDBSqlExprBuilder filter)
   1.856 +			throws UnsupportedRdbmsOperatorException {
   1.857 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.858 +				SpatialFunctionsPostGIS.RCC8_Tppi);
   1.859 +	}
   1.860  
   1.861  	@Override
   1.862 -	protected void append(GeneralDBSqlRCC8_Tpp expr, GeneralDBSqlExprBuilder filter)
   1.863 -			throws UnsupportedRdbmsOperatorException
   1.864 -			{
   1.865 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Tpp);
   1.866 -			}
   1.867 +	protected void append(GeneralDBSqlRCC8_Tpp expr,
   1.868 +			GeneralDBSqlExprBuilder filter)
   1.869 +			throws UnsupportedRdbmsOperatorException {
   1.870 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.871 +				SpatialFunctionsPostGIS.RCC8_Tpp);
   1.872 +	}
   1.873  
   1.874  	@Override
   1.875 -	protected void append(GeneralDBSqlRCC8_Ntpp expr, GeneralDBSqlExprBuilder filter)
   1.876 -			throws UnsupportedRdbmsOperatorException
   1.877 -			{
   1.878 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Ntpp);
   1.879 -			}
   1.880 +	protected void append(GeneralDBSqlRCC8_Ntpp expr,
   1.881 +			GeneralDBSqlExprBuilder filter)
   1.882 +			throws UnsupportedRdbmsOperatorException {
   1.883 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.884 +				SpatialFunctionsPostGIS.RCC8_Ntpp);
   1.885 +	}
   1.886  
   1.887  	@Override
   1.888 -	protected void append(GeneralDBSqlRCC8_Ntppi expr, GeneralDBSqlExprBuilder filter)
   1.889 -			throws UnsupportedRdbmsOperatorException
   1.890 -			{
   1.891 -		appendgeoSPARQLSpatialRelation(expr, filter,SpatialFunctionsPostGIS.RCC8_Ntppi);
   1.892 -			}
   1.893 +	protected void append(GeneralDBSqlRCC8_Ntppi expr,
   1.894 +			GeneralDBSqlExprBuilder filter)
   1.895 +			throws UnsupportedRdbmsOperatorException {
   1.896 +		appendgeoSPARQLSpatialRelation(expr, filter,
   1.897 +				SpatialFunctionsPostGIS.RCC8_Ntppi);
   1.898 +	}
   1.899  
   1.900 -	//Spatial Construct Functions
   1.901 +	// Spatial Construct Functions
   1.902  	@Override
   1.903 -	protected void append(GeneralDBSqlGeoUnion expr, GeneralDBSqlExprBuilder filter)
   1.904 -			throws UnsupportedRdbmsOperatorException
   1.905 -			{
   1.906 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Union);
   1.907 -			}
   1.908 +	protected void append(GeneralDBSqlGeoUnion expr,
   1.909 +			GeneralDBSqlExprBuilder filter)
   1.910 +			throws UnsupportedRdbmsOperatorException {
   1.911 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.912 +				SpatialFunctionsPostGIS.ST_Union);
   1.913 +	}
   1.914  
   1.915  	@Override
   1.916 -	protected void append(GeneralDBSqlGeoBuffer expr, GeneralDBSqlExprBuilder filter)
   1.917 -			throws UnsupportedRdbmsOperatorException
   1.918 -			{
   1.919 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Buffer);
   1.920 -			}
   1.921 +	protected void append(GeneralDBSqlGeoBuffer expr,
   1.922 +			GeneralDBSqlExprBuilder filter)
   1.923 +			throws UnsupportedRdbmsOperatorException {
   1.924 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.925 +				SpatialFunctionsPostGIS.ST_Buffer);
   1.926 +	}
   1.927  
   1.928 -	//XXX Different Behavior
   1.929 +	// XXX Different Behavior
   1.930  	@Override
   1.931 -	protected void append(GeneralDBSqlGeoTransform expr, GeneralDBSqlExprBuilder filter)
   1.932 -			throws UnsupportedRdbmsOperatorException
   1.933 -			{
   1.934 +	protected void append(GeneralDBSqlGeoTransform expr,
   1.935 +			GeneralDBSqlExprBuilder filter)
   1.936 +			throws UnsupportedRdbmsOperatorException {
   1.937  		appendTransformFunc(expr, filter);
   1.938 -			}
   1.939 +	}
   1.940  
   1.941  	@Override
   1.942 -	protected void append(GeneralDBSqlGeoEnvelope expr, GeneralDBSqlExprBuilder filter)
   1.943 -			throws UnsupportedRdbmsOperatorException
   1.944 -			{
   1.945 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_Envelope);
   1.946 -			}
   1.947 +	protected void append(GeneralDBSqlGeoEnvelope expr,
   1.948 +			GeneralDBSqlExprBuilder filter)
   1.949 +			throws UnsupportedRdbmsOperatorException {
   1.950 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
   1.951 +				SpatialFunctionsPostGIS.ST_Envelope);
   1.952 +	}
   1.953  
   1.954  	@Override
   1.955 -	protected void append(GeneralDBSqlGeoConvexHull expr, GeneralDBSqlExprBuilder filter)
   1.956 -			throws UnsupportedRdbmsOperatorException
   1.957 -			{
   1.958 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_ConvexHull);
   1.959 -			}
   1.960 +	protected void append(GeneralDBSqlGeoConvexHull expr,
   1.961 +			GeneralDBSqlExprBuilder filter)
   1.962 +			throws UnsupportedRdbmsOperatorException {
   1.963 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
   1.964 +				SpatialFunctionsPostGIS.ST_ConvexHull);
   1.965 +	}
   1.966  
   1.967  	@Override
   1.968 -	protected void append(GeneralDBSqlGeoBoundary expr, GeneralDBSqlExprBuilder filter)
   1.969 -			throws UnsupportedRdbmsOperatorException
   1.970 -			{
   1.971 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_Boundary);
   1.972 -			}
   1.973 +	protected void append(GeneralDBSqlGeoBoundary expr,
   1.974 +			GeneralDBSqlExprBuilder filter)
   1.975 +			throws UnsupportedRdbmsOperatorException {
   1.976 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
   1.977 +				SpatialFunctionsPostGIS.ST_Boundary);
   1.978 +	}
   1.979  
   1.980  	@Override
   1.981 -	protected void append(GeneralDBSqlGeoIntersection expr, GeneralDBSqlExprBuilder filter)
   1.982 -			throws UnsupportedRdbmsOperatorException
   1.983 -			{
   1.984 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Intersection);
   1.985 -			}
   1.986 +	protected void append(GeneralDBSqlGeoIntersection expr,
   1.987 +			GeneralDBSqlExprBuilder filter)
   1.988 +			throws UnsupportedRdbmsOperatorException {
   1.989 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
   1.990 +				SpatialFunctionsPostGIS.ST_Intersection);
   1.991 +	}
   1.992  
   1.993  	@Override
   1.994 -	protected void append(GeneralDBSqlGeoDifference expr, GeneralDBSqlExprBuilder filter)
   1.995 -			throws UnsupportedRdbmsOperatorException
   1.996 -			{
   1.997 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Difference);
   1.998 -			}
   1.999 +	protected void append(GeneralDBSqlGeoDifference expr,
  1.1000 +			GeneralDBSqlExprBuilder filter)
  1.1001 +			throws UnsupportedRdbmsOperatorException {
  1.1002 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
  1.1003 +				SpatialFunctionsPostGIS.ST_Difference);
  1.1004 +	}
  1.1005  
  1.1006  	@Override
  1.1007 -	protected void append(GeneralDBSqlGeoSymDifference expr, GeneralDBSqlExprBuilder filter)
  1.1008 -			throws UnsupportedRdbmsOperatorException
  1.1009 -			{
  1.1010 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_SymDifference);
  1.1011 -			}
  1.1012 +	protected void append(GeneralDBSqlGeoSymDifference expr,
  1.1013 +			GeneralDBSqlExprBuilder filter)
  1.1014 +			throws UnsupportedRdbmsOperatorException {
  1.1015 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
  1.1016 +				SpatialFunctionsPostGIS.ST_SymDifference);
  1.1017 +	}
  1.1018  
  1.1019 -	/** Addition for datetime metric functions
  1.1020 +	/**
  1.1021 +	 * Addition for datetime metric functions
  1.1022  	 * 
  1.1023  	 * @author George Garbis <ggarbis@di.uoa.gr>
  1.1024  	 * 
  1.1025  	 */
  1.1026  	@Override
  1.1027 -	protected void append(GeneralDBSqlDiffDateTime expr, GeneralDBSqlExprBuilder filter)
  1.1028 -		throws UnsupportedRdbmsOperatorException
  1.1029 -	{
  1.1030 -		appendGeneralDBDateTimeFunctionBinary(expr, filter, DateTimeFunctionPostGIS.Difference);
  1.1031 +	protected void append(GeneralDBSqlDiffDateTime expr,
  1.1032 +			GeneralDBSqlExprBuilder filter)
  1.1033 +			throws UnsupportedRdbmsOperatorException {
  1.1034 +		appendGeneralDBDateTimeFunctionBinary(expr, filter,
  1.1035 +				DateTimeFunctionPostGIS.Difference);
  1.1036  	}
  1.1037 +
  1.1038  	/***/
  1.1039 -	
  1.1040 -	//Spatial Metric Functions
  1.1041 +
  1.1042 +	// Spatial Metric Functions
  1.1043  	@Override
  1.1044 -	protected void append(GeneralDBSqlGeoDistance expr, GeneralDBSqlExprBuilder filter)
  1.1045 -			throws UnsupportedRdbmsOperatorException
  1.1046 -			{
  1.1047 -		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_Distance);
  1.1048 -			}
  1.1049 +	protected void append(GeneralDBSqlGeoDistance expr,
  1.1050 +			GeneralDBSqlExprBuilder filter)
  1.1051 +			throws UnsupportedRdbmsOperatorException {
  1.1052 +		appendGeneralDBSpatialFunctionBinary(expr, filter,
  1.1053 +				SpatialFunctionsPostGIS.ST_Distance);
  1.1054 +	}
  1.1055  
  1.1056  	@Override
  1.1057 -	protected void append(GeneralDBSqlGeoArea expr, GeneralDBSqlExprBuilder filter)
  1.1058 -			throws UnsupportedRdbmsOperatorException
  1.1059 -			{
  1.1060 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_Area);
  1.1061 -			}
  1.1062 +	protected void append(GeneralDBSqlGeoArea expr,
  1.1063 +			GeneralDBSqlExprBuilder filter)
  1.1064 +			throws UnsupportedRdbmsOperatorException {
  1.1065 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1066 +				SpatialFunctionsPostGIS.ST_Area);
  1.1067 +	}
  1.1068  
  1.1069 -	//Spatial Property Functions
  1.1070 +	// Spatial Property Functions
  1.1071  	@Override
  1.1072 -	protected void append(GeneralDBSqlGeoDimension expr, GeneralDBSqlExprBuilder filter)
  1.1073 -			throws UnsupportedRdbmsOperatorException
  1.1074 -			{
  1.1075 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_Dimension);
  1.1076 -			}
  1.1077 +	protected void append(GeneralDBSqlGeoDimension expr,
  1.1078 +			GeneralDBSqlExprBuilder filter)
  1.1079 +			throws UnsupportedRdbmsOperatorException {
  1.1080 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1081 +				SpatialFunctionsPostGIS.ST_Dimension);
  1.1082 +	}
  1.1083  
  1.1084  	@Override
  1.1085 -	protected void append(GeneralDBSqlGeoGeometryType expr, GeneralDBSqlExprBuilder filter)
  1.1086 -			throws UnsupportedRdbmsOperatorException
  1.1087 -			{
  1.1088 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_GeometryType);
  1.1089 -			}
  1.1090 +	protected void append(GeneralDBSqlGeoGeometryType expr,
  1.1091 +			GeneralDBSqlExprBuilder filter)
  1.1092 +			throws UnsupportedRdbmsOperatorException {
  1.1093 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1094 +				SpatialFunctionsPostGIS.ST_GeometryType);
  1.1095 +	}
  1.1096  
  1.1097  	@Override
  1.1098 -	protected void append(GeneralDBSqlGeoAsText expr, GeneralDBSqlExprBuilder filter)
  1.1099 -			throws UnsupportedRdbmsOperatorException
  1.1100 -			{
  1.1101 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_AsText);
  1.1102 -			}
  1.1103 +	protected void append(GeneralDBSqlGeoAsText expr,
  1.1104 +			GeneralDBSqlExprBuilder filter)
  1.1105 +			throws UnsupportedRdbmsOperatorException {
  1.1106 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1107 +				SpatialFunctionsPostGIS.ST_AsText);
  1.1108 +	}
  1.1109  
  1.1110  	@Override
  1.1111 -	protected void append(GeneralDBSqlGeoAsGML expr, GeneralDBSqlExprBuilder filter)
  1.1112 -			throws UnsupportedRdbmsOperatorException
  1.1113 -			{
  1.1114 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_AsGML);
  1.1115 -			}
  1.1116 +	protected void append(GeneralDBSqlGeoAsGML expr,
  1.1117 +			GeneralDBSqlExprBuilder filter)
  1.1118 +			throws UnsupportedRdbmsOperatorException {
  1.1119 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1120 +				SpatialFunctionsPostGIS.ST_AsGML);
  1.1121 +	}
  1.1122  
  1.1123 -	//	@Override
  1.1124 -	//	protected void append(GeneralDBSqlGeoSrid expr, GeneralDBSqlExprBuilder filter)
  1.1125 -	//	throws UnsupportedRdbmsOperatorException
  1.1126 -	//	{
  1.1127 -	//		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_SRID);
  1.1128 -	//	}
  1.1129 +	// @Override
  1.1130 +	// protected void append(GeneralDBSqlGeoSrid expr, GeneralDBSqlExprBuilder
  1.1131 +	// filter)
  1.1132 +	// throws UnsupportedRdbmsOperatorException
  1.1133 +	// {
  1.1134 +	// appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1135 +	// SpatialFunctionsPostGIS.ST_SRID);
  1.1136 +	// }
  1.1137  
  1.1138  	/**
  1.1139 -	 * Special Case because I need to retrieve a single different column from geo_values when this function occurs
  1.1140 -	 * in the select clause
  1.1141 +	 * Special Case because I need to retrieve a single different column from
  1.1142 +	 * geo_values when this function occurs in the select clause
  1.1143  	 */
  1.1144  	@Override
  1.1145 -	protected void append(GeneralDBSqlGeoSrid expr, GeneralDBSqlExprBuilder filter)
  1.1146 -			throws UnsupportedRdbmsOperatorException
  1.1147 -			{
  1.1148 +	protected void append(GeneralDBSqlGeoSrid expr,
  1.1149 +			GeneralDBSqlExprBuilder filter)
  1.1150 +			throws UnsupportedRdbmsOperatorException {
  1.1151  		boolean sridNeeded = true;
  1.1152  		filter.openBracket();
  1.1153  
  1.1154 -		boolean check1 = expr.getArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1155 +		boolean check1 = expr.getArg().getClass().getCanonicalName()
  1.1156 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1157  		boolean check2 = false;
  1.1158 -		if(expr.getArg() instanceof GeneralDBLabelColumn)
  1.1159 -		{
  1.1160 -			if(((GeneralDBLabelColumn) expr.getArg()).getRdbmsVar().isResource())
  1.1161 -			{
  1.1162 +		if (expr.getArg() instanceof GeneralDBLabelColumn) {
  1.1163 +			if (((GeneralDBLabelColumn) expr.getArg()).getRdbmsVar()
  1.1164 +					.isResource()) {
  1.1165  				check2 = true;
  1.1166  			}
  1.1167  		}
  1.1168 -		if(check1)
  1.1169 -		{
  1.1170 -			this.append((GeneralDBSqlNull)expr.getArg(), filter);
  1.1171 +		if (check1) {
  1.1172 +			this.append((GeneralDBSqlNull) expr.getArg(), filter);
  1.1173  
  1.1174 -		}
  1.1175 -		else if (check2)
  1.1176 -		{
  1.1177 -			appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter);
  1.1178 -		}
  1.1179 -		else
  1.1180 -		{
  1.1181 -			//XXX Incorporating SRID
  1.1182 +		} else if (check2) {
  1.1183 +			appendMBB((GeneralDBLabelColumn) (expr.getArg()), filter);
  1.1184 +		} else {
  1.1185 +			// XXX Incorporating SRID
  1.1186  			GeneralDBSqlExpr tmp = expr;
  1.1187 -			if(tmp.getParentNode() == null)
  1.1188 -			{
  1.1189 +			if (tmp.getParentNode() == null) {
  1.1190  				String sridExpr;
  1.1191 -				while(true)
  1.1192 -				{
  1.1193 +				while (true) {
  1.1194  					GeneralDBSqlExpr child = null;
  1.1195  
  1.1196 -					if(tmp instanceof BinaryGeneralDBOperator)
  1.1197 -					{
  1.1198 +					if (tmp instanceof BinaryGeneralDBOperator) {
  1.1199  						child = ((BinaryGeneralDBOperator) tmp).getLeftArg();
  1.1200 -					}
  1.1201 -					else if(tmp instanceof UnaryGeneralDBOperator)
  1.1202 -					{
  1.1203 +					} else if (tmp instanceof UnaryGeneralDBOperator) {
  1.1204  						child = ((UnaryGeneralDBOperator) tmp).getArg();
  1.1205 -					}
  1.1206 -					else if(tmp instanceof GeneralDBStringValue)
  1.1207 -					{
  1.1208 -						//Constant!!
  1.1209 -						sridNeeded  = false;
  1.1210 +					} else if (tmp instanceof GeneralDBStringValue) {
  1.1211 +						// Constant!!
  1.1212 +						sridNeeded = false;
  1.1213  						break;
  1.1214  					}
  1.1215  
  1.1216  					tmp = child;
  1.1217 -					if(tmp instanceof GeneralDBLabelColumn)
  1.1218 -					{
  1.1219 -						//Reached the innermost left var -> need to capture its SRID
  1.1220 +					if (tmp instanceof GeneralDBLabelColumn) {
  1.1221 +						// Reached the innermost left var -> need to capture its
  1.1222 +						// SRID
  1.1223  						String alias;
  1.1224 -						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
  1.1225 -							//Predicates used in triple patterns non-existent in db
  1.1226 -							alias="NULL";
  1.1227 -						}
  1.1228 -						else
  1.1229 -						{
  1.1230 -							//Reached the innermost left var -> need to capture its SRID
  1.1231 -							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
  1.1232 -							alias=alias+".srid";
  1.1233 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar()
  1.1234 +								.isResource()) {
  1.1235 +							// Predicates used in triple patterns non-existent
  1.1236 +							// in db
  1.1237 +							alias = "NULL";
  1.1238 +						} else {
  1.1239 +							// Reached the innermost left var -> need to capture
  1.1240 +							// its SRID
  1.1241 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp)
  1.1242 +									.getRdbmsVar());
  1.1243 +							alias = alias + ".srid";
  1.1244  						}
  1.1245  						sridExpr = alias;
  1.1246  						filter.append(sridExpr);
  1.1247  						filter.closeBracket();
  1.1248  						return;
  1.1249 -						//break;
  1.1250 -					}
  1.1251 -					else if(tmp instanceof GeneralDBStringValue)
  1.1252 -					{
  1.1253 -						//Constant!!
  1.1254 -						sridNeeded  = false;
  1.1255 +						// break;
  1.1256 +					} else if (tmp instanceof GeneralDBStringValue) {
  1.1257 +						// Constant!!
  1.1258 +						sridNeeded = false;
  1.1259  						break;
  1.1260  					}
  1.1261  
  1.1262  				}
  1.1263  			}
  1.1264  
  1.1265 -			if(sridNeeded)
  1.1266 -			{
  1.1267 +			if (sridNeeded) {
  1.1268  				filter.appendFunction("ST_SRID");
  1.1269  				filter.openBracket();
  1.1270 -				if(expr.getArg() instanceof GeneralDBStringValue)
  1.1271 -				{
  1.1272 -					appendWKT(expr.getArg(),filter);
  1.1273 -				}
  1.1274 -				else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1275 -				{
  1.1276 +				if (expr.getArg() instanceof GeneralDBStringValue) {
  1.1277 +					appendWKT(expr.getArg(), filter);
  1.1278 +				} else if (expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.1279  					appendConstructFunction(expr.getArg(), filter);
  1.1280 -				}
  1.1281 -				else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1282 -				{
  1.1283 +				} else if (expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.1284  					appendConstructFunction(expr.getArg(), filter);
  1.1285 -				}
  1.1286 -				else if(expr.getArg() instanceof GeneralDBSqlCase)
  1.1287 -				{
  1.1288 -					GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getArg()).getEntries().get(0).getResult();
  1.1289 -					appendMBB(onlyLabel,filter); 
  1.1290 -				}
  1.1291 -				else
  1.1292 -				{
  1.1293 -					appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter);
  1.1294 +				} else if (expr.getArg() instanceof GeneralDBSqlCase) {
  1.1295 +					GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.1296 +							.getArg()).getEntries().get(0).getResult();
  1.1297 +					appendMBB(onlyLabel, filter);
  1.1298 +				} else {
  1.1299 +					appendMBB((GeneralDBLabelColumn) (expr.getArg()), filter);
  1.1300  				}
  1.1301  
  1.1302  				filter.closeBracket();
  1.1303 -			}
  1.1304 -			else
  1.1305 -			{
  1.1306 -				//4326 by default - Software House additions
  1.1307 +			} else {
  1.1308 +				// 4326 by default - Software House additions
  1.1309  				filter.append("4326");
  1.1310  			}
  1.1311  		}
  1.1312  
  1.1313  		filter.closeBracket();
  1.1314 -			}
  1.1315 +	}
  1.1316  
  1.1317  	@Override
  1.1318 -	protected void append(GeneralDBSqlGeoIsSimple expr, GeneralDBSqlExprBuilder filter)
  1.1319 -			throws UnsupportedRdbmsOperatorException
  1.1320 -			{
  1.1321 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_IsSimple);
  1.1322 -			}
  1.1323 +	protected void append(GeneralDBSqlGeoIsSimple expr,
  1.1324 +			GeneralDBSqlExprBuilder filter)
  1.1325 +			throws UnsupportedRdbmsOperatorException {
  1.1326 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1327 +				SpatialFunctionsPostGIS.ST_IsSimple);
  1.1328 +	}
  1.1329  
  1.1330  	@Override
  1.1331 -	protected void append(GeneralDBSqlGeoIsEmpty expr, GeneralDBSqlExprBuilder filter)
  1.1332 -			throws UnsupportedRdbmsOperatorException
  1.1333 -			{
  1.1334 -		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_IsEmpty);
  1.1335 -			}
  1.1336 -
  1.1337 +	protected void append(GeneralDBSqlGeoIsEmpty expr,
  1.1338 +			GeneralDBSqlExprBuilder filter)
  1.1339 +			throws UnsupportedRdbmsOperatorException {
  1.1340 +		appendGeneralDBSpatialFunctionUnary(expr, filter,
  1.1341 +				SpatialFunctionsPostGIS.ST_IsEmpty);
  1.1342 +	}
  1.1343  
  1.1344  	/**
  1.1345  	 * 'helper' functions
  1.1346  	 */
  1.1347  
  1.1348  	@Override
  1.1349 -	protected String appendWKT(GeneralDBSqlExpr expr, GeneralDBSqlExprBuilder filter)
  1.1350 -	{
  1.1351 +	protected String appendWKT(GeneralDBSqlExpr expr,
  1.1352 +			GeneralDBSqlExprBuilder filter) {
  1.1353  		GeneralDBStringValue arg = (GeneralDBStringValue) expr;
  1.1354  		String raw = arg.getValue();
  1.1355  
  1.1356  		StrabonPolyhedron poly = null;
  1.1357 -		try{
  1.1358 +		try {
  1.1359  			poly = new StrabonPolyhedron(raw);
  1.1360  		} catch (Exception e) {
  1.1361  			e.printStackTrace();
  1.1362  		}
  1.1363  
  1.1364 -		filter.append(" ST_GeomFromText('"+poly.toWKT() +"',4326)");
  1.1365 +		filter.append(" ST_GeomFromText('" + poly.toWKT() + "',4326)");
  1.1366  
  1.1367  		return raw;
  1.1368  	}
  1.1369  
  1.1370 -	//Used in all the generaldb boolean spatial functions of the form ?GEO1 ~ ?GEO2 
  1.1371 -	//	protected void appendStSPARQLSpatialOperand(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialOperandsPostGIS operand) throws UnsupportedRdbmsOperatorException
  1.1372 -	//	{
  1.1373 -	//		filter.openBracket();
  1.1374 +	// Used in all the generaldb boolean spatial functions of the form ?GEO1 ~
  1.1375 +	// ?GEO2
  1.1376 +	// protected void appendStSPARQLSpatialOperand(BinaryGeneralDBOperator expr,
  1.1377 +	// GeneralDBSqlExprBuilder filter, SpatialOperandsPostGIS operand) throws
  1.1378 +	// UnsupportedRdbmsOperatorException
  1.1379 +	// {
  1.1380 +	// filter.openBracket();
  1.1381  	//
  1.1382 -	//		boolean check1a = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1383 -	//		//boolean check2a = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1384 +	// boolean check1a =
  1.1385 +	// expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1386 +	// //boolean check2a =
  1.1387 +	// expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1388  	//
  1.1389 -	//		if(check1a)
  1.1390 -	//		{
  1.1391 -	//			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.1392 +	// if(check1a)
  1.1393 +	// {
  1.1394 +	// this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.1395  	//
  1.1396 -	//		}
  1.1397 -	////		else if(check2a)
  1.1398 -	////		{
  1.1399 -	////			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1400 -	////		}
  1.1401 -	//		else
  1.1402 -	//		{
  1.1403 -	//			if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.1404 -	//			{
  1.1405 -	//				this.append((GeneralDBSqlCase)expr.getLeftArg(), filter);
  1.1406 -	//			}
  1.1407 -	//			else if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.1408 -	//			{
  1.1409 -	//				appendWKT(expr.getLeftArg(),filter);
  1.1410 -	//			}
  1.1411 -	//			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1412 -	//			{
  1.1413 -	//				appendConstructFunction(expr.getLeftArg(), filter);
  1.1414 -	//			}
  1.1415 -	//			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1416 -	//			{
  1.1417 -	//				appendConstructFunction(expr.getLeftArg(), filter);
  1.1418 -	//			}
  1.1419 -	//			else
  1.1420 -	//			{
  1.1421 -	//				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.1422 -	//			}
  1.1423 +	// }
  1.1424 +	// // else if(check2a)
  1.1425 +	// // {
  1.1426 +	// // this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1427 +	// // }
  1.1428 +	// else
  1.1429 +	// {
  1.1430 +	// if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.1431 +	// {
  1.1432 +	// this.append((GeneralDBSqlCase)expr.getLeftArg(), filter);
  1.1433 +	// }
  1.1434 +	// else if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.1435 +	// {
  1.1436 +	// appendWKT(expr.getLeftArg(),filter);
  1.1437 +	// }
  1.1438 +	// else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1439 +	// {
  1.1440 +	// appendConstructFunction(expr.getLeftArg(), filter);
  1.1441 +	// }
  1.1442 +	// else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1443 +	// {
  1.1444 +	// appendConstructFunction(expr.getLeftArg(), filter);
  1.1445 +	// }
  1.1446 +	// else
  1.1447 +	// {
  1.1448 +	// appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.1449 +	// }
  1.1450  	//
  1.1451 -	//			switch(operand)
  1.1452 -	//			{
  1.1453 -	//			case mbbIntersects: filter.mbbIntersects(); break;
  1.1454 -	//			case equals: filter.equals(); break;
  1.1455 -	//			case contains: filter.contains(); break;
  1.1456 -	//			case inside: filter.inside(); break;
  1.1457 -	//			case left: filter.left(); break;
  1.1458 -	//			case right: filter.right(); break;
  1.1459 -	//			case above: filter.above(); break;
  1.1460 -	//			case below: filter.below(); break;
  1.1461 -	//			}
  1.1462 +	// switch(operand)
  1.1463 +	// {
  1.1464 +	// case mbbIntersects: filter.mbbIntersects(); break;
  1.1465 +	// case equals: filter.equals(); break;
  1.1466 +	// case contains: filter.contains(); break;
  1.1467 +	// case inside: filter.inside(); break;
  1.1468 +	// case left: filter.left(); break;
  1.1469 +	// case right: filter.right(); break;
  1.1470 +	// case above: filter.above(); break;
  1.1471 +	// case below: filter.below(); break;
  1.1472 +	// }
  1.1473  	//
  1.1474 -	//			boolean check2a = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1475 +	// boolean check2a =
  1.1476 +	// expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1477  	//
  1.1478 -	//			if(check2a)
  1.1479 -	//			{
  1.1480 -	//				this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1481 -	//			}
  1.1482 -	//			else
  1.1483 -	//			{
  1.1484 +	// if(check2a)
  1.1485 +	// {
  1.1486 +	// this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1487 +	// }
  1.1488 +	// else
  1.1489 +	// {
  1.1490  	//
  1.1491 -	//				if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.1492 -	//				{
  1.1493 -	//					this.append((GeneralDBSqlCase)expr.getRightArg(), filter);
  1.1494 -	//				}
  1.1495 -	//				else if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.1496 -	//				{
  1.1497 -	//					appendWKT(expr.getRightArg(),filter);
  1.1498 -	//				}
  1.1499 -	//				else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1500 -	//				{
  1.1501 -	//					appendConstructFunction(expr.getRightArg(), filter);
  1.1502 -	//				}
  1.1503 -	//				else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1504 -	//				{
  1.1505 -	//					appendConstructFunction(expr.getRightArg(), filter);
  1.1506 -	//				}
  1.1507 -	//				else
  1.1508 -	//				{
  1.1509 -	//					appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.1510 -	//				}
  1.1511 +	// if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.1512 +	// {
  1.1513 +	// this.append((GeneralDBSqlCase)expr.getRightArg(), filter);
  1.1514 +	// }
  1.1515 +	// else if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.1516 +	// {
  1.1517 +	// appendWKT(expr.getRightArg(),filter);
  1.1518 +	// }
  1.1519 +	// else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1520 +	// {
  1.1521 +	// appendConstructFunction(expr.getRightArg(), filter);
  1.1522 +	// }
  1.1523 +	// else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1524 +	// {
  1.1525 +	// appendConstructFunction(expr.getRightArg(), filter);
  1.1526 +	// }
  1.1527 +	// else
  1.1528 +	// {
  1.1529 +	// appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.1530 +	// }
  1.1531  	//
  1.1532 -	//			}
  1.1533 -	//		}
  1.1534 -	//		filter.closeBracket();
  1.1535 -	//	}
  1.1536 +	// }
  1.1537 +	// }
  1.1538 +	// filter.closeBracket();
  1.1539 +	// }
  1.1540  
  1.1541 -
  1.1542 -	protected void appendStSPARQLSpatialOperand(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialOperandsPostGIS operand) throws UnsupportedRdbmsOperatorException
  1.1543 -	{
  1.1544 +	protected void appendStSPARQLSpatialOperand(BinaryGeneralDBOperator expr,
  1.1545 +			GeneralDBSqlExprBuilder filter, SpatialOperandsPostGIS operand)
  1.1546 +			throws UnsupportedRdbmsOperatorException {
  1.1547  		filter.openBracket();
  1.1548  
  1.1549 -		boolean check1a = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1550 -		boolean check2a = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1551 +		boolean check1a = expr.getLeftArg().getClass().getCanonicalName()
  1.1552 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1553 +		boolean check2a = expr.getRightArg().getClass().getCanonicalName()
  1.1554 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1555  
  1.1556 -		if(check1a)
  1.1557 -		{
  1.1558 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.1559 +		if (check1a) {
  1.1560 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.1561  
  1.1562 -		}
  1.1563 -		else if(check2a)
  1.1564 -		{
  1.1565 -			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1566 -		}
  1.1567 -		else
  1.1568 -		{
  1.1569 -			if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.1570 -			{
  1.1571 -				this.append((GeneralDBSqlCase)expr.getLeftArg(), filter);
  1.1572 -			}
  1.1573 -			else if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.1574 -			{
  1.1575 -				appendWKT(expr.getLeftArg(),filter);
  1.1576 -			}
  1.1577 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1578 -			{
  1.1579 +		} else if (check2a) {
  1.1580 +			this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.1581 +		} else {
  1.1582 +			if (expr.getLeftArg() instanceof GeneralDBSqlCase) {
  1.1583 +				this.append((GeneralDBSqlCase) expr.getLeftArg(), filter);
  1.1584 +			} else if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.1585 +				appendWKT(expr.getLeftArg(), filter);
  1.1586 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.1587  				appendConstructFunction(expr.getLeftArg(), filter);
  1.1588 -			}
  1.1589 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1590 -			{
  1.1591 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.1592  				appendConstructFunction(expr.getLeftArg(), filter);
  1.1593 -			}
  1.1594 -			else
  1.1595 -			{
  1.1596 -				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.1597 +			} else {
  1.1598 +				appendMBB((GeneralDBLabelColumn) (expr.getLeftArg()), filter);
  1.1599  			}
  1.1600  
  1.1601 -			switch(operand)
  1.1602 -			{
  1.1603 -			case intersects: filter.intersectsMBB(); break;
  1.1604 -			case equals: filter.equalsMBB(); break;
  1.1605 -			case contains: filter.containsMBB(); break;
  1.1606 -			case inside: filter.insideMBB(); break;
  1.1607 -			case left: filter.leftMBB(); break;
  1.1608 -			case right: filter.rightMBB(); break;
  1.1609 -			case above: filter.aboveMBB(); break;
  1.1610 -			case below: filter.belowMBB(); break;
  1.1611 +			switch (operand) {
  1.1612 +			case intersects:
  1.1613 +				filter.intersectsMBB();
  1.1614 +				break;
  1.1615 +			case equals:
  1.1616 +				filter.equalsMBB();
  1.1617 +				break;
  1.1618 +			case contains:
  1.1619 +				filter.containsMBB();
  1.1620 +				break;
  1.1621 +			case inside:
  1.1622 +				filter.insideMBB();
  1.1623 +				break;
  1.1624 +			case left:
  1.1625 +				filter.leftMBB();
  1.1626 +				break;
  1.1627 +			case right:
  1.1628 +				filter.rightMBB();
  1.1629 +				break;
  1.1630 +			case above:
  1.1631 +				filter.aboveMBB();
  1.1632 +				break;
  1.1633 +			case below:
  1.1634 +				filter.belowMBB();
  1.1635 +				break;
  1.1636  			}
  1.1637  
  1.1638 -			//			boolean check2a = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1639 +			// boolean check2a =
  1.1640 +			// expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1641  			//
  1.1642 -			//			if(check2a)
  1.1643 -			//			{
  1.1644 -			//				this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1645 -			//			}
  1.1646 -			//			else
  1.1647 -			//			{
  1.1648 +			// if(check2a)
  1.1649 +			// {
  1.1650 +			// this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1651 +			// }
  1.1652 +			// else
  1.1653 +			// {
  1.1654  
  1.1655 -			if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.1656 -			{
  1.1657 -				this.append((GeneralDBSqlCase)expr.getRightArg(), filter);
  1.1658 -			}
  1.1659 -			else if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.1660 -			{
  1.1661 -				appendWKT(expr.getRightArg(),filter);
  1.1662 -			}
  1.1663 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1664 -			{
  1.1665 +			if (expr.getRightArg() instanceof GeneralDBSqlCase) {
  1.1666 +				this.append((GeneralDBSqlCase) expr.getRightArg(), filter);
  1.1667 +			} else if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.1668 +				appendWKT(expr.getRightArg(), filter);
  1.1669 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.1670  				appendConstructFunction(expr.getRightArg(), filter);
  1.1671 -			}
  1.1672 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1673 -			{
  1.1674 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.1675  				appendConstructFunction(expr.getRightArg(), filter);
  1.1676 -			}
  1.1677 -			else
  1.1678 -			{
  1.1679 -				appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.1680 +			} else {
  1.1681 +				appendMBB((GeneralDBLabelColumn) (expr.getRightArg()), filter);
  1.1682  			}
  1.1683  
  1.1684 -			//}
  1.1685 +			// }
  1.1686  		}
  1.1687  		filter.closeBracket();
  1.1688  	}
  1.1689  
  1.1690 -	//Used in all the generaldb stsparql boolean spatial functions of the form ST_Function(?GEO1,?GEO2) 
  1.1691 -	protected void appendTransformFunc(GeneralDBSqlGeoTransform expr, GeneralDBSqlExprBuilder filter)
  1.1692 -			throws UnsupportedRdbmsOperatorException
  1.1693 -			{
  1.1694 -		//In the case where no variable is present in the expression! e.g ConvexHull("POLYGON((.....))")
  1.1695 +	// Used in all the generaldb stsparql boolean spatial functions of the form
  1.1696 +	// ST_Function(?GEO1,?GEO2)
  1.1697 +	protected void appendTransformFunc(GeneralDBSqlGeoTransform expr,
  1.1698 +			GeneralDBSqlExprBuilder filter)
  1.1699 +			throws UnsupportedRdbmsOperatorException {
  1.1700 +		// In the case where no variable is present in the expression! e.g
  1.1701 +		// ConvexHull("POLYGON((.....))")
  1.1702  		boolean sridNeeded = true;
  1.1703 -		//XXX Incorporating SRID
  1.1704 +		// XXX Incorporating SRID
  1.1705  		String sridExpr = null;
  1.1706  
  1.1707  		filter.openBracket();
  1.1708  		filter.appendFunction(ST_TRANSFORM);
  1.1709  		filter.openBracket();
  1.1710  
  1.1711 -		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1712 -		boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1713 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName()
  1.1714 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1715 +		boolean check2 = expr.getRightArg().getClass().getCanonicalName()
  1.1716 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1717  
  1.1718 -		if(check1)
  1.1719 -		{
  1.1720 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.1721 +		if (check1) {
  1.1722 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.1723  
  1.1724 -		}
  1.1725 -		else if(check2)
  1.1726 -		{
  1.1727 -			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1728 -		}
  1.1729 -		else
  1.1730 -		{
  1.1731 +		} else if (check2) {
  1.1732 +			this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.1733 +		} else {
  1.1734  			GeneralDBSqlExpr tmp = expr;
  1.1735 -			if(tmp instanceof GeneralDBSqlSpatialConstructBinary && tmp.getParentNode() == null)
  1.1736 -			{
  1.1737 -				while(true)
  1.1738 -				{
  1.1739 +			if (tmp instanceof GeneralDBSqlSpatialConstructBinary
  1.1740 +					&& tmp.getParentNode() == null) {
  1.1741 +				while (true) {
  1.1742  					GeneralDBSqlExpr child;
  1.1743  
  1.1744 -					if(tmp instanceof BinaryGeneralDBOperator)
  1.1745 -					{
  1.1746 +					if (tmp instanceof BinaryGeneralDBOperator) {
  1.1747  						child = ((BinaryGeneralDBOperator) tmp).getLeftArg();
  1.1748 -					}
  1.1749 -					else //(tmp instanceof UnaryGeneralDBOperator)
  1.1750 +					} else // (tmp instanceof UnaryGeneralDBOperator)
  1.1751  					{
  1.1752  						child = ((UnaryGeneralDBOperator) tmp).getArg();
  1.1753  					}
  1.1754  
  1.1755  					tmp = child;
  1.1756 -					if(tmp instanceof GeneralDBLabelColumn)
  1.1757 -					{
  1.1758 +					if (tmp instanceof GeneralDBLabelColumn) {
  1.1759  						String alias;
  1.1760 -						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
  1.1761 -							//Predicates used in triple patterns non-existent in db
  1.1762 -							alias="NULL";
  1.1763 -						}
  1.1764 -						else
  1.1765 -						{
  1.1766 -							//Reached the innermost left var -> need to capture its SRID
  1.1767 -							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
  1.1768 -							alias=alias+".srid";
  1.1769 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar()
  1.1770 +								.isResource()) {
  1.1771 +							// Predicates used in triple patterns non-existent
  1.1772 +							// in db
  1.1773 +							alias = "NULL";
  1.1774 +						} else {
  1.1775 +							// Reached the innermost left var -> need to capture
  1.1776 +							// its SRID
  1.1777 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp)
  1.1778 +									.getRdbmsVar());
  1.1779 +							alias = alias + ".srid";
  1.1780  						}
  1.1781  						sridExpr = alias;
  1.1782  						break;
  1.1783 -					}
  1.1784 -					else if (tmp instanceof GeneralDBStringValue) //Constant!!
  1.1785 +					} else if (tmp instanceof GeneralDBStringValue) // Constant!!
  1.1786  					{
  1.1787 -						sridNeeded  = false;
  1.1788 +						sridNeeded = false;
  1.1789  						break;
  1.1790  					}
  1.1791  
  1.1792  				}
  1.1793 -				if(sridNeeded)
  1.1794 -				{
  1.1795 +				if (sridNeeded) {
  1.1796  					filter.appendFunction(ST_TRANSFORM);
  1.1797  					filter.openBracket();
  1.1798  				}
  1.1799  			}
  1.1800  
  1.1801 -			if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.1802 -			{
  1.1803 -				appendWKT(expr.getLeftArg(),filter);
  1.1804 -			}
  1.1805 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.1806 -			{
  1.1807 +			if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.1808 +				appendWKT(expr.getLeftArg(), filter);
  1.1809 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.1810  				appendConstructFunction(expr.getLeftArg(), filter);
  1.1811 -			}
  1.1812 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.1813 -			{
  1.1814 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.1815  				appendConstructFunction(expr.getLeftArg(), filter);
  1.1816 -			}
  1.1817 -			else if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.1818 -			{
  1.1819 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getLeftArg()).getEntries().get(0).getResult();
  1.1820 -				appendMBB(onlyLabel,filter); 
  1.1821 -			}
  1.1822 -			else
  1.1823 -			{
  1.1824 -				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.1825 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlCase) {
  1.1826 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.1827 +						.getLeftArg()).getEntries().get(0).getResult();
  1.1828 +				appendMBB(onlyLabel, filter);
  1.1829 +			} else {
  1.1830 +				appendMBB((GeneralDBLabelColumn) (expr.getLeftArg()), filter);
  1.1831  			}
  1.1832  
  1.1833 -			//SRID Support
  1.1834 -			if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null)
  1.1835 -			{
  1.1836 +			// SRID Support
  1.1837 +			if (expr instanceof GeneralDBSqlSpatialConstructBinary
  1.1838 +					&& expr.getParentNode() == null) {
  1.1839  				filter.appendComma();
  1.1840 -				//filter.append(((GeneralDBSqlSpatialConstructBinary)expr).getSrid());
  1.1841 +				// filter.append(((GeneralDBSqlSpatialConstructBinary)expr).getSrid());
  1.1842  				filter.append(sridExpr);
  1.1843  				filter.closeBracket();
  1.1844  			}
  1.1845  
  1.1846  			filter.appendComma();
  1.1847  
  1.1848 -			if(expr.getRightArg() instanceof GeneralDBSqlCase) //case met in transform!
  1.1849 +			if (expr.getRightArg() instanceof GeneralDBSqlCase) // case met in
  1.1850 +																// transform!
  1.1851  			{
  1.1852 -				GeneralDBURIColumn plainURI = (GeneralDBURIColumn)((GeneralDBSqlCase)expr.getRightArg()).getEntries().get(0).getResult();
  1.1853 +				GeneralDBURIColumn plainURI = (GeneralDBURIColumn) ((GeneralDBSqlCase) expr
  1.1854 +						.getRightArg()).getEntries().get(0).getResult();
  1.1855  
  1.1856 -				//XXX This case would be met if we recovered the SRID URI from the db!!!
  1.1857 -				//Need to set sridExpr to the value of this new URI, otherwise the appended uri
  1.1858 -				//to the spatial object will be the wrong one!!!! (Seee following case)
  1.1859 +				// XXX This case would be met if we recovered the SRID URI from
  1.1860 +				// the db!!!
  1.1861 +				// Need to set sridExpr to the value of this new URI, otherwise
  1.1862 +				// the appended uri
  1.1863 +				// to the spatial object will be the wrong one!!!! (Seee
  1.1864 +				// following case)
  1.1865  				filter.keepSRID_part1();
  1.1866  				append(plainURI, filter);
  1.1867  				filter.keepSRID_part2();
  1.1868  				append(plainURI, filter);
  1.1869  				filter.keepSRID_part3();
  1.1870 -			}
  1.1871 -			else if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.1872 -			{
  1.1873 -				String unparsedSRID = ((GeneralDBStringValue)expr.getRightArg()).getValue();
  1.1874 -				//				int srid = Integer.parseInt(unparsedSRID.substring(unparsedSRID.lastIndexOf('/')+1));
  1.1875 -				sridExpr = unparsedSRID.substring(unparsedSRID.lastIndexOf('/')+1);
  1.1876 +			} else if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.1877 +				String unparsedSRID = ((GeneralDBStringValue) expr
  1.1878 +						.getRightArg()).getValue();
  1.1879 +				// int srid =
  1.1880 +				// Integer.parseInt(unparsedSRID.substring(unparsedSRID.lastIndexOf('/')+1));
  1.1881 +				sridExpr = unparsedSRID
  1.1882 +						.substring(unparsedSRID.lastIndexOf('/') + 1);
  1.1883  				filter.append(sridExpr);
  1.1884  				filter.closeBracket();
  1.1885  			}
  1.1886  
  1.1887 -
  1.1888  		}
  1.1889  		filter.closeBracket();
  1.1890 -		//In this case, SRID is the one that has been provided by the user!! 
  1.1891 -		//I am including this extra binding to be used in subsequent (Aggregate) steps
  1.1892 -		if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null)
  1.1893 -		{
  1.1894 +		// In this case, SRID is the one that has been provided by the user!!
  1.1895 +		// I am including this extra binding to be used in subsequent
  1.1896 +		// (Aggregate) steps
  1.1897 +		if (expr instanceof GeneralDBSqlSpatialConstructBinary
  1.1898 +				&& expr.getParentNode() == null) {
  1.1899  			filter.appendComma();
  1.1900  			filter.append(sridExpr);
  1.1901  		}
  1.1902  
  1.1903 -			}
  1.1904 +	}
  1.1905  
  1.1906 -	/** Addition for datetime metric functions
  1.1907 +	/**
  1.1908 +	 * Addition for datetime metric functions
  1.1909  	 * 
  1.1910  	 * @author George Garbis <ggarbis@di.uoa.gr>
  1.1911  	 * 
  1.1912  	 */
  1.1913 -	protected void appendGeneralDBDateTimeFunctionBinary(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, DateTimeFunctionPostGIS func)
  1.1914 -			throws UnsupportedRdbmsOperatorException
  1.1915 -	{
  1.1916 +	protected void appendGeneralDBDateTimeFunctionBinary(
  1.1917 +			BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter,
  1.1918 +			DateTimeFunctionPostGIS func)
  1.1919 +			throws UnsupportedRdbmsOperatorException {
  1.1920  		filter.openBracket();
  1.1921  
  1.1922 -		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1923 -		boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1924 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName()
  1.1925 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1926 +		boolean check2 = expr.getRightArg().getClass().getCanonicalName()
  1.1927 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.1928  
  1.1929 -		if(check1)
  1.1930 -		{
  1.1931 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.1932 +		if (check1) {
  1.1933 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.1934  
  1.1935 -		}
  1.1936 -		else if(check2)
  1.1937 -		{
  1.1938 -			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.1939 -		}
  1.1940 -		else
  1.1941 -		{
  1.1942 +		} else if (check2) {
  1.1943 +			this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.1944 +		} else {
  1.1945  
  1.1946  			GeneralDBSqlExpr tmp = expr;
  1.1947 -			if(tmp instanceof GeneralDBSqlSpatialConstructBinary && tmp.getParentNode() == null)
  1.1948 -			{
  1.1949 -				while(true)
  1.1950 -				{
  1.1951 +			if (tmp instanceof GeneralDBSqlSpatialConstructBinary
  1.1952 +					&& tmp.getParentNode() == null) {
  1.1953 +				while (true) {
  1.1954  					GeneralDBSqlExpr child;
  1.1955  
  1.1956 -					if(tmp instanceof BinaryGeneralDBOperator)
  1.1957 -					{
  1.1958 +					if (tmp instanceof BinaryGeneralDBOperator) {
  1.1959  						child = ((BinaryGeneralDBOperator) tmp).getLeftArg();
  1.1960 -					}
  1.1961 -					else //(tmp instanceof UnaryGeneralDBOperator)
  1.1962 +					} else // (tmp instanceof UnaryGeneralDBOperator)
  1.1963  					{
  1.1964  						child = ((UnaryGeneralDBOperator) tmp).getArg();
  1.1965  					}
  1.1966  
  1.1967  					tmp = child;
  1.1968 -					if(tmp instanceof GeneralDBLabelColumn)
  1.1969 -					{
  1.1970 -						//Reached the innermost left var -> need to capture its SRID
  1.1971 +					if (tmp instanceof GeneralDBLabelColumn) {
  1.1972 +						// Reached the innermost left var -> need to capture its
  1.1973 +						// SRID
  1.1974  						String alias;
  1.1975 -						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
  1.1976 -							//Predicates used in triple patterns non-existent in db
  1.1977 -							alias="NULL";
  1.1978 -						}
  1.1979 -						else
  1.1980 -						{
  1.1981 -							//Reached the innermost left var -> need to capture its SRID
  1.1982 -							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
  1.1983 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar()
  1.1984 +								.isResource()) {
  1.1985 +							// Predicates used in triple patterns non-existent
  1.1986 +							// in db
  1.1987 +							alias = "NULL";
  1.1988 +						} else {
  1.1989 +							// Reached the innermost left var -> need to capture
  1.1990 +							// its SRID
  1.1991 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp)
  1.1992 +									.getRdbmsVar());
  1.1993  						}
  1.1994  						break;
  1.1995  					}
  1.1996 @@ -1338,640 +1348,606 @@
  1.1997  
  1.1998  			filter.openBracket();
  1.1999  
  1.2000 -			if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.2001 -			{
  1.2002 -				GeneralDBStringValue arg = (GeneralDBStringValue) expr.getLeftArg();
  1.2003 +			if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.2004 +				GeneralDBStringValue arg = (GeneralDBStringValue) expr
  1.2005 +						.getLeftArg();
  1.2006  				String raw = arg.getValue();
  1.2007 -				filter.append(" "+raw+" ");
  1.2008 -			}
  1.2009 -			else if(expr.getLeftArg() instanceof GeneralDBNumberValue)
  1.2010 -			{
  1.2011 -				append(((GeneralDBNumberValue)expr.getLeftArg()), filter);
  1.2012 -			}
  1.2013 -			else if(expr.getLeftArg() instanceof GeneralDBDateTimeColumn)
  1.2014 -			{
  1.2015 -				append(((GeneralDBDateTimeColumn)expr.getLeftArg()),filter);
  1.2016 -			}
  1.2017 -			else
  1.2018 -			{
  1.2019 -				// Den prepei na ftasei edw
  1.2020 -			}
  1.2021 -						
  1.2022 -			switch(func)
  1.2023 -			{
  1.2024 -				case Difference: filter.append(" - "); break;			
  1.2025 -			}
  1.2026 -			
  1.2027 -			if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.2028 -			{
  1.2029 -				GeneralDBStringValue arg = (GeneralDBStringValue) expr.getRightArg();
  1.2030 -				String raw = arg.getValue();
  1.2031 -				filter.append(" "+raw+" ");
  1.2032 -			}
  1.2033 -			else if(expr.getRightArg() instanceof GeneralDBNumberValue)
  1.2034 -			{
  1.2035 -				append(((GeneralDBNumberValue)expr.getRightArg()), filter);
  1.2036 -			}
  1.2037 -			else if(expr.getRightArg() instanceof GeneralDBDateTimeColumn)
  1.2038 -			{
  1.2039 -				append(((GeneralDBDateTimeColumn)expr.getRightArg()),filter);	
  1.2040 -			}
  1.2041 -			else
  1.2042 -			{
  1.2043 +				filter.append(" " + raw + " ");
  1.2044 +			} else if (expr.getLeftArg() instanceof GeneralDBNumberValue) {
  1.2045 +				append(((GeneralDBNumberValue) expr.getLeftArg()), filter);
  1.2046 +			} else if (expr.getLeftArg() instanceof GeneralDBDateTimeColumn) {
  1.2047 +				append(((GeneralDBDateTimeColumn) expr.getLeftArg()), filter);
  1.2048 +			} else {
  1.2049  				// Den prepei na ftasei edw
  1.2050  			}
  1.2051  
  1.2052 +			switch (func) {
  1.2053 +			case Difference:
  1.2054 +				filter.append(" - ");
  1.2055 +				break;
  1.2056 +			}
  1.2057 +
  1.2058 +			if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.2059 +				GeneralDBStringValue arg = (GeneralDBStringValue) expr
  1.2060 +						.getRightArg();
  1.2061 +				String raw = arg.getValue();
  1.2062 +				filter.append(" " + raw + " ");
  1.2063 +			} else if (expr.getRightArg() instanceof GeneralDBNumberValue) {
  1.2064 +				append(((GeneralDBNumberValue) expr.getRightArg()), filter);
  1.2065 +			} else if (expr.getRightArg() instanceof GeneralDBDateTimeColumn) {
  1.2066 +				append(((GeneralDBDateTimeColumn) expr.getRightArg()), filter);
  1.2067 +			} else {
  1.2068 +				// Den prepei na ftasei edw
  1.2069 +			}
  1.2070  
  1.2071  			filter.closeBracket();
  1.2072  		}
  1.2073  		filter.closeBracket();
  1.2074 -	}	
  1.2075 +	}
  1.2076 +
  1.2077  	/***/
  1.2078  
  1.2079 -	//Used in all the generaldb stsparql boolean spatial functions of the form ST_Function(?GEO1,?GEO2) 
  1.2080 -	//EXCEPT ST_Transform!!!
  1.2081 -	protected void appendGeneralDBSpatialFunctionBinary(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialFunctionsPostGIS func)
  1.2082 -			throws UnsupportedRdbmsOperatorException
  1.2083 -			{
  1.2084 -		//In the case where no variable is present in the expression! e.g ConvexHull("POLYGON((.....))")
  1.2085 +	// Used in all the generaldb stsparql boolean spatial functions of the form
  1.2086 +	// ST_Function(?GEO1,?GEO2)
  1.2087 +	// EXCEPT ST_Transform!!!
  1.2088 +	protected void appendGeneralDBSpatialFunctionBinary(
  1.2089 +			BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter,
  1.2090 +			SpatialFunctionsPostGIS func)
  1.2091 +			throws UnsupportedRdbmsOperatorException {
  1.2092 +		// In the case where no variable is present in the expression! e.g
  1.2093 +		// ConvexHull("POLYGON((.....))")
  1.2094  		boolean sridNeeded = true;
  1.2095 -		//XXX Incorporating SRID
  1.2096 +		// XXX Incorporating SRID
  1.2097  		String sridExpr = null;
  1.2098  
  1.2099  		filter.openBracket();
  1.2100  
  1.2101 -		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2102 -		boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2103 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName()
  1.2104 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2105 +		boolean check2 = expr.getRightArg().getClass().getCanonicalName()
  1.2106 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2107  
  1.2108 -		if(check1)
  1.2109 -		{
  1.2110 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.2111 +		if (check1) {
  1.2112 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.2113  
  1.2114 -		}
  1.2115 -		else if(check2)
  1.2116 -		{
  1.2117 -			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.2118 -		}
  1.2119 -		else
  1.2120 -		{
  1.2121 +		} else if (check2) {
  1.2122 +			this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.2123 +		} else {
  1.2124  
  1.2125  			GeneralDBSqlExpr tmp = expr;
  1.2126 -			if(tmp instanceof GeneralDBSqlSpatialConstructBinary && tmp.getParentNode() == null)
  1.2127 -			{
  1.2128 -				while(true)
  1.2129 -				{
  1.2130 +			if (tmp instanceof GeneralDBSqlSpatialConstructBinary
  1.2131 +					&& tmp.getParentNode() == null) {
  1.2132 +				while (true) {
  1.2133  					GeneralDBSqlExpr child;
  1.2134  
  1.2135 -					if(tmp instanceof BinaryGeneralDBOperator)
  1.2136 -					{
  1.2137 +					if (tmp instanceof BinaryGeneralDBOperator) {
  1.2138  						child = ((BinaryGeneralDBOperator) tmp).getLeftArg();
  1.2139 -					}
  1.2140 -					else //(tmp instanceof UnaryGeneralDBOperator)
  1.2141 +					} else // (tmp instanceof UnaryGeneralDBOperator)
  1.2142  					{
  1.2143  						child = ((UnaryGeneralDBOperator) tmp).getArg();
  1.2144  					}
  1.2145  
  1.2146  					tmp = child;
  1.2147 -					if(tmp instanceof GeneralDBLabelColumn)
  1.2148 -					{
  1.2149 -						//Reached the innermost left var -> need to capture its SRID
  1.2150 +					if (tmp instanceof GeneralDBLabelColumn) {
  1.2151 +						// Reached the innermost left var -> need to capture its
  1.2152 +						// SRID
  1.2153  						String alias;
  1.2154 -						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
  1.2155 -							//Predicates used in triple patterns non-existent in db
  1.2156 -							alias="NULL";
  1.2157 -						}
  1.2158 -						else
  1.2159 -						{
  1.2160 -							//Reached the innermost left var -> need to capture its SRID
  1.2161 -							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
  1.2162 -							alias=alias+".srid";
  1.2163 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar()
  1.2164 +								.isResource()) {
  1.2165 +							// Predicates used in triple patterns non-existent
  1.2166 +							// in db
  1.2167 +							alias = "NULL";
  1.2168 +						} else {
  1.2169 +							// Reached the innermost left var -> need to capture
  1.2170 +							// its SRID
  1.2171 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp)
  1.2172 +									.getRdbmsVar());
  1.2173 +							alias = alias + ".srid";
  1.2174  						}
  1.2175  						sridExpr = alias;
  1.2176  						break;
  1.2177 -					}
  1.2178 -					else if (tmp instanceof GeneralDBStringValue) //Constant!!
  1.2179 +					} else if (tmp instanceof GeneralDBStringValue) // Constant!!
  1.2180  					{
  1.2181 -						sridNeeded  = false;
  1.2182 +						sridNeeded = false;
  1.2183  						break;
  1.2184  					}
  1.2185  
  1.2186  				}
  1.2187 -				if(sridNeeded)
  1.2188 -				{
  1.2189 +				if (sridNeeded) {
  1.2190  					filter.appendFunction(ST_TRANSFORM);
  1.2191  					filter.openBracket();
  1.2192  				}
  1.2193  			}
  1.2194 -			/////
  1.2195 +			// ///
  1.2196  
  1.2197 +			switch (func) {
  1.2198 +			// XXX Careful: ST_Transform support MISSING!!!
  1.2199 +			case ST_Difference:
  1.2200 +				filter.appendFunction("ST_Difference");
  1.2201 +				break;
  1.2202 +			case ST_Intersection:
  1.2203 +				filter.appendFunction("ST_Intersection");
  1.2204 +				break;
  1.2205 +			case ST_Union:
  1.2206 +				filter.appendFunction("ST_Union");
  1.2207 +				break;
  1.2208 +			case ST_SymDifference:
  1.2209 +				filter.appendFunction("ST_SymDifference");
  1.2210 +				break;
  1.2211 +			case ST_Buffer:
  1.2212 +				filter.appendFunction("ST_Buffer");
  1.2213 +				break;
  1.2214 +			case ST_Distance:
  1.2215 +				filter.appendFunction("ST_Distance");
  1.2216 +				break;
  1.2217  
  1.2218 +			case ST_Equals:
  1.2219 +			case SF_Equals:
  1.2220 +				filter.appendFunction("ST_Equals");
  1.2221 +				break;
  1.2222 +			case ST_Disjoint:
  1.2223 +			case SF_Disjoint:
  1.2224 +				filter.appendFunction("ST_Disjoint");
  1.2225 +				break;
  1.2226 +			case ST_Intersects:
  1.2227 +			case SF_Intersects:
  1.2228 +				filter.appendFunction("ST_Intersects");
  1.2229 +				break;
  1.2230 +			case ST_Touches:
  1.2231 +			case SF_Touches:
  1.2232 +				filter.appendFunction("ST_Touches");
  1.2233 +				break;
  1.2234 +			case ST_Crosses:
  1.2235 +			case SF_Crosses:
  1.2236 +				filter.appendFunction("ST_Crosses");
  1.2237 +				break;
  1.2238 +			case ST_Within:
  1.2239 +			case SF_Within:
  1.2240 +				filter.appendFunction("ST_Within");
  1.2241 +				break;
  1.2242 +			case ST_Contains:
  1.2243 +			case SF_Contains:
  1.2244 +				filter.appendFunction("ST_Contains");
  1.2245 +				break;
  1.2246 +			case ST_Overlaps:
  1.2247 +			case SF_Overlaps:
  1.2248 +				filter.appendFunction("ST_Overlaps");
  1.2249 +				break;
  1.2250  
  1.2251 -			switch(func)
  1.2252 -			{
  1.2253 -			//XXX Careful: ST_Transform support MISSING!!!
  1.2254 -			case ST_Difference: filter.appendFunction("ST_Difference"); break;
  1.2255 -			case ST_Intersection: filter.appendFunction("ST_Intersection"); break;
  1.2256 -			case ST_Union: filter.appendFunction("ST_Union"); break;
  1.2257 -			case ST_SymDifference: filter.appendFunction("ST_SymDifference"); break;
  1.2258 -			case ST_Buffer: filter.appendFunction("ST_Buffer"); break;
  1.2259 -			case ST_Distance: filter.appendFunction("ST_Distance"); break;
  1.2260 -			
  1.2261 -			case ST_Equals: filter.appendFunction("ST_Equals"); break;
  1.2262 -			case ST_Disjoint: filter.appendFunction("ST_Disjoint"); break;
  1.2263 -			case ST_Intersects: filter.appendFunction("ST_Intersects"); break;
  1.2264 -			case ST_Touches: filter.appendFunction("ST_Touches"); break;
  1.2265 -			case ST_Crosses: filter.appendFunction("ST_Crosses"); break;
  1.2266 -			case ST_Within: filter.appendFunction("ST_Within"); break;
  1.2267 -			case ST_Contains: filter.appendFunction("ST_Contains"); break;
  1.2268 -			case ST_Overlaps: filter.appendFunction("ST_Overlaps"); break;
  1.2269 -			
  1.2270  			}
  1.2271 -			
  1.2272 +
  1.2273  			filter.openBracket();
  1.2274 -			if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.2275 -			{
  1.2276 -				appendWKT(expr.getLeftArg(),filter);
  1.2277 -			}
  1.2278 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.2279 -			{
  1.2280 +			if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.2281 +				appendWKT(expr.getLeftArg(), filter);
  1.2282 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2283  				appendConstructFunction(expr.getLeftArg(), filter);
  1.2284 -			}
  1.2285 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.2286 -			{
  1.2287 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2288  				appendConstructFunction(expr.getLeftArg(), filter);
  1.2289 -			}
  1.2290 -			else if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.2291 -			{
  1.2292 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getLeftArg()).getEntries().get(0).getResult();
  1.2293 -				appendMBB(onlyLabel,filter); 
  1.2294 -			}
  1.2295 -			else
  1.2296 -			{
  1.2297 -				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.2298 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlCase) {
  1.2299 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2300 +						.getLeftArg()).getEntries().get(0).getResult();
  1.2301 +				appendMBB(onlyLabel, filter);
  1.2302 +			} else {
  1.2303 +				appendMBB((GeneralDBLabelColumn) (expr.getLeftArg()), filter);
  1.2304  			}
  1.2305  			filter.appendComma();
  1.2306  
  1.2307 -
  1.2308 -			if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.2309 +			if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.2310 +				appendWKT(expr.getRightArg(), filter);
  1.2311 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2312 +				appendConstructFunction(expr.getRightArg(), filter);
  1.2313 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2314 +				appendConstructFunction(expr.getRightArg(), filter);
  1.2315 +			} else if (expr.getRightArg() instanceof GeneralDBSqlCase) {
  1.2316 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2317 +						.getRightArg()).getEntries().get(0).getResult();
  1.2318 +				appendMBB(onlyLabel, filter);
  1.2319 +			} else if (expr.getRightArg() instanceof GeneralDBDoubleValue) // case
  1.2320 +																			// met
  1.2321 +																			// in
  1.2322 +																			// buffer!
  1.2323  			{
  1.2324 -				appendWKT(expr.getRightArg(),filter);
  1.2325 -			}
  1.2326 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.2327 +				append(((GeneralDBDoubleValue) expr.getRightArg()), filter);
  1.2328 +			} else if (expr.getRightArg() instanceof GeneralDBNumericColumn) // case
  1.2329 +																				// met
  1.2330 +																				// in
  1.2331 +																				// buffer!
  1.2332  			{
  1.2333 -				appendConstructFunction(expr.getRightArg(), filter);
  1.2334 -			}
  1.2335 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.2336 -			{
  1.2337 -				appendConstructFunction(expr.getRightArg(), filter);
  1.2338 -			}
  1.2339 -			else if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.2340 -			{
  1.2341 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getRightArg()).getEntries().get(0).getResult();
  1.2342 -				appendMBB(onlyLabel,filter);					 
  1.2343 -			}
  1.2344 -			else if(expr.getRightArg() instanceof GeneralDBDoubleValue) //case met in buffer!
  1.2345 -			{
  1.2346 -				append(((GeneralDBDoubleValue)expr.getRightArg()), filter);
  1.2347 -			}
  1.2348 -			else if(expr.getRightArg() instanceof GeneralDBNumericColumn) //case met in buffer!
  1.2349 -			{
  1.2350 -				append(((GeneralDBNumericColumn)expr.getRightArg()), filter);
  1.2351 -			}
  1.2352 -			else if(expr.getRightArg() instanceof GeneralDBURIColumn) //case met in transform!
  1.2353 +				append(((GeneralDBNumericColumn) expr.getRightArg()), filter);
  1.2354 +			} else if (expr.getRightArg() instanceof GeneralDBURIColumn) // case
  1.2355 +																			// met
  1.2356 +																			// in
  1.2357 +																			// transform!
  1.2358  			{
  1.2359  				filter.keepSRID_part1();
  1.2360 -				append(((GeneralDBURIColumn)expr.getRightArg()), filter);
  1.2361 +				append(((GeneralDBURIColumn) expr.getRightArg()), filter);
  1.2362  				filter.keepSRID_part2();
  1.2363 -				append(((GeneralDBURIColumn)expr.getRightArg()), filter);
  1.2364 +				append(((GeneralDBURIColumn) expr.getRightArg()), filter);
  1.2365  				filter.keepSRID_part3();
  1.2366  			}
  1.2367 -			//case met in buffer when in select -> buffer(?spatial,?thematic)
  1.2368 -			else if(expr.getRightArg() instanceof GeneralDBLabelColumn && !((GeneralDBLabelColumn)expr.getRightArg()).isSpatial())
  1.2369 -			{
  1.2370 -				append(((GeneralDBLabelColumn)expr.getRightArg()),filter);
  1.2371 +			// case met in buffer when in select -> buffer(?spatial,?thematic)
  1.2372 +			else if (expr.getRightArg() instanceof GeneralDBLabelColumn
  1.2373 +					&& !((GeneralDBLabelColumn) expr.getRightArg()).isSpatial()) {
  1.2374 +				append(((GeneralDBLabelColumn) expr.getRightArg()), filter);
  1.2375  				appendCastToDouble(filter);
  1.2376 -			}
  1.2377 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary)
  1.2378 -			{
  1.2379 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary) {
  1.2380  				appendMetricFunction(expr.getRightArg(), filter);
  1.2381 -			}
  1.2382 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary)
  1.2383 -			{
  1.2384 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary) {
  1.2385  				appendMetricFunction(expr.getRightArg(), filter);
  1.2386 -			}
  1.2387 -			else
  1.2388 -			{
  1.2389 -				appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.2390 +			} else {
  1.2391 +				appendMBB((GeneralDBLabelColumn) (expr.getRightArg()), filter);
  1.2392  			}
  1.2393  
  1.2394 -
  1.2395  			filter.closeBracket();
  1.2396 -			//SRID Support
  1.2397 -			if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null)
  1.2398 -			{
  1.2399 +			// SRID Support
  1.2400 +			if (expr instanceof GeneralDBSqlSpatialConstructBinary
  1.2401 +					&& expr.getParentNode() == null) {
  1.2402  				filter.appendComma();
  1.2403 -				//filter.append(((GeneralDBSqlSpatialConstructBinary)expr).getSrid());
  1.2404 +				// filter.append(((GeneralDBSqlSpatialConstructBinary)expr).getSrid());
  1.2405  				filter.append(sridExpr);
  1.2406  				filter.closeBracket();
  1.2407  			}
  1.2408 -			///
  1.2409 +			// /
  1.2410  		}
  1.2411  		filter.closeBracket();
  1.2412 -		//Used to explicitly include SRID
  1.2413 -		if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null)
  1.2414 -		{
  1.2415 +		// Used to explicitly include SRID
  1.2416 +		if (expr instanceof GeneralDBSqlSpatialConstructBinary
  1.2417 +				&& expr.getParentNode() == null) {
  1.2418  			filter.appendComma();
  1.2419  			filter.append(sridExpr);
  1.2420  		}
  1.2421  
  1.2422 -			}
  1.2423 +	}
  1.2424  
  1.2425 -	//Used in all the generaldb boolean spatial functions of the form ST_Function(?GEO1) 
  1.2426 -	protected void appendGeneralDBSpatialFunctionUnary(UnaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialFunctionsPostGIS func)
  1.2427 -			throws UnsupportedRdbmsOperatorException
  1.2428 -			{
  1.2429 -		//In the case where no variable is present in the expression! e.g ConvexHull("POLYGON((.....))")
  1.2430 +	// Used in all the generaldb boolean spatial functions of the form
  1.2431 +	// ST_Function(?GEO1)
  1.2432 +	protected void appendGeneralDBSpatialFunctionUnary(
  1.2433 +			UnaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter,
  1.2434 +			SpatialFunctionsPostGIS func)
  1.2435 +			throws UnsupportedRdbmsOperatorException {
  1.2436 +		// In the case where no variable is present in the expression! e.g
  1.2437 +		// ConvexHull("POLYGON((.....))")
  1.2438  		boolean sridNeeded = true;
  1.2439  		String sridExpr = null;
  1.2440  
  1.2441  		filter.openBracket();
  1.2442  
  1.2443 -		boolean check1 = expr.getArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2444 +		boolean check1 = expr.getArg().getClass().getCanonicalName()
  1.2445 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2446  		boolean check2 = false;
  1.2447 -		if(expr.getArg() instanceof GeneralDBLabelColumn)
  1.2448 -		{
  1.2449 -			if(((GeneralDBLabelColumn) expr.getArg()).getRdbmsVar().isResource())
  1.2450 -			{
  1.2451 +		if (expr.getArg() instanceof GeneralDBLabelColumn) {
  1.2452 +			if (((GeneralDBLabelColumn) expr.getArg()).getRdbmsVar()
  1.2453 +					.isResource()) {
  1.2454  				check2 = true;
  1.2455  			}
  1.2456  		}
  1.2457 -		if(check1)
  1.2458 -		{
  1.2459 -			this.append((GeneralDBSqlNull)expr.getArg(), filter);
  1.2460 +		if (check1) {
  1.2461 +			this.append((GeneralDBSqlNull) expr.getArg(), filter);
  1.2462  
  1.2463 -		}
  1.2464 -		else if (check2)
  1.2465 -		{
  1.2466 -			appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter);
  1.2467 -		}
  1.2468 -		else
  1.2469 -		{
  1.2470 +		} else if (check2) {
  1.2471 +			appendMBB((GeneralDBLabelColumn) (expr.getArg()), filter);
  1.2472 +		} else {
  1.2473  
  1.2474  			GeneralDBSqlExpr tmp = expr;
  1.2475  
  1.2476 -
  1.2477 -			if(tmp instanceof GeneralDBSqlSpatialConstructUnary && tmp.getParentNode() == null)
  1.2478 -			{
  1.2479 -				while(true)
  1.2480 -				{
  1.2481 +			if (tmp instanceof GeneralDBSqlSpatialConstructUnary
  1.2482 +					&& tmp.getParentNode() == null) {
  1.2483 +				while (true) {
  1.2484  					GeneralDBSqlExpr child = null;
  1.2485  
  1.2486 -					if(tmp instanceof BinaryGeneralDBOperator)
  1.2487 -					{
  1.2488 +					if (tmp instanceof BinaryGeneralDBOperator) {
  1.2489  						child = ((BinaryGeneralDBOperator) tmp).getLeftArg();
  1.2490 -					}
  1.2491 -					else if(tmp instanceof UnaryGeneralDBOperator)
  1.2492 -					{
  1.2493 +					} else if (tmp instanceof UnaryGeneralDBOperator) {
  1.2494  						child = ((UnaryGeneralDBOperator) tmp).getArg();
  1.2495 -					}
  1.2496 -					else if(tmp instanceof GeneralDBStringValue)
  1.2497 -					{
  1.2498 -						sridNeeded  = false;
  1.2499 +					} else if (tmp instanceof GeneralDBStringValue) {
  1.2500 +						sridNeeded = false;
  1.2501  						break;
  1.2502  					}
  1.2503  
  1.2504  					tmp = child;
  1.2505 -					if(tmp instanceof GeneralDBLabelColumn)
  1.2506 -					{
  1.2507 -						//Reached the innermost left var -> need to capture its SRID
  1.2508 +					if (tmp instanceof GeneralDBLabelColumn) {
  1.2509 +						// Reached the innermost left var -> need to capture its
  1.2510 +						// SRID
  1.2511  						String alias;
  1.2512 -						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
  1.2513 -							//Predicates used in triple patterns non-existent in db
  1.2514 -							alias="NULL";
  1.2515 -						}
  1.2516 -						else
  1.2517 -						{
  1.2518 -							//Reached the innermost left var -> need to capture its SRID
  1.2519 -							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
  1.2520 -							alias=alias+".srid";
  1.2521 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar()
  1.2522 +								.isResource()) {
  1.2523 +							// Predicates used in triple patterns non-existent
  1.2524 +							// in db
  1.2525 +							alias = "NULL";
  1.2526 +						} else {
  1.2527 +							// Reached the innermost left var -> need to capture
  1.2528 +							// its SRID
  1.2529 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp)
  1.2530 +									.getRdbmsVar());
  1.2531 +							alias = alias + ".srid";
  1.2532  						}
  1.2533  						sridExpr = alias;
  1.2534  						break;
  1.2535 -					}
  1.2536 -					else if (tmp instanceof GeneralDBStringValue) //Constant!!
  1.2537 +					} else if (tmp instanceof GeneralDBStringValue) // Constant!!
  1.2538  					{
  1.2539 -						sridNeeded  = false;
  1.2540 +						sridNeeded = false;
  1.2541  						break;
  1.2542  					}
  1.2543  
  1.2544  				}
  1.2545 -				if(sridNeeded)
  1.2546 -				{
  1.2547 +				if (sridNeeded) {
  1.2548  					filter.appendFunction(ST_TRANSFORM);
  1.2549  					filter.openBracket();
  1.2550  				}
  1.2551  			}
  1.2552 -			/////
  1.2553 +			// ///
  1.2554  
  1.2555 -			switch(func)
  1.2556 -			{
  1.2557 -			case ST_Envelope: filter.appendFunction("ST_Envelope"); break;
  1.2558 -			case ST_ConvexHull: filter.appendFunction("ST_ConvexHull"); break;
  1.2559 -			case ST_Boundary: filter.appendFunction("ST_Boundary"); break;
  1.2560 -			case ST_Area: filter.appendFunction("ST_Area"); break;
  1.2561 -			case ST_Dimension: filter.appendFunction("ST_Dimension"); break;
  1.2562 -			case ST_GeometryType: filter.appendFunction("ST_GeometryType"); break;
  1.2563 -			case ST_AsText: filter.appendFunction("ST_AsText"); break;
  1.2564 -			case ST_AsGML: filter.appendFunction("ST_AsGML"); break;
  1.2565 -			case ST_SRID: filter.appendFunction("ST_SRID"); break;
  1.2566 -			case ST_IsEmpty: filter.appendFunction("ST_IsEmpty"); break;
  1.2567 -			case ST_IsSimple: filter.appendFunction("ST_IsSimple"); break;
  1.2568 +			switch (func) {
  1.2569 +			case ST_Envelope:
  1.2570 +				filter.appendFunction("ST_Envelope");
  1.2571 +				break;
  1.2572 +			case ST_ConvexHull:
  1.2573 +				filter.appendFunction("ST_ConvexHull");
  1.2574 +				break;
  1.2575 +			case ST_Boundary:
  1.2576 +				filter.appendFunction("ST_Boundary");
  1.2577 +				break;
  1.2578 +			case ST_Area:
  1.2579 +				filter.appendFunction("ST_Area");
  1.2580 +				break;
  1.2581 +			case ST_Dimension:
  1.2582 +				filter.appendFunction("ST_Dimension");
  1.2583 +				break;
  1.2584 +			case ST_GeometryType:
  1.2585 +				filter.appendFunction("ST_GeometryType");
  1.2586 +				break;
  1.2587 +			case ST_AsText:
  1.2588 +				filter.appendFunction("ST_AsText");
  1.2589 +				break;
  1.2590 +			case ST_AsGML:
  1.2591 +				filter.appendFunction("ST_AsGML");
  1.2592 +				break;
  1.2593 +			case ST_SRID:
  1.2594 +				filter.appendFunction("ST_SRID");
  1.2595 +				break;
  1.2596 +			case ST_IsEmpty:
  1.2597 +				filter.appendFunction("ST_IsEmpty");
  1.2598 +				break;
  1.2599 +			case ST_IsSimple:
  1.2600 +				filter.appendFunction("ST_IsSimple");
  1.2601 +				break;
  1.2602  			}
  1.2603  			filter.openBracket();
  1.2604 -			if(expr.getArg() instanceof GeneralDBStringValue)
  1.2605 -			{
  1.2606 -				appendWKT(expr.getArg(),filter);
  1.2607 -			}
  1.2608 -			else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.2609 -			{
  1.2610 +			if (expr.getArg() instanceof GeneralDBStringValue) {
  1.2611 +				appendWKT(expr.getArg(), filter);
  1.2612 +			} else if (expr.getArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2613  				appendConstructFunction(expr.getArg(), filter);
  1.2614 -			}
  1.2615 -			else if(expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.2616 -			{
  1.2617 +			} else if (expr.getArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2618  				appendConstructFunction(expr.getArg(), filter);
  1.2619 -			}
  1.2620 -			else if(expr.getArg() instanceof GeneralDBSqlCase)
  1.2621 -			{
  1.2622 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getArg()).getEntries().get(0).getResult();
  1.2623 -				appendMBB(onlyLabel,filter); 
  1.2624 -			}
  1.2625 -			else
  1.2626 -			{
  1.2627 -				appendMBB((GeneralDBLabelColumn)(expr.getArg()),filter);
  1.2628 +			} else if (expr.getArg() instanceof GeneralDBSqlCase) {
  1.2629 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2630 +						.getArg()).getEntries().get(0).getResult();
  1.2631 +				appendMBB(onlyLabel, filter);
  1.2632 +			} else {
  1.2633 +				appendMBB((GeneralDBLabelColumn) (expr.getArg()), filter);
  1.2634  			}
  1.2635  
  1.2636  			filter.closeBracket();
  1.2637 -			//			//SRID Support
  1.2638 -			if(sridNeeded)
  1.2639 -			{
  1.2640 -				if(expr instanceof GeneralDBSqlSpatialConstructUnary && expr.getParentNode() == null)
  1.2641 -				{
  1.2642 +			// //SRID Support
  1.2643 +			if (sridNeeded) {
  1.2644 +				if (expr instanceof GeneralDBSqlSpatialConstructUnary
  1.2645 +						&& expr.getParentNode() == null) {
  1.2646  					filter.appendComma();
  1.2647 -					//				filter.append(((GeneralDBSqlSpatialConstructUnary)expr).getSrid());
  1.2648 +					// filter.append(((GeneralDBSqlSpatialConstructUnary)expr).getSrid());
  1.2649  					filter.append(sridExpr);
  1.2650  					filter.closeBracket();
  1.2651  				}
  1.2652  			}
  1.2653 -			///
  1.2654 +			// /
  1.2655  		}
  1.2656  
  1.2657  		filter.closeBracket();
  1.2658 -		//Used to explicitly include SRID
  1.2659 -		if(expr instanceof GeneralDBSqlSpatialConstructUnary && expr.getParentNode() == null)
  1.2660 -		{
  1.2661 +		// Used to explicitly include SRID
  1.2662 +		if (expr instanceof GeneralDBSqlSpatialConstructUnary
  1.2663 +				&& expr.getParentNode() == null) {
  1.2664  			filter.appendComma();
  1.2665  			filter.append(sridExpr);
  1.2666  		}
  1.2667 +	}
  1.2668 +
  1.2669 +	// Used in all the generaldb boolean spatial functions of the form
  1.2670 +	// ST_Function(?GEO1,?GEO2)
  1.2671 +	protected void appendGeneralDBSpatialFunctionTriple(
  1.2672 +			TripleGeneralDBOperator expr, GeneralDBSqlExprBuilder filter,
  1.2673 +			SpatialFunctionsPostGIS func)
  1.2674 +			throws UnsupportedRdbmsOperatorException {
  1.2675 +		filter.openBracket();
  1.2676 +
  1.2677 +		boolean check1a = expr.getLeftArg().getClass().getCanonicalName()
  1.2678 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2679 +		boolean check2a = expr.getRightArg().getClass().getCanonicalName()
  1.2680 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2681 +		boolean check3 = expr.getRightArg().getClass().getCanonicalName()
  1.2682 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2683 +
  1.2684 +		if (check1a) {
  1.2685 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.2686 +
  1.2687 +		} else if (check2a) {
  1.2688 +			this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.2689 +		} else if (check3) {
  1.2690 +			this.append((GeneralDBSqlNull) expr.getThirdArg(), filter);
  1.2691 +		} else {
  1.2692 +			switch (func) {
  1.2693 +			case ST_Relate:
  1.2694 +				filter.appendFunction("ST_Relate");
  1.2695 +				break;
  1.2696 +			}
  1.2697 +			filter.openBracket();
  1.2698 +			if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.2699 +				appendWKT(expr.getLeftArg(), filter);
  1.2700 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2701 +				appendConstructFunction(expr.getLeftArg(), filter);
  1.2702 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2703 +				appendConstructFunction(expr.getLeftArg(), filter);
  1.2704 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlCase) {
  1.2705 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2706 +						.getLeftArg()).getEntries().get(0).getResult();
  1.2707 +				appendMBB(onlyLabel, filter);
  1.2708 +			} else {
  1.2709 +				appendMBB((GeneralDBLabelColumn) (expr.getLeftArg()), filter);
  1.2710 +			}
  1.2711 +			filter.appendComma();
  1.2712 +			// boolean check2 =
  1.2713 +			// expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2714 +			// if(check2)
  1.2715 +			// {
  1.2716 +			// this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.2717 +			// }
  1.2718 +			// else
  1.2719 +			// {
  1.2720 +			if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.2721 +				appendWKT(expr.getRightArg(), filter);
  1.2722 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2723 +				appendConstructFunction(expr.getRightArg(), filter);
  1.2724 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2725 +				appendConstructFunction(expr.getRightArg(), filter);
  1.2726 +			} else if (expr.getRightArg() instanceof GeneralDBSqlCase) {
  1.2727 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2728 +						.getRightArg()).getEntries().get(0).getResult();
  1.2729 +				appendMBB(onlyLabel, filter);
  1.2730 +			} else if (expr.getRightArg() instanceof GeneralDBDoubleValue) // case
  1.2731 +																			// met
  1.2732 +																			// in
  1.2733 +																			// buffer!
  1.2734 +			{
  1.2735 +				append(((GeneralDBDoubleValue) expr.getRightArg()), filter);
  1.2736 +			} else if (expr.getRightArg() instanceof GeneralDBNumericColumn) // case
  1.2737 +																				// met
  1.2738 +																				// in
  1.2739 +																				// buffer!
  1.2740 +			{
  1.2741 +				append(((GeneralDBNumericColumn) expr.getRightArg()), filter);
  1.2742 +			}
  1.2743 +			// case met in buffer when in select -> buffer(?spatial,?thematic)
  1.2744 +			else if (expr.getRightArg() instanceof GeneralDBLabelColumn
  1.2745 +					&& !((GeneralDBLabelColumn) expr.getRightArg()).isSpatial()) {
  1.2746 +				append(((GeneralDBLabelColumn) expr.getRightArg()), filter);
  1.2747 +				appendCastToDouble(filter);
  1.2748 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary) {
  1.2749 +				appendMetricFunction(expr.getRightArg(), filter);
  1.2750 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary) {
  1.2751 +				appendMetricFunction(expr.getRightArg(), filter);
  1.2752 +			} else {
  1.2753 +				appendMBB((GeneralDBLabelColumn) (expr.getRightArg()), filter);
  1.2754  			}
  1.2755  
  1.2756 -	//Used in all the generaldb boolean spatial functions of the form ST_Function(?GEO1,?GEO2) 
  1.2757 -	protected void appendGeneralDBSpatialFunctionTriple(TripleGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialFunctionsPostGIS func)
  1.2758 -			throws UnsupportedRdbmsOperatorException
  1.2759 +			// }
  1.2760 +			// 3rd arg
  1.2761 +			filter.appendComma();
  1.2762 +			// boolean check3 =
  1.2763 +			// expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2764 +			// if(check3)
  1.2765 +			// {
  1.2766 +			// this.append((GeneralDBSqlNull)expr.getThirdArg(), filter);
  1.2767 +			// }
  1.2768 +			// else
  1.2769 +			// {
  1.2770 +
  1.2771 +			if (expr.getThirdArg() instanceof GeneralDBStringValue) {
  1.2772 +				append(((GeneralDBStringValue) expr.getThirdArg()), filter);
  1.2773 +			} else if (expr.getThirdArg() instanceof GeneralDBSqlCase) {
  1.2774 +				append(((GeneralDBSqlCase) expr.getThirdArg()), filter);
  1.2775 +			}
  1.2776 +			// case met in buffer when in select -> buffer(?spatial,?thematic)
  1.2777 +			else if (expr.getThirdArg() instanceof GeneralDBLabelColumn)// &&
  1.2778 +																		// !((GeneralDBLabelColumn)expr.getThirdArg()).isSpatial())
  1.2779  			{
  1.2780 -		filter.openBracket();
  1.2781  
  1.2782 -		boolean check1a = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2783 -		boolean check2a = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2784 -		boolean check3 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2785 -
  1.2786 -		if(check1a)
  1.2787 -		{
  1.2788 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.2789 -
  1.2790 -		}
  1.2791 -		else if(check2a)
  1.2792 -		{
  1.2793 -			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.2794 -		}
  1.2795 -		else if(check3)
  1.2796 -		{
  1.2797 -			this.append((GeneralDBSqlNull)expr.getThirdArg(), filter);
  1.2798 -		}
  1.2799 -		else
  1.2800 -		{
  1.2801 -			switch(func)
  1.2802 -			{
  1.2803 -			case ST_Relate: filter.appendFunction("ST_Relate"); break;
  1.2804 -			}
  1.2805 -			filter.openBracket();
  1.2806 -			if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.2807 -			{
  1.2808 -				appendWKT(expr.getLeftArg(),filter);
  1.2809 -			}
  1.2810 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.2811 -			{
  1.2812 -				appendConstructFunction(expr.getLeftArg(), filter);
  1.2813 -			}
  1.2814 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.2815 -			{
  1.2816 -				appendConstructFunction(expr.getLeftArg(), filter);
  1.2817 -			}
  1.2818 -			else if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.2819 -			{
  1.2820 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getLeftArg()).getEntries().get(0).getResult();
  1.2821 -				appendMBB(onlyLabel,filter); 
  1.2822 -			}
  1.2823 -			else
  1.2824 -			{
  1.2825 -				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.2826 -			}
  1.2827 -			filter.appendComma();
  1.2828 -			//			boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2829 -			//			if(check2)
  1.2830 -			//			{
  1.2831 -			//				this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.2832 -			//			}
  1.2833 -			//			else
  1.2834 -			//			{
  1.2835 -			if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.2836 -			{
  1.2837 -				appendWKT(expr.getRightArg(),filter);
  1.2838 -			}
  1.2839 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.2840 -			{
  1.2841 -				appendConstructFunction(expr.getRightArg(), filter);
  1.2842 -			}
  1.2843 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.2844 -			{
  1.2845 -				appendConstructFunction(expr.getRightArg(), filter);
  1.2846 -			}
  1.2847 -			else if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.2848 -			{
  1.2849 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getRightArg()).getEntries().get(0).getResult();
  1.2850 -				appendMBB(onlyLabel,filter);					 
  1.2851 -			}
  1.2852 -			else if(expr.getRightArg() instanceof GeneralDBDoubleValue) //case met in buffer!
  1.2853 -			{
  1.2854 -				append(((GeneralDBDoubleValue)expr.getRightArg()), filter);
  1.2855 -			}
  1.2856 -			else if(expr.getRightArg() instanceof GeneralDBNumericColumn) //case met in buffer!
  1.2857 -			{
  1.2858 -				append(((GeneralDBNumericColumn)expr.getRightArg()), filter);
  1.2859 -			}
  1.2860 -			//case met in buffer when in select -> buffer(?spatial,?thematic)
  1.2861 -			else if(expr.getRightArg() instanceof GeneralDBLabelColumn && !((GeneralDBLabelColumn)expr.getRightArg()).isSpatial())
  1.2862 -			{
  1.2863 -				append(((GeneralDBLabelColumn)expr.getRightArg()),filter);
  1.2864 -				appendCastToDouble(filter);
  1.2865 -			}
  1.2866 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary)
  1.2867 -			{
  1.2868 -				appendMetricFunction(expr.getRightArg(), filter);
  1.2869 -			}
  1.2870 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary)
  1.2871 -			{
  1.2872 -				appendMetricFunction(expr.getRightArg(), filter);
  1.2873 -			}
  1.2874 -			else
  1.2875 -			{
  1.2876 -				appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.2877 +				append(((GeneralDBLabelColumn) expr.getThirdArg()), filter);
  1.2878  			}
  1.2879  
  1.2880 -			//			}
  1.2881 -			//3rd arg
  1.2882 -			filter.appendComma();
  1.2883 -			//			boolean check3 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2884 -			//			if(check3)
  1.2885 -			//			{
  1.2886 -			//				this.append((GeneralDBSqlNull)expr.getThirdArg(), filter);
  1.2887 -			//			}
  1.2888 -			//			else
  1.2889 -			//			{
  1.2890 -
  1.2891 -			if(expr.getThirdArg() instanceof GeneralDBStringValue)
  1.2892 -			{
  1.2893 -				append(((GeneralDBStringValue)expr.getThirdArg()),filter);	
  1.2894 -			}
  1.2895 -			else if(expr.getThirdArg() instanceof GeneralDBSqlCase)
  1.2896 -			{
  1.2897 -				append(((GeneralDBSqlCase)expr.getThirdArg()),filter);				 
  1.2898 -			}
  1.2899 -			//case met in buffer when in select -> buffer(?spatial,?thematic)
  1.2900 -			else if(expr.getThirdArg() instanceof GeneralDBLabelColumn )//&& !((GeneralDBLabelColumn)expr.getThirdArg()).isSpatial())
  1.2901 -			{
  1.2902 -
  1.2903 -				append(((GeneralDBLabelColumn)expr.getThirdArg()),filter);
  1.2904 -			}
  1.2905 -
  1.2906 -
  1.2907 -			//			}
  1.2908 +			// }
  1.2909  			filter.closeBracket();
  1.2910  		}
  1.2911  
  1.2912  		filter.closeBracket();
  1.2913 -			}
  1.2914 +	}
  1.2915  
  1.2916 -
  1.2917 -	//GeoSPARQL
  1.2918 -	//XXX
  1.2919 -	protected void appendRelate(BinaryGeneralDBOperator expr, PostGISSqlExprBuilder filter, char[] intersectionPattern)
  1.2920 -			throws UnsupportedRdbmsOperatorException
  1.2921 -			{
  1.2922 +	// GeoSPARQL
  1.2923 +	// XXX
  1.2924 +	protected void appendRelate(BinaryGeneralDBOperator expr,
  1.2925 +			PostGISSqlExprBuilder filter, char[] intersectionPattern)
  1.2926 +			throws UnsupportedRdbmsOperatorException {
  1.2927  		filter.openBracket();
  1.2928  
  1.2929 -		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2930 -		boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2931 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName()
  1.2932 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2933 +		boolean check2 = expr.getRightArg().getClass().getCanonicalName()
  1.2934 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.2935  
  1.2936 -		if(check1)
  1.2937 -		{
  1.2938 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.2939 +		if (check1) {
  1.2940 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.2941  
  1.2942 -		}
  1.2943 -		else if(check2)
  1.2944 -		{
  1.2945 -			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.2946 -		}
  1.2947 -		else
  1.2948 -		{	
  1.2949 +		} else if (check2) {
  1.2950 +			this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.2951 +		} else {
  1.2952  			filter.appendFunction("ST_Relate");
  1.2953  
  1.2954 -
  1.2955  			filter.openBracket();
  1.2956 -			if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.2957 -			{
  1.2958 -				appendWKT(expr.getLeftArg(),filter);
  1.2959 -			}
  1.2960 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.2961 -			{
  1.2962 +			if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.2963 +				appendWKT(expr.getLeftArg(), filter);
  1.2964 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2965  				appendConstructFunction(expr.getLeftArg(), filter);
  1.2966 -			}
  1.2967 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.2968 -			{
  1.2969 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2970  				appendConstructFunction(expr.getLeftArg(), filter);
  1.2971 -			}
  1.2972 -			else if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.2973 -			{
  1.2974 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getLeftArg()).getEntries().get(0).getResult();
  1.2975 -				appendMBB(onlyLabel,filter); 
  1.2976 -			}
  1.2977 -			else
  1.2978 -			{
  1.2979 -				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.2980 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlCase) {
  1.2981 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2982 +						.getLeftArg()).getEntries().get(0).getResult();
  1.2983 +				appendMBB(onlyLabel, filter);
  1.2984 +			} else {
  1.2985 +				appendMBB((GeneralDBLabelColumn) (expr.getLeftArg()), filter);
  1.2986  			}
  1.2987  			filter.appendComma();
  1.2988  
  1.2989 -			if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.2990 +			if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.2991 +				appendWKT(expr.getRightArg(), filter);
  1.2992 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.2993 +				appendConstructFunction(expr.getRightArg(), filter);
  1.2994 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.2995 +				appendConstructFunction(expr.getRightArg(), filter);
  1.2996 +			} else if (expr.getRightArg() instanceof GeneralDBSqlCase) {
  1.2997 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.2998 +						.getRightArg()).getEntries().get(0).getResult();
  1.2999 +				appendMBB(onlyLabel, filter);
  1.3000 +			} else if (expr.getRightArg() instanceof GeneralDBDoubleValue) // case
  1.3001 +																			// met
  1.3002 +																			// in
  1.3003 +																			// buffer!
  1.3004  			{
  1.3005 -				appendWKT(expr.getRightArg(),filter);
  1.3006 +				append(((GeneralDBDoubleValue) expr.getRightArg()), filter);
  1.3007 +			} else if (expr.getRightArg() instanceof GeneralDBNumericColumn) // case
  1.3008 +																				// met
  1.3009 +																				// in
  1.3010 +																				// buffer!
  1.3011 +			{
  1.3012 +				append(((GeneralDBNumericColumn) expr.getRightArg()), filter);
  1.3013  			}
  1.3014 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.3015 -			{
  1.3016 -				appendConstructFunction(expr.getRightArg(), filter);
  1.3017 -			}
  1.3018 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.3019 -			{
  1.3020 -				appendConstructFunction(expr.getRightArg(), filter);
  1.3021 -			}
  1.3022 -			else if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.3023 -			{
  1.3024 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getRightArg()).getEntries().get(0).getResult();
  1.3025 -				appendMBB(onlyLabel,filter);					 
  1.3026 -			}
  1.3027 -			else if(expr.getRightArg() instanceof GeneralDBDoubleValue) //case met in buffer!
  1.3028 -			{
  1.3029 -				append(((GeneralDBDoubleValue)expr.getRightArg()), filter);
  1.3030 -			}
  1.3031 -			else if(expr.getRightArg() instanceof GeneralDBNumericColumn) //case met in buffer!
  1.3032 -			{
  1.3033 -				append(((GeneralDBNumericColumn)expr.getRightArg()), filter);
  1.3034 -			}
  1.3035 -			//case met in buffer when in select -> buffer(?spatial,?thematic)
  1.3036 -			else if(expr.getRightArg() instanceof GeneralDBLabelColumn && !((GeneralDBLabelColumn)expr.getRightArg()).isSpatial())
  1.3037 -			{
  1.3038 -				append(((GeneralDBLabelColumn)expr.getRightArg()),filter);
  1.3039 +			// case met in buffer when in select -> buffer(?spatial,?thematic)
  1.3040 +			else if (expr.getRightArg() instanceof GeneralDBLabelColumn
  1.3041 +					&& !((GeneralDBLabelColumn) expr.getRightArg()).isSpatial()) {
  1.3042 +				append(((GeneralDBLabelColumn) expr.getRightArg()), filter);
  1.3043  				appendCastToDouble(filter);
  1.3044 -			}
  1.3045 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary)
  1.3046 -			{
  1.3047 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary) {
  1.3048  				appendMetricFunction(expr.getRightArg(), filter);
  1.3049 -			}
  1.3050 -			else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary)
  1.3051 -			{
  1.3052 +			} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary) {
  1.3053  				appendMetricFunction(expr.getRightArg(), filter);
  1.3054 -			}
  1.3055 -			else
  1.3056 -			{
  1.3057 -				appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.3058 +			} else {
  1.3059 +				appendMBB((GeneralDBLabelColumn) (expr.getRightArg()), filter);
  1.3060  			}
  1.3061  
  1.3062 -			//3rd arg
  1.3063 +			// 3rd arg
  1.3064  			filter.appendComma();
  1.3065  
  1.3066 -			//must turn the table of characters I have to a valid sql value!
  1.3067 +			// must turn the table of characters I have to a valid sql value!
  1.3068  			filter.append("'");
  1.3069 -			for(int i = 0; i< intersectionPattern.length; i++)
  1.3070 -			{
  1.3071 -				filter.append(intersectionPattern[i]+"");
  1.3072 +			for (int i = 0; i < intersectionPattern.length; i++) {
  1.3073 +				filter.append(intersectionPattern[i] + "");
  1.3074  			}
  1.3075  			filter.append("'");
  1.3076  
  1.3077 @@ -1980,25 +1956,21 @@
  1.3078  		}
  1.3079  
  1.3080  		filter.closeBracket();
  1.3081 -			}
  1.3082 +	}
  1.3083  
  1.3084 +	protected void appendgeoSPARQLSpatialRelation(BinaryGeneralDBOperator expr,
  1.3085 +			GeneralDBSqlExprBuilder filter, SpatialFunctionsPostGIS func)
  1.3086 +			throws UnsupportedRdbmsOperatorException {
  1.3087 +		filter.openBracket();
  1.3088 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName()
  1.3089 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.3090 +		if (check1) {
  1.3091 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.3092  
  1.3093 -	protected void appendgeoSPARQLSpatialRelation(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialFunctionsPostGIS func)
  1.3094 -			throws UnsupportedRdbmsOperatorException
  1.3095 -			{
  1.3096 -		filter.openBracket();
  1.3097 -		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.3098 -		if(check1)
  1.3099 -		{
  1.3100 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.3101 -
  1.3102 -		}
  1.3103 -		else
  1.3104 -		{
  1.3105 +		} else {
  1.3106  			char[][] intersectionPattern = null;
  1.3107 -			switch(func)
  1.3108 -			{
  1.3109 -			case SF_Contains:  
  1.3110 +			switch (func) {
  1.3111 +			case SF_Contains:
  1.3112  				intersectionPattern = new char[1][9];
  1.3113  				intersectionPattern[0][0] = 'T';
  1.3114  				intersectionPattern[0][1] = '*';
  1.3115 @@ -2012,11 +1984,15 @@
  1.3116  				break;
  1.3117  			case SF_Crosses:
  1.3118  				// FIXME BUG
  1.3119 -				// TODO a crosses b, they have some but not all interior points in common 
  1.3120 -				// (and the dimension of the intersection is less than that of at least one 
  1.3121 -				// of them). Mask selection rules are checked only when dim(a)≠dim(b), 
  1.3122 +				// TODO a crosses b, they have some but not all interior points
  1.3123 +				// in common
  1.3124 +				// (and the dimension of the intersection is less than that of
  1.3125 +				// at least one
  1.3126 +				// of them). Mask selection rules are checked only when
  1.3127 +				// dim(a)≠dim(b),
  1.3128  				// except by point/point inputs, otherwise is false.
  1.3129 -				// (II=0) for points,   (II ∧ IE) when dim(a)<dim(b),   (II ∧ EI) when dim(a)>dim(b)
  1.3130 +				// (II=0) for points, (II ∧ IE) when dim(a)<dim(b), (II ∧ EI)
  1.3131 +				// when dim(a)>dim(b)
  1.3132  				intersectionPattern = new char[3][9];
  1.3133  				intersectionPattern[0][0] = 'T';
  1.3134  				intersectionPattern[0][1] = '*';
  1.3135 @@ -2061,9 +2037,9 @@
  1.3136  				intersectionPattern[0][7] = '*';
  1.3137  				intersectionPattern[0][8] = '*';
  1.3138  				break;
  1.3139 -			case SF_Equals: 
  1.3140 +			case SF_Equals:
  1.3141  			case EH_Equals:
  1.3142 -			case RCC8_Eq:	
  1.3143 +			case RCC8_Eq:
  1.3144  				intersectionPattern = new char[1][9];
  1.3145  				intersectionPattern[0][0] = 'T';
  1.3146  				intersectionPattern[0][1] = 'F';
  1.3147 @@ -2078,12 +2054,14 @@
  1.3148  			case SF_Overlaps:
  1.3149  			case EH_Overlap:
  1.3150  				// FIXME BUG
  1.3151 -				// TODO a overlaps b, they have some but not all points in common, 
  1.3152 -				// they have the same dimension, and the intersection of the 
  1.3153 -				// interiors of the two geometries has the same dimension as the 
  1.3154 -				// geometries themselves. Mask selection rules are checked 
  1.3155 +				// TODO a overlaps b, they have some but not all points in
  1.3156 +				// common,
  1.3157 +				// they have the same dimension, and the intersection of the
  1.3158 +				// interiors of the two geometries has the same dimension as the
  1.3159 +				// geometries themselves. Mask selection rules are checked
  1.3160  				// only when dim(a)=dim(b), otherwise is false:
  1.3161 -				// (II ∧ IE ∧ EI) for points or surfaces,   (II=1 ∧ IE ∧ EI) for lines
  1.3162 +				// (II ∧ IE ∧ EI) for points or surfaces, (II=1 ∧ IE ∧ EI) for
  1.3163 +				// lines
  1.3164  				intersectionPattern = new char[2][9];
  1.3165  				intersectionPattern[0][0] = 'T';
  1.3166  				intersectionPattern[0][1] = '*';
  1.3167 @@ -2104,7 +2082,7 @@
  1.3168  				intersectionPattern[1][7] = '*';
  1.3169  				intersectionPattern[1][8] = '*';
  1.3170  				break;
  1.3171 -			case SF_Within: 
  1.3172 +			case SF_Within:
  1.3173  				intersectionPattern = new char[1][9];
  1.3174  				intersectionPattern[0][0] = 'T';
  1.3175  				intersectionPattern[0][1] = '*';
  1.3176 @@ -2116,7 +2094,7 @@
  1.3177  				intersectionPattern[0][7] = '*';
  1.3178  				intersectionPattern[0][8] = '*';
  1.3179  				break;
  1.3180 -			case EH_Covers: 
  1.3181 +			case EH_Covers:
  1.3182  				intersectionPattern = new char[1][9];
  1.3183  				intersectionPattern[0][0] = 'T';
  1.3184  				intersectionPattern[0][1] = '*';
  1.3185 @@ -2128,7 +2106,7 @@
  1.3186  				intersectionPattern[0][7] = 'F';
  1.3187  				intersectionPattern[0][8] = '*';
  1.3188  				break;
  1.3189 -			case EH_CoveredBy: 
  1.3190 +			case EH_CoveredBy:
  1.3191  				intersectionPattern = new char[1][9];
  1.3192  				intersectionPattern[0][0] = 'T';
  1.3193  				intersectionPattern[0][1] = 'F';
  1.3194 @@ -2140,7 +2118,7 @@
  1.3195  				intersectionPattern[0][7] = '*';
  1.3196  				intersectionPattern[0][8] = '*';
  1.3197  				break;
  1.3198 -			case EH_Inside: 
  1.3199 +			case EH_Inside:
  1.3200  				intersectionPattern = new char[1][9];
  1.3201  				intersectionPattern[0][0] = 'T';
  1.3202  				intersectionPattern[0][1] = 'F';
  1.3203 @@ -2152,7 +2130,7 @@
  1.3204  				intersectionPattern[0][7] = '*';
  1.3205  				intersectionPattern[0][8] = '*';
  1.3206  				break;
  1.3207 -			case EH_Contains: 
  1.3208 +			case EH_Contains:
  1.3209  				intersectionPattern = new char[1][9];
  1.3210  				intersectionPattern[0][0] = 'T';
  1.3211  				intersectionPattern[0][1] = '*';
  1.3212 @@ -2164,7 +2142,7 @@
  1.3213  				intersectionPattern[0][7] = 'F';
  1.3214  				intersectionPattern[0][8] = '*';
  1.3215  				break;
  1.3216 -			case RCC8_Dc:	
  1.3217 +			case RCC8_Dc:
  1.3218  				intersectionPattern = new char[1][9];
  1.3219  				intersectionPattern[0][0] = 'F';
  1.3220  				intersectionPattern[0][1] = 'F';
  1.3221 @@ -2176,7 +2154,7 @@
  1.3222  				intersectionPattern[0][7] = 'T';
  1.3223  				intersectionPattern[0][8] = 'T';
  1.3224  				break;
  1.3225 -			case RCC8_Ec:	
  1.3226 +			case RCC8_Ec:
  1.3227  				intersectionPattern = new char[1][9];
  1.3228  				intersectionPattern[0][0] = 'F';
  1.3229  				intersectionPattern[0][1] = 'F';
  1.3230 @@ -2188,7 +2166,7 @@
  1.3231  				intersectionPattern[0][7] = 'T';
  1.3232  				intersectionPattern[0][8] = 'T';
  1.3233  				break;
  1.3234 -			case RCC8_Po:	
  1.3235 +			case RCC8_Po:
  1.3236  				intersectionPattern = new char[1][9];
  1.3237  				intersectionPattern[0][0] = 'T';
  1.3238  				intersectionPattern[0][1] = 'T';
  1.3239 @@ -2200,7 +2178,7 @@
  1.3240  				intersectionPattern[0][7] = 'T';
  1.3241  				intersectionPattern[0][8] = 'T';
  1.3242  				break;
  1.3243 -			case RCC8_Tppi:	
  1.3244 +			case RCC8_Tppi:
  1.3245  				intersectionPattern = new char[1][9];
  1.3246  				intersectionPattern[0][0] = 'T';
  1.3247  				intersectionPattern[0][1] = 'T';
  1.3248 @@ -2212,7 +2190,7 @@
  1.3249  				intersectionPattern[0][7] = 'F';
  1.3250  				intersectionPattern[0][8] = 'T';
  1.3251  				break;
  1.3252 -			case RCC8_Tpp:	
  1.3253 +			case RCC8_Tpp:
  1.3254  				intersectionPattern = new char[1][9];
  1.3255  				intersectionPattern[0][0] = 'T';
  1.3256  				intersectionPattern[0][1] = 'F';
  1.3257 @@ -2224,7 +2202,7 @@
  1.3258  				intersectionPattern[0][7] = 'T';
  1.3259  				intersectionPattern[0][8] = 'T';
  1.3260  				break;
  1.3261 -			case RCC8_Ntpp:	
  1.3262 +			case RCC8_Ntpp:
  1.3263  				intersectionPattern = new char[1][9];
  1.3264  				intersectionPattern[0][0] = 'T';
  1.3265  				intersectionPattern[0][1] = 'F';
  1.3266 @@ -2236,7 +2214,7 @@
  1.3267  				intersectionPattern[0][7] = 'T';
  1.3268  				intersectionPattern[0][8] = 'T';
  1.3269  				break;
  1.3270 -			case RCC8_Ntppi:	
  1.3271 +			case RCC8_Ntppi:
  1.3272  				intersectionPattern = new char[1][9];
  1.3273  				intersectionPattern[0][0] = 'T';
  1.3274  				intersectionPattern[0][1] = 'T';
  1.3275 @@ -2248,7 +2226,7 @@
  1.3276  				intersectionPattern[0][7] = 'F';
  1.3277  				intersectionPattern[0][8] = 'T';
  1.3278  				break;
  1.3279 -			case SF_Intersects:   
  1.3280 +			case SF_Intersects:
  1.3281  				intersectionPattern = new char[4][9];
  1.3282  				intersectionPattern[0][0] = 'T';
  1.3283  				intersectionPattern[0][1] = '*';
  1.3284 @@ -2291,7 +2269,7 @@
  1.3285  				intersectionPattern[3][8] = '*';
  1.3286  				break;
  1.3287  
  1.3288 -			case SF_Touches: 
  1.3289 +			case SF_Touches:
  1.3290  			case EH_Meet:
  1.3291  				intersectionPattern = new char[3][9];
  1.3292  				intersectionPattern[0][0] = 'F';
  1.3293 @@ -2327,129 +2305,114 @@
  1.3294  
  1.3295  			}
  1.3296  
  1.3297 -			for(int i = 0; i < intersectionPattern.length ; i++)
  1.3298 -			{
  1.3299 +			for (int i = 0; i < intersectionPattern.length; i++) {
  1.3300  				appendRelate(expr, filter, intersectionPattern[i]);
  1.3301 -				if(i < intersectionPattern.length - 1)
  1.3302 -				{
  1.3303 -					//append OR and continue
  1.3304 +				if (i < intersectionPattern.length - 1) {
  1.3305 +					// append OR and continue
  1.3306  					filter.or();
  1.3307  				}
  1.3308  			}
  1.3309  
  1.3310 -			//Also need bounding box intersection query to enable the usage of the Gist R-tree index
  1.3311 -			if(func != SpatialFunctionsPostGIS.SF_Disjoint && func != SpatialFunctionsPostGIS.EH_Disjoint && func != SpatialFunctionsPostGIS.RCC8_Dc)
  1.3312 -			{
  1.3313 +			// Also need bounding box intersection query to enable the usage of
  1.3314 +			// the Gist R-tree index
  1.3315 +			if (func != SpatialFunctionsPostGIS.SF_Disjoint
  1.3316 +					&& func != SpatialFunctionsPostGIS.EH_Disjoint
  1.3317 +					&& func != SpatialFunctionsPostGIS.RCC8_Dc) {
  1.3318  				filter.and();
  1.3319 -				appendGeneralDBSpatialFunctionBinary(expr, filter,SpatialFunctionsPostGIS.ST_Intersects);
  1.3320 +				appendGeneralDBSpatialFunctionBinary(expr, filter,
  1.3321 +						SpatialFunctionsPostGIS.ST_Intersects);
  1.3322  			}
  1.3323  		}
  1.3324  		filter.closeBracket();
  1.3325 -			}
  1.3326 +	}
  1.3327  
  1.3328  	@Override
  1.3329 -	//GeoSPARQL
  1.3330 -	//XXX
  1.3331 -
  1.3332 -	protected void appendRelate(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, char[] intersectionPattern)
  1.3333 -			throws UnsupportedRdbmsOperatorException
  1.3334 -			{
  1.3335 +	// GeoSPARQL
  1.3336 +	// XXX
  1.3337 +	protected void appendRelate(BinaryGeneralDBOperator expr,
  1.3338 +			GeneralDBSqlExprBuilder filter, char[] intersectionPattern)
  1.3339 +			throws UnsupportedRdbmsOperatorException {
  1.3340  		filter.openBracket();
  1.3341  		System.out.println(expr.getLeftArg().getClass().getCanonicalName());
  1.3342 -		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.3343 -		if(check1)
  1.3344 -		{
  1.3345 -			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
  1.3346 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName()
  1.3347 +				.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.3348 +		if (check1) {
  1.3349 +			this.append((GeneralDBSqlNull) expr.getLeftArg(), filter);
  1.3350  
  1.3351 -		}
  1.3352 -		else
  1.3353 -		{	
  1.3354 +		} else {
  1.3355  			filter.appendFunction("ST_Relate");
  1.3356  
  1.3357 -
  1.3358  			filter.openBracket();
  1.3359 -			if(expr.getLeftArg() instanceof GeneralDBStringValue)
  1.3360 -			{
  1.3361 -				appendWKT(expr.getLeftArg(),filter);
  1.3362 -			}
  1.3363 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.3364 -			{
  1.3365 +			if (expr.getLeftArg() instanceof GeneralDBStringValue) {
  1.3366 +				appendWKT(expr.getLeftArg(), filter);
  1.3367 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.3368  				appendConstructFunction(expr.getLeftArg(), filter);
  1.3369 -			}
  1.3370 -			else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.3371 -			{
  1.3372 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.3373  				appendConstructFunction(expr.getLeftArg(), filter);
  1.3374 -			}
  1.3375 -			else if(expr.getLeftArg() instanceof GeneralDBSqlCase)
  1.3376 -			{
  1.3377 -				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getLeftArg()).getEntries().get(0).getResult();
  1.3378 -				appendMBB(onlyLabel,filter); 
  1.3379 -			}
  1.3380 -			else
  1.3381 -			{
  1.3382 -				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
  1.3383 +			} else if (expr.getLeftArg() instanceof GeneralDBSqlCase) {
  1.3384 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.3385 +						.getLeftArg()).getEntries().get(0).getResult();
  1.3386 +				appendMBB(onlyLabel, filter);
  1.3387 +			} else {
  1.3388 +				appendMBB((GeneralDBLabelColumn) (expr.getLeftArg()), filter);
  1.3389  			}
  1.3390  			filter.appendComma();
  1.3391 -			boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.3392 -			if(check2)
  1.3393 -			{
  1.3394 -				this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
  1.3395 -			}
  1.3396 -			else
  1.3397 -			{
  1.3398 -				if(expr.getRightArg() instanceof GeneralDBStringValue)
  1.3399 +			boolean check2 = expr
  1.3400 +					.getRightArg()
  1.3401 +					.getClass()
  1.3402 +					.getCanonicalName()
  1.3403 +					.equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
  1.3404 +			if (check2) {
  1.3405 +				this.append((GeneralDBSqlNull) expr.getRightArg(), filter);
  1.3406 +			} else {
  1.3407 +				if (expr.getRightArg() instanceof GeneralDBStringValue) {
  1.3408 +					appendWKT(expr.getRightArg(), filter);
  1.3409 +				} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary) {
  1.3410 +					appendConstructFunction(expr.getRightArg(), filter);
  1.3411 +				} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary) {
  1.3412 +					appendConstructFunction(expr.getRightArg(), filter);
  1.3413 +				} else if (expr.getRightArg() instanceof GeneralDBSqlCase) {
  1.3414 +					GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn) ((GeneralDBSqlCase) expr
  1.3415 +							.getRightArg()).getEntries().get(0).getResult();
  1.3416 +					appendMBB(onlyLabel, filter);
  1.3417 +				} else if (expr.getRightArg() instanceof GeneralDBDoubleValue) // case
  1.3418 +																				// met
  1.3419 +																				// in
  1.3420 +																				// buffer!
  1.3421  				{
  1.3422 -					appendWKT(expr.getRightArg(),filter);
  1.3423 +					append(((GeneralDBDoubleValue) expr.getRightArg()), filter);
  1.3424 +				} else if (expr.getRightArg() instanceof GeneralDBNumericColumn) // case
  1.3425 +																					// met
  1.3426 +																					// in
  1.3427 +																					// buffer!
  1.3428 +				{
  1.3429 +					append(((GeneralDBNumericColumn) expr.getRightArg()),
  1.3430 +							filter);
  1.3431  				}
  1.3432 -				else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructUnary)
  1.3433 -				{
  1.3434 -					appendConstructFunction(expr.getRightArg(), filter);
  1.3435 -				}
  1.3436 -				else if(expr.getRightArg() instanceof GeneralDBSqlSpatialConstructBinary)
  1.3437 -				{
  1.3438 -					appendConstructFunction(expr.getRightArg(), filter);
  1.3439 -				}
  1.3440 -				else if(expr.getRightArg() instanceof GeneralDBSqlCase)
  1.3441 -				{
  1.3442 -					GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getRightArg()).getEntries().get(0).getResult();
  1.3443 -					appendMBB(onlyLabel,filter);					 
  1.3444 -				}
  1.3445 -				else if(expr.getRightArg() instanceof GeneralDBDoubleValue) //case met in buffer!
  1.3446 -				{
  1.3447 -					append(((GeneralDBDoubleValue)expr.getRightArg()), filter);
  1.3448 -				}
  1.3449 -				else if(expr.getRightArg() instanceof GeneralDBNumericColumn) //case met in buffer!
  1.3450 -				{
  1.3451 -					append(((GeneralDBNumericColumn)expr.getRightArg()), filter);
  1.3452 -				}
  1.3453 -				//case met in buffer when in select -> buffer(?spatial,?thematic)
  1.3454 -				else if(expr.getRightArg() instanceof GeneralDBLabelColumn && !((GeneralDBLabelColumn)expr.getRightArg()).isSpatial())
  1.3455 -				{
  1.3456 -					append(((GeneralDBLabelColumn)expr.getRightArg()),filter);
  1.3457 +				// case met in buffer when in select ->
  1.3458 +				// buffer(?spatial,?thematic)
  1.3459 +				else if (expr.getRightArg() instanceof GeneralDBLabelColumn
  1.3460 +						&& !((GeneralDBLabelColumn) expr.getRightArg())
  1.3461 +								.isSpatial()) {
  1.3462 +					append(((GeneralDBLabelColumn) expr.getRightArg()), filter);
  1.3463  					appendCastToDouble(filter);
  1.3464 -				}
  1.3465 -				else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary)
  1.3466 -				{
  1.3467 +				} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricBinary) {
  1.3468  					appendMetricFunction(expr.getRightArg(), filter);
  1.3469 -				}
  1.3470 -				else if(expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary)
  1.3471 -				{
  1.3472 +				} else if (expr.getRightArg() instanceof GeneralDBSqlSpatialMetricUnary) {
  1.3473  					appendMetricFunction(expr.getRightArg(), filter);
  1.3474 -				}
  1.3475 -				else
  1.3476 -				{
  1.3477 -					appendMBB((GeneralDBLabelColumn)(expr.getRightArg()),filter);
  1.3478 +				} else {
  1.3479 +					appendMBB((GeneralDBLabelColumn) (expr.getRightArg()),
  1.3480 +							filter);
  1.3481  				}
  1.3482  
  1.3483  			}
  1.3484 -			//3rd arg
  1.3485 +			// 3rd arg
  1.3486  			filter.appendComma();
  1.3487  
  1.3488 -			//must turn the table of characters I have to a valid sql value!
  1.3489 +			// must turn the table of characters I have to a valid sql value!
  1.3490  			filter.append("'");
  1.3491 -			for(int i = 0; i< intersectionPattern.length; i++)
  1.3492 -			{
  1.3493 -				filter.append(intersectionPattern[i]+"");
  1.3494 +			for (int i = 0; i < intersectionPattern.length; i++) {
  1.3495 +				filter.append(intersectionPattern[i] + "");
  1.3496  			}
  1.3497  			filter.append("'");
  1.3498  
  1.3499 @@ -2457,6 +2420,6 @@
  1.3500  		}
  1.3501  
  1.3502  		filter.closeBracket();
  1.3503 -			}
  1.3504 +	}
  1.3505  
  1.3506  }