Strabon

changeset 700:fab3181c75c8 temporals

Appeding postgres temporal functions to the query builder. Most functions in Postgres Temporal are assigned an operator.
author Konstantina Bereta <Konstantina.Bereta@di.uoa.gr>
date Thu Nov 08 18:15:06 2012 +0200 (2012-11-08)
parents 399517323302
children d0ec7bdbc1d2
files generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/base/GeneralDBQueryModelVisitorBase.java generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodIntersection.java generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodMinus.java generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodUnion.java generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlTemporalConstructBinary.java generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GneralDBSqlTemporalConstructBinary.java generaldb/src/main/java/org/openrdf/sail/generaldb/evaluation/GeneralDBQueryBuilder.java postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java
line diff
     1.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/base/GeneralDBQueryModelVisitorBase.java	Thu Nov 08 15:43:07 2012 +0200
     1.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/base/GeneralDBQueryModelVisitorBase.java	Thu Nov 08 18:15:06 2012 +0200
     1.3 @@ -59,7 +59,7 @@
     1.4  import org.openrdf.sail.generaldb.algebra.GeneralDBURIColumn;
     1.5  import org.openrdf.sail.generaldb.algebra.GeneralDBUnionItem;
     1.6  import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlTemporal;
     1.7 -import org.openrdf.sail.generaldb.algebra.temporal.GneralDBSqlTemporalConstructBinary;
     1.8 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlTemporalConstructBinary;
     1.9  
    1.10  /**
    1.11   * Base class for RDBMS visitor classes. This class is extended with additional
    1.12 @@ -371,7 +371,7 @@
    1.13  		/**
    1.14  		 * @param gneralDBSqlTemporalConstructBinary
    1.15  		 */
    1.16 -		public void meet(GneralDBSqlTemporalConstructBinary node) {
    1.17 +		public void meet(GeneralDBSqlTemporalConstructBinary node) {
    1.18  			 	meet(node);	
    1.19  		}
    1.20  
     2.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodIntersection.java	Thu Nov 08 15:43:07 2012 +0200
     2.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodIntersection.java	Thu Nov 08 18:15:06 2012 +0200
     2.3 @@ -17,7 +17,7 @@
     2.4   * @author Konstantina Bereta <Konstantina.Bereta@di.uoa.gr>
     2.5   *
     2.6   */
     2.7 -public class GeneralDBSqlPeriodIntersection extends GneralDBSqlTemporalConstructBinary{
     2.8 +public class GeneralDBSqlPeriodIntersection extends GeneralDBSqlTemporalConstructBinary{
     2.9  
    2.10  	public GeneralDBSqlPeriodIntersection(GeneralDBSqlExpr left, GeneralDBSqlExpr right) {
    2.11  		super(left, right);
     3.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodMinus.java	Thu Nov 08 15:43:07 2012 +0200
     3.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodMinus.java	Thu Nov 08 18:15:06 2012 +0200
     3.3 @@ -17,7 +17,7 @@
     3.4   * @author Konstantina Bereta <Konstantina.Bereta@di.uoa.gr>
     3.5   *
     3.6   */
     3.7 -public class GeneralDBSqlPeriodMinus extends GneralDBSqlTemporalConstructBinary{
     3.8 +public class GeneralDBSqlPeriodMinus extends GeneralDBSqlTemporalConstructBinary{
     3.9  
    3.10  	public GeneralDBSqlPeriodMinus(GeneralDBSqlExpr left, GeneralDBSqlExpr right) {
    3.11  		super(left, right);
     4.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodUnion.java	Thu Nov 08 15:43:07 2012 +0200
     4.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlPeriodUnion.java	Thu Nov 08 18:15:06 2012 +0200
     4.3 @@ -17,7 +17,7 @@
     4.4   * @author Konstantina Bereta <Konstantina.Bereta@di.uoa.gr>
     4.5   *
     4.6   */
     4.7 -public class GeneralDBSqlPeriodUnion extends GneralDBSqlTemporalConstructBinary{
     4.8 +public class GeneralDBSqlPeriodUnion extends GeneralDBSqlTemporalConstructBinary{
     4.9  
    4.10  	public GeneralDBSqlPeriodUnion(GeneralDBSqlExpr left, GeneralDBSqlExpr right) {
    4.11  		super(left, right);
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GeneralDBSqlTemporalConstructBinary.java	Thu Nov 08 18:15:06 2012 +0200
     5.3 @@ -0,0 +1,42 @@
     5.4 +/**
     5.5 + * This Source Code Form is subject to the terms of the Mozilla Public
     5.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     5.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     5.8 + *
     5.9 + * Copyright (C) 2012, Pyravlos Team
    5.10 + *
    5.11 + * http://www.strabon.di.uoa.gr/
    5.12 + */
    5.13 +package org.openrdf.sail.generaldb.algebra.temporal;
    5.14 +
    5.15 +import org.openrdf.sail.generaldb.algebra.base.BinaryGeneralDBOperator;
    5.16 +import org.openrdf.sail.generaldb.algebra.base.GeneralDBQueryModelVisitorBase;
    5.17 +import org.openrdf.sail.generaldb.algebra.base.GeneralDBSqlExpr;
    5.18 +
    5.19 +/**
    5.20 + * @author Konstantina Bereta <Konstantina.Bereta@di.uoa.gr>
    5.21 + *
    5.22 + */
    5.23 +public abstract class GeneralDBSqlTemporalConstructBinary extends BinaryGeneralDBOperator {
    5.24 +		
    5.25 +	/*In Postgres Temporal it seems that an operator is assigned to every PERIOD function 
    5.26 +	 * I store this information in the declaration of each function so that i can use it in the mapping
    5.27 +	 * of stSPARQL queries to spatiotemporally extended SQL queries
    5.28 +	 * */
    5.29 +	public abstract  String getOperator();
    5.30 +	//This method returns the respective function of the Postgres Temporal extension
    5.31 +	public abstract  String getPostgresFunction();
    5.32 +
    5.33 +	public GeneralDBSqlTemporalConstructBinary(GeneralDBSqlExpr left, GeneralDBSqlExpr right) {
    5.34 +			super(left, right);
    5.35 +		}
    5.36 +
    5.37 +		@Override
    5.38 +		public <X extends Exception> void visit(GeneralDBQueryModelVisitorBase<X> visitor)
    5.39 +		throws X
    5.40 +		{
    5.41 +			visitor.meet(this);
    5.42 +		}
    5.43 +	}
    5.44 +
    5.45 +
     6.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/temporal/GneralDBSqlTemporalConstructBinary.java	Thu Nov 08 15:43:07 2012 +0200
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,42 +0,0 @@
     6.4 -/**
     6.5 - * This Source Code Form is subject to the terms of the Mozilla Public
     6.6 - * License, v. 2.0. If a copy of the MPL was not distributed with this
     6.7 - * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     6.8 - *
     6.9 - * Copyright (C) 2012, Pyravlos Team
    6.10 - *
    6.11 - * http://www.strabon.di.uoa.gr/
    6.12 - */
    6.13 -package org.openrdf.sail.generaldb.algebra.temporal;
    6.14 -
    6.15 -import org.openrdf.sail.generaldb.algebra.base.BinaryGeneralDBOperator;
    6.16 -import org.openrdf.sail.generaldb.algebra.base.GeneralDBQueryModelVisitorBase;
    6.17 -import org.openrdf.sail.generaldb.algebra.base.GeneralDBSqlExpr;
    6.18 -
    6.19 -/**
    6.20 - * @author Konstantina Bereta <Konstantina.Bereta@di.uoa.gr>
    6.21 - *
    6.22 - */
    6.23 -public abstract class GneralDBSqlTemporalConstructBinary extends BinaryGeneralDBOperator {
    6.24 -		
    6.25 -	/*In Postgres Temporal it seems that an operator is assigned to every PERIOD function 
    6.26 -	 * I store this information in the declaration of each function so that i can use it in the mapping
    6.27 -	 * of stSPARQL queries to spatiotemporally extended SQL queries
    6.28 -	 * */
    6.29 -	public abstract  String getOperator();
    6.30 -	//This method returns the respective function of the Postgres Temporal extension
    6.31 -	public abstract  String getPostgresFunction();
    6.32 -
    6.33 -	public GneralDBSqlTemporalConstructBinary(GeneralDBSqlExpr left, GeneralDBSqlExpr right) {
    6.34 -			super(left, right);
    6.35 -		}
    6.36 -
    6.37 -		@Override
    6.38 -		public <X extends Exception> void visit(GeneralDBQueryModelVisitorBase<X> visitor)
    6.39 -		throws X
    6.40 -		{
    6.41 -			visitor.meet(this);
    6.42 -		}
    6.43 -	}
    6.44 -
    6.45 -
     7.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/evaluation/GeneralDBQueryBuilder.java	Thu Nov 08 15:43:07 2012 +0200
     7.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/evaluation/GeneralDBQueryBuilder.java	Thu Nov 08 18:15:06 2012 +0200
     7.3 @@ -113,6 +113,13 @@
     7.4  import org.openrdf.sail.generaldb.algebra.sf.GeneralDBSqlSF_Overlaps;
     7.5  import org.openrdf.sail.generaldb.algebra.sf.GeneralDBSqlSF_Touches;
     7.6  import org.openrdf.sail.generaldb.algebra.sf.GeneralDBSqlSF_Within;
     7.7 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlPeriodContainedBy;
     7.8 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlPeriodContains;
     7.9 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlPeriodIntersection;
    7.10 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlPeriodMinus;
    7.11 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlPeriodOverlaps;
    7.12 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlPeriodUnion;
    7.13 +import org.openrdf.sail.generaldb.algebra.temporal.GeneralDBSqlTemporal;
    7.14  import org.openrdf.sail.rdbms.exceptions.RdbmsException;
    7.15  import org.openrdf.sail.rdbms.exceptions.UnsupportedRdbmsOperatorException;
    7.16  
    7.17 @@ -1227,5 +1234,48 @@
    7.18  
    7.19  	protected abstract void appendRelate(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, char[] intersectionPattern)
    7.20  			throws UnsupportedRdbmsOperatorException;
    7.21 +/**
    7.22 + * Postgres Temporal Functions 
    7.23 + */
    7.24 +
    7.25 +	protected void append(GeneralDBSqlPeriodContainedBy expr,
    7.26 +			GeneralDBSqlExprBuilder filter)
    7.27 +			throws UnsupportedRdbmsOperatorException {
    7.28 +				
    7.29 +	}
    7.30 +
    7.31 +protected void append(GeneralDBSqlPeriodContains expr,
    7.32 +		GeneralDBSqlExprBuilder filter)
    7.33 +		throws UnsupportedRdbmsOperatorException {
    7.34 +	
    7.35 +}
    7.36 +
    7.37 +protected void append(GeneralDBSqlPeriodIntersection expr,
    7.38 +		GeneralDBSqlExprBuilder filter)
    7.39 +		throws UnsupportedRdbmsOperatorException {
    7.40 +	
    7.41 +}
    7.42 +
    7.43 +protected void append(GeneralDBSqlPeriodMinus expr,
    7.44 +		GeneralDBSqlExprBuilder filter)
    7.45 +		throws UnsupportedRdbmsOperatorException {
    7.46 +	
    7.47 +}
    7.48 +
    7.49 +protected void append(GeneralDBSqlPeriodOverlaps expr,
    7.50 +		GeneralDBSqlExprBuilder filter)
    7.51 +		throws UnsupportedRdbmsOperatorException {
    7.52 +	
    7.53 +}
    7.54 +
    7.55 +protected void append(GeneralDBSqlPeriodUnion expr,
    7.56 +		GeneralDBSqlExprBuilder filter)
    7.57 +		throws UnsupportedRdbmsOperatorException {
    7.58 +	
    7.59 +}
    7.60 +
    7.61 +protected void append(GeneralDBSqlTemporal expr, GeneralDBSqlExprBuilder filter)
    7.62 +		throws UnsupportedRdbmsOperatorException {
    7.63 +}
    7.64  
    7.65  }
     8.1 --- a/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java	Thu Nov 08 15:43:07 2012 +0200
     8.2 +++ b/postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java	Thu Nov 08 18:15:06 2012 +0200
     8.3 @@ -93,6 +93,7 @@
     8.4  import org.openrdf.sail.generaldb.algebra.sf.GeneralDBSqlSF_Overlaps;
     8.5  import org.openrdf.sail.generaldb.algebra.sf.GeneralDBSqlSF_Touches;
     8.6  import org.openrdf.sail.generaldb.algebra.sf.GeneralDBSqlSF_Within;
     8.7 +import org.openrdf.sail.generaldb.algebra.temporal.*;
     8.8  import org.openrdf.sail.generaldb.evaluation.GeneralDBQueryBuilder;
     8.9  import org.openrdf.sail.generaldb.evaluation.GeneralDBSqlBracketBuilder;
    8.10  import org.openrdf.sail.generaldb.evaluation.GeneralDBSqlExprBuilder;
    8.11 @@ -766,6 +767,8 @@
    8.12  			{
    8.13  		appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_AsGML);
    8.14  			}
    8.15 +	
    8.16 +	
    8.17  
    8.18  	//	@Override
    8.19  	//	protected void append(GeneralDBSqlGeoSrid expr, GeneralDBSqlExprBuilder filter)
    8.20 @@ -934,6 +937,62 @@
    8.21  
    8.22  		return raw;
    8.23  	}
    8.24 +	
    8.25 +	/*Temporal Functions
    8.26 +	 * 
    8.27 +	 * */
    8.28 +	
    8.29 +	@Override
    8.30 +	protected void append(GeneralDBSqlPeriodContainedBy expr, GeneralDBSqlExprBuilder filter)
    8.31 +			throws UnsupportedRdbmsOperatorException
    8.32 +			{
    8.33 +		appendGeneralDBTemporalFunctionBinary(expr, filter, expr.getOperator());
    8.34 +			}
    8.35 +	
    8.36 +	@Override
    8.37 +	protected void append(GeneralDBSqlPeriodContains expr, GeneralDBSqlExprBuilder filter)
    8.38 +			throws UnsupportedRdbmsOperatorException
    8.39 +			{
    8.40 +		appendGeneralDBSpatialFunctionBinary(expr, filter, SpatialFunctionsPostGIS.ST_IsEmpty);
    8.41 +			}
    8.42 +
    8.43 +	@Override
    8.44 +	protected void append(GeneralDBSqlPeriodOverlaps expr, GeneralDBSqlExprBuilder filter)
    8.45 +			throws UnsupportedRdbmsOperatorException
    8.46 +			{
    8.47 +		//appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_IsEmpty);
    8.48 +			}
    8.49 +
    8.50 +	@Override
    8.51 +	protected void append(GeneralDBSqlPeriodIntersection expr, GeneralDBSqlExprBuilder filter)
    8.52 +			throws UnsupportedRdbmsOperatorException
    8.53 +			{
    8.54 +		//appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_IsEmpty);
    8.55 +			}
    8.56 +	
    8.57 +	@Override
    8.58 +	protected void append(GeneralDBSqlPeriodMinus expr, GeneralDBSqlExprBuilder filter)
    8.59 +			throws UnsupportedRdbmsOperatorException
    8.60 +			{
    8.61 +		//appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_IsEmpty);
    8.62 +			}
    8.63 +	
    8.64 +	@Override
    8.65 +	protected void append(GeneralDBSqlPeriodUnion expr, GeneralDBSqlExprBuilder filter)
    8.66 +			throws UnsupportedRdbmsOperatorException
    8.67 +			{
    8.68 +		//appendGeneralDBSpatialFunctionUnary(expr, filter, SpatialFunctionsPostGIS.ST_IsEmpty);
    8.69 +			}
    8.70 +
    8.71 +
    8.72 +
    8.73 +
    8.74 +
    8.75 +
    8.76 +
    8.77 +
    8.78 +
    8.79 +	
    8.80  
    8.81  	//Used in all the generaldb boolean spatial functions of the form ?GEO1 ~ ?GEO2 
    8.82  	//	protected void appendStSPARQLSpatialOperand(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialOperandsPostGIS operand) throws UnsupportedRdbmsOperatorException
    8.83 @@ -1255,6 +1314,140 @@
    8.84  
    8.85  	//Used in all the generaldb stsparql boolean spatial functions of the form ST_Function(?GEO1,?GEO2) 
    8.86  	//EXCEPT ST_Transform!!!
    8.87 +	protected void appendGeneralDBTemporalFunctionBinary(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, String func)
    8.88 +			throws UnsupportedRdbmsOperatorException
    8.89 +			{
    8.90 +		//In the case where no variable is present in the expression! e.g ConvexHull("POLYGON((.....))")
    8.91 +		boolean sridNeeded = true;
    8.92 +		//XXX Incorporating SRID
    8.93 +		String sridExpr = null;
    8.94 +
    8.95 +		filter.openBracket();
    8.96 +
    8.97 +		boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
    8.98 +		boolean check2 = expr.getRightArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull");
    8.99 +
   8.100 +		if(check1)
   8.101 +		{
   8.102 +			this.append((GeneralDBSqlNull)expr.getLeftArg(), filter);
   8.103 +
   8.104 +		}
   8.105 +		else if(check2)
   8.106 +		{
   8.107 +			this.append((GeneralDBSqlNull)expr.getRightArg(), filter);
   8.108 +		}
   8.109 +		else
   8.110 +		{
   8.111 +
   8.112 +			GeneralDBSqlExpr tmp = expr;
   8.113 +			if(tmp instanceof GeneralDBSqlSpatialConstructBinary && tmp.getParentNode() == null)
   8.114 +			{
   8.115 +				while(true)
   8.116 +				{
   8.117 +					GeneralDBSqlExpr child;
   8.118 +
   8.119 +					if(tmp instanceof BinaryGeneralDBOperator)
   8.120 +					{
   8.121 +						child = ((BinaryGeneralDBOperator) tmp).getLeftArg();
   8.122 +					}
   8.123 +					else //(tmp instanceof UnaryGeneralDBOperator)
   8.124 +					{
   8.125 +						child = ((UnaryGeneralDBOperator) tmp).getArg();
   8.126 +					}
   8.127 +
   8.128 +					tmp = child;
   8.129 +					if(tmp instanceof GeneralDBLabelColumn)
   8.130 +					{
   8.131 +						//Reached the innermost left var -> need to capture its SRID
   8.132 +						String alias;
   8.133 +						if (((GeneralDBLabelColumn) tmp).getRdbmsVar().isResource()) {
   8.134 +							//Predicates used in triple patterns non-existent in db
   8.135 +							alias="NULL";
   8.136 +						}
   8.137 +						else
   8.138 +						{
   8.139 +							//Reached the innermost left var -> need to capture its SRID
   8.140 +							alias = getLabelAlias(((GeneralDBLabelColumn) tmp).getRdbmsVar());
   8.141 +							alias=alias+".srid";
   8.142 +						}
   8.143 +						sridExpr = alias;
   8.144 +						break;
   8.145 +					}
   8.146 +					else if (tmp instanceof GeneralDBStringValue) //Constant!!
   8.147 +					{
   8.148 +						sridNeeded  = false;
   8.149 +						break;
   8.150 +					}
   8.151 +
   8.152 +				}
   8.153 +				if(sridNeeded)
   8.154 +				{
   8.155 +					filter.appendFunction(ST_TRANSFORM);
   8.156 +					filter.openBracket();
   8.157 +				}
   8.158 +			}
   8.159 +			/////
   8.160 +
   8.161 +
   8.162 +			if(func.equals("=")|| func.equals("!=")|| func.equals("-")|| func.equals("+")|| func.equals("~")|| 
   8.163 +					func.equals("@")|| func.equals("<<")|| func.equals(">>")|| func.equals("&>")|| func.equals("&>")|| func.equals("&&"))
   8.164 +			{
   8.165 +				filter.appendFunction(func);
   8.166 +				
   8.167 +			}
   8.168 +			
   8.169 +			
   8.170 +			filter.openBracket();
   8.171 +			if (expr.getLeftArg() instanceof GeneralDBSqlTemporalConstructBinary)
   8.172 +			{
   8.173 +				appendConstructFunction(expr.getLeftArg(), filter);
   8.174 +			}
   8.175 +		//TODO:Think about adding more temporal function types (e.g., metrics, unary operators)
   8.176 +			
   8.177 +			/*else if(expr.getLeftArg() instanceof GeneralDBSqlSpatialConstructUnary)
   8.178 +			{
   8.179 +				appendConstructFunction(expr.getLeftArg(), filter);
   8.180 +			}
   8.181 +			else if(expr.getLeftArg() instanceof GeneralDBSqlCase)
   8.182 +			{
   8.183 +				GeneralDBLabelColumn onlyLabel = (GeneralDBLabelColumn)((GeneralDBSqlCase)expr.getLeftArg()).getEntries().get(0).getResult();
   8.184 +				appendMBB(onlyLabel,filter); 
   8.185 +			}
   8.186 +			else
   8.187 +			{
   8.188 +				appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter);
   8.189 +			}*/
   8.190 +			filter.appendComma();
   8.191 +
   8.192 +			
   8.193 +			filter.openBracket();
   8.194 +			if (expr.getRightArg() instanceof GeneralDBSqlTemporalConstructBinary)
   8.195 +			{
   8.196 +				appendConstructFunction(expr.getRightArg(), filter);
   8.197 +			}
   8.198 +		
   8.199 +
   8.200 +			filter.closeBracket();
   8.201 +			//SRID Support
   8.202 +			if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null)
   8.203 +			{
   8.204 +				filter.appendComma();
   8.205 +				//filter.append(((GeneralDBSqlSpatialConstructBinary)expr).getSrid());
   8.206 +				filter.append(sridExpr);
   8.207 +				filter.closeBracket();
   8.208 +			}
   8.209 +			///
   8.210 +		}
   8.211 +		filter.closeBracket();
   8.212 +		//Used to explicitly include SRID
   8.213 +		if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null)
   8.214 +		{
   8.215 +			filter.appendComma();
   8.216 +			filter.append(sridExpr);
   8.217 +		}
   8.218 +
   8.219 +			}
   8.220 +	
   8.221  	protected void appendGeneralDBSpatialFunctionBinary(BinaryGeneralDBOperator expr, GeneralDBSqlExprBuilder filter, SpatialFunctionsPostGIS func)
   8.222  			throws UnsupportedRdbmsOperatorException
   8.223  			{