Changeset: f7c218b60924 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7c218b60924 Modified Files: common/utils/msabaoth.c sql/benchmarks/tpch/Tests/01-explain.stable.out sql/benchmarks/tpch/Tests/01-explain.stable.out.int128 sql/benchmarks/tpch/Tests/01-plan.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out sql/benchmarks/tpch/Tests/03-plan.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/05-plan.stable.out sql/benchmarks/tpch/Tests/06-explain.stable.out sql/benchmarks/tpch/Tests/06-plan.stable.out sql/benchmarks/tpch/Tests/07-explain.stable.out sql/benchmarks/tpch/Tests/07-plan.stable.out sql/benchmarks/tpch/Tests/08-explain.stable.out sql/benchmarks/tpch/Tests/08-plan.stable.out sql/benchmarks/tpch/Tests/09-explain.stable.out sql/benchmarks/tpch/Tests/09-plan.stable.out sql/benchmarks/tpch/Tests/10-explain.stable.out sql/benchmarks/tpch/Tests/10-plan.stable.out sql/benchmarks/tpch/Tests/11-explain.stable.out sql/benchmarks/tpch/Tests/11-plan.stable.out sql/benchmarks/tpch/Tests/14-explain.stable.out sql/benchmarks/tpch/Tests/14-explain.stable.out.int128 sql/benchmarks/tpch/Tests/14-plan.stable.out sql/benchmarks/tpch/Tests/15-explain.stable.out sql/benchmarks/tpch/Tests/15-plan.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out.int128 sql/benchmarks/tpch/Tests/17-plan.stable.out sql/benchmarks/tpch/Tests/18-plan.stable.out sql/benchmarks/tpch/Tests/19-explain.stable.out sql/benchmarks/tpch/Tests/19-plan.stable.out sql/benchmarks/tpch/Tests/20-explain.stable.out.int128 sql/benchmarks/tpch/Tests/20-plan.stable.out tools/merovingian/daemon/client.c tools/merovingian/daemon/connections.c tools/merovingian/daemon/controlrunner.c tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/handlers.c tools/merovingian/daemon/handlers.h tools/merovingian/daemon/merovingian.c tools/merovingian/daemon/merovingian.h tools/merovingian/daemon/multiplex-funnel.c tools/merovingian/utils/properties.c Branch: mosaic Log Message:
Merge with default diffs (truncated from 1527 to 300 lines): diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c --- a/common/utils/msabaoth.c +++ b/common/utils/msabaoth.c @@ -594,6 +594,85 @@ msab_getSingleStatus(const char *pathbuf sdb->path = strdup(buf); sdb->dbname = sdb->path + strlen(sdb->path) - strlen(dbname); + + /* check the state of the server by looking at its gdk lock: + * - if we can lock it, the server has crashed or isn't running + * - if we can't open it because it's locked, the server is + * running + * - to distinguish between a crash and proper shutdown, consult + * the uplog + * - one exception to all above; if this is the same process, we + * cannot lock (it always succeeds), hence, if we have the + * same signature, we assume running if the uplog states so. + */ + snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, + _sabaoth_internal_uuid); + if (stat(buf, &statbuf) != -1) { + /* database has the same process signature as ours, which + * means, it must be us, rely on the uplog state */ + snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); + if ((f = fopen(log, "r")) != NULL) { + (void)fseek(f, -1, SEEK_END); + if (fread(data, 1, 1, f) != 1) { + /* the log is empty, assume no crash */ + sdb->state = SABdbInactive; + } else if (data[0] == '\t') { + /* see if the database has finished starting */ + snprintf(buf, sizeof(buf), "%s/%s/%s", + pathbuf, dbname, STARTEDFILE); + if (stat(buf, &statbuf) == -1) { + sdb->state = SABdbStarting; + } else { + sdb->state = SABdbRunning; + } + } else { /* should be \n */ + sdb->state = SABdbInactive; + } + (void)fclose(f); + } + } else if ((snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, ".gdk_lock") > 0) & /* no typo */ + ((fd = MT_lockf(buf, F_TEST, 4, 1)) == -2)) { + /* Locking failed; this can be because the lockfile couldn't + * be created. Probably there is no Mserver running for + * that case also. + */ + sdb->state = SABdbInactive; + } else if (fd == -1) { + /* file is locked, so mserver is running, see if the database + * has finished starting */ + snprintf(buf, sizeof(buf), "%s/%s/%s", + pathbuf, dbname, STARTEDFILE); + if (stat(buf, &statbuf) == -1) { + sdb->state = SABdbStarting; + } else { + sdb->state = SABdbRunning; + } + } else { + /* file is not locked, check for a crash in the uplog */ + snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); + if ((f = fopen(log, "r")) != NULL) { + (void)fseek(f, -1, SEEK_END); + if (fread(data, 1, 1, f) != 1) { + /* the log is empty, assume no crash */ + sdb->state = SABdbInactive; + } else if (data[0] == '\n') { + sdb->state = SABdbInactive; + } else { /* should be \t */ + sdb->state = SABdbCrashed; + } + (void)fclose(f); + } else { + /* no uplog, so presumably never started */ + sdb->state = SABdbInactive; + } + } + snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, MAINTENANCEFILE); + if (stat(buf, &statbuf) == -1) { + sdb->locked = 0; + } else { + sdb->locked = 1; + } + /* add scenarios that are supported */ sdb->scens = NULL; snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, SCENARIOFILE); @@ -638,84 +717,6 @@ msab_getSingleStatus(const char *pathbuf (void)fclose(f); } - - /* check the state of the server by looking at its gdk lock: - * - if we can lock it, the server has crashed or isn't running - * - if we can't open it because it's locked, the server is - * running - * - to distinguish between a crash and proper shutdown, consult - * the uplog - * - one exception to all above; if this is the same process, we - * cannot lock (it always succeeds), hence, if we have the - * same signature, we assume running if the uplog states so. - */ - snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, - _sabaoth_internal_uuid); - if (stat(buf, &statbuf) != -1) { - /* database has the same process signature as ours, which - * means, it must be us, rely on the uplog state */ - snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); - if ((f = fopen(log, "r")) != NULL) { - (void)fseek(f, -1, SEEK_END); - if (fread(data, 1, 1, f) != 1) { - /* the log is empty, assume no crash */ - sdb->state = SABdbInactive; - } else if (data[0] == '\t') { - /* see if the database has finished starting */ - snprintf(buf, sizeof(buf), "%s/%s/%s", - pathbuf, dbname, STARTEDFILE); - if (stat(buf, &statbuf) == -1) { - sdb->state = SABdbStarting; - } else { - sdb->state = SABdbRunning; - } - } else { /* should be \n */ - sdb->state = SABdbInactive; - } - (void)fclose(f); - } - } else if ((snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, ".gdk_lock") > 0) & /* no typo */ - ((fd = MT_lockf(buf, F_TEST, 4, 1)) == -2)) { - /* Locking failed; this can be because the lockfile couldn't - * be created. Probably there is no Mserver running for - * that case also. - */ - sdb->state = SABdbInactive; - } else if (fd == -1) { - /* lock denied, so mserver is running, see if the database - * has finished starting */ - snprintf(buf, sizeof(buf), "%s/%s/%s", - pathbuf, dbname, STARTEDFILE); - if (stat(buf, &statbuf) == -1) { - sdb->state = SABdbStarting; - } else { - sdb->state = SABdbRunning; - } - } else { - /* locking succeed, check for a crash in the uplog */ - snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); - if ((f = fopen(log, "r")) != NULL) { - (void)fseek(f, -1, SEEK_END); - if (fread(data, 1, 1, f) != 1) { - /* the log is empty, assume no crash */ - sdb->state = SABdbInactive; - } else if (data[0] == '\n') { - sdb->state = SABdbInactive; - } else { /* should be \t */ - sdb->state = SABdbCrashed; - } - (void)fclose(f); - } else { - /* no uplog, so presumably never started */ - sdb->state = SABdbInactive; - } - } - snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, MAINTENANCEFILE); - if (stat(buf, &statbuf) == -1) { - sdb->locked = 0; - } else { - sdb->locked = 1; - } return sdb; } diff --git a/sql/benchmarks/tpch/Tests/01-explain.stable.out b/sql/benchmarks/tpch/Tests/01-explain.stable.out --- a/sql/benchmarks/tpch/Tests/01-explain.stable.out +++ b/sql/benchmarks/tpch/Tests/01-explain.stable.out @@ -55,14 +55,14 @@ function user.main():void; X_1244 := bat.new(nil:str); X_1251 := bat.append(X_1244,"sys.lineitem"); X_1261 := bat.append(X_1251,"sys.lineitem"); - X_1267 := bat.append(X_1261,"sys.L2"); - X_1277 := bat.append(X_1267,"sys.L4"); - X_1284 := bat.append(X_1277,"sys.L6"); - X_1292 := bat.append(X_1284,"sys.L10"); - X_1300 := bat.append(X_1292,"sys.L12"); - X_1310 := bat.append(X_1300,"sys.L14"); - X_1317 := bat.append(X_1310,"sys.L16"); - X_1324 := bat.append(X_1317,"sys.L20"); + X_1267 := bat.append(X_1261,"sys.L5"); + X_1277 := bat.append(X_1267,"sys.L10"); + X_1284 := bat.append(X_1277,"sys.L13"); + X_1292 := bat.append(X_1284,"sys.L16"); + X_1300 := bat.append(X_1292,"sys.L21"); + X_1310 := bat.append(X_1300,"sys.L24"); + X_1317 := bat.append(X_1310,"sys.L27"); + X_1324 := bat.append(X_1317,"sys.L32"); X_1246 := bat.new(nil:str); X_1253 := bat.append(X_1246,"l_returnflag"); X_1262 := bat.append(X_1253,"l_linestatus"); diff --git a/sql/benchmarks/tpch/Tests/01-plan.stable.out b/sql/benchmarks/tpch/Tests/01-plan.stable.out --- a/sql/benchmarks/tpch/Tests/01-plan.stable.out +++ b/sql/benchmarks/tpch/Tests/01-plan.stable.out @@ -56,9 +56,9 @@ project ( | | | select ( | | | | table(sys.lineitem) [ lineitem.l_quantity NOT NULL, lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, lineitem.l_tax NOT NULL, lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, lineitem.l_shipdate NOT NULL ] COUNT | | | ) [ lineitem.l_shipdate NOT NULL <= sys.sql_sub(date "1998-12-01", sec_interval(4) "7776000000") ] -| | ) [ lineitem.l_quantity NOT NULL, lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, lineitem.l_tax NOT NULL, lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, sys.sql_sub(decimal(15,2)[tinyint "1"], lineitem.l_discount NOT NULL) as L21.L21, sys.sql_mul(lineitem.l_extendedprice NOT NULL, L21.L21) as L22.L22, sys.sql_add(lineitem.l_tax NOT NULL, decimal(15,2)[tinyint "1"]) as L23.L23, sys.sql_mul(L22.L22, L23.L23) as L24.L24, double[lineitem.l_quantity NOT NULL] as L25.L25, double[lineitem.l_extendedprice NOT NULL] as L26.L26, double[lineitem.l_discount NOT NULL] as L27.L27 ] -| ) [ lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL ] [ lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, sys.sum no nil (lineitem.l_quantity NOT NULL) NOT NULL as L1.L1, sys.sum no nil (lineitem.l_extendedprice NOT NULL) NOT NULL as L3.L3, sys.sum no nil (L22.L22) as L5.L5, sys.sum no nil (L24.L24) as L7.L7, sys.avg no nil (L25.L25) as L11.L11, sys.avg no nil (L26.L26) as L13.L13, sys.avg no nil (L27.L27) as L15.L15, sys.count() NOT NULL as L17.L17 ] -) [ lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, L1 NOT NULL as L2.sum_qty, L3 NOT NULL as L4.sum_base_price, L5 as L6.sum_disc_price, L7 as L10.sum_charge, L11 as L12.avg_qty, L13 as L14.avg_price, L15 as L16.avg_disc, L17 NOT NULL as L20.count_order ] [ lineitem.l_returnflag ASC NOT NULL, lineitem.l_linestatus ASC NOT NULL ] +| | ) [ lineitem.l_quantity NOT NULL, lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, lineitem.l_tax NOT NULL, lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, sys.sql_sub(decimal(15,2)[tinyint "1"], lineitem.l_discount NOT NULL) as L35.L35, sys.sql_mul(lineitem.l_extendedprice NOT NULL, L35.L35) as L36.L36, sys.sql_add(lineitem.l_tax NOT NULL, decimal(15,2)[tinyint "1"]) as L37.L37, sys.sql_mul(L36.L36, L37.L37) as L40.L40, double[lineitem.l_quantity NOT NULL] as L41.L41, double[lineitem.l_extendedprice NOT NULL] as L42.L42, double[lineitem.l_discount NOT NULL] as L43.L43 ] +| ) [ lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL ] [ lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, sys.sum no nil (lineitem.l_quantity NOT NULL) NOT NULL as L4.L4, sys.sum no nil (lineitem.l_extendedprice NOT NULL) NOT NULL as L7.L7, sys.sum no nil (L36.L36) as L12.L12, sys.sum no nil (L40.L40) as L15.L15, sys.avg no nil (L41.L41) as L20.L20, sys.avg no nil (L42.L42) as L23.L23, sys.avg no nil (L43.L43) as L26.L26, sys.count() NOT NULL as L31.L31 ] +) [ lineitem.l_returnflag NOT NULL, lineitem.l_linestatus NOT NULL, L4 NOT NULL as L5.sum_qty, L7 NOT NULL as L10.sum_base_price, L12 as L13.sum_disc_price, L15 as L16.sum_charge, L20 as L21.avg_qty, L23 as L24.avg_price, L26 as L27.avg_disc, L31 NOT NULL as L32.count_order ] [ lineitem.l_returnflag ASC NOT NULL, lineitem.l_linestatus ASC NOT NULL ] # 22:46:28 > # 22:46:28 > "Done." diff --git a/sql/benchmarks/tpch/Tests/03-explain.stable.out b/sql/benchmarks/tpch/Tests/03-explain.stable.out --- a/sql/benchmarks/tpch/Tests/03-explain.stable.out +++ b/sql/benchmarks/tpch/Tests/03-explain.stable.out @@ -57,7 +57,7 @@ function user.s4_1():void; X_211:void := querylog.define("explain select\n l_orderkey,\n sum(l_extendedprice * (1 - l_discount)) as revenue,\n o_orderdate,\n o_shippriority\nfrom\n customer,\n orders,\n lineitem\nwhere\n c_mktsegment = \\'BUILDING\\'\n and c_custkey = o_custkey\n and l_orderkey = o_orderkey\n and o_orderdate < date \\'1995-03-15\\'\n and l_shipdate > date \\'1995-03-15\\'\ngroup by\n l_orderkey,\n o_orderdate,\n o_shippriority\norder by\n revenue desc,\n o_orderdate\nlimit 10;","sequential_pipe",78); X_170 := bat.new(nil:str); X_177 := bat.append(X_170,"sys.lineitem"); - X_187 := bat.append(X_177,"sys.L2"); + X_187 := bat.append(X_177,"sys.L4"); X_197 := bat.append(X_187,"sys.orders"); X_205 := bat.append(X_197,"sys.orders"); X_172 := bat.new(nil:str); diff --git a/sql/benchmarks/tpch/Tests/03-plan.stable.out b/sql/benchmarks/tpch/Tests/03-plan.stable.out --- a/sql/benchmarks/tpch/Tests/03-plan.stable.out +++ b/sql/benchmarks/tpch/Tests/03-plan.stable.out @@ -51,7 +51,7 @@ Ready. % .plan # table_name % rel # name % clob # type -% 319 # length +% 325 # length top N ( | project ( | | group by ( @@ -69,9 +69,9 @@ top N ( | | | | | | table(sys.lineitem) [ lineitem.l_orderkey NOT NULL HASHCOL , lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, lineitem.l_shipdate NOT NULL, lineitem.%lineitem_l_orderkey_fkey NOT NULL JOINIDX sys.lineitem.lineitem_l_orderkey_fkey ] COUNT | | | | | ) [ lineitem.l_shipdate NOT NULL > date "1995-03-15" ] | | | | ) [ lineitem.%lineitem_l_orderkey_fkey NOT NULL = orders.%TID% NOT NULL JOINIDX sys.lineitem.lineitem_l_orderkey_fkey ] -| | | ) [ orders.o_orderdate NOT NULL, orders.o_shippriority NOT NULL, lineitem.l_orderkey NOT NULL HASHCOL , lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, sys.sql_sub(decimal(15,2)[tinyint "1"], lineitem.l_discount NOT NULL) as L3.L3, sys.sql_mul(lineitem.l_extendedprice NOT NULL, L3.L3) as L4.L4 ] -| | ) [ lineitem.l_orderkey NOT NULL HASHCOL , orders.o_shippriority NOT NULL, orders.o_orderdate NOT NULL ] [ lineitem.l_orderkey NOT NULL HASHCOL , orders.o_orderdate NOT NULL, orders.o_shippriority NOT NULL, sys.sum no nil (L4.L4) as L1.L1 ] -| ) [ lineitem.l_orderkey NOT NULL, L1 as L2.revenue, orders.o_orderdate NOT NULL, orders.o_shippriority NOT NULL ] [ L2.revenue, orders.o_orderdate ASC NOT NULL ] +| | | ) [ orders.o_orderdate NOT NULL, orders.o_shippriority NOT NULL, lineitem.l_orderkey NOT NULL HASHCOL , lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, sys.sql_sub(decimal(15,2)[tinyint "1"], lineitem.l_discount NOT NULL) as L13.L13, sys.sql_mul(lineitem.l_extendedprice NOT NULL, L13.L13) as L14.L14 ] +| | ) [ lineitem.l_orderkey NOT NULL HASHCOL , orders.o_shippriority NOT NULL, orders.o_orderdate NOT NULL ] [ lineitem.l_orderkey NOT NULL HASHCOL , orders.o_orderdate NOT NULL, orders.o_shippriority NOT NULL, sys.sum no nil (L14.L14) as L3.L3 ] +| ) [ lineitem.l_orderkey NOT NULL, L3 as L4.revenue, orders.o_orderdate NOT NULL, orders.o_shippriority NOT NULL ] [ L4.revenue, orders.o_orderdate ASC NOT NULL ] ) [ bigint "10" ] # 22:46:29 > diff --git a/sql/benchmarks/tpch/Tests/05-explain.stable.out b/sql/benchmarks/tpch/Tests/05-explain.stable.out --- a/sql/benchmarks/tpch/Tests/05-explain.stable.out +++ b/sql/benchmarks/tpch/Tests/05-explain.stable.out @@ -58,7 +58,7 @@ function user.s4_1():void; X_237:void := querylog.define("explain select\n n_name,\n sum(l_extendedprice * (1 - l_discount)) as revenue\nfrom\n customer,\n orders,\n lineitem,\n supplier,\n nation,\n region\nwhere\n c_custkey = o_custkey\n and l_orderkey = o_orderkey\n and l_suppkey = s_suppkey\n and c_nationkey = s_nationkey\n and s_nationkey = n_nationkey\n and n_regionkey = r_regionkey\n and r_name = \\'ASIA\\'\n and o_orderdate >= date \\'1994-01-01\\'\n and o_orderdate < date \\'1994-01-01\\' + interval \\'1\\' year\ngroup by\n n_name\norder by\n revenue desc;","sequential_pipe",93); X_210 := bat.new(nil:str); X_217 := bat.append(X_210,"sys.nation"); - X_227 := bat.append(X_217,"sys.L2"); + X_227 := bat.append(X_217,"sys.L4"); X_212 := bat.new(nil:str); X_219 := bat.append(X_212,"n_name"); X_229 := bat.append(X_219,"revenue"); diff --git a/sql/benchmarks/tpch/Tests/05-plan.stable.out b/sql/benchmarks/tpch/Tests/05-plan.stable.out --- a/sql/benchmarks/tpch/Tests/05-plan.stable.out +++ b/sql/benchmarks/tpch/Tests/05-plan.stable.out @@ -52,7 +52,7 @@ Ready. % .plan # table_name % rel # name % clob # type -% 241 # length +% 247 # length project ( | group by ( | | project ( @@ -76,9 +76,9 @@ project ( | | | | | table(sys.region) [ region.r_name NOT NULL, region.%TID% NOT NULL ] COUNT | | | | ) [ region.r_name NOT NULL = char(25) "ASIA" ] | | | ) [ nation.%nation_n_regionkey_fkey NOT NULL = region.%TID% NOT NULL JOINIDX sys.nation.nation_n_regionkey_fkey ] -| | ) [ lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, nation.n_name NOT NULL, sys.sql_sub(decimal(15,2)[tinyint "1"], lineitem.l_discount NOT NULL) as L3.L3, sys.sql_mul(lineitem.l_extendedprice NOT NULL, L3.L3) as L4.L4 ] -| ) [ nation.n_name NOT NULL ] [ nation.n_name NOT NULL, sys.sum no nil (L4.L4) as L1.L1 ] -) [ nation.n_name NOT NULL, L1 as L2.revenue ] [ L2.revenue ] +| | ) [ lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, nation.n_name NOT NULL, sys.sql_sub(decimal(15,2)[tinyint "1"], lineitem.l_discount NOT NULL) as L14.L14, sys.sql_mul(lineitem.l_extendedprice NOT NULL, L14.L14) as L15.L15 ] +| ) [ nation.n_name NOT NULL ] [ nation.n_name NOT NULL, sys.sum no nil (L15.L15) as L3.L3 ] +) [ nation.n_name NOT NULL, L3 as L4.revenue ] [ L4.revenue ] # 22:46:29 > # 22:46:29 > "Done." diff --git a/sql/benchmarks/tpch/Tests/06-plan.stable.out b/sql/benchmarks/tpch/Tests/06-plan.stable.out --- a/sql/benchmarks/tpch/Tests/06-plan.stable.out +++ b/sql/benchmarks/tpch/Tests/06-plan.stable.out @@ -44,9 +44,9 @@ project ( | | | select ( | | | | table(sys.lineitem) [ lineitem.l_quantity NOT NULL, lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, lineitem.l_shipdate NOT NULL ] COUNT | | | ) [ date "1994-01-01" <= lineitem.l_shipdate NOT NULL < sys.sql_add(date "1994-01-01", month_interval "12"), decimal(15,2)[sys.sql_sub(decimal(3,2)[decimal(2,2) "6"], decimal(3,2) "1")] <= lineitem.l_discount NOT NULL <= decimal(15,2)[sys.sql_add(decimal(3,2)[decimal(2,2) "6"], decimal(3,2) "1")], lineitem.l_quantity NOT NULL < decimal(15,2)[tinyint "24"] ] -| | ) [ lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL, sys.sql_mul(lineitem.l_extendedprice NOT NULL, lineitem.l_discount NOT NULL) as L3.L3 ] -| ) [ ] [ sys.sum no nil (L3.L3) as L1.L1 ] -) [ L1 as L2.revenue ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list