Changeset: faa1a339a3e0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=faa1a339a3e0
Added Files:
        sql/test/Triggers/Tests/trigger_projection.sql.src
        sql/test/Triggers/Tests/trigger_projection.stable.err
        sql/test/Triggers/Tests/trigger_projection.stable.out
        sql/test/Triggers/trigger_projection.sql
Removed Files:
        sql/test/miscellaneous/Tests/trigger_projection.sql
        sql/test/miscellaneous/Tests/trigger_projection.stable.err
        sql/test/miscellaneous/Tests/trigger_projection.stable.out
Modified Files:
        monetdb5/extras/rapi/rapi.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_user.c
        sql/test/Triggers/Tests/All
        sql/test/Triggers/run.all
        sql/test/Users/Tests/createUserRollback.SQL.py
        sql/test/Users/Tests/createUserRollback.stable.err
        sql/test/Users/Tests/createUserRollback.stable.out
        sql/test/miscellaneous/Tests/All
        testing/Mtest.py.in
Branch: default
Log Message:

Merge with Jun2020 branch.


diffs (297 lines):

diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -30,6 +30,7 @@
 
 #define USE_RINTERNALS 1
 
+#include <Rversion.h>
 #include <Rembedded.h>
 #include <Rdefines.h>
 #include <Rinternals.h>
@@ -110,25 +111,34 @@ static char *RAPIinitialize(void) {
        // set some command line arguments
        {
                structRstart rp;
-               Rstart Rp = &rp;
-               char *rargv[] = { "R", "--slave", "--vanilla" };
+               char *rargv[] = { "R",
+#if R_VERSION >= R_Version(4,0,0)
+                                                 "--no-echo",
+#else
+                                                 "--slave",
+#endif
+                                                 "--vanilla" };
                int stat = 0;
 
-               R_DefParams(Rp);
-               Rp->R_Slave = (Rboolean) TRUE;
-               Rp->R_Quiet = (Rboolean) TRUE;
-               Rp->R_Interactive = (Rboolean) FALSE;
-               Rp->R_Verbose = (Rboolean) FALSE;
-               Rp->LoadSiteFile = (Rboolean) FALSE;
-               Rp->LoadInitFile = (Rboolean) FALSE;
-               Rp->RestoreAction = SA_NORESTORE;
-               Rp->SaveAction = SA_NOSAVE;
-               Rp->NoRenviron = TRUE;
+               R_DefParams(&rp);
+#if R_VERSION >= R_Version(4,0,0)
+               rp.R_NoEcho = (Rboolean) TRUE;
+#else
+               rp.R_Slave = (Rboolean) TRUE;
+#endif
+               rp.R_Quiet = (Rboolean) TRUE;
+               rp.R_Interactive = (Rboolean) FALSE;
+               rp.R_Verbose = (Rboolean) FALSE;
+               rp.LoadSiteFile = (Rboolean) FALSE;
+               rp.LoadInitFile = (Rboolean) FALSE;
+               rp.RestoreAction = SA_NORESTORE;
+               rp.SaveAction = SA_NOSAVE;
+               rp.NoRenviron = TRUE;
                stat = Rf_initialize_R(2, rargv);
                if (stat < 0) {
                        return "Rf_initialize failed";
                }
-               R_SetParams(Rp);
+               R_SetParams(&rp);
        }
 
        /* disable stack checking, because threads will throw it off */
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
@@ -262,25 +262,27 @@ SQLgetquery(Client c)
 static char*
 SQLprepareClient(Client c, int login)
 {
-       mvc *m;
-       str schema;
-       backend *be;
+       mvc *m = NULL;
+       backend *be = NULL;
+       str msg = MAL_SUCCEED;
 
        c->getquery = SQLgetquery;
        if (c->sqlcontext == 0) {
                m = mvc_create(c->idx, 0, SQLdebug, c->fdin, c->fdout);
-               if (m == NULL)
-                       throw(SQL,"sql.initClient",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               if (m == NULL) {
+                       msg = createException(SQL,"sql.initClient", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
                if (global_variables(m, "monetdb", "sys") < 0) {
-                       mvc_destroy(m);
-                       throw(SQL,"sql.initClient",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       msg = createException(SQL,"sql.initClient", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
                }
                if (c->scenario && strcmp(c->scenario, "msql") == 0)
                        m->reply_size = -1;
                be = (void *) backend_create(m, c);
                if ( be == NULL) {
-                       mvc_destroy(m);
-                       throw(SQL,"sql.initClient", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       msg = createException(SQL,"sql.initClient", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
                }
        } else {
                be = c->sqlcontext;
@@ -290,21 +292,24 @@ SQLprepareClient(Client c, int login)
                */
                if (m->session->tr->active)
                        return NULL;
-               if (mvc_reset(m, c->fdin, c->fdout, SQLdebug) < 0)
-                       throw(SQL,"sql.initClient", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               if (mvc_reset(m, c->fdin, c->fdout, SQLdebug) < 0) {
+                       msg = createException(SQL,"sql.initClient", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
                backend_reset(be);
        }
        if (m->session->tr)
                reset_functions(m->session->tr);
        if (login) {
-               schema = monet5_user_set_def_schema(m, c->user);
+               str schema = monet5_user_set_def_schema(m, c->user);
                if (!schema) {
-                       _DELETE(schema);
-                       throw(PERMD, "SQLinitClient", SQLSTATE(08004) "schema 
authorization error");
+                       msg = createException(PERMD,"sql.initClient", 
SQLSTATE(08004) "Schema authorization error");
+                       goto bailout;
                }
                _DELETE(schema);
        } 
 
+bailout:
        /*expect SQL text first */
        be->language = 'S';
        /* Set state, this indicates an initialized client scenario */
@@ -312,7 +317,9 @@ SQLprepareClient(Client c, int login)
        c->state[MAL_SCENARIO_PARSER] = c;
        c->state[MAL_SCENARIO_OPTIMIZE] = c;
        c->sqlcontext = be;
-       return NULL;
+       if (msg)
+               c->mode = FINISHCLIENT;
+       return msg;
 }
 
 str
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -454,8 +454,9 @@ monet5_user_get_def_schema(mvc *m, int u
        auths_id = find_sql_column(auths, "id");
        auths_name = find_sql_column(auths, "name");
        rid = table_funcs.column_find_row(m->session->tr, auths_id, &user, 
NULL);
-       if (!is_oid_nil(rid))
-               username = table_funcs.column_find_value(m->session->tr, 
auths_name, rid);
+       if (is_oid_nil(rid))
+               return NULL;
+       username = table_funcs.column_find_value(m->session->tr, auths_name, 
rid);
 
        user_info = find_sql_table(sys, "db_user_info");
        users_name = find_sql_column(user_info, "name");
@@ -521,8 +522,9 @@ monet5_user_set_def_schema(mvc *m, oid u
        users_schema = find_sql_column(user_info, "default_schema");
 
        rid = table_funcs.column_find_row(m->session->tr, users_name, username, 
NULL);
-       if (!is_oid_nil(rid))
-               p = table_funcs.column_find_value(m->session->tr, users_schema, 
rid);
+       if (is_oid_nil(rid))
+               return NULL;
+       p = table_funcs.column_find_value(m->session->tr, users_schema, rid);
 
        assert(p);
        schema_id = *(sqlid *) p;
diff --git a/sql/test/Triggers/Tests/All b/sql/test/Triggers/Tests/All
--- a/sql/test/Triggers/Tests/All
+++ b/sql/test/Triggers/Tests/All
@@ -7,3 +7,4 @@ trigger_activation
 trigger_owner
 triggers_schema_operations
 trigger_insert
+KNOWNFAIL?trigger_projection
diff --git a/sql/test/Triggers/Tests/trigger_projection.sql.src 
b/sql/test/Triggers/Tests/trigger_projection.sql.src
new file mode 100644
--- /dev/null
+++ b/sql/test/Triggers/Tests/trigger_projection.sql.src
@@ -0,0 +1,1 @@
+$RELSRCDIR/../trigger_projection.sql
diff --git a/sql/test/miscellaneous/Tests/trigger_projection.stable.err 
b/sql/test/Triggers/Tests/trigger_projection.stable.err
rename from sql/test/miscellaneous/Tests/trigger_projection.stable.err
rename to sql/test/Triggers/Tests/trigger_projection.stable.err
diff --git a/sql/test/miscellaneous/Tests/trigger_projection.stable.out 
b/sql/test/Triggers/Tests/trigger_projection.stable.out
rename from sql/test/miscellaneous/Tests/trigger_projection.stable.out
rename to sql/test/Triggers/Tests/trigger_projection.stable.out
diff --git a/sql/test/Triggers/run.all b/sql/test/Triggers/run.all
--- a/sql/test/Triggers/run.all
+++ b/sql/test/Triggers/run.all
@@ -52,4 +52,6 @@ echo trigger owner
 $SQL < trigger_owner_drop.sql
 echo done
 
-
+echo trigger projection
+$SQL < trigger_projection.sql
+echo done
diff --git a/sql/test/miscellaneous/Tests/trigger_projection.sql 
b/sql/test/Triggers/trigger_projection.sql
rename from sql/test/miscellaneous/Tests/trigger_projection.sql
rename to sql/test/Triggers/trigger_projection.sql
diff --git a/sql/test/Users/Tests/createUserRollback.SQL.py 
b/sql/test/Users/Tests/createUserRollback.SQL.py
--- a/sql/test/Users/Tests/createUserRollback.SQL.py
+++ b/sql/test/Users/Tests/createUserRollback.SQL.py
@@ -13,7 +13,7 @@ with process.client('sql', stdin=process
         CREATE USER "1" WITH PASSWORD '1' NAME '1' SCHEMA "sys";
         ROLLBACK;
 
-        SELECT CAST(COUNT(*) - (SELECT c FROM sys.myvar) AS BIGINT) FROM 
sys.users; --the total count, cannot change
+        SELECT CAST(COUNT(*) - (SELECT c FROM sys.myvar) AS BIGINT) FROM 
sys.users; -- The MAL authorization is not transaction aware, so the count 
changes :/
         DROP TABLE sys.myvar;
     ''')
     sys.stdout.write(out)
diff --git a/sql/test/Users/Tests/createUserRollback.stable.err 
b/sql/test/Users/Tests/createUserRollback.stable.err
--- a/sql/test/Users/Tests/createUserRollback.stable.err
+++ b/sql/test/Users/Tests/createUserRollback.stable.err
@@ -5,6 +5,7 @@ stderr of test 'createUserRollback` in d
 # 12:24:01 >  "/usr/bin/python3" "createUserRollback.SQL.py" 
"createUserRollback"
 # 12:24:01 >  
 
+Schema authorization error
 
 # 12:24:01 >  
 # 12:24:01 >  "Done."
diff --git a/sql/test/Users/Tests/createUserRollback.stable.out 
b/sql/test/Users/Tests/createUserRollback.stable.out
--- a/sql/test/Users/Tests/createUserRollback.stable.out
+++ b/sql/test/Users/Tests/createUserRollback.stable.out
@@ -16,7 +16,7 @@ stdout of test 'createUserRollback` in d
 % %7 # name
 % bigint # type
 % 1 # length
-[ 0    ]
+[ 1    ]
 #DROP TABLE sys.myvar;
 
 # 12:24:01 >  
diff --git a/sql/test/miscellaneous/Tests/All b/sql/test/miscellaneous/Tests/All
--- a/sql/test/miscellaneous/Tests/All
+++ b/sql/test/miscellaneous/Tests/All
@@ -16,4 +16,3 @@ deallocate
 table_udf_missing_var
 create_func_temp
 simple_plans
-trigger_projection
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -3657,8 +3657,29 @@ def main(argv) :
         dft['MALCLIENT']      = "'mclient -lmal -ftest -tnone -Eutf-8'"
         dft['SQLCLIENT']      = "'mclient -lsql -ftest -tnone -Eutf-8'"
         dft['SQLDUMP']        = "'msqldump -q'"
-        dft['RCLIENT']        = "'R --vanilla --slave'"
-        dft['RUBYCLIENT']        = "'ruby'"
+        dft['RUBYCLIENT']     = "'ruby'"
+
+        r_noecho = '--no-echo'
+        if CheckExec('R'):
+            proc = process.Popen(['R', '--version'],
+                                 stdout = process.PIPE, stderr = process.PIPE,
+                                 universal_newlines = True)
+            r_out, r_err = proc.communicate()
+            res = re.search(r'R version (?P<major>\d+)\.', r_out)
+            if res is not None and int(res.group('major')) < 4:
+                r_noecho = '--slave'
+            if CONDITIONALS['HAVE_LIBR']:
+                proc = process.Popen(['R', r_noecho, '--no-save', 
'--no-restore',
+                                      '-e', 
'print(Sys.getenv("R_LIBS_USER"))'],
+                                     stdout = process.PIPE, stderr = 
process.PIPE,
+                                     universal_newlines = True)
+                r_out, r_err = proc.communicate()
+                res = re.search(r'\[\d+\] "(?P<dir>.*)"', r_out)
+                if res is not None:
+                    rdir = os.path.expanduser(res.group('dir'))
+                    if not os.path.exists(rdir):
+                        os.makedirs(rdir)
+        dft['RCLIENT'] = "'R --vanilla {}'".format(r_noecho)
 
     #par = {}
     # get current environment
@@ -3883,17 +3904,6 @@ def main(argv) :
             CONDITIONALS['HAVE_PERL'] = '#'
         else:
             print('Perl available, but MonetDB driver or DBI module not 
available')
-    if CONDITIONALS['HAVE_LIBR'] and CheckExec('R'):
-        proc = process.Popen(['R', '--slave', '--no-save', '--no-restore',
-                              '-e', 'print(Sys.getenv("R_LIBS_USER"))'],
-                             stdout = process.PIPE, stderr = process.PIPE,
-                             universal_newlines = True)
-        r_out, r_err = proc.communicate()
-        res = re.search(r'\[\d+\] "(?P<dir>.*)"', r_out)
-        if res is not None:
-            rdir = os.path.expanduser(res.group('dir'))
-            if not os.path.exists(rdir):
-                os.makedirs(rdir)
     if CheckExec('php'):
         phpcmd = ['php']
         if 'PHP_INCPATH' in os.environ:
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to