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