Changeset: d9db2840e7f0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d9db2840e7f0
Modified Files:
        sql/backends/monet5/sql_cat.c
        sql/server/rel_psm.c
        sql/server/rel_schema.c
        sql/test/Tests/ifexists-views.sql
        testing/Mtest.py.in
Branch: default
Log Message:

Merged with linear-hashing


diffs (153 lines):

diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -719,9 +719,9 @@ drop_func(mvc *sql, char *sname, char *n
                        if (mvc_drop_func(sql, s, func, action))
                                throw(SQL,"sql.drop_func", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                }
-       } else if (fid == -2) { //if exists option
+       } else if (fid == -2) { /* if exists option */
                return MAL_SUCCEED;
-       } else { //fid == -1
+       } else { /* fid == -1 */
                node *n = NULL;
                list *list_func = schema_bind_func(sql, s, name, type);
                int res;
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -1113,21 +1113,21 @@ rel_drop_func(mvc *sql, dlist *qname, dl
        char *F = NULL, *fn = NULL;
 
        FUNC_TYPE_STR(type)
-       (void) fn;
 
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
+       if (sname && !(s = mvc_bind_schema(sql, sname)) && !if_exists)
                return sql_error(sql, 02, SQLSTATE(3F000) "DROP %s: no such 
schema '%s'", F, sname);
 
-       func = resolve_func(sql, s, name, typelist, type, "DROP", if_exists);
+       if (s)
+               func = resolve_func(sql, s, name, typelist, type, "DROP", 
if_exists);
        if (!func && !sname) {
                s = tmp_schema(sql);
                func = resolve_func(sql, s, name, typelist, type, "DROP", 
if_exists);
        }
-       if (func)
+       if (func && s)
                return rel_drop_function(sql->sa, s->base.name, name, 
func->base.id, type, drop_action);
-       else if (if_exists && !sql->session->status)
-               return rel_drop_function(sql->sa, s->base.name, name, -2, type, 
drop_action);
-       return NULL;
+       if (if_exists)
+               return rel_drop_function(sql->sa, sname, name, -2, type, 
drop_action);
+       return sql_error(sql, 02, SQLSTATE(42000) "DROP %s: %s %s not found", 
F, fn, name);
 }
 
 static sql_rel* 
@@ -1346,8 +1346,11 @@ drop_trigger(mvc *sql, dlist *qname, int
        const char *tname = qname_table(qname);
        sql_schema *ss = cur_schema(sql);
 
-       if (sname && !(ss = mvc_bind_schema(sql, sname)))
+       if (sname && !(ss = mvc_bind_schema(sql, sname))) {
+               if (if_exists)
+                       return rel_drop_trigger(sql, sname, tname, if_exists);
                return sql_error(sql, 02, SQLSTATE(3F000) "DROP TRIGGER: no 
such schema '%s'", sname);
+       }
 
        if (!mvc_schema_privs(sql, ss)) 
                return sql_error(sql, 02, SQLSTATE(3F000) "DROP TRIGGER: access 
denied for %s to schema '%s'", stack_get_string(sql, "current_user"), 
ss->base.name);
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -1057,12 +1057,10 @@ rel_create_table(sql_query *query, sql_s
                sname = s->base.name;
 
        if (mvc_bind_table(sql, s, name)) {
-               if (if_not_exists) {
+               char *cd = (temp == SQL_DECLARED_TABLE)?"DECLARE":"CREATE";
+               if (if_not_exists)
                        return rel_psm_block(sql->sa, new_exp_list(sql->sa));
-               } else {
-                       char *cd = (temp == 
SQL_DECLARED_TABLE)?"DECLARE":"CREATE";
-                       return sql_error(sql, 02, SQLSTATE(42S01) "%s TABLE: 
name '%s' already in use", cd, name);
-               }
+               return sql_error(sql, 02, SQLSTATE(42S01) "%s TABLE: name '%s' 
already in use", cd, name);
        } else if (temp != SQL_DECLARED_TABLE && (!mvc_schema_privs(sql, s) && 
!(isTempSchema(s) && temp == SQL_LOCAL_TEMP))){
                return sql_error(sql, 02, SQLSTATE(42000) "CREATE TABLE: 
insufficient privileges for user '%s' in schema '%s'", stack_get_string(sql, 
"current_user"), s->base.name);
        } else if (table_elements_or_subquery->token == SQL_CREATE_TABLE) {
@@ -1379,24 +1377,17 @@ rel_create_schema(sql_query *query, dlis
        char *auth = schema_auth(auth_name);
        sqlid auth_id = sql->role_id;
 
-       if (auth && (auth_id = sql_find_auth(sql, auth)) < 0) {
-               sql_error(sql, 02, SQLSTATE(28000) "CREATE SCHEMA: no such 
authorization '%s'", auth);
-               return NULL;
-       }
-       if (sql->user_id != USER_MONETDB && sql->role_id != ROLE_SYSADMIN) {
-               sql_error(sql, 02, SQLSTATE(42000) "CREATE SCHEMA: insufficient 
privileges for user '%s'", stack_get_string(sql, "current_user"));
-               return NULL;
-       }
+       if (auth && (auth_id = sql_find_auth(sql, auth)) < 0)
+               return sql_error(sql, 02, SQLSTATE(28000) "CREATE SCHEMA: no 
such authorization '%s'", auth);
+       if (sql->user_id != USER_MONETDB && sql->role_id != ROLE_SYSADMIN)
+               return sql_error(sql, 02, SQLSTATE(42000) "CREATE SCHEMA: 
insufficient privileges for user '%s'", stack_get_string(sql, "current_user"));
        if (!name) 
                name = auth;
        assert(name);
        if (mvc_bind_schema(sql, name)) {
-               if (!if_not_exists) {
-                       sql_error(sql, 02, SQLSTATE(3F000) "CREATE SCHEMA: name 
'%s' already in use", name);
-                       return NULL;
-               } else {
-                       return rel_psm_block(sql->sa, new_exp_list(sql->sa));
-               }
+               if (!if_not_exists)
+                       return sql_error(sql, 02, SQLSTATE(3F000) "CREATE 
SCHEMA: name '%s' already in use", name);
+               return rel_psm_block(sql->sa, new_exp_list(sql->sa));
        } else {
                sql_schema *os = sql->session->schema;
                dnode *n;
@@ -1456,7 +1447,7 @@ sql_alter_table(sql_query *query, dlist 
        if ((t = mvc_bind_table(sql, s, tname)) == NULL) {
                if (mvc_bind_table(sql, mvc_bind_schema(sql, "tmp"), tname) != 
NULL) 
                        return sql_error(sql, 02, SQLSTATE(42S02) "ALTER TABLE: 
not supported on TEMPORARY table '%s'", tname);
-               if(if_exists)
+               if (if_exists)
                        return rel_psm_block(sql->sa, new_exp_list(sql->sa));
                return sql_error(sql, 02, SQLSTATE(42S02) "ALTER TABLE: no such 
table '%s' in schema '%s'", tname, s->base.name);
        } else {
diff --git a/sql/test/Tests/ifexists-views.sql 
b/sql/test/Tests/ifexists-views.sql
--- a/sql/test/Tests/ifexists-views.sql
+++ b/sql/test/Tests/ifexists-views.sql
@@ -14,4 +14,9 @@ DROP VIEW IF EXISTS view2;
 DROP VIEW view2; -- should fail
 SELECT * FROM view2; -- should fail
 
+DROP FUNCTION IF EXISTS "idontexist"."idontexist"();
+DROP FUNCTION IF EXISTS "idontexist"."idontexist"(INT);
+DROP FUNCTION IF EXISTS "sys"."idontexist"();
+DROP FUNCTION IF EXISTS "sys"."idontexist"(INT);
+
 DROP TABLE tab0;
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -2855,12 +2855,15 @@ class ServerClass:
         return self.proc.poll()
 
     def terminate(self):
+        self.timer.cancel()
+        t = Timer(60, killProc, args = [self.proc, self.errfile, self.cmd])
+        t.start()
         if os.name == 'nt':
             self.proc.send_signal(signal.CTRL_BREAK_EVENT)
         else:
             self.proc.terminate()
         self.proc.wait()
-        self.timer.cancel()
+        t.cancel()
         self.code = returnCode(self.proc, self.errfile)
 
     def LaunchIt(self):
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to