Changeset: 84eb63a48b1b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=84eb63a48b1b
Added Files:
        sql/test/BugTracker-2019/Tests/drop-table-cascade.Bug-6805.sql
        sql/test/BugTracker-2019/Tests/drop-table-cascade.Bug-6805.stable.err
        sql/test/BugTracker-2019/Tests/drop-table-cascade.Bug-6805.stable.out
Modified Files:
        clients/mapiclient/mhelp.c
        sql/include/sql_catalog.h
        sql/odbc/samples/Tests/odbcsample1.SQL.sh
        sql/odbc/samples/Tests/testgetinfo.SQL.sh
        sql/storage/sql_catalog.c
        sql/storage/store.c
        sql/test/BugTracker-2019/Tests/All
Branch: default
Log Message:

Merge with Nov2019


diffs (truncated from 579 to 300 lines):

diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -169,6 +169,11 @@ SQLhelp sqlhelp1[] = {
         "    LANGUAGE PYTHON external_code",
         "qname,param,external_code",
         "See also 
https://www.monetdb.org/blog/monetdbpython-loader-functions"},
+       {"CREATE MERGE TABLE",
+        "",
+        "CREATE MERGE TABLE [ IF NOT EXISTS ] qname table_source [ 
partition_by ]",
+        "table_source,partition_by",
+        "See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/DataPartitioning"},
        {"CREATE PROCEDURE",
         "Create a user-defined procedure",
         "CREATE [ OR REPLACE ] PROCEDURE qname '(' { '*' | [ param [',' ...]] 
} ')'\n"
@@ -177,11 +182,6 @@ SQLhelp sqlhelp1[] = {
         "    EXTERNAL NAME ident ',' ident",
         "qname,param,procedure_statement,ident",
         "See also 
https://www.monetdb.org/Documentation/Manuals/SQLreference/Procedures"},
-       {"CREATE MERGE TABLE",
-        "",
-        "CREATE MERGE TABLE [ IF NOT EXISTS ] qname table_source [ 
partition_by ]",
-        "table_source,partition_by",
-        "See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/DataPartitioning"},
        {"CREATE REMOTE TABLE",
         "",
         "CREATE REMOTE TABLE [ IF NOT EXISTS ] qname ON string [WITH [USER 
'username'] [[ENCRYPTED] PASSWORD 'password']]",
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -691,8 +691,12 @@ extern node *list_find_id(list *l, sqlid
 extern node *list_find_base_id(list *l, sqlid id);
 
 extern sql_key *find_sql_key(sql_table *t, const char *kname);
+extern node *find_sql_key_node(sql_schema *s, sqlid id);
+extern sql_key *sql_trans_find_key(sql_trans *tr, sqlid id);
 
 extern sql_idx *find_sql_idx(sql_table *t, const char *kname);
+extern node *find_sql_idx_node(sql_schema *s, sqlid id);
+extern sql_idx *sql_trans_find_idx(sql_trans *tr, sqlid id);
 
 extern sql_column *find_sql_column(sql_table *t, const char *cname);
 
@@ -701,6 +705,7 @@ extern sql_part *find_sql_part(sql_table
 extern sql_table *find_sql_table(sql_schema *s, const char *tname);
 extern sql_table *find_sql_table_id(sql_schema *s, sqlid id);
 extern node *find_sql_table_node(sql_schema *s, sqlid id);
+extern sql_table *sql_trans_find_table(sql_trans *tr, sqlid id);
 
 extern sql_sequence *find_sql_sequence(sql_schema *s, const char *sname);
 
@@ -711,6 +716,7 @@ extern node *find_sql_schema_node(sql_tr
 extern sql_type *find_sql_type(sql_schema * s, const char *tname);
 extern sql_type *sql_trans_bind_type(sql_trans *tr, sql_schema *s, const char 
*name);
 extern node *find_sql_type_node(sql_schema *s, sqlid id);
+extern sql_type *sql_trans_find_type(sql_trans *tr, sqlid id);
 
 extern sql_func *find_sql_func(sql_schema * s, const char *tname);
 extern list *find_all_sql_func(sql_schema * s, const char *tname, sql_ftype 
type);
@@ -718,6 +724,9 @@ extern sql_func *sql_trans_bind_func(sql
 extern sql_func *sql_trans_find_func(sql_trans *tr, sqlid id);
 extern node *find_sql_func_node(sql_schema *s, sqlid id);
 
+extern node *find_sql_trigger_node(sql_schema *s, sqlid id);
+extern sql_trigger *sql_trans_find_trigger(sql_trans *tr, sqlid id);
+
 extern void *sql_values_list_element_validate_and_insert(void *v1, void *v2, 
int* res);
 extern void *sql_range_part_validate_and_insert(void *v1, void *v2);
 extern void *sql_values_part_validate_and_insert(void *v1, void *v2);
diff --git a/sql/odbc/samples/Tests/odbcsample1.SQL.sh 
b/sql/odbc/samples/Tests/odbcsample1.SQL.sh
--- a/sql/odbc/samples/Tests/odbcsample1.SQL.sh
+++ b/sql/odbc/samples/Tests/odbcsample1.SQL.sh
@@ -8,7 +8,7 @@ Description     = Test MonetDB Data Source
 Driver         = $LIBDIR/libMonetODBC.so
 Setup          = $LIBDIR/libMonetODBCs.so
 Host           = localhost
-Port           = MAPIPORT
+Port           = $MAPIPORT
 Database       = $TSTDB
 User           = monetdb
 Password       = monetdb
diff --git a/sql/odbc/samples/Tests/testgetinfo.SQL.sh 
b/sql/odbc/samples/Tests/testgetinfo.SQL.sh
--- a/sql/odbc/samples/Tests/testgetinfo.SQL.sh
+++ b/sql/odbc/samples/Tests/testgetinfo.SQL.sh
@@ -8,7 +8,7 @@ Description     = Test MonetDB Data Source
 Driver         = $LIBDIR/libMonetODBC.so
 Setup          = $LIBDIR/libMonetODBCs.so
 Host           = localhost
-Port           = MAPIPORT
+Port           = $MAPIPORT
 Database       = $TSTDB
 User           = monetdb
 Password       = monetdb
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -164,12 +164,56 @@ find_sql_key(sql_table *t, const char *k
        return _cs_find_name(&t->keys, kname);
 }
 
+node *
+find_sql_key_node(sql_schema *s, sqlid id)
+{
+       return list_find_base_id(s->keys, id);
+}
+
+sql_key *
+sql_trans_find_key(sql_trans *tr, sqlid id)
+{
+       node *n, *m;
+       sql_key *k = NULL;
+
+       if (tr->schemas.set) {
+               for (n = tr->schemas.set->h; n && !k; n = n->next) {
+                       m = find_sql_key_node(n->data, id);
+                       if (m)
+                               k = m->data;
+               }
+       }
+       return k;
+}
+
 sql_idx *
 find_sql_idx(sql_table *t, const char *iname)
 {
        return _cs_find_name(&t->idxs, iname);
 }
 
+node *
+find_sql_idx_node(sql_schema *s, sqlid id)
+{
+       return list_find_base_id(s->idxs, id);
+}
+
+sql_idx *
+sql_trans_find_idx(sql_trans *tr, sqlid id)
+{
+       node *n, *m;
+       sql_idx *i = NULL;
+
+       if (tr->schemas.set) {
+               for (n = tr->schemas.set->h; n && !i; n = n->next) {
+                       m = find_sql_idx_node(n->data, id);
+                       if (m)
+                               i = m->data;
+               }
+       }
+       return i;
+}
+
 sql_column *
 find_sql_column(sql_table *t, const char *cname)
 {
@@ -204,6 +248,22 @@ find_sql_table_node(sql_schema *s, sqlid
        return cs_find_id(&s->tables, id);
 }
 
+sql_table *
+sql_trans_find_table(sql_trans *tr, sqlid id)
+{
+       node *n, *m;
+       sql_table *t = NULL;
+
+       if (tr->schemas.set) {
+               for (n = tr->schemas.set->h; n && !t; n = n->next) {
+                       m = find_sql_table_node(n->data, id);
+                       if (m)
+                               t = m->data;
+               }
+       }
+       return t;
+}
+
 sql_sequence *
 find_sql_sequence(sql_schema *s, const char *sname)
 {
@@ -249,13 +309,13 @@ find_sqlname(list *l, const char *name)
 }
 
 node *
-find_sql_type_node(sql_schema * s, sqlid id)
+find_sql_type_node(sql_schema *s, sqlid id)
 {
        return cs_find_id(&s->types, id);
 }
 
 sql_type *
-find_sql_type(sql_schema * s, const char *tname)
+find_sql_type(sql_schema *s, const char *tname)
 {
        return find_sqlname(s->types.set, tname);
 }
@@ -278,20 +338,36 @@ sql_trans_bind_type(sql_trans *tr, sql_s
        return t;
 }
 
+sql_type *
+sql_trans_find_type(sql_trans *tr, sqlid id)
+{
+       node *n, *m;
+       sql_type *t = NULL;
+
+       if (tr->schemas.set) {
+               for (n = tr->schemas.set->h; n && !t; n = n->next) {
+                       m = find_sql_type_node(n->data, id);
+                       if (m)
+                               t = m->data;
+               }
+       }
+       return t;
+}
+
 node *
-find_sql_func_node(sql_schema * s, sqlid id)
+find_sql_func_node(sql_schema *s, sqlid id)
 {
        return cs_find_id(&s->funcs, id);
 }
 
 sql_func *
-find_sql_func(sql_schema * s, const char *tname)
+find_sql_func(sql_schema *s, const char *tname)
 {
        return _cs_find_name(&s->funcs, tname);
 }
 
 list *
-find_all_sql_func(sql_schema * s, const char *name, sql_ftype type)
+find_all_sql_func(sql_schema *s, const char *name, sql_ftype type)
 {
        list *l = s->funcs.set, *res = NULL;
        node *n = NULL;
@@ -348,6 +424,28 @@ sql_trans_find_func(sql_trans *tr, sqlid
        return t;
 }
 
+node *
+find_sql_trigger_node(sql_schema *s, sqlid id)
+{
+       return list_find_base_id(s->triggers, id);
+}
+
+sql_trigger *
+sql_trans_find_trigger(sql_trans *tr, sqlid id)
+{
+       node *n, *m;
+       sql_trigger *t = NULL;
+
+       if (tr->schemas.set) {
+               for (n = tr->schemas.set->h; n && !t; n = n->next) {
+                       m = find_sql_trigger_node(n->data, id);
+                       if (m)
+                               t = m->data;
+               }
+       }
+       return t;
+}
+
 void*
 sql_values_list_element_validate_and_insert(void *v1, void *v2, int* res)
 {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4809,11 +4809,10 @@ sql_trans_commit(sql_trans *tr)
 }
 
 static int
-sql_trans_drop_all_dependencies(sql_trans *tr, sql_schema *s, sqlid id, 
sql_dependency type)
+sql_trans_drop_all_dependencies(sql_trans *tr, sqlid id, sql_dependency type)
 {
        sqlid dep_id=0, t_id = -1;
        sht dep_type = 0;
-       sql_table *t = NULL;
        list *dep = sql_trans_get_dependencies(tr, id, type, NULL);
        node *n;
 
@@ -4834,37 +4833,39 @@ sql_trans_drop_all_dependencies(sql_tran
                                        (void) sql_trans_drop_schema(tr, 
dep_id, DROP_CASCADE);
                                        break;
                                case TABLE_DEPENDENCY:
-                                       (void) sql_trans_drop_table(tr, s, 
dep_id, DROP_CASCADE);
-                                       break;
-                               case COLUMN_DEPENDENCY:
+                               case VIEW_DEPENDENCY: {
+                                       sql_table *t = sql_trans_find_table(tr, 
dep_id);
+                                       (void) sql_trans_drop_table(tr, t->s, 
dep_id, DROP_CASCADE);
+                               } break;
+                               case COLUMN_DEPENDENCY: {
                                        if ((t_id = 
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY)) > 0) {
-                                               t = find_sql_table_id(s, t_id);
+                                               sql_table *t = 
sql_trans_find_table(tr, dep_id);
                                                if (t)
                                                        (void) 
sql_trans_drop_column(tr, t, dep_id, DROP_CASCADE);
                                        }
-                                       break;
-                               case VIEW_DEPENDENCY:
-                                       (void) sql_trans_drop_table(tr, s, 
dep_id, DROP_CASCADE);
-                                       break;
-                               case TRIGGER_DEPENDENCY:
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to