Changeset: 0105c150d9d1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0105c150d9d1 Modified Files: monetdb5/modules/mal/mat.c sql/backends/monet5/sql.c sql/storage/bat/bat_storage.c sql/test/BugTracker-2015/Tests/readonly.Bug-3709.stable.out sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out Branch: unlock Log Message:
some more candidate-msk handling diffs (truncated from 1269 to 300 lines): diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c --- a/monetdb5/modules/mal/mat.c +++ b/monetdb5/modules/mal/mat.c @@ -49,8 +49,8 @@ MATpackInternal(Client cntxt, MalBlkPtr BAT *b, *bn; BUN cap = 0; int tt = TYPE_any; + int rt = getArgType(mb, p, 0), unmask = 0; (void) cntxt; - (void) mb; for (i = 1; i < p->argc; i++) { bat bid = stk->stk[getArg(p,i)].val.bval; @@ -58,7 +58,7 @@ MATpackInternal(Client cntxt, MalBlkPtr if( b ){ if (tt == TYPE_any) tt = b->ttype; - if ((tt != TYPE_void && b->ttype != TYPE_void) && tt != b->ttype) + if ((tt != TYPE_void && b->ttype != TYPE_void && b->ttype != TYPE_msk) && tt != b->ttype) throw(MAL, "mat.pack", "incompatible arguments"); cap += BATcount(b); } @@ -68,12 +68,18 @@ MATpackInternal(Client cntxt, MalBlkPtr return MAL_SUCCEED; } + if (tt == TYPE_msk && rt == newBatType(TYPE_oid)) { + tt = TYPE_oid; + unmask = 1; + } bn = COLnew(0, tt, cap, TRANSIENT); if (bn == NULL) throw(MAL, "mat.pack", SQLSTATE(HY013) MAL_MALLOC_FAIL); for (i = 1; i < p->argc; i++) { - b = BATdescriptor(stk->stk[getArg(p,i)].val.ival); + BAT *ob = b = BATdescriptor(stk->stk[getArg(p,i)].val.ival); + if (unmask && b && b->ttype == TYPE_msk) + b = BATunmask(b); if( b ){ if (BATcount(bn) == 0) { BAThseqbase(bn, b->hseqbase); @@ -86,6 +92,8 @@ MATpackInternal(Client cntxt, MalBlkPtr } BBPunfix(b->batCacheid); } + if (b != ob) + BBPunfix(ob->batCacheid); } if( !(!bn->tnil || !bn->tnonil)){ BBPkeepref(*ret = bn->batCacheid); @@ -113,9 +121,13 @@ MATpackIncrement(Client cntxt, MalBlkPtr throw(MAL, "mat.pack", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); if ( getArgType(mb,p,2) == TYPE_int){ + BAT *ob = b; /* first step, estimate with some slack */ pieces = stk->stk[getArg(p,2)].val.ival; - bn = COLnew(b->hseqbase, ATOMtype(b->ttype), (BUN)(1.2 * BATcount(b) * pieces), TRANSIENT); + int tt = ATOMtype(b->ttype); + if (b->ttype == TYPE_msk) + tt = TYPE_oid; + bn = COLnew(b->hseqbase, tt, (BUN)(1.2 * BATcount(b) * pieces), TRANSIENT); if (bn == NULL) { BBPunfix(b->batCacheid); throw(MAL, "mat.pack", SQLSTATE(HY013) MAL_MALLOC_FAIL); @@ -131,19 +143,26 @@ MATpackIncrement(Client cntxt, MalBlkPtr } } BATtseqbase(bn, b->tseqbase); - if (BATappend(bn, b, NULL, false) != GDK_SUCCEED) { + if (b->ttype == TYPE_msk) + b = BATunmask(b); + if (b && BATappend(bn, b, NULL, false) != GDK_SUCCEED) { BBPunfix(bn->batCacheid); BBPunfix(b->batCacheid); throw(MAL, "mat.pack", GDK_EXCEPTION); } bn->unused = (pieces-1); /* misuse "unused" field */ BBPkeepref(*ret = bn->batCacheid); - BBPunfix(b->batCacheid); + if (b) + BBPunfix(b->batCacheid); + if (b != ob) + BBPunfix(ob->batCacheid); if( !(!bn->tnil || !bn->tnonil)) throw(MAL, "mat.packIncrement", "INTERNAL ERROR" " bn->tnil %d bn->tnonil %d", bn->tnil, bn->tnonil); } else { /* remaining steps */ - bb = BATdescriptor(stk->stk[getArg(p,2)].val.ival); + BAT *obb = bb = BATdescriptor(stk->stk[getArg(p,2)].val.ival); + if (bb && bb->ttype == TYPE_msk) + bb = BATunmask(bb); if ( bb ){ if (BATcount(b) == 0) { BAThseqbase(b, bb->hseqbase); @@ -156,6 +175,8 @@ MATpackIncrement(Client cntxt, MalBlkPtr } BBPunfix(bb->batCacheid); } + if (bb != obb) + BBPunfix(obb->batCacheid); b->unused--; if(b->unused == 0) if (BATsetaccess(b, BAT_READ) != GDK_SUCCEED) { diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -1854,7 +1854,7 @@ mvc_delete_wrap(Client cntxt, MalBlkPtr tpe = TYPE_bat; if (tpe == TYPE_bat && (b = BATdescriptor(*(bat *) ins)) == NULL) throw(SQL, "sql.delete", SQLSTATE(HY005) "Cannot access column descriptor"); - if (tpe != TYPE_bat || (b->ttype != TYPE_oid && b->ttype != TYPE_void)) { + if (tpe != TYPE_bat || (b->ttype != TYPE_oid && b->ttype != TYPE_void && b->ttype != TYPE_msk)) { if (b) BBPunfix(b->batCacheid); throw(SQL, "sql.delete", SQLSTATE(HY005) "Cannot access column descriptor"); diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -831,7 +831,11 @@ delta_delete_bat( storage *bat, BAT *i, { /* update ids */ msk T = TRUE; - BAT *t = BATconstant(i->hseqbase, TYPE_msk, &T, BATcount(i), TRANSIENT); + BAT *t, *oi = i; + + if (i->ttype == TYPE_msk) + i = BATunmask(i); + t = BATconstant(i->hseqbase, TYPE_msk, &T, BATcount(i), TRANSIENT); int ok = LOG_OK; assert(i->ttype != TYPE_msk); @@ -839,6 +843,8 @@ delta_delete_bat( storage *bat, BAT *i, ok = cs_update_bat( &bat->cs, i, t, is_new); } BBPunfix(t->batCacheid); + if (i != oi) + BBPunfix(i->batCacheid); return ok; } diff --git a/sql/test/BugTracker-2015/Tests/readonly.Bug-3709.stable.out b/sql/test/BugTracker-2015/Tests/readonly.Bug-3709.stable.out --- a/sql/test/BugTracker-2015/Tests/readonly.Bug-3709.stable.out +++ b/sql/test/BugTracker-2015/Tests/readonly.Bug-3709.stable.out @@ -40,18 +40,18 @@ stdout of test 'readonly.Bug-3709` in di % usec, statement # name % bigint, clob # type % 3, 134 # length -[ 15, "X_1=0@0:void := querylog.define(\"trace select * from s10;\":str, \"default_pipe\":str, 13:int);" ] -[ 22, "X_4=0:int := sql.mvc();" ] -[ 92, "X_16=[1]:bat[:str] := bat.pack(\"int\":str);" ] -[ 153, "X_17=[1]:bat[:int] := bat.pack(32:int);" ] -[ 119, "X_15=[1]:bat[:str] := bat.pack(\"x\":str);" ] -[ 187, "X_14=[1]:bat[:str] := bat.pack(\"sys.s10\":str);" ] -[ 208, "X_18=[1]:bat[:int] := bat.pack(0:int);" ] -[ 264, "C_5=[1]:bat[:cnd] := sql.tid(X_4=0:int, \"sys\":str, \"s10\":str); # select: dense" ] -[ 30, "X_11=[1]:bat[:int] := sql.bind(X_4=0:int, \"sys\":str, \"s10\":str, \"x\":str, 0:int);" ] -[ 24, "X_12=[1]:bat[:int] := algebra.projection(C_5=[1]:bat[:cnd], X_11=[1]:bat[:int]); # project_int" ] -[ 806, "barrier X_70=false:bit := language.dataflow();" ] -[ 65, "sql.resultSet(X_14=[1]:bat[:str], X_15=[1]:bat[:str], X_16=[1]:bat[:str], X_17=[1]:bat[:int], X_18=[1]:bat[:int], X_12=[1]:bat[:int]);" ] +[ 5, "X_1=0@0:void := querylog.define(\"trace select * from s10;\":str, \"default_pipe\":str, 13:int);" ] +[ 4, "X_4=0:int := sql.mvc();" ] +[ 20, "X_14=[1]:bat[:str] := bat.pack(\"sys.s10\":str);" ] +[ 22, "X_18=[1]:bat[:int] := bat.pack(0:int);" ] +[ 20, "X_15=[1]:bat[:str] := bat.pack(\"x\":str);" ] +[ 18, "X_17=[1]:bat[:int] := bat.pack(32:int);" ] +[ 22, "X_16=[1]:bat[:str] := bat.pack(\"int\":str);" ] +[ 134, "C_5=[1]:bat[:cnd] := sql.tid(X_4=0:int, \"sys\":str, \"s10\":str); # select: dense" ] +[ 10, "X_11=[1]:bat[:int] := sql.bind(X_4=0:int, \"sys\":str, \"s10\":str, \"x\":str, 0:int);" ] +[ 11, "X_12=[1]:bat[:int] := algebra.projection(C_5=[1]:bat[:cnd], X_11=[1]:bat[:int]); # project_int" ] +[ 350, "barrier X_70=false:bit := language.dataflow();" ] +[ 24, "sql.resultSet(X_14=[1]:bat[:str], X_15=[1]:bat[:str], X_16=[1]:bat[:str], X_17=[1]:bat[:int], X_18=[1]:bat[:int], X_12=[1]:bat[:int]);" ] #rollback; #drop table s10; 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,660 +34,441 @@ 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(); - 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); - X_51:bat[:bit] := batcalc.between(X_45:bat[:timestamp], "1999-10-31 09:00:00.000000":timestamp, "2000-04-02 10:00:00.000000":timestamp, false:bit, true:bit, false:bit, false:bit, false:bit); - C_58:bat[:oid] := algebra.thetaselect(X_51:bat[:bit], true:bit, "==":str); - 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]); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list