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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list