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