Changeset: ea27ecfb1883 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ea27ecfb1883
Modified Files:
        sql/server/rel_optimizer.c
Branch: Oct2020
Log Message:

merged


diffs (234 lines):

diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -686,13 +686,15 @@ BAThashsync(void *arg)
                        c = hash_##TYPE(h, v + o - b->hseqbase);        \
                        hget = HASHget(h, c);                           \
                        h->nheads += hget == hnil;                      \
-                       for (hb = hget;                                 \
-                            hb != hnil;                                \
-                            hb = HASHgetlink(h, hb)) {                 \
-                               if (EQ##TYPE(v[o - b->hseqbase], v[hb])) \
-                                       break;                          \
+                       if (!hascand) {                                 \
+                               for (hb = hget;                         \
+                                    hb != hnil;                        \
+                                    hb = HASHgetlink(h, hb)) {         \
+                                       if (EQ##TYPE(v[o - b->hseqbase], 
v[hb])) \
+                                               break;                  \
+                               }                                       \
+                               h->nunique += hb == hnil;               \
                        }                                               \
-                       h->nunique += hb == hnil;                       \
                        HASHputlink(h, p, hget);                        \
                        HASHput(h, c, p);                               \
                        o = canditer_next(ci);                          \
@@ -923,13 +925,15 @@ BAThash_impl(BAT *restrict b, struct can
                        c = hash_any(h, v);
                        hget = HASHget(h, c);
                        h->nheads += hget == hnil;
-                       for (hb = hget;
-                            hb != hnil;
-                            hb = HASHgetlink(h, hb)) {
-                               if (ATOMcmp(h->type, v, BUNtail(bi, hb)) == 0)
-                                       break;
+                       if (!hascand) {
+                               for (hb = hget;
+                                    hb != hnil;
+                                    hb = HASHgetlink(h, hb)) {
+                                       if (ATOMcmp(h->type, v, BUNtail(bi, 
hb)) == 0)
+                                               break;
+                               }
+                               h->nunique += hb == hnil;
                        }
-                       h->nunique += hb == hnil;
                        HASHputlink(h, p, hget);
                        HASHput(h, c, p);
                        o = canditer_next(ci);
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -491,7 +491,7 @@ MT_init(void)
                                        /* assume "max" if not a number */
                                        fclose(f);
                                }
-                               /* soft limit */
+                               /* soft high limit */
                                strcpy(pth + l, "memory.high");
                                f = fopen(pth, "r");
                                if (f != NULL) {
@@ -502,6 +502,17 @@ MT_init(void)
                                        /* assume "max" if not a number */
                                        fclose(f);
                                }
+                               /* soft low limit */
+                               strcpy(pth + l, "memory.low");
+                               f = fopen(pth, "r");
+                               if (f != NULL) {
+                                       if (fscanf(f, "%" SCNu64, &mem) == 1 && 
mem > 0 && mem < (uint64_t) _MT_pagesize * _MT_npages) {
+                                               _MT_npages = (size_t) (mem / 
_MT_pagesize);
+                                       }
+                                       success = true;
+                                       /* assume "max" if not a number */
+                                       fclose(f);
+                               }
                                /* limit of memory+swap usage
                                 * we use this as maximum virtual memory size */
                                strcpy(pth + l, "memory.swap.max");
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -5546,8 +5546,7 @@ rel_select_exp(sql_query *query, sql_rel
                 */
                pexps = list_merge(pexps, te, (fdup)NULL);
        }
-       if (rel && is_groupby(rel->op) && !sn->groupby) {
-               set_processed(rel);
+       if (rel && is_groupby(rel->op) && !sn->groupby && !is_processed(rel)) {
                for (node *n=pexps->h; n; n = n->next) {
                        sql_exp *ce = n->data;
                        if (rel->card < ce->card) {
@@ -5558,6 +5557,7 @@ rel_select_exp(sql_query *query, sql_rel
                                }
                        }
                }
+               set_processed(rel);
        }
        rel = rel_project(sql->sa, rel, pexps);
 
diff --git a/sql/test/miscellaneous/Tests/view-mul-digits.sql 
b/sql/test/miscellaneous/Tests/view-mul-digits.sql
--- a/sql/test/miscellaneous/Tests/view-mul-digits.sql
+++ b/sql/test/miscellaneous/Tests/view-mul-digits.sql
@@ -9,3 +9,24 @@ select t.name, c.name, c.type, c.type_di
 from sys.tables t join sys.columns c on c.table_id = t.id where t.name = 
'myview';
 
 ROLLBACK;
+
+create schema myschema;
+create table myschema.mygroyp(code varchar(10),amount int);
+insert into myschema.mygroyp(code,amount)values('a',1),('a',2),('b',3),('b',4);
+select code, min(amount) as eind from myschema.mygroyp group by code;
+
+create view myschema.mygroypview as select code, min(amount) as eind from 
myschema.mygroyp group by code;
+select * from myschema.mygroypview;
+select code, eind from myschema.mygroypview;
+select code from myschema.mygroypview;
+select eind from myschema.mygroypview;
+select code, min(eind) from myschema.mygroypview group by code;
+
+select code, min(eind) from myschema.mygroypview;
+       -- error, cannot use non GROUP BY column 'code' in query results 
without an aggregate function
+create view myschema.ups as select code, min(amount) as eind from 
myschema.mygroyp;
+       -- error, cannot use non GROUP BY column 'code' in query results 
without an aggregate function
+create view myschema.ups as select code, amount as eind from myschema.mygroyp 
group by code;
+       -- error, cannot use non GROUP BY column 'amount' in query results 
without an aggregate function
+
+drop schema myschema cascade;
diff --git a/sql/test/miscellaneous/Tests/view-mul-digits.stable.err 
b/sql/test/miscellaneous/Tests/view-mul-digits.stable.err
--- a/sql/test/miscellaneous/Tests/view-mul-digits.stable.err
+++ b/sql/test/miscellaneous/Tests/view-mul-digits.stable.err
@@ -5,21 +5,18 @@ stderr of test 'view-mul-digits` in dire
 # 09:17:14 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=38624" "--set" 
"mapi_usock=/var/tmp/mtest-19962/.s.monetdb.38624" "--forcemito" 
"--dbpath=/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_miscellaneous"
 "--set" "embedded_r=yes" "--set" "embedded_py=2" "--set" "embedded_c=true"
 # 09:17:14 >  
 
-# builtin opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/monetdb5/dbfarm/demo
-# builtin opt  mapi_port = 50000
-# builtin opt  mapi_open = false
-# builtin opt  mapi_ipv6 = false
-# builtin opt  mapi_autosense = false
-# builtin opt  sql_optimizer = default_pipe
-# builtin opt  sql_debug = 0
-# cmdline opt  gdk_nr_threads = 0
-# cmdline opt  mapi_open = true
-# cmdline opt  mapi_port = 38624
-# cmdline opt  mapi_usock = /var/tmp/mtest-19962/.s.monetdb.38624
-# cmdline opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-Nov2019/BUILD/var/MonetDB/mTests_sql_test_miscellaneous
-# cmdline opt  embedded_r = yes
-# cmdline opt  embedded_py = 2
-# cmdline opt  embedded_c = true
+MAPI  = (monetdb) /var/tmp/mtest-82078/.s.monetdb.36080
+QUERY = select code, min(eind) from myschema.mygroypview;
+ERROR = !SELECT: cannot use non GROUP BY column 'code' in query results 
without an aggregate function
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-82078/.s.monetdb.36080
+QUERY = create view myschema.ups as select code, min(amount) as eind from 
myschema.mygroyp;
+ERROR = !SELECT: cannot use non GROUP BY column 'code' in query results 
without an aggregate function
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-226088/.s.monetdb.37888
+QUERY = create view myschema.ups as select code, amount as eind from 
myschema.mygroyp group by code;
+ERROR = !SELECT: cannot use non GROUP BY column 'amount' in query results 
without an aggregate function
+CODE  = 42000
 
 # 09:17:15 >  
 # 09:17:15 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-19962" "--port=38624"
diff --git a/sql/test/miscellaneous/Tests/view-mul-digits.stable.out 
b/sql/test/miscellaneous/Tests/view-mul-digits.stable.out
--- a/sql/test/miscellaneous/Tests/view-mul-digits.stable.out
+++ b/sql/test/miscellaneous/Tests/view-mul-digits.stable.out
@@ -73,6 +73,55 @@ stdout of test 'view-mul-digits` in dire
 % 6,   5,      6,      2,      1 # length
 [ "myview",    "mycol",        "bigint",       64,     0       ]
 #ROLLBACK;
+#START TRANSACTION;
+#create schema myschema;
+#create table myschema.mygroyp(code varchar(10),amount int);
+#insert into 
myschema.mygroyp(code,amount)values('a',1),('a',2),('b',3),('b',4);
+[ 4    ]
+#select code,  cast(sum(amount) as bigint) as eind from myschema.mygroyp group 
by code;
+% myschema.mygroyp,    myschema. # table_name
+% code,        eind # name
+% varchar,     int # type
+% 1,   1 # length
+[ "a", 1       ]
+[ "b", 3       ]
+#create view myschema.mygroypview as select code, min(amount) as eind from 
myschema.mygroyp group by code;
+#select * from myschema.mygroypview;
+% myschema.mygroypview,        myschema.mygroypview # table_name
+% code,        eind # name
+% varchar,     int # type
+% 1,   1 # length
+[ "a", 1       ]
+[ "b", 3       ]
+#select code, eind from myschema.mygroypview;
+% myschema.mygroypview,        myschema.mygroypview # table_name
+% code,        eind # name
+% varchar,     int # type
+% 1,   1 # length
+[ "a", 1       ]
+[ "b", 3       ]
+#select code from myschema.mygroypview;
+% myschema.mygroypview # table_name
+% code # name
+% varchar # type
+% 1 # length
+[ "a"  ]
+[ "b"  ]
+#select eind from myschema.mygroypview;
+% myschema.mygroypview # table_name
+% eind # name
+% int # type
+% 1 # length
+[ 1    ]
+[ 3    ]
+#select code, min(eind) from myschema.mygroypview group by code;
+% myschema.mygroypview,        myschema.%2 # table_name
+% code,        %2 # name
+% varchar,     int # type
+% 1,   1 # length
+[ "a", 1       ]
+[ "b", 3       ]
+#drop schema myschema cascade;
 
 # 09:17:15 >  
 # 09:17:15 >  "Done."
diff --git a/tools/merovingian/utils/utils.c b/tools/merovingian/utils/utils.c
--- a/tools/merovingian/utils/utils.c
+++ b/tools/merovingian/utils/utils.c
@@ -59,6 +59,8 @@ readConfFile(confkeyval *list, FILE *cnf
 
        while (fgets(buf, 1024, cnf) != NULL) {
                /* eliminate fgets' newline */
+               if (buf[0] == '\n' || buf[0] == '#')
+                       continue;
                buf[strlen(buf) - 1] = '\0';
                for (t = list; t->key != NULL; t++) {
                        len = strlen(t->key);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to