const string sAtTime = ":AT_TIME"; // time of slice static Expr Cond_TimeIntervalHalfOpen(QueryTimeInfo startTime, string sATime, string sBTime) { // sATime<startTime AND startTime<=sBTime var cond = BinaryExpr.Create(ExprType.LogicalAnd, new BinaryExpr(ExprType.LessThan, startTime.Time2Value(sATime), startTime.valueExpr), new BinaryExpr(ExprType.LessThanOrEqual, startTime.valueExpr, startTime.Time2Value(sBTime))); return(cond); }
static Expr Cond_TimeSlice(QueryTimeInfo startTime, QueryTimeInfo endTime, string sMinTime) { // sMinTime<=startTime AND startTime<=sAtTime AND (endTime is null OR sAtTime<=endTime) var cond_min = new BinaryExpr(ExprType.LessThanOrEqual, startTime.Time2Value(sMinTime), startTime.valueExpr); var cond_0 = new BinaryExpr(ExprType.LessThanOrEqual, startTime.valueExpr, startTime.Time2Value(sAtTime)); var cond_1 = new BinaryExpr(ExprType.LogicalOr, new SequenceExpr(endTime.valueExpr, new ReferenceExpr("IS NULL")), new BinaryExpr(ExprType.LessThan, endTime.Time2Value(sAtTime), endTime.valueExpr) ); var cond = BinaryExpr.Create(ExprType.LogicalAnd, cond_min, cond_0, cond_1); return(cond); }