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

Reply via email to