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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list