Changeset: fcbc0bd6599a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fcbc0bd6599a
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/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: default
Log Message:
Merge with Feb2013 branch.
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
@@ -50,3 +50,4 @@ median.Bug-3352
check-constraint.Bug-3335
crash_after_creation_of_unique_key.Bug-3363
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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list