Changeset: 4f7306a586f0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4f7306a586f0 Added Files: sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.sql sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.err sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.out Modified Files: monetdb5/modules/mal/pqueue.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.mx sql/server/sql_env.c sql/server/sql_env.h sql/server/sql_mvc.c sql/server/sql_mvc.h sql/storage/sql_storage.h sql/storage/store.c sql/test/BugTracker-2013/Tests/All Branch: mutation Log Message:
Merge with default. diffs (truncated from 316 to 300 lines): diff --git a/monetdb5/modules/mal/pqueue.c b/monetdb5/modules/mal/pqueue.c --- a/monetdb5/modules/mal/pqueue.c +++ b/monetdb5/modules/mal/pqueue.c @@ -1066,6 +1066,31 @@ PQinit(int *ret, int *bid, wrd *maxsize) return MAL_SUCCEED; } +static void +PQtopn_sorted_min( BAT **bn, BAT *b, wrd N ) +{ + ssize_t cnt = BATcount(b); + if (b->tsorted) { + b = BATslice(b, (cnt-N)<0?0:cnt-N, cnt); + *bn = BATsort_rev(b); + BBPreleaseref(b->batCacheid); + } else + *bn = BATslice(b, 0, N>=cnt?cnt:N); +} + +static void +PQtopn_sorted_max( BAT **bn, BAT *b, wrd N ) +{ + ssize_t cnt = BATcount(b); + if (b->tsorted) + *bn = BATslice(b, 0, N>=cnt?cnt:N); + else { + b = BATslice(b, (cnt-N)<0?0:cnt-N, cnt); + *bn = BATsort_rev(b); + BBPreleaseref(b->batCacheid); + } +} + #define PQimpl1a(X,Y) \ str \ PQenqueue_##X##Y(int *ret, int *bid, oid *idx, X *el){ \ @@ -1119,6 +1144,15 @@ PQinit(int *ret, int *bid, wrd *maxsize) BAT *b,*bn = NULL; \ if( (b= BATdescriptor(*bid)) == NULL) \ throw(MAL, "pqueue.topN", RUNTIME_OBJECT_MISSING); \ + if (b->tsorted || b->trevsorted) { \ + PQtopn_sorted_##K(&bn, b, *N); \ + if (bn) { \ + *ret= bn->batCacheid; \ + BBPkeepref(*ret); \ + BBPreleaseref(b->batCacheid); \ + return MAL_SUCCEED; \ + } \ + } else \ if ((b->htype == TYPE_void ? pqueue_topn_void##TYPE##K(&bn,b,N) : pqueue_topn_##TYPE##K(&bn,b,N)) == GDK_SUCCEED && bn) { \ *ret= bn->batCacheid; \ BBPkeepref(*ret); \ diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx --- a/sql/backends/monet5/sql.mx +++ b/sql/backends/monet5/sql.mx @@ -2846,16 +2846,17 @@ setVariable(Client cntxt, MalBlkPtr mb, } src = &stk->stk[getArg(pci, 3)]; if (stack_find_var(m, varname)) { + lng sgn = val_get_number(src); + if ((msg = sql_update_var(m, varname, src->val.sval, sgn)) != NULL) { + snprintf(buf, BUFSIZ, "%s", msg); + _DELETE(msg); + throw(SQL, "sql.setVariable", "%s", buf); + } stack_set_var(m, varname, src); } else { snprintf(buf, BUFSIZ, "variable '%s' unknown", varname); throw(SQL, "sql.setVariable", "%s", buf); } - if ((msg = sql_update_var(m, varname)) != NULL) { - snprintf(buf, BUFSIZ, "%s", msg); - _DELETE(msg); - throw(SQL, "sql.setVariable", "%s", buf); - } return MAL_SUCCEED; } diff --git a/sql/server/sql_env.c b/sql/server/sql_env.c --- a/sql/server/sql_env.c +++ b/sql/server/sql_env.c @@ -64,42 +64,32 @@ mvc_debug_on(mvc *m, int flg) } str -sql_update_var(mvc *m, char *name) +sql_update_var(mvc *m, char *name, char *sval, lng sgn) { - lng sgn; if (strcmp(name, "debug") == 0) { - sgn = stack_get_number(m, "debug"); assert((lng) GDK_int_min <= sgn && sgn <= (lng) GDK_int_max); m->debug = (int) sgn; } else if (strcmp(name, "current_schema") == 0) { - char *schema = stack_get_string(m, "current_schema"); - - if (!mvc_set_schema(m, schema)) { - return sql_message( "Schema (%s) missing\n", schema); + if (!mvc_set_schema(m, sval)) { + return sql_message( "Schema (%s) missing\n", sval); } } else if (strcmp(name, "current_role") == 0) { - char *role = stack_get_string(m, "current_role"); - - if (!mvc_set_role(m, role)) { - return sql_message( "Role (%s) missing\n", role); + if (!mvc_set_role(m, sval)) { + return sql_message( "Role (%s) missing\n", sval); } } else if (strcmp(name, "current_timezone") == 0) { - sgn = stack_get_number(m, "current_timezone"); assert((lng) GDK_int_min <= sgn && sgn <= (lng) GDK_int_max); m->timezone = (int) sgn; } else if (strcmp(name, "cache") == 0) { - sgn = stack_get_number(m, "cache"); assert((lng) GDK_int_min <= sgn && sgn <= (lng) GDK_int_max); m->cache = (int) sgn; } else if (strcmp(name, "history") == 0) { - sgn = stack_get_number(m, "history"); assert((lng) GDK_int_min <= sgn && sgn <= (lng) GDK_int_max); m->history = (int) (sgn)?1:0; } return NULL; } - int sql_create_env(mvc *m, sql_schema *s) { diff --git a/sql/server/sql_env.h b/sql/server/sql_env.h --- a/sql/server/sql_env.h +++ b/sql/server/sql_env.h @@ -26,7 +26,7 @@ extern int mvc_debug_on(mvc *m, int flag); -extern str sql_update_var(mvc *sql, char *name); +extern str sql_update_var(mvc *sql, char *name, char *sval, lng sgn); extern int sql_create_env(mvc *sql, sql_schema *s); diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -1522,10 +1522,8 @@ stack_set_number(mvc *sql, char *name, l } lng -stack_get_number(mvc *sql, char *name) +val_get_number(ValRecord *v) { - ValRecord *v = stack_get_var(sql, name); - if (v != NULL) { if (v->vtype == TYPE_lng) return v->val.lval; @@ -1543,6 +1541,13 @@ stack_get_number(mvc *sql, char *name) return 0; } +lng +stack_get_number(mvc *sql, char *name) +{ + ValRecord *v = stack_get_var(sql, name); + return val_get_number(v); +} + sql_column * mvc_copy_column( mvc *m, sql_table *t, sql_column *c) { diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h --- a/sql/server/sql_mvc.h +++ b/sql/server/sql_mvc.h @@ -239,6 +239,7 @@ extern void stack_set_var(mvc *sql, char extern str stack_get_string(mvc *sql, char *name); extern void stack_set_string(mvc *sql, char *name, str v); +extern lng val_get_number(ValRecord *val); extern lng stack_get_number(mvc *sql, char *name); extern void stack_set_number(mvc *sql, char *name, lng v); diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h --- a/sql/storage/sql_storage.h +++ b/sql/storage/sql_storage.h @@ -322,7 +322,7 @@ extern sql_table *sql_trans_del_table(sq extern void sql_trans_drop_table(sql_trans *tr, sql_schema *s, int id, int drop_action); extern BUN sql_trans_clear_table(sql_trans *tr, sql_table *t); -extern sql_table *sql_trans_alter_readonly(sql_trans *tr, sql_table *t, int readonly); +extern sql_table *sql_trans_alter_readonly(sql_trans *tr, sql_table *t, bit readonly); extern sql_column *sql_trans_create_column(sql_trans *tr, sql_table *t, char *name, sql_subtype *tpe); extern void sql_trans_drop_column(sql_trans *tr, sql_table *t, int id, int drop_action); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -4207,7 +4207,7 @@ sql_trans_alter_null(sql_trans *tr, sql_ } sql_table * -sql_trans_alter_readonly(sql_trans *tr, sql_table *t, int readonly) +sql_trans_alter_readonly(sql_trans *tr, sql_table *t, bit readonly) { if (t->readonly != readonly) { sql_schema *syss = find_sql_schema(tr, isGlobal(t)?"sys":"tmp"); diff --git a/sql/test/BugTracker-2013/Tests/All b/sql/test/BugTracker-2013/Tests/All --- a/sql/test/BugTracker-2013/Tests/All +++ b/sql/test/BugTracker-2013/Tests/All @@ -41,3 +41,4 @@ sort_void_crash.Bug-3341 bogus_aggregation_casts.Bug-3342 nestedcalls alter_resets_readonly.Bug-3362 +env_errors.Bug-3370 diff --git a/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.sql b/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.sql @@ -0,0 +1,4 @@ +set role blah; +select current_role; +set schema xyz; +select current_schema; diff --git a/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.err b/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.err @@ -0,0 +1,41 @@ +stderr of test 'env_errors.Bug-3370` in directory 'sql/test/BugTracker-2013` itself: + + +# 09:53:02 > +# 09:53:02 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33326" "--set" "mapi_usock=/var/tmp/mtest-12309/.s.monetdb.33326" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013" "--set" "mal_listing=0" +# 09:53:02 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = yes +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = 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 = 33326 +# cmdline opt mapi_usock = /var/tmp/mtest-12309/.s.monetdb.33326 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013 +# cmdline opt mal_listing = 0 + +# 09:53:02 > +# 09:53:02 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-12309" "--port=33326" +# 09:53:02 > + +MAPI = (monetdb) /var/tmp/mtest-12309/.s.monetdb.33326 +QUERY = set role blah; +ERROR = !Role (blah) missing +MAPI = (monetdb) /var/tmp/mtest-12309/.s.monetdb.33326 +QUERY = set schema xyz; +ERROR = !Schema (xyz) missing + +# 09:53:02 > +# 09:53:02 > "Done." +# 09:53:02 > + diff --git a/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.out b/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/env_errors.Bug-3370.stable.out @@ -0,0 +1,44 @@ +stdout of test 'env_errors.Bug-3370` in directory 'sql/test/BugTracker-2013` itself: + + +# 09:53:02 > +# 09:53:02 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33326" "--set" "mapi_usock=/var/tmp/mtest-12309/.s.monetdb.33326" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2013" "--set" "mal_listing=0" +# 09:53:02 > + +# MonetDB 5 server v11.15.12 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2013', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 3.775 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2013 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://niels.nesco.mine.nu:33326/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-12309/.s.monetdb.33326 +# MonetDB/GIS module loaded +# MonetDB/JAQL module loaded +# MonetDB/SQL module loaded + +Ready. + +# 09:53:02 > +# 09:53:02 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-12309" "--port=33326" +# 09:53:02 > + +#select current_role; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list