Changeset: d76c8980d34d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d76c8980d34d
Modified Files:
        sql/server/rel_psm.c
        sql/server/rel_psm.h
        sql/server/rel_schema.c
        sql/test/Tests/ifexists.sql
        sql/test/Tests/ifexists.stable.err
Branch: Mar2018
Log Message:

Fixes for bug 6629, ie create an empty PSM relation when a table or schema 
already exists on a "IF NOT EXISTS" query.


diffs (82 lines):

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
@@ -18,7 +18,7 @@
 
 static list *sequential_block(mvc *sql, sql_subtype *restype, list 
*restypelist, dlist *blk, char *opt_name, int is_func);
 
-static sql_rel *
+sql_rel *
 rel_psm_block(sql_allocator *sa, list *l)
 {
        if (l) {
diff --git a/sql/server/rel_psm.h b/sql/server/rel_psm.h
--- a/sql/server/rel_psm.h
+++ b/sql/server/rel_psm.h
@@ -15,6 +15,7 @@
 #include "sql_mvc.h"
 
 extern sql_func *resolve_func( mvc *sql, sql_schema *s, const char *name, 
dlist *typelist, int type, char *op, int if_exists);
+extern sql_rel *rel_psm_block(sql_allocator *sa, list *l);
 extern sql_rel *rel_psm(mvc *sql, symbol *sym);
 extern sql_rel *rel_select_with_into( mvc *sql, symbol *sq);
 
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
@@ -931,7 +931,7 @@ rel_create_table(mvc *sql, sql_schema *s
 
        if (mvc_bind_table(sql, s, name)) {
                if (if_not_exists) {
-                       return NULL;
+                       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);
@@ -1270,7 +1270,7 @@ rel_create_schema(mvc *sql, dlist *auth_
                        sql_error(sql, 02, SQLSTATE(3F000) "CREATE SCHEMA: name 
'%s' already in use", name);
                        return NULL;
                } else {
-                       return NULL;
+                       return rel_psm_block(sql->sa, new_exp_list(sql->sa));
                }
        } else {
                sql_schema *os = sql->session->schema;
diff --git a/sql/test/Tests/ifexists.sql b/sql/test/Tests/ifexists.sql
--- a/sql/test/Tests/ifexists.sql
+++ b/sql/test/Tests/ifexists.sql
@@ -47,7 +47,6 @@ CREATE SCHEMA IF NOT EXISTS hello;
 # verify that the schema exists
 # ('hello')
 SELECT name FROM schemas WHERE name='hello';
-# this statement should fail silently because the schema already exists
 CREATE SCHEMA IF NOT EXISTS hello;
 
 # use the schema to make sure it's there
diff --git a/sql/test/Tests/ifexists.stable.err 
b/sql/test/Tests/ifexists.stable.err
--- a/sql/test/Tests/ifexists.stable.err
+++ b/sql/test/Tests/ifexists.stable.err
@@ -29,10 +29,7 @@ stderr of test 'ifexists` in directory '
 # 16:49:36 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-81010" "--port=38832"
 # 16:49:36 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-14902/.s.monetdb.35943
-QUERY = CREATE TABLE IF NOT EXISTS hello(i INTEGER);
-ERROR = !42000!
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+MAPI  = (monetdb) /var/tmp/mtest-5376/.s.monetdb.35352
 QUERY = CREATE TABLE hello(i INTEGER);
 ERROR = !CREATE TABLE: name 'hello' already in use
 CODE  = 42S01
@@ -40,10 +37,7 @@ MAPI  = (monetdb) /var/tmp/mtest-30274/.
 QUERY = DROP TABLE hello;
 ERROR = !DROP TABLE: no such table 'hello'
 CODE  = 42S02
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
-QUERY = CREATE SCHEMA IF NOT EXISTS hello;
-ERROR = !42000!
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+MAPI  = (monetdb) /var/tmp/mtest-5376/.s.monetdb.35352
 QUERY = CREATE SCHEMA hello;
 ERROR = !CREATE SCHEMA: name 'hello' already in use
 CODE  = 3F000
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to