Changeset: cecb54de54c5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cecb54de54c5
Added Files:
        sql/test/BugTracker-2013/PSMcreate_user.sql
        sql/test/BugTracker-2013/PSMdrop_user.sql
        sql/test/BugTracker-2013/PSMexplain_function.sql
        
sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.SQL.py
        
sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.err
        
sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.out
Modified Files:
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/test/BugTracker-2013/Tests/All
Branch: Feb2013
Log Message:

fixed bug 3300. The nested functions error handling was improved.


diffs (284 lines):

diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -2526,6 +2526,7 @@ backend_create_func(backend *be, sql_fun
        }
 
        if (!s) {
+               f->sql--;
                sa_destroy(sa);
                return -1;
        }
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1759,28 +1759,30 @@ SQLparser(Client c)
                                m->emode = m_inplace;
                }
        }
-       if (be->q) {
-               if (m->emode == m_prepare)
-                       err = mvc_export_prepare(m, c->fdout, be->q, "");
-               else if (m->emode == m_inplace) {
-                       /* everything ready for a fast call */
-               } else { /* call procedure generation (only in cache mode) */
-                       backend_call(be, c, be->q);
+       if (err) 
+               m->session->status = -10;
+       if (err == 0) {
+               if (be->q) {
+                       if (m->emode == m_prepare)
+                               err = mvc_export_prepare(m, c->fdout, be->q, 
"");
+                       else if (m->emode == m_inplace) {
+                               /* everything ready for a fast call */
+                       } else { /* call procedure generation (only in cache 
mode) */
+                               backend_call(be, c, be->q);
+                       }
                }
-       }
+       
+               /* In the final phase we add any debugging control */
+               if (m->emod & mod_trace)
+                       SQLsetTrace(be, c, FALSE);
+               if (m->emod & mod_debug)
+                       SQLsetDebugger(c, m, FALSE);
 
-       /* In the final phase we add any debugging control */
-       if (m->emod & mod_trace)
-               SQLsetTrace(be, c, FALSE);
-       if (m->emod & mod_debug)
-               SQLsetDebugger(c, m, FALSE);
-
-       /*
-        * During the execution of the query exceptions can be raised.
-        * The default action is to print them out at the end of the
-        * query block.
-        */
-       if (err == 0) {
+               /*
+                * During the execution of the query exceptions can be raised.
+                * The default action is to print them out at the end of the
+                * query block.
+                */
                if (be->q)
                        pushEndInstruction(c->curprg->def);
 
@@ -1910,28 +1912,24 @@ SQLengineIntern(Client c, backend *be)
        }
 
        if (m->emod & mod_explain) {
-               if (be->q && be->q->code)
+               if (be->q && be->q->code) 
                        printFunction(c->fdout, ((Symbol) (be->q->code))->def, 
0, LIST_MAL_STMT | LIST_MAL_UDF | LIST_MAPI);
-               else if (c->curprg && c->curprg->def)
+               else if (be->q) 
+                       msg = createException(PARSE, "SQLparser", "%s", 
(*m->errstr)?m->errstr:"39000!program contains errors");
+               else if (c->curprg && c->curprg->def) 
                        printFunction(c->fdout, c->curprg->def, 0, 
LIST_MAL_STMT | LIST_MAL_UDF | LIST_MAPI);
+               goto cleanup_engine;
        }
        if (m->emod & mod_dot) {
-               if (be->q && be->q->code)
+               if (be->q && be->q->code) 
                        showFlowGraph(((Symbol) (be->q->code))->def, 0, 
"stdout-mapi");
+               else if (be->q)
+                       msg = createException(PARSE, "SQLparser", "%s", 
(*m->errstr)?m->errstr:"39000!program contains errors");
                else if (c->curprg && c->curprg->def)
                        showFlowGraph(c->curprg->def, 0, "stdout-mapi");
-       }
-       if (m->emod & (mod_explain | mod_dot)) {
-               sqlcleanup(be->mvc, 0);
                goto cleanup_engine;
        }
 
-       if (c->curprg->def->errors){
-               assert(0);
-               sqlcleanup(be->mvc, 0);
-               throw(SQL, "SQLengine", "39000!program contains errors");
-       }
-
 #ifdef SQL_SCENARIO_DEBUG
        mnstr_printf(GDKout, "#Ready to execute SQL statement\n");
 #endif
@@ -1991,7 +1989,9 @@ cleanup_engine:
        }
 
        mb= c->curprg->def;
-       if (be->q && mb &&
+       if (be->q && msg) {
+               qc_delete(m->qc, be->q); 
+       } else if (be->q && mb &&
            varGetProp(mb, getArg(p = getInstrPtr(mb,0), 0), runonceProp)){
                SQLCacheRemove(c, getFunctionId(p));
                /* this should invalidate any match */
diff --git a/sql/test/BugTracker-2013/PSMcreate_user.sql 
b/sql/test/BugTracker-2013/PSMcreate_user.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/PSMcreate_user.sql
@@ -0,0 +1,1 @@
+CREATE USER "psm" WITH PASSWORD 'psm' NAME 'PSM' SCHEMA "sys";
diff --git a/sql/test/BugTracker-2013/PSMdrop_user.sql 
b/sql/test/BugTracker-2013/PSMdrop_user.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/PSMdrop_user.sql
@@ -0,0 +1,1 @@
+DROP USER "psm";
diff --git a/sql/test/BugTracker-2013/PSMexplain_function.sql 
b/sql/test/BugTracker-2013/PSMexplain_function.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2013/PSMexplain_function.sql
@@ -0,0 +1,3 @@
+explain select * from storagemodel();
+select * from storagemodel();
+select * from storagemodel();
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
@@ -20,3 +20,4 @@ db_users.Bug-3287
 create_table_with_func.Bug-3286
 add_boolean.Bug-3289
 prepare-smallint.Bug-3297
+psm_functions_and_accessrights.Bug-3300
diff --git 
a/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.SQL.py 
b/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.SQL.py
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.SQL.py
@@ -0,0 +1,20 @@
+import os, sys
+try:
+    from MonetDBtesting import process
+except ImportError:
+    import process
+
+d = os.environ['RELSRCDIR']
+
+def client(file, user, passwd):
+    sys.stdout.flush()
+    sys.stderr.flush()
+    c = process.client(lang = 'sql',
+                       user = user, passwd = passwd,
+                       args = [os.path.join(d, os.pardir, file)],
+                       log = True)
+    c.communicate()
+
+client('PSMcreate_user.sql', 'monetdb', 'monetdb')
+client('PSMexplain_function.sql', 'psm', 'psm')
+client('PSMdrop_user.sql', 'monetdb', 'monetdb')
diff --git 
a/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.err
 
b/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.err
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.err
@@ -0,0 +1,59 @@
+stderr of test 'psm_functions_and_accessrights.Bug-3300` in directory 
'sql/test/BugTracker-2013` itself:
+
+
+# 18:51:03 >  
+# 18:51:03 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=37031" "--set" 
"mapi_usock=/var/tmp/mtest-6005/.s.monetdb.37031" "--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"
+# 18:51:03 >  
+
+# 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 = 37031
+# cmdline opt  mapi_usock = /var/tmp/mtest-6005/.s.monetdb.37031
+# 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
+
+# 18:51:03 >  
+# 18:51:03 >  "/usr/bin/python2" 
"psm_functions_and_accessrights.Bug-3300.SQL.py" 
"psm_functions_and_accessrights.Bug-3300"
+# 18:51:03 >  
+
+
+# 18:51:03 >  
+# 18:51:03 >  Mtimeout -timeout 60 mclient -lsql -ftest -Eutf-8 -e 
--host=/var/tmp/mtest-6005 --port=37031 
--database=mTests_sql_test_BugTracker-2013 
../../../../../../../data/rc/clean/sql/test/BugTracker-2013/Tests/../PSMcreate_user.sql
+# 18:51:03 >  
+
+
+# 18:51:04 >  
+# 18:51:04 >  Mtimeout -timeout 60 mclient -lsql -ftest -Eutf-8 -e 
--host=/var/tmp/mtest-6005 --port=37031 
--database=mTests_sql_test_BugTracker-2013 
../../../../../../../data/rc/clean/sql/test/BugTracker-2013/Tests/../PSMexplain_function.sql
+# 18:51:04 >  
+
+MAPI  = (psm) /var/tmp/mtest-6005/.s.monetdb.37031
+QUERY = explain select * from storagemodel();
+ERROR = !SELECT: access denied for psm to table 'sys.storagemodelinput'
+MAPI  = (psm) /var/tmp/mtest-6005/.s.monetdb.37031
+QUERY = select * from storagemodel();
+ERROR = !SELECT: access denied for psm to table 'sys.storagemodelinput'
+MAPI  = (psm) /var/tmp/mtest-6005/.s.monetdb.37031
+QUERY = select * from storagemodel();
+ERROR = !SELECT: access denied for psm to table 'sys.storagemodelinput'
+
+# 18:51:04 >  
+# 18:51:04 >  Mtimeout -timeout 60 mclient -lsql -ftest -Eutf-8 -e 
--host=/var/tmp/mtest-6005 --port=37031 
--database=mTests_sql_test_BugTracker-2013 
../../../../../../../data/rc/clean/sql/test/BugTracker-2013/Tests/../PSMdrop_user.sql
+# 18:51:04 >  
+
+
+# 18:51:04 >  
+# 18:51:04 >  "Done."
+# 18:51:04 >  
+
diff --git 
a/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.out
 
b/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.out
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.out
@@ -0,0 +1,49 @@
+stdout of test 'psm_functions_and_accessrights.Bug-3300` in directory 
'sql/test/BugTracker-2013` itself:
+
+
+# 18:51:03 >  
+# 18:51:03 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=37031" "--set" 
"mapi_usock=/var/tmp/mtest-6005/.s.monetdb.37031" "--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"
+# 18:51:03 >  
+
+# MonetDB 5 server v11.15.4
+# 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.777 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:37031/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-6005/.s.monetdb.37031
+# MonetDB/GIS module loaded
+# MonetDB/JAQL module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+
+# 18:51:03 >  
+# 18:51:03 >  "/usr/bin/python2" 
"psm_functions_and_accessrights.Bug-3300.SQL.py" 
"psm_functions_and_accessrights.Bug-3300"
+# 18:51:03 >  
+
+
+# 18:51:03 >  
+# 18:51:03 >  Mtimeout -timeout 60 mclient -lsql -ftest -Eutf-8 -e 
--host=/var/tmp/mtest-6005 --port=37031 
--database=mTests_sql_test_BugTracker-2013 
../../../../../../../data/rc/clean/sql/test/BugTracker-2013/Tests/../PSMcreate_user.sql
+# 18:51:03 >  
+
+#CREATE USER "psm" WITH PASSWORD 'psm' NAME 'PSM' SCHEMA "sys";
+
+# 18:51:04 >  
+# 18:51:04 >  Mtimeout -timeout 60 mclient -lsql -ftest -Eutf-8 -e 
--host=/var/tmp/mtest-6005 --port=37031 
--database=mTests_sql_test_BugTracker-2013 
../../../../../../../data/rc/clean/sql/test/BugTracker-2013/Tests/../PSMexplain_function.sql
+# 18:51:04 >  
+
+
+# 18:51:04 >  
+# 18:51:04 >  Mtimeout -timeout 60 mclient -lsql -ftest -Eutf-8 -e 
--host=/var/tmp/mtest-6005 --port=37031 
--database=mTests_sql_test_BugTracker-2013 
../../../../../../../data/rc/clean/sql/test/BugTracker-2013/Tests/../PSMdrop_user.sql
+# 18:51:04 >  
+
+#DROP USER "psm";
+
+# 18:51:04 >  
+# 18:51:04 >  "Done."
+# 18:51:04 >  
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to