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