Changeset: 6ff75886e5d8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6ff75886e5d8
Branch: dict
Log Message:

merged with default


diffs (136 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1399,16 +1399,13 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
 
                                                /* Find converted value type 
for division and update function output type */
                                                if (f->func->fix_scale == 
SCALE_DIV) {
-                                                       sql_subtype *lt = 
is_convert(l->type) ? ((sql_subtype*)exp_fromtype(l)) : exp_subtype(l);
+                                                       sql_subtype *lt = 
exp_subtype(l);
                                                        sql_subtype *rt = 
exp_subtype(r);
 
                                                        if (lt->type->scale == 
SCALE_FIX && rt->scale && strcmp(f->func->imp, "/") == 0) {
                                                                sql_subtype 
*res = f->res->h->data;
-                                                               unsigned int 
scaleL = (lt->scale < 3) ? 3 : lt->scale;
-                                                               unsigned int 
scale = scaleL;
-                                                               scaleL += 
rt->scale;
-                                                               unsigned int 
digL = lt->digits + (scaleL - lt->scale);
-                                                               unsigned int 
digits = (digL > rt->digits) ? digL : rt->digits;
+                                                               unsigned int 
scale = lt->scale - rt->scale;
+                                                               unsigned int 
digits = (lt->digits > rt->digits) ? lt->digits : rt->digits;
 
 #ifdef HAVE_HGE
                                                                if 
(res->type->radix == 10 && digits > 39)
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -838,8 +838,9 @@ rel_project(sql_allocator *sa, sql_rel *
                else
                        rel->nrcols = l->nrcols;
                rel->single = is_single(l);
-               rel->grouped = l->grouped;
        }
+       if (rel->card == CARD_AGGR)
+               rel->card = CARD_MULTI;
        if (e && !list_empty(e)) {
                set_processed(rel);
                rel->nrcols = list_length(e);
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -1996,8 +1996,11 @@ exp_reset_card_and_freevar_set_physical_
        }
        if (is_simple_project(rel->op) && need_distinct(rel)) /* Need distinct, 
all expressions should have CARD_AGGR at max */
                e->card = MIN(e->card, CARD_AGGR);
-       if (!is_set(rel->op) && (!is_groupby(rel->op) || !list_empty(rel->r))) 
/* global groupings have atomic cardinality */
+       if (!is_set(rel->op) && (!is_groupby(rel->op) || !list_empty(rel->r))){ 
/* global groupings have atomic cardinality */
                rel->card = MAX(e->card, rel->card); /* the relation 
cardinality may get updated too */
+               if (!is_groupby(rel->op) && rel->card == CARD_AGGR)
+                       rel->card = CARD_MULTI;
+       }
        return e;
 }
 
diff --git a/sql/test/SQLancer/Tests/sqlancer18.test 
b/sql/test/SQLancer/Tests/sqlancer18.test
--- a/sql/test/SQLancer/Tests/sqlancer18.test
+++ b/sql/test/SQLancer/Tests/sqlancer18.test
@@ -320,9 +320,6 @@ statement ok
 ROLLBACK
 
 statement ok
-START TRANSACTION
-
-statement ok
 create table t1 (c0 int)
 
 statement ok rowcount 4
@@ -336,6 +333,21 @@ 1
 statement error GDK reported error: mergejoin: more than one match
 select 1 from t1 where exists (select min((select t2.c0 from t1)) from t1 as 
t2)
 
+query I rowsort
+with v100(vc0) as (select max(2) group by 0.2)
+select 1 from v100 as vx where vx.vc0 = any(select vx.vc0 from v100)
+----
+1
+
 statement ok
-ROLLBACK
+create view vy(vc0) as (select distinct (select 4 from t1))
+
+statement error GDK reported error: BATsubcross: more than one match
+select greatest(1, (select (select vy.vc0 from t1) from vy))
 
+statement ok
+DROP VIEW vy
+
+statement ok
+DROP TABLE t1
+
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py 
b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
@@ -25,6 +25,9 @@ with SQLTestCase() as cli:
     INSERT INTO "t3" VALUES (1, INTERVAL '9' MONTH),(5, INTERVAL '6' 
MONTH),(5, NULL),(7, NULL),(2, INTERVAL '1' MONTH),(2, INTERVAL '1' MONTH);
     CREATE TABLE "t4" ("c0" BIGINT PRIMARY KEY,"c1" INTERVAL MONTH);
     INSERT INTO "t4" VALUES (1, INTERVAL '9' MONTH),(5, INTERVAL '6' 
MONTH),(10, NULL),(7, NULL),(2, INTERVAL '1' MONTH),(11, INTERVAL '1' MONTH);
+    CREATE TABLE "t5" ("c0" DECIMAL(18,3),"c1" BOOLEAN);
+    INSERT INTO "t5" VALUES (0.928, NULL),(0.974, NULL),(NULL, false),(3.000, 
NULL),(NULL, false),(NULL, false),(NULL, true),(0.897, NULL),
+    (0.646, NULL),(0.145, true),(0.848, false),(NULL, false);
     COMMIT;
 
     START TRANSACTION;
@@ -32,7 +35,8 @@ with SQLTestCase() as cli:
     CREATE REMOTE TABLE "rt2" ("c0" TINYINT NOT NULL,"c2" DATE) ON 
'mapi:monetdb://localhost:%s/%s/sys/t2';
     CREATE REMOTE TABLE "rt3" ("c0" BIGINT,"c1" INTERVAL MONTH) ON 
'mapi:monetdb://localhost:%s/%s/sys/t3';
     CREATE REMOTE TABLE "rt4" ("c0" BIGINT PRIMARY KEY,"c1" INTERVAL MONTH) ON 
'mapi:monetdb://localhost:%s/%s/sys/t4';
-    COMMIT;""" % (port, db, port, db, port, db, port, db)).assertSucceeded()
+    CREATE REMOTE TABLE "rt5" ("c0" DECIMAL(18,3),"c1" BOOLEAN) ON 
'mapi:monetdb://localhost:%s/%s/sys/t5';
+    COMMIT;""" % (port, db, port, db, port, db, port, db, port, 
db)).assertSucceeded()
 
     cli.execute("START TRANSACTION;")
     cli.execute('SELECT json."integer"(JSON \'1\') FROM t3;') \
@@ -280,6 +284,10 @@ with SQLTestCase() as cli:
         .assertSucceeded().assertDataResultMatch([(36,)])
     cli.execute("SELECT count(0.3121149) FROM (select case when 2 > 1 then 0.3 
end from (select 1 from rt3) x(x)) v100(vc1), rt3 WHERE 5 >= sinh(CAST(v100.vc1 
AS REAL));") \
         .assertSucceeded().assertDataResultMatch([(36,)])
+    cli.execute("SELECT CAST(2 AS REAL) BETWEEN 2 AND (t5.c0 / t5.c0)^5 AS X 
FROM t5 ORDER BY x NULLS LAST;") \
+        
.assertSucceeded().assertDataResultMatch([(True,),(True,),(True,),(True,),(True,),(True,),(True,),(None,),(None,),(None,),(None,)])
+    cli.execute("SELECT CAST(2 AS REAL) BETWEEN 2 AND (rt5.c0 / rt5.c0)^5 AS X 
FROM rt5 ORDER BY x NULLS LAST;") \
+        
.assertSucceeded().assertDataResultMatch([(True,),(True,),(True,),(True,),(True,),(True,),(True,),(None,),(None,),(None,),(None,)])
     cli.execute("ROLLBACK;")
 
     cli.execute("CREATE FUNCTION mybooludf(a bool) RETURNS BOOL RETURN a;")
@@ -295,10 +303,12 @@ with SQLTestCase() as cli:
     DROP TABLE rt2;
     DROP TABLE rt3;
     DROP TABLE rt4;
+    DROP TABLE rt5;
     DROP TABLE t0;
     DROP TABLE t1;
     DROP TABLE t2;
     DROP TABLE t3;
     DROP TABLE t4;
+    DROP TABLE t5;
     DROP FUNCTION mybooludf(bool);
     COMMIT;""").assertSucceeded()
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to