Changeset: c227444dae5e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c227444dae5e
Modified Files:
        sql/backends/monet5/rel_bin.c
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
Branch: Oct2020
Log Message:

use candidate difference in case statements, simplifies handling of 
'else'/'elseif'.


diffs (truncated from 1078 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -683,15 +683,11 @@ exp2bin_case(backend *be, sql_exp *fe, s
                                assert(cond);
 
                                if (en->next) {
-                                       cond = stmt_unop(be, cond, not);
-                                       sql_subfunc *isnull = 
sql_bind_func(be->mvc->sa, be->mvc->session->schema, "isnull", bt, NULL, 
F_FUNC);
-                                       cond = stmt_binop(be, cond, 
stmt_unop(be, ncond, isnull), or);
-                                       stmt *s = stmt_uselect(be, cond, 
stmt_bool(be, 1), cmp_equal, NULL, 0/*anti*/, 0);
-                                       if (osel)
-                                               rsel = stmt_project(be, s, 
osel);
-                                       else
-                                               rsel = s;
-                                       osel = rsel;
+                                       /* osel - rsel */
+                                       if (!osel)
+                                               osel = stmt_mirror(be, res);
+                                       stmt *d = stmt_tdiff(be, osel, rsel, 
NULL);
+                                       osel = rsel = stmt_project(be, d, osel);
                                }
                        }
                        if (next_cond) {
@@ -704,8 +700,10 @@ exp2bin_case(backend *be, sql_exp *fe, s
                                        else
                                                ncond = stmt_const(be, 
bin_first_column(be, left), ncond);
                                }
-                               stmt *s = stmt_uselect(be, ncond, stmt_bool(be, 
1), cmp_equal, NULL, 0/*anti*/, 0);
-                               if (rsel)
+                               // else if (!ncond->cand && rsel)
+                               //      ncond = stmt_project(be, rsel, ncond);
+                               stmt *s = stmt_uselect(be, ncond, stmt_bool(be, 
1), cmp_equal, !ncond->cand?rsel:NULL, 0/*anti*/, 0);
+                               if (rsel && ncond->cand)
                                        rsel = stmt_project(be, s, rsel);
                                else
                                        rsel = s;
diff --git 
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
 
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
--- 
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
+++ 
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
@@ -34,7 +34,7 @@ stdout of test 'duplicates-not-eliminate
 % 1023 # length
 function user.main():void;
     X_1:void := querylog.define("explain select sys.timestamp_to_str(case when 
task0.\"sys_created_on\" >= \\'1999-10-31 09:00:00\\' and 
task0.\"sys_created_on\" < \\'2000-04-02 10:00:00\\' then 
task0.\"sys_created_on\" + interval \\'-28800\\' second when 
task0.\"sys_created_on\" >= \\'2000-04-02 10:00:00\\' and 
task0.\"sys_created_on\" < \\'2000-10-29 09:00:00\\' then 
task0.\"sys_created_on\" + interval \\'-25200\\' second when 
task0.\"sys_created_on\" >= \\'2000-10-29 09:00:00\\' and 
task0.\"sys_created_on\" < \\'2001-04-01 10:00:00\\' then 
task0.\"sys_created_on\" + interval \\'-28800\\' second when 
task0.\"sys_created_on\" >= \\'2001-04-01 10:00:00\\' and 
task0.\"sys_created_on\" < \\'2001-10-28 09:00:00\\' then 
task0.\"sys_created_on\" + interval \\'-25200\\' second when 
task0.\"sys_created_on\" >= \\'2001-10-28 09:00:00\\' and 
task0.\"sys_created_on\" < \\'2002-04-07 10:00:00\\' then 
task0.\"sys_created_on\" + interval \\'-28800\\' second when 
task0.\"sys_created_on\" >= \\'20
 02-04-07 10:00:00\\' and t
-barrier X_1298:bit := language.dataflow();
+barrier X_1093:bit := language.dataflow();
     X_43:bat[:str] := bat.new(nil:str);
     X_56:bat[:timestamp] := algebra.project(X_43:bat[:str], nil:timestamp);
     X_45:bat[:timestamp] := bat.new(nil:timestamp);
@@ -43,612 +43,428 @@ barrier X_1298:bit := language.dataflow(
     X_61:bat[:timestamp] := 
batmtime.timestamp_add_msec_interval(X_45:bat[:timestamp], -28800000:lng);
     X_64:bat[:timestamp] := algebra.projection(C_58:bat[:oid], 
X_61:bat[:timestamp]);
     X_65:bat[:timestamp] := bat.replace(X_56:bat[:timestamp], C_58:bat[:oid], 
X_64:bat[:timestamp], true:bit);
-    X_66:bat[:bit] := batcalc.not(X_51:bat[:bit]);
-    X_69:bat[:bit] := batcalc.isnil(X_51:bat[:bit]);
-    X_71:bat[:bit] := batcalc.or(X_66:bat[:bit], X_69:bat[:bit]);
-    C_75:bat[:oid] := algebra.thetaselect(X_71:bat[:bit], true:bit, "==":str);
-    X_80:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2000-04-02 
10:00:00.000000":timestamp, "2000-10-29 09:00:00.000000":timestamp, 
C_75:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_82:bat[:oid] := algebra.thetaselect(X_80:bat[:bit], true:bit, "==":str);
-    C_83:bat[:oid] := algebra.projection(C_82:bat[:oid], C_75:bat[:oid]);
-    X_86:bat[:timestamp] := 
batmtime.timestamp_add_msec_interval(X_45:bat[:timestamp], -25200000:lng);
-    X_87:bat[:timestamp] := algebra.projection(C_83:bat[:oid], 
X_86:bat[:timestamp]);
-    X_88:bat[:timestamp] := bat.replace(X_65:bat[:timestamp], C_83:bat[:oid], 
X_87:bat[:timestamp], true:bit);
-    X_89:bat[:bit] := batcalc.not(X_80:bat[:bit]);
-    X_90:bat[:bit] := batcalc.isnil(X_80:bat[:bit]);
-    X_91:bat[:bit] := batcalc.or(X_89:bat[:bit], X_90:bat[:bit]);
-    C_93:bat[:oid] := algebra.thetaselect(X_91:bat[:bit], true:bit, "==":str);
-    C_94:bat[:oid] := algebra.projection(C_93:bat[:oid], C_75:bat[:oid]);
-    X_99:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2000-10-29 
09:00:00.000000":timestamp, "2001-04-01 10:00:00.000000":timestamp, 
C_94:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_103:bat[:oid] := algebra.thetaselect(X_99:bat[:bit], true:bit, "==":str);
-    C_104:bat[:oid] := algebra.projection(C_103:bat[:oid], C_94:bat[:oid]);
-    X_110:bat[:timestamp] := algebra.projection(C_104:bat[:oid], 
X_61:bat[:timestamp]);
-    X_111:bat[:timestamp] := bat.replace(X_88:bat[:timestamp], 
C_104:bat[:oid], X_110:bat[:timestamp], true:bit);
-    X_113:bat[:bit] := batcalc.not(X_99:bat[:bit]);
-    X_116:bat[:bit] := batcalc.isnil(X_99:bat[:bit]);
-    X_118:bat[:bit] := batcalc.or(X_113:bat[:bit], X_116:bat[:bit]);
-    C_121:bat[:oid] := algebra.thetaselect(X_118:bat[:bit], true:bit, 
"==":str);
-    C_123:bat[:oid] := algebra.projection(C_121:bat[:oid], C_94:bat[:oid]);
-    X_127:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2001-04-01 
10:00:00.000000":timestamp, "2001-10-28 09:00:00.000000":timestamp, 
C_123:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_129:bat[:oid] := algebra.thetaselect(X_127:bat[:bit], true:bit, 
"==":str);
-    C_130:bat[:oid] := algebra.projection(C_129:bat[:oid], C_123:bat[:oid]);
-    X_134:bat[:timestamp] := algebra.projection(C_130:bat[:oid], 
X_86:bat[:timestamp]);
-    X_135:bat[:timestamp] := bat.replace(X_111:bat[:timestamp], 
C_130:bat[:oid], X_134:bat[:timestamp], true:bit);
-    X_136:bat[:bit] := batcalc.not(X_127:bat[:bit]);
-    X_137:bat[:bit] := batcalc.isnil(X_127:bat[:bit]);
-    X_138:bat[:bit] := batcalc.or(X_136:bat[:bit], X_137:bat[:bit]);
-    C_140:bat[:oid] := algebra.thetaselect(X_138:bat[:bit], true:bit, 
"==":str);
-    C_141:bat[:oid] := algebra.projection(C_140:bat[:oid], C_123:bat[:oid]);
-    X_146:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2001-10-28 
09:00:00.000000":timestamp, "2002-04-07 10:00:00.000000":timestamp, 
C_141:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_150:bat[:oid] := algebra.thetaselect(X_146:bat[:bit], true:bit, 
"==":str);
-    C_151:bat[:oid] := algebra.projection(C_150:bat[:oid], C_141:bat[:oid]);
-    X_157:bat[:timestamp] := algebra.projection(C_151:bat[:oid], 
X_61:bat[:timestamp]);
-    X_158:bat[:timestamp] := bat.replace(X_135:bat[:timestamp], 
C_151:bat[:oid], X_157:bat[:timestamp], true:bit);
-    X_159:bat[:bit] := batcalc.not(X_146:bat[:bit]);
-    X_162:bat[:bit] := batcalc.isnil(X_146:bat[:bit]);
-    X_164:bat[:bit] := batcalc.or(X_159:bat[:bit], X_162:bat[:bit]);
-    C_167:bat[:oid] := algebra.thetaselect(X_164:bat[:bit], true:bit, 
"==":str);
-    C_169:bat[:oid] := algebra.projection(C_167:bat[:oid], C_141:bat[:oid]);
-    X_173:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2002-04-07 
10:00:00.000000":timestamp, "2002-10-27 09:00:00.000000":timestamp, 
C_169:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_175:bat[:oid] := algebra.thetaselect(X_173:bat[:bit], true:bit, 
"==":str);
-    C_176:bat[:oid] := algebra.projection(C_175:bat[:oid], C_169:bat[:oid]);
-    X_180:bat[:timestamp] := algebra.projection(C_176:bat[:oid], 
X_86:bat[:timestamp]);
-    X_181:bat[:timestamp] := bat.replace(X_158:bat[:timestamp], 
C_176:bat[:oid], X_180:bat[:timestamp], true:bit);
-    X_183:bat[:bit] := batcalc.not(X_173:bat[:bit]);
-    X_184:bat[:bit] := batcalc.isnil(X_173:bat[:bit]);
-    X_185:bat[:bit] := batcalc.or(X_183:bat[:bit], X_184:bat[:bit]);
-    C_187:bat[:oid] := algebra.thetaselect(X_185:bat[:bit], true:bit, 
"==":str);
-    C_188:bat[:oid] := algebra.projection(C_187:bat[:oid], C_169:bat[:oid]);
-    X_193:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2002-10-27 
09:00:00.000000":timestamp, "2003-04-06 10:00:00.000000":timestamp, 
C_188:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_197:bat[:oid] := algebra.thetaselect(X_193:bat[:bit], true:bit, 
"==":str);
-    C_198:bat[:oid] := algebra.projection(C_197:bat[:oid], C_188:bat[:oid]);
-    X_204:bat[:timestamp] := algebra.projection(C_198:bat[:oid], 
X_61:bat[:timestamp]);
-    X_205:bat[:timestamp] := bat.replace(X_181:bat[:timestamp], 
C_198:bat[:oid], X_204:bat[:timestamp], true:bit);
-    X_206:bat[:bit] := batcalc.not(X_193:bat[:bit]);
-    X_209:bat[:bit] := batcalc.isnil(X_193:bat[:bit]);
-    X_211:bat[:bit] := batcalc.or(X_206:bat[:bit], X_209:bat[:bit]);
-    C_214:bat[:oid] := algebra.thetaselect(X_211:bat[:bit], true:bit, 
"==":str);
-    C_216:bat[:oid] := algebra.projection(C_214:bat[:oid], C_188:bat[:oid]);
-    X_220:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2003-04-06 
10:00:00.000000":timestamp, "2003-10-26 09:00:00.000000":timestamp, 
C_216:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_223:bat[:oid] := algebra.thetaselect(X_220:bat[:bit], true:bit, 
"==":str);
-    C_224:bat[:oid] := algebra.projection(C_223:bat[:oid], C_216:bat[:oid]);
-    X_228:bat[:timestamp] := algebra.projection(C_224:bat[:oid], 
X_86:bat[:timestamp]);
-    X_229:bat[:timestamp] := bat.replace(X_205:bat[:timestamp], 
C_224:bat[:oid], X_228:bat[:timestamp], true:bit);
-    X_230:bat[:bit] := batcalc.not(X_220:bat[:bit]);
-    X_231:bat[:bit] := batcalc.isnil(X_220:bat[:bit]);
-    X_232:bat[:bit] := batcalc.or(X_230:bat[:bit], X_231:bat[:bit]);
-    C_234:bat[:oid] := algebra.thetaselect(X_232:bat[:bit], true:bit, 
"==":str);
-    C_235:bat[:oid] := algebra.projection(C_234:bat[:oid], C_216:bat[:oid]);
-    X_240:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2003-10-26 
09:00:00.000000":timestamp, "2004-04-04 10:00:00.000000":timestamp, 
C_235:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_244:bat[:oid] := algebra.thetaselect(X_240:bat[:bit], true:bit, 
"==":str);
-    C_245:bat[:oid] := algebra.projection(C_244:bat[:oid], C_235:bat[:oid]);
-    X_251:bat[:timestamp] := algebra.projection(C_245:bat[:oid], 
X_61:bat[:timestamp]);
-    X_252:bat[:timestamp] := bat.replace(X_229:bat[:timestamp], 
C_245:bat[:oid], X_251:bat[:timestamp], true:bit);
-    X_253:bat[:bit] := batcalc.not(X_240:bat[:bit]);
-    X_256:bat[:bit] := batcalc.isnil(X_240:bat[:bit]);
-    X_258:bat[:bit] := batcalc.or(X_253:bat[:bit], X_256:bat[:bit]);
-    C_262:bat[:oid] := algebra.thetaselect(X_258:bat[:bit], true:bit, 
"==":str);
-    C_264:bat[:oid] := algebra.projection(C_262:bat[:oid], C_235:bat[:oid]);
-    X_268:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2004-04-04 
10:00:00.000000":timestamp, "2004-10-31 09:00:00.000000":timestamp, 
C_264:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_270:bat[:oid] := algebra.thetaselect(X_268:bat[:bit], true:bit, 
"==":str);
-    C_271:bat[:oid] := algebra.projection(C_270:bat[:oid], C_264:bat[:oid]);
-    X_275:bat[:timestamp] := algebra.projection(C_271:bat[:oid], 
X_86:bat[:timestamp]);
-    X_276:bat[:timestamp] := bat.replace(X_252:bat[:timestamp], 
C_271:bat[:oid], X_275:bat[:timestamp], true:bit);
-    X_277:bat[:bit] := batcalc.not(X_268:bat[:bit]);
-    X_278:bat[:bit] := batcalc.isnil(X_268:bat[:bit]);
-    X_279:bat[:bit] := batcalc.or(X_277:bat[:bit], X_278:bat[:bit]);
-    C_281:bat[:oid] := algebra.thetaselect(X_279:bat[:bit], true:bit, 
"==":str);
-    C_282:bat[:oid] := algebra.projection(C_281:bat[:oid], C_264:bat[:oid]);
-    X_287:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2004-10-31 
09:00:00.000000":timestamp, "2005-04-03 10:00:00.000000":timestamp, 
C_282:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_291:bat[:oid] := algebra.thetaselect(X_287:bat[:bit], true:bit, 
"==":str);
-    C_292:bat[:oid] := algebra.projection(C_291:bat[:oid], C_282:bat[:oid]);
-    X_298:bat[:timestamp] := algebra.projection(C_292:bat[:oid], 
X_61:bat[:timestamp]);
-    X_299:bat[:timestamp] := bat.replace(X_276:bat[:timestamp], 
C_292:bat[:oid], X_298:bat[:timestamp], true:bit);
-    X_301:bat[:bit] := batcalc.not(X_287:bat[:bit]);
-    X_304:bat[:bit] := batcalc.isnil(X_287:bat[:bit]);
-    X_306:bat[:bit] := batcalc.or(X_301:bat[:bit], X_304:bat[:bit]);
-    C_309:bat[:oid] := algebra.thetaselect(X_306:bat[:bit], true:bit, 
"==":str);
-    C_311:bat[:oid] := algebra.projection(C_309:bat[:oid], C_282:bat[:oid]);
-    X_315:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2005-04-03 
10:00:00.000000":timestamp, "2005-10-30 09:00:00.000000":timestamp, 
C_311:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_317:bat[:oid] := algebra.thetaselect(X_315:bat[:bit], true:bit, 
"==":str);
-    C_318:bat[:oid] := algebra.projection(C_317:bat[:oid], C_311:bat[:oid]);
-    X_322:bat[:timestamp] := algebra.projection(C_318:bat[:oid], 
X_86:bat[:timestamp]);
-    X_323:bat[:timestamp] := bat.replace(X_299:bat[:timestamp], 
C_318:bat[:oid], X_322:bat[:timestamp], true:bit);
-    X_324:bat[:bit] := batcalc.not(X_315:bat[:bit]);
-    X_325:bat[:bit] := batcalc.isnil(X_315:bat[:bit]);
-    X_326:bat[:bit] := batcalc.or(X_324:bat[:bit], X_325:bat[:bit]);
-    C_328:bat[:oid] := algebra.thetaselect(X_326:bat[:bit], true:bit, 
"==":str);
-    C_329:bat[:oid] := algebra.projection(C_328:bat[:oid], C_311:bat[:oid]);
-    X_334:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2005-10-30 
09:00:00.000000":timestamp, "2006-04-02 10:00:00.000000":timestamp, 
C_329:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_338:bat[:oid] := algebra.thetaselect(X_334:bat[:bit], true:bit, 
"==":str);
-    C_339:bat[:oid] := algebra.projection(C_338:bat[:oid], C_329:bat[:oid]);
-    X_345:bat[:timestamp] := algebra.projection(C_339:bat[:oid], 
X_61:bat[:timestamp]);
-    X_346:bat[:timestamp] := bat.replace(X_323:bat[:timestamp], 
C_339:bat[:oid], X_345:bat[:timestamp], true:bit);
-    X_347:bat[:bit] := batcalc.not(X_334:bat[:bit]);
-    X_350:bat[:bit] := batcalc.isnil(X_334:bat[:bit]);
-    X_352:bat[:bit] := batcalc.or(X_347:bat[:bit], X_350:bat[:bit]);
-    C_355:bat[:oid] := algebra.thetaselect(X_352:bat[:bit], true:bit, 
"==":str);
-    C_357:bat[:oid] := algebra.projection(C_355:bat[:oid], C_329:bat[:oid]);
-    X_361:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2006-04-02 
10:00:00.000000":timestamp, "2006-10-29 09:00:00.000000":timestamp, 
C_357:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_363:bat[:oid] := algebra.thetaselect(X_361:bat[:bit], true:bit, 
"==":str);
-    C_364:bat[:oid] := algebra.projection(C_363:bat[:oid], C_357:bat[:oid]);
-    X_368:bat[:timestamp] := algebra.projection(C_364:bat[:oid], 
X_86:bat[:timestamp]);
-    X_369:bat[:timestamp] := bat.replace(X_346:bat[:timestamp], 
C_364:bat[:oid], X_368:bat[:timestamp], true:bit);
-    X_371:bat[:bit] := batcalc.not(X_361:bat[:bit]);
-    X_372:bat[:bit] := batcalc.isnil(X_361:bat[:bit]);
-    X_373:bat[:bit] := batcalc.or(X_371:bat[:bit], X_372:bat[:bit]);
-    C_375:bat[:oid] := algebra.thetaselect(X_373:bat[:bit], true:bit, 
"==":str);
-    C_376:bat[:oid] := algebra.projection(C_375:bat[:oid], C_357:bat[:oid]);
-    X_381:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2006-10-29 
09:00:00.000000":timestamp, "2007-03-11 10:00:00.000000":timestamp, 
C_376:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_385:bat[:oid] := algebra.thetaselect(X_381:bat[:bit], true:bit, 
"==":str);
-    C_386:bat[:oid] := algebra.projection(C_385:bat[:oid], C_376:bat[:oid]);
-    X_392:bat[:timestamp] := algebra.projection(C_386:bat[:oid], 
X_61:bat[:timestamp]);
-    X_393:bat[:timestamp] := bat.replace(X_369:bat[:timestamp], 
C_386:bat[:oid], X_392:bat[:timestamp], true:bit);
-    X_394:bat[:bit] := batcalc.not(X_381:bat[:bit]);
-    X_397:bat[:bit] := batcalc.isnil(X_381:bat[:bit]);
-    X_399:bat[:bit] := batcalc.or(X_394:bat[:bit], X_397:bat[:bit]);
-    C_402:bat[:oid] := algebra.thetaselect(X_399:bat[:bit], true:bit, 
"==":str);
-    C_404:bat[:oid] := algebra.projection(C_402:bat[:oid], C_376:bat[:oid]);
-    X_408:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2007-03-11 
10:00:00.000000":timestamp, "2007-11-04 09:00:00.000000":timestamp, 
C_404:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_411:bat[:oid] := algebra.thetaselect(X_408:bat[:bit], true:bit, 
"==":str);
-    C_412:bat[:oid] := algebra.projection(C_411:bat[:oid], C_404:bat[:oid]);
-    X_416:bat[:timestamp] := algebra.projection(C_412:bat[:oid], 
X_86:bat[:timestamp]);
-    X_417:bat[:timestamp] := bat.replace(X_393:bat[:timestamp], 
C_412:bat[:oid], X_416:bat[:timestamp], true:bit);
-    X_418:bat[:bit] := batcalc.not(X_408:bat[:bit]);
-    X_419:bat[:bit] := batcalc.isnil(X_408:bat[:bit]);
-    X_420:bat[:bit] := batcalc.or(X_418:bat[:bit], X_419:bat[:bit]);
-    C_422:bat[:oid] := algebra.thetaselect(X_420:bat[:bit], true:bit, 
"==":str);
-    C_423:bat[:oid] := algebra.projection(C_422:bat[:oid], C_404:bat[:oid]);
-    X_428:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2007-11-04 
09:00:00.000000":timestamp, "2008-03-09 10:00:00.000000":timestamp, 
C_423:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_432:bat[:oid] := algebra.thetaselect(X_428:bat[:bit], true:bit, 
"==":str);
-    C_433:bat[:oid] := algebra.projection(C_432:bat[:oid], C_423:bat[:oid]);
-    X_439:bat[:timestamp] := algebra.projection(C_433:bat[:oid], 
X_61:bat[:timestamp]);
-    X_440:bat[:timestamp] := bat.replace(X_417:bat[:timestamp], 
C_433:bat[:oid], X_439:bat[:timestamp], true:bit);
-    X_441:bat[:bit] := batcalc.not(X_428:bat[:bit]);
-    X_444:bat[:bit] := batcalc.isnil(X_428:bat[:bit]);
-    X_446:bat[:bit] := batcalc.or(X_441:bat[:bit], X_444:bat[:bit]);
-    C_450:bat[:oid] := algebra.thetaselect(X_446:bat[:bit], true:bit, 
"==":str);
-    C_452:bat[:oid] := algebra.projection(C_450:bat[:oid], C_423:bat[:oid]);
-    X_456:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2008-03-09 
10:00:00.000000":timestamp, "2008-11-02 09:00:00.000000":timestamp, 
C_452:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_458:bat[:oid] := algebra.thetaselect(X_456:bat[:bit], true:bit, 
"==":str);
-    C_459:bat[:oid] := algebra.projection(C_458:bat[:oid], C_452:bat[:oid]);
-    X_463:bat[:timestamp] := algebra.projection(C_459:bat[:oid], 
X_86:bat[:timestamp]);
-    X_464:bat[:timestamp] := bat.replace(X_440:bat[:timestamp], 
C_459:bat[:oid], X_463:bat[:timestamp], true:bit);
-    X_465:bat[:bit] := batcalc.not(X_456:bat[:bit]);
-    X_466:bat[:bit] := batcalc.isnil(X_456:bat[:bit]);
-    X_467:bat[:bit] := batcalc.or(X_465:bat[:bit], X_466:bat[:bit]);
-    C_469:bat[:oid] := algebra.thetaselect(X_467:bat[:bit], true:bit, 
"==":str);
-    C_470:bat[:oid] := algebra.projection(C_469:bat[:oid], C_452:bat[:oid]);
-    X_475:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2008-11-02 
09:00:00.000000":timestamp, "2009-03-08 10:00:00.000000":timestamp, 
C_470:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_479:bat[:oid] := algebra.thetaselect(X_475:bat[:bit], true:bit, 
"==":str);
-    C_480:bat[:oid] := algebra.projection(C_479:bat[:oid], C_470:bat[:oid]);
-    X_486:bat[:timestamp] := algebra.projection(C_480:bat[:oid], 
X_61:bat[:timestamp]);
-    X_487:bat[:timestamp] := bat.replace(X_464:bat[:timestamp], 
C_480:bat[:oid], X_486:bat[:timestamp], true:bit);
-    X_489:bat[:bit] := batcalc.not(X_475:bat[:bit]);
-    X_492:bat[:bit] := batcalc.isnil(X_475:bat[:bit]);
-    X_494:bat[:bit] := batcalc.or(X_489:bat[:bit], X_492:bat[:bit]);
-    C_497:bat[:oid] := algebra.thetaselect(X_494:bat[:bit], true:bit, 
"==":str);
-    C_499:bat[:oid] := algebra.projection(C_497:bat[:oid], C_470:bat[:oid]);
-    X_503:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2009-03-08 
10:00:00.000000":timestamp, "2009-11-01 09:00:00.000000":timestamp, 
C_499:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_505:bat[:oid] := algebra.thetaselect(X_503:bat[:bit], true:bit, 
"==":str);
-    C_506:bat[:oid] := algebra.projection(C_505:bat[:oid], C_499:bat[:oid]);
-    X_510:bat[:timestamp] := algebra.projection(C_506:bat[:oid], 
X_86:bat[:timestamp]);
-    X_511:bat[:timestamp] := bat.replace(X_487:bat[:timestamp], 
C_506:bat[:oid], X_510:bat[:timestamp], true:bit);
-    X_512:bat[:bit] := batcalc.not(X_503:bat[:bit]);
-    X_513:bat[:bit] := batcalc.isnil(X_503:bat[:bit]);
-    X_514:bat[:bit] := batcalc.or(X_512:bat[:bit], X_513:bat[:bit]);
-    C_516:bat[:oid] := algebra.thetaselect(X_514:bat[:bit], true:bit, 
"==":str);
-    C_517:bat[:oid] := algebra.projection(C_516:bat[:oid], C_499:bat[:oid]);
-    X_522:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2009-11-01 
09:00:00.000000":timestamp, "2010-03-14 10:00:00.000000":timestamp, 
C_517:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_526:bat[:oid] := algebra.thetaselect(X_522:bat[:bit], true:bit, 
"==":str);
-    C_527:bat[:oid] := algebra.projection(C_526:bat[:oid], C_517:bat[:oid]);
-    X_533:bat[:timestamp] := algebra.projection(C_527:bat[:oid], 
X_61:bat[:timestamp]);
-    X_534:bat[:timestamp] := bat.replace(X_511:bat[:timestamp], 
C_527:bat[:oid], X_533:bat[:timestamp], true:bit);
-    X_535:bat[:bit] := batcalc.not(X_522:bat[:bit]);
-    X_538:bat[:bit] := batcalc.isnil(X_522:bat[:bit]);
-    X_540:bat[:bit] := batcalc.or(X_535:bat[:bit], X_538:bat[:bit]);
-    C_543:bat[:oid] := algebra.thetaselect(X_540:bat[:bit], true:bit, 
"==":str);
-    C_545:bat[:oid] := algebra.projection(C_543:bat[:oid], C_517:bat[:oid]);
-    X_549:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2010-03-14 
10:00:00.000000":timestamp, "2010-11-07 09:00:00.000000":timestamp, 
C_545:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_551:bat[:oid] := algebra.thetaselect(X_549:bat[:bit], true:bit, 
"==":str);
-    C_552:bat[:oid] := algebra.projection(C_551:bat[:oid], C_545:bat[:oid]);
-    X_556:bat[:timestamp] := algebra.projection(C_552:bat[:oid], 
X_86:bat[:timestamp]);
-    X_557:bat[:timestamp] := bat.replace(X_534:bat[:timestamp], 
C_552:bat[:oid], X_556:bat[:timestamp], true:bit);
-    X_559:bat[:bit] := batcalc.not(X_549:bat[:bit]);
-    X_560:bat[:bit] := batcalc.isnil(X_549:bat[:bit]);
-    X_561:bat[:bit] := batcalc.or(X_559:bat[:bit], X_560:bat[:bit]);
-    C_563:bat[:oid] := algebra.thetaselect(X_561:bat[:bit], true:bit, 
"==":str);
-    C_564:bat[:oid] := algebra.projection(C_563:bat[:oid], C_545:bat[:oid]);
-    X_569:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2010-11-07 
09:00:00.000000":timestamp, "2011-03-13 10:00:00.000000":timestamp, 
C_564:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_573:bat[:oid] := algebra.thetaselect(X_569:bat[:bit], true:bit, 
"==":str);
-    C_574:bat[:oid] := algebra.projection(C_573:bat[:oid], C_564:bat[:oid]);
-    X_580:bat[:timestamp] := algebra.projection(C_574:bat[:oid], 
X_61:bat[:timestamp]);
-    X_581:bat[:timestamp] := bat.replace(X_557:bat[:timestamp], 
C_574:bat[:oid], X_580:bat[:timestamp], true:bit);
-    X_582:bat[:bit] := batcalc.not(X_569:bat[:bit]);
-    X_585:bat[:bit] := batcalc.isnil(X_569:bat[:bit]);
-    X_587:bat[:bit] := batcalc.or(X_582:bat[:bit], X_585:bat[:bit]);
-    C_590:bat[:oid] := algebra.thetaselect(X_587:bat[:bit], true:bit, 
"==":str);
-    C_592:bat[:oid] := algebra.projection(C_590:bat[:oid], C_564:bat[:oid]);
-    X_596:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2011-03-13 
10:00:00.000000":timestamp, "2011-11-06 09:00:00.000000":timestamp, 
C_592:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_599:bat[:oid] := algebra.thetaselect(X_596:bat[:bit], true:bit, 
"==":str);
-    C_600:bat[:oid] := algebra.projection(C_599:bat[:oid], C_592:bat[:oid]);
-    X_604:bat[:timestamp] := algebra.projection(C_600:bat[:oid], 
X_86:bat[:timestamp]);
-    X_605:bat[:timestamp] := bat.replace(X_581:bat[:timestamp], 
C_600:bat[:oid], X_604:bat[:timestamp], true:bit);
-    X_606:bat[:bit] := batcalc.not(X_596:bat[:bit]);
-    X_607:bat[:bit] := batcalc.isnil(X_596:bat[:bit]);
-    X_608:bat[:bit] := batcalc.or(X_606:bat[:bit], X_607:bat[:bit]);
-    C_610:bat[:oid] := algebra.thetaselect(X_608:bat[:bit], true:bit, 
"==":str);
-    C_611:bat[:oid] := algebra.projection(C_610:bat[:oid], C_592:bat[:oid]);
-    X_616:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2011-11-06 
09:00:00.000000":timestamp, "2012-03-11 10:00:00.000000":timestamp, 
C_611:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_620:bat[:oid] := algebra.thetaselect(X_616:bat[:bit], true:bit, 
"==":str);
-    C_621:bat[:oid] := algebra.projection(C_620:bat[:oid], C_611:bat[:oid]);
-    X_627:bat[:timestamp] := algebra.projection(C_621:bat[:oid], 
X_61:bat[:timestamp]);
-    X_628:bat[:timestamp] := bat.replace(X_605:bat[:timestamp], 
C_621:bat[:oid], X_627:bat[:timestamp], true:bit);
-    X_629:bat[:bit] := batcalc.not(X_616:bat[:bit]);
-    X_632:bat[:bit] := batcalc.isnil(X_616:bat[:bit]);
-    X_634:bat[:bit] := batcalc.or(X_629:bat[:bit], X_632:bat[:bit]);
-    C_638:bat[:oid] := algebra.thetaselect(X_634:bat[:bit], true:bit, 
"==":str);
-    C_640:bat[:oid] := algebra.projection(C_638:bat[:oid], C_611:bat[:oid]);
-    X_644:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "2012-03-11 
10:00:00.000000":timestamp, "2012-11-04 09:00:00.000000":timestamp, 
C_640:bat[:oid], false:bit, true:bit, false:bit, false:bit, false:bit);
-    C_646:bat[:oid] := algebra.thetaselect(X_644:bat[:bit], true:bit, 
"==":str);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to