Changeset 741:60a14eba94dd


Ignore:
Timestamp:
11/27/12 20:08:56 (5 years ago)
Author:
Konstantina Bereta <Konstantina.Bereta@…>
Branch:
temporals
Message:

Temporal joins are now perfomed correctly. Tested with simple queries containing strdf:AfterPeriod, strdf:BeforePeriod, strdf:PeriodContains, strdf:containedByPeriod and strdf:PeriodOverlaps in the FILTER clause of the query.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/stsparql/relation/InsideFunc.java

    r601 r738  
    2121        @Override 
    2222        public String getURI() { 
    23                 return GeoConstants.inside; 
     23                return GeoConstants.within; 
    2424        } 
    2525} 
  • generaldb/src/main/java/org/openrdf/sail/generaldb/algebra/factories/GeneralDBBooleanExprFactory.java

    r733 r741  
    4747import org.openrdf.query.algebra.evaluation.function.spatial.stsparql.metric.AreaFunc; 
    4848import org.openrdf.query.algebra.evaluation.function.spatial.stsparql.relation.RelateFunc; 
     49import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.AfterPeriodFunc; 
     50import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.BeforePeriodFunc; 
     51import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.PeriodContainedByFunc; 
     52import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.PeriodContainsFunc; 
    4953import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.TemporalConstants; 
     54import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.TemporalRelationFunc; 
     55import org.openrdf.query.algebra.evaluation.function.temporal.stsparql.relation.periodOverlapsFunc; 
    5056import org.openrdf.query.algebra.helpers.QueryModelVisitorBase; 
    5157import org.openrdf.sail.generaldb.algebra.GeneralDBFalseValue; 
     
    672678                        result = spatialMetricPicker(function, leftArg, rightArg); 
    673679                } 
     680                else if(function instanceof TemporalRelationFunc) 
     681                { 
     682                        ValueExpr left = functionCall.getArgs().get(0); 
     683                        ValueExpr right = functionCall.getArgs().get(1); 
     684 
     685 
     686                        GeneralDBSqlExpr leftArg = null; 
     687                        GeneralDBSqlExpr rightArg = null; 
     688                        GeneralDBSqlExpr thirdArg = null; 
     689 
     690                        if(left instanceof FunctionCall) 
     691                        { 
     692                                leftArg = temporalFunction((FunctionCall) left); 
     693                        } 
     694                        else 
     695                        { 
     696                                leftArg = label(left); 
     697                        } 
     698 
     699                        if(right instanceof FunctionCall) 
     700                        { 
     701                                rightArg = temporalFunction((FunctionCall) right); 
     702                        } 
     703                        else 
     704                        { 
     705                                rightArg = label(right); 
     706                        } 
     707                        result = temporalRelationPicker(function, leftArg, rightArg, thirdArg); 
     708                } 
    674709                else //default case 
    675710                { 
     
    700735                return null; 
    701736        } 
    702  
     737         
     738        public GeneralDBSqlExpr temporalFunction(FunctionCall functionCall) throws UnsupportedRdbmsOperatorException 
     739        { 
     740                Function function = FunctionRegistry.getInstance().get(functionCall.getURI()); 
     741                //FIXME more cases to be added later. E.g, for the temporal construct functions and temporal metric functions 
     742                if(function instanceof SpatialRelationshipFunc) 
     743                { 
     744                        return temporalRelationFunction(functionCall,function);  
     745                } 
     746                 
     747                return null; 
     748        } 
     749 
     750        GeneralDBSqlExpr temporalRelationFunction(FunctionCall functionCall, Function function) throws UnsupportedRdbmsOperatorException 
     751        { 
     752                ValueExpr left = functionCall.getArgs().get(0); 
     753                ValueExpr right = functionCall.getArgs().get(1); 
     754 
     755 
     756                GeneralDBSqlExpr leftArg = null; 
     757                GeneralDBSqlExpr rightArg = null; 
     758                GeneralDBSqlExpr thirdArg = null; 
     759 
     760                if(left instanceof FunctionCall) 
     761                { 
     762                        leftArg = temporalFunction((FunctionCall) left); 
     763                } 
     764                else 
     765                { 
     766                        leftArg = label(left); 
     767                } 
     768 
     769                if(right instanceof FunctionCall) 
     770                { 
     771                        rightArg = temporalFunction((FunctionCall) right); 
     772                } 
     773                else 
     774                { 
     775                        rightArg = label(right); 
     776                } 
     777 
     778                return temporalRelationPicker(function, leftArg, rightArg, thirdArg); 
     779        } 
    703780 
    704781        GeneralDBSqlExpr spatialRelationshipFunction(FunctionCall functionCall, Function function) throws UnsupportedRdbmsOperatorException 
     
    855932 
    856933        } 
    857  
     934         
     935        GeneralDBSqlExpr temporalRelationPicker(Function function,GeneralDBSqlExpr leftArg, GeneralDBSqlExpr rightArg,  
     936                        GeneralDBSqlExpr thirdArg) 
     937        { 
     938                if(function instanceof AfterPeriodFunc) 
     939                { 
     940                        return afterPeriod(leftArg, rightArg); 
     941                } 
     942                else if(function instanceof BeforePeriodFunc) 
     943                { 
     944                        return beforePeriod(leftArg, rightArg); 
     945                } 
     946                else if(function instanceof PeriodContainsFunc) 
     947                { 
     948                        return periodContains(leftArg, rightArg); 
     949                } 
     950                else if(function instanceof PeriodContainedByFunc) 
     951                { 
     952                        return periodContainedBy(leftArg, rightArg); 
     953                } 
     954                else if(function instanceof periodOverlapsFunc) 
     955                { 
     956                        return periodOverlaps(leftArg, rightArg); 
     957                } 
     958                else  
     959                { 
     960                        return null; 
     961                } 
     962        } 
     963         
    858964        GeneralDBSqlExpr spatialRelationshipPicker(Function function,GeneralDBSqlExpr leftArg, GeneralDBSqlExpr rightArg,  
    859965                        GeneralDBSqlExpr thirdArg) 
  • generaldb/src/main/java/org/openrdf/sail/generaldb/evaluation/GeneralDBQueryBuilder.java

    r733 r741  
    11841184                } 
    11851185        } 
     1186         
     1187        protected void appendPeriod(GeneralDBLabelColumn var, GeneralDBSqlExprBuilder filter) 
     1188        { 
     1189                //I seriously doubt it will ever visit this case 
     1190 
     1191                if (var.getRdbmsVar().isResource()) { 
     1192                        filter.appendNull(); 
     1193 
     1194                } 
     1195                else { 
     1196                        String alias = getLabelAlias(var.getRdbmsVar()); 
     1197 
     1198                        filter.column(alias, "period"); 
     1199 
     1200                } 
     1201        } 
     1202 
    11861203 
    11871204        protected abstract String appendWKT(GeneralDBSqlExpr expr, GeneralDBSqlExprBuilder filter); 
  • monetdb/src/main/java/org/openrdf/sail/monetdb/evaluation/MonetDBQueryBuilder.java

    r733 r741  
    378378                if(expr instanceof BinaryGeneralDBOperator) 
    379379                { 
     380                        System.out.println("expr instanceof BinaryGeneralDBOperator"); 
    380381                        dispatchBinarySqlOperator((BinaryGeneralDBOperator) expr, (MonetDBSqlExprBuilder)query.select); 
    381382                } 
  • postgis/src/main/java/org/openrdf/sail/postgis/evaluation/PostGISQueryBuilder.java

    r733 r741  
    13541354                String sridExpr = null; 
    13551355 
    1356                 filter.openBracket(); 
     1356                //filter.openBracket(); 
    13571357 
    13581358                boolean check1 = expr.getLeftArg().getClass().getCanonicalName().equals("org.openrdf.sail.generaldb.algebra.GeneralDBSqlNull"); 
     
    13721372 
    13731373                        GeneralDBSqlExpr tmp = expr; 
    1374                         if(tmp instanceof GeneralDBSqlSpatialConstructBinary && tmp.getParentNode() == null) 
     1374                        if(tmp instanceof GeneralDBSqlTemporalConstructBinary && tmp.getParentNode() == null) 
    13751375                        { 
    13761376                                while(true) 
     
    14211421 
    14221422 
    1423                         if(func.equals("=")|| func.equals("!=")|| func.equals("-")|| func.equals("+")|| func.equals("~")||  
    1424                                         func.equals("@")|| func.equals("<<")|| func.equals(">>")|| func.equals("&>")|| func.equals("&>")|| func.equals("&&")) 
    1425                         { 
    1426                                 filter.appendFunction(func); 
    1427                                  
    1428                         } 
     1423                 
    14291424                         
    14301425                         
     
    14341429                                appendConstructFunction(expr.getLeftArg(), filter); 
    14351430                        } 
     1431                        else 
     1432                        {                        
     1433                                appendPeriod((GeneralDBLabelColumn)(expr.getLeftArg()),filter); 
     1434 
     1435                        } 
     1436                         
     1437                        if(func.equals("=")|| func.equals("!=")|| func.equals("-")|| func.equals("+")|| func.equals("~")||  
     1438                                        func.equals("@")|| func.equals("<<")|| func.equals(">>")|| func.equals("&>")|| func.equals("&>")|| func.equals("&&")) 
     1439                        { 
     1440                                filter.appendFunction(func); 
     1441                                 
     1442                        } 
     1443                         
    14361444                //TODO:Think about adding more temporal function types (e.g., metrics, unary operators) 
    14371445                         
     
    14491457                                appendMBB((GeneralDBLabelColumn)(expr.getLeftArg()),filter); 
    14501458                        }*/ 
    1451                         filter.appendComma(); 
     1459                        //filter.appendComma(); 
    14521460 
    14531461                         
    1454                         filter.openBracket(); 
     1462//                      //filter.openBracket(); 
    14551463                        if (expr.getRightArg() instanceof GeneralDBSqlTemporalConstructBinary) 
    14561464                        { 
    14571465                                appendConstructFunction(expr.getRightArg(), filter); 
    14581466                        } 
     1467                        else 
     1468                        { 
     1469                                appendPeriod((GeneralDBLabelColumn)(expr.getRightArg()),filter); 
     1470                        } 
    14591471                 
    14601472 
    1461                         filter.closeBracket(); 
     1473//                      //filter.closeBracket(); 
    14621474                        //SRID Support 
    14631475                        if(expr instanceof GeneralDBSqlSpatialConstructBinary && expr.getParentNode() == null) 
  • runtime/src/main/java/eu/earthobservatory/runtime/postgis/QueryOp.java

    r552 r741  
    5353                         
    5454                } catch (Exception e) { 
    55                         logger.error("[Strabon.QueryOp] Error during execution of SPARQL query.", e); 
    56                          
     55                        logger.error("[Strabon.QueryOp] Error during execution of SPARQL query.", e);                    
    5756                } finally { 
    5857                        if (strabon != null) { 
Note: See TracChangeset for help on using the changeset viewer.