Changeset: f72703b158a7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f72703b158a7
Modified Files:
sql/backends/monet5/sql_cat.c
sql/include/sql_catalog.h
sql/server/sql_partition.c
sql/storage/store.c
Branch: Nov2019
Log Message:
Fixing several issues in sql storage:
- The "p" component of sql_part was pointing to the child table of the
partition instead of the parent in some cases. Now it always point to the
parent as it supposed to be.
- The trigger catalog update and deletes changes on non-regular tables were not
propagated between transactions.
- Table renames and other properties updates on non-regular tables were also
not propagated.
Also some cosmetics changes.
diffs (truncated from 2057 to 300 lines):
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -38,21 +38,21 @@
#include "orderidx.h"
#define initcontext() \
- if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)\
- return msg;\
- if ((msg = checkSQLContext(cntxt)) != NULL)\
- return msg;\
- if (STORE_READONLY)\
- throw(SQL,"sql.cat",SQLSTATE(25006) "Schema statements cannot be
executed on a readonly database.");
+ if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)\
+ return msg;\
+ if ((msg = checkSQLContext(cntxt)) != NULL)\
+ return msg;\
+ if (STORE_READONLY)\
+ throw(SQL,"sql.cat",SQLSTATE(25006) "Schema statements cannot
be executed on a readonly database.");
static char *
SaveArgReference(MalStkPtr stk, InstrPtr pci, int arg)
-{
- char *val = *getArgReference_str(stk, pci, arg);
-
- if (val && strcmp(val, str_nil) == 0)
- val = NULL;
- return val;
+{
+ char *val = *getArgReference_str(stk, pci, arg);
+
+ if (val && strcmp(val, str_nil) == 0)
+ val = NULL;
+ return val;
}
static int
@@ -88,14 +88,14 @@ rel_check_tables(sql_table *nt, sql_tabl
if (subtype_cmp(&nc->type, &mc->type) != 0)
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table column type doesn't match %s definition", errtable,
errtable);
- if(isRangePartitionTable(nt) || isListPartitionTable(nt)) {
+ if (isRangePartitionTable(nt) || isListPartitionTable(nt)) {
if (nc->null != mc->null)
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
column NULL check doesn't match %s definition", errtable, errtable);
if ((!nc->def && mc->def) || (nc->def && !mc->def) ||
(nc->def && mc->def && strcmp(nc->def, mc->def) != 0))
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER %s: to be added table
column DEFAULT value doesn't match %s definition", errtable, errtable);
}
}
- if(isNonPartitionedTable(nt)) {
+ if (isNonPartitionedTable(nt)) {
if (cs_size(&nt->idxs) != cs_size(&nnt->idxs))
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table index doesn't match %s definition", errtable, errtable);
if (cs_size(&nt->idxs))
@@ -128,8 +128,8 @@ rel_check_tables(sql_table *nt, sql_tabl
}
}
- for(sql_table *up = nt->p ; up ; up = up->p) {
- if(!strcmp(up->s->base.name, nnt->s->base.name) &&
!strcmp(up->base.name, nnt->base.name))
+ for (sql_table *up = nt->p ; up ; up = up->p) {
+ if (!strcmp(up->s->base.name, nnt->s->base.name) &&
!strcmp(up->base.name, nnt->base.name))
throw(SQL,"sql.rel_check_tables",SQLSTATE(3F000) "ALTER
%s: to be added table is a parent of the %s", errtable, errtable);
}
return MAL_SUCCEED;
@@ -179,7 +179,7 @@ alter_table_add_table(mvc *sql, char *ms
sql_table *mt = NULL, *pt = NULL;
str msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_table", msname, mtname, psname, ptname, &mt, &pt, 0);
- if(msg == MAL_SUCCEED)
+ if (msg == MAL_SUCCEED)
sql_trans_add_table(sql->session->tr, mt, pt);
return msg;
@@ -197,15 +197,15 @@ alter_table_add_range_partition(mvc *sql
ssize_t (*atomtostr)(str *, size_t *, const void *, bool);
sql_subtype tpe;
- if((msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_range_partition", msname, mtname, psname, ptname,
+ if ((msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_range_partition", msname, mtname, psname, ptname,
&mt, &pt, update))) {
return msg;
- } else if(!isRangePartitionTable(mt)) {
+ } else if (!isRangePartitionTable(mt)) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
"ALTER
TABLE: cannot add range partition into a %s table",
(mt->type == tt_merge_table)?"merge":"list partition");
goto finish;
- } else if(!update && pt->p) {
+ } else if (!update && pt->p) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
"ALTER TABLE: table
%s.%s is already part of another range partition table",
psname, ptname);
@@ -217,16 +217,16 @@ alter_table_add_range_partition(mvc *sql
min_null = ATOMcmp(tp1, min, ATOMnilptr(tp1)) == 0;
max_null = ATOMcmp(tp1, max, ATOMnilptr(tp1)) == 0;
- if(max_null && min_null && !with_nills) {
+ if (max_null && min_null && !with_nills) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
"ALTER TABLE: range bound cannot be null");
goto finish;
- } else if(!min_null && !max_null && ATOMcmp(tp1, min, max) > 0) {
+ } else if (!min_null && !max_null && ATOMcmp(tp1, min, max) > 0) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
"ALTER TABLE: minimum value is higher than maximum value");
goto finish;
}
errcode = sql_trans_add_range_partition(sql->session->tr, mt, pt, tpe,
min, max, with_nills, update, &err);
- switch(errcode) {
+ switch (errcode) {
case 0:
break;
case -1:
@@ -242,19 +242,19 @@ alter_table_add_range_partition(mvc *sql
break;
case -4:
assert(err);
- if(with_nills && err->with_nills) {
+ if (with_nills && err->with_nills) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
"ALTER TABLE: conflicting partitions: table %s.%s stores null values and only "
-
"one partition can store null values at the time", err->t->s->base.name,
err->t->base.name);
+
"one partition can store null values at the time", err->t->s->base.name,
err->base.name);
} else {
atomtostr = BATatoms[tp1].atomToStr;
- if(atomtostr(&conflict_err_min, &length,
err->part.range.minvalue, true) < 0) {
+ if (atomtostr(&conflict_err_min, &length,
err->part.range.minvalue, true) < 0) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001)
MAL_MALLOC_FAIL);
- } else if(atomtostr(&conflict_err_max, &length,
err->part.range.maxvalue, true) < 0) {
+ } else if (atomtostr(&conflict_err_max,
&length, err->part.range.maxvalue, true) < 0) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001)
MAL_MALLOC_FAIL);
- } else if(atomtostr(&err_min, &length, min,
true) < 0) {
+ } else if (atomtostr(&err_min, &length, min,
true) < 0) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001)
MAL_MALLOC_FAIL);
- } else if(atomtostr(&err_max, &length, max,
true) < 0) {
+ } else if (atomtostr(&err_max, &length, max,
true) < 0) {
msg =
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001)
MAL_MALLOC_FAIL);
} else {
sql_table *errt = mvc_bind_table(sql,
mt->s, err->base.name);
@@ -269,15 +269,15 @@ alter_table_add_range_partition(mvc *sql
}
finish:
- if(err_min)
+ if (err_min)
GDKfree(err_min);
- if(err_max)
+ if (err_max)
GDKfree(err_max);
- if(conflict_err_min)
+ if (conflict_err_min)
GDKfree(conflict_err_min);
- if(conflict_err_max)
+ if (conflict_err_max)
GDKfree(conflict_err_max);
- if(msg != MAL_SUCCEED)
+ if (msg != MAL_SUCCEED)
pt->p = NULL;
return msg;
}
@@ -293,15 +293,15 @@ alter_table_add_value_partition(mvc *sql
list *values = list_new(sql->session->tr->sa, (fdestroy) NULL);
sql_subtype tpe;
- if((msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_value_partition", msname, mtname, psname, ptname,
+ if ((msg = validate_alter_table_add_table(sql,
"sql.alter_table_add_value_partition", msname, mtname, psname, ptname,
&mt, &pt, update))) {
return msg;
- } else if(!isListPartitionTable(mt)) {
+ } else if (!isListPartitionTable(mt)) {
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
"ALTER
TABLE: cannot add value partition into a %s table",
(mt->type == tt_merge_table)?"merge":"range partition");
goto finish;
- } else if(!update && pt->p) {
+ } else if (!update && pt->p) {
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
"ALTER TABLE: table
%s.%s is already part of another list partition table",
psname, ptname);
@@ -310,17 +310,17 @@ alter_table_add_value_partition(mvc *sql
find_partition_type(&tpe, mt);
ninserts = pci->argc - pci->retc - 6;
- if(ninserts <= 0 && !with_nills) {
+ if (ninserts <= 0 && !with_nills) {
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
"ALTER TABLE: no values in the list");
goto finish;
}
- for( i = pci->retc+6; i < pci->argc; i++){
+ for ( i = pci->retc+6; i < pci->argc; i++){
sql_part_value *nextv = NULL;
ValRecord *vnext = &(stk)->stk[(pci)->argv[i]];
ptr pnext = VALget(vnext);
size_t len = ATOMlen(vnext->vtype, pnext);
- if(VALisnil(vnext)) { /* check for an eventual null value which
cannot be */
+ if (VALisnil(vnext)) { /* check for an eventual null value
which cannot be */
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
"ALTER
TABLE: list value cannot be null");
goto finish;
@@ -332,7 +332,7 @@ alter_table_add_value_partition(mvc *sql
memcpy(nextv->value, pnext, len);
nextv->length = len;
- if(list_append_sorted(values, nextv,
sql_values_list_element_validate_and_insert) != NULL) {
+ if (list_append_sorted(values, nextv,
sql_values_list_element_validate_and_insert) != NULL) {
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
"ALTER
TABLE: there are duplicated values in the list");
goto finish;
@@ -340,13 +340,13 @@ alter_table_add_value_partition(mvc *sql
}
errcode = sql_trans_add_value_partition(sql->session->tr, mt, pt, tpe,
values, with_nills, update, &err);
- switch(errcode) {
+ switch (errcode) {
case 0:
break;
case -1:
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
"ALTER
TABLE: the new partition is conflicting with the existing partition %s.%s",
-
err->t->s->base.name, err->t->base.name);
+
err->t->s->base.name, err->base.name);
break;
default:
msg =
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000)
@@ -356,7 +356,7 @@ alter_table_add_value_partition(mvc *sql
}
finish:
- if(msg != MAL_SUCCEED)
+ if (msg != MAL_SUCCEED)
pt->p = NULL;
return msg;
}
@@ -440,10 +440,10 @@ create_trigger(mvc *sql, char *sname, ch
sql_allocator *sa = sql->sa;
sql->sa = sa_create();
- if(!sql->sa)
+ if (!sql->sa)
throw(SQL, "sql.catalog",SQLSTATE(HY001)
MAL_MALLOC_FAIL);
buf = sa_strdup(sql->sa, query);
- if(!buf)
+ if (!buf)
throw(SQL, "sql.catalog",SQLSTATE(HY001)
MAL_MALLOC_FAIL);
r = rel_parse(sql, s, buf, m_deps);
if (r)
@@ -476,11 +476,11 @@ drop_trigger(mvc *sql, char *sname, char
throw(SQL,"sql.drop_trigger",SQLSTATE(3F000) "DROP TRIGGER:
access denied for %s to schema '%s'", stack_get_string(sql, "current_user"),
s->base.name);
if ((tri = mvc_bind_trigger(sql, s, tname)) == NULL) {
- if(if_exists)
+ if (if_exists)
return MAL_SUCCEED;
throw(SQL,"sql.drop_trigger", SQLSTATE(3F000) "DROP TRIGGER:
unknown trigger %s\n", tname);
}
- if(mvc_drop_trigger(sql, s, tri))
+ if (mvc_drop_trigger(sql, s, tri))
throw(SQL,"sql.drop_trigger", SQLSTATE(HY001) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -555,7 +555,7 @@ drop_view(mvc *sql, char *sname, char *t
if (!mvc_schema_privs(sql, ss) && !(isTempSchema(ss) && t &&
t->persistence == SQL_LOCAL_TEMP)) {
throw(SQL,"sql.dropview", SQLSTATE(42000) "DROP VIEW: access
denied for %s to schema '%s'", stack_get_string(sql, "current_user"),
ss->base.name);
} else if (!t) {
- if(if_exists){
+ if (if_exists){
return MAL_SUCCEED;
}
throw(SQL,"sql.drop_view",SQLSTATE(42S02) "DROP VIEW: unknown
view '%s'", tname);
@@ -585,7 +585,7 @@ drop_key(mvc *sql, char *sname, char *kn
throw(SQL,"sql.drop_key", SQLSTATE(42000) "ALTER TABLE: no such
constraint '%s'", kname);
if (!drop_action && mvc_check_dependency(sql, key->base.id,
KEY_DEPENDENCY, NULL))
throw(SQL,"sql.drop_key", SQLSTATE(42000) "ALTER TABLE: cannot
drop constraint '%s': there are database objects which depend on it",
key->base.name);
- if(mvc_drop_key(sql, ss, key, drop_action))
+ if (mvc_drop_key(sql, ss, key, drop_action))
throw(SQL,"sql.drop_key", SQLSTATE(HY001) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -607,7 +607,7 @@ drop_index(Client cntxt, mvc *sql, char
if (i->type == ordered_idx) {
sql_kc *ic = i->columns->h->data;
BAT *b = mvc_bind(sql, s->base.name,
ic->c->t->base.name, ic->c->base.name, 0);
- if(b) {
+ if (b) {
OIDXdropImplementation(cntxt, b);
BBPunfix(b->batCacheid);
}
@@ -615,12 +615,12 @@ drop_index(Client cntxt, mvc *sql, char
if (i->type == imprints_idx) {
sql_kc *ic = i->columns->h->data;
BAT *b = mvc_bind(sql, s->base.name,
ic->c->t->base.name, ic->c->base.name, 0);
- if(b) {
+ if (b) {
IMPSdestroy(b);
BBPunfix(b->batCacheid);
}
}
- if(mvc_drop_idx(sql, s, i))
+ if (mvc_drop_idx(sql, s, i))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list