Changeset: 6b8ccab2b97a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6b8ccab2b97a
Modified Files:
sql/backends/monet5/sql_cat.c
sql/server/rel_psm.c
sql/server/rel_schema.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/storage/sql_storage.h
sql/storage/store.c
Branch: Mar2018
Log Message:
Allocation checks in storage
diffs (truncated from 665 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
@@ -351,7 +351,8 @@ 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);
- 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;
}
@@ -381,7 +382,8 @@ drop_index(Client cntxt, mvc *sql, char
IMPSdestroy(b);
BBPunfix(b->batCacheid);
}
- mvc_drop_idx(sql, s, i);
+ if(mvc_drop_idx(sql, s, i))
+ throw(SQL,"sql.drop_index", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
}
return NULL;
}
@@ -477,13 +479,15 @@ drop_func(mvc *sql, char *sname, char *n
if (!action && mvc_check_dependency(sql, func->base.id,
!IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL))
throw(SQL,"sql.drop_func", SQLSTATE(42000)
"DROP %s%s: there are database objects dependent on %s%s %s;", KF, F, kf, f,
func->base.name);
- mvc_drop_func(sql, s, func, action);
+ if(mvc_drop_func(sql, s, func, action))
+ throw(SQL,"sql.drop_func", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
}
} else if(fid == -2) { //if exists option
return MAL_SUCCEED;
} else { //fid == -1
node *n = NULL;
list *list_func = schema_bind_func(sql, s, name, type);
+ int res;
if (!mvc_schema_privs(sql, s)) {
list_destroy(list_func);
@@ -497,8 +501,10 @@ drop_func(mvc *sql, char *sname, char *n
throw(SQL,"sql.drop_func", SQLSTATE(42000)
"DROP %s%s: there are database objects dependent on %s%s %s;", KF, F, kf, f,
func->base.name);
}
}
- mvc_drop_all_func(sql, s, list_func, action);
+ res = mvc_drop_all_func(sql, s, list_func, action);
list_destroy(list_func);
+ if(res)
+ throw(SQL,"sql.drop_func", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
}
return MAL_SUCCEED;
}
@@ -598,7 +604,8 @@ alter_table(Client cntxt, mvc *sql, char
/* propagate alter table .. drop column */
sql_column *c = n->data;
sql_column *nc = mvc_bind_column(sql, nt, c->base.name);
- mvc_drop_column(sql, nt, nc, c->drop_action);
+ if(mvc_drop_column(sql, nt, nc, c->drop_action))
+ throw(SQL,"sql.alter_table", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
}
/* check for changes on current cols */
for (n = t->columns.set->h; n != t->columns.nelm; n = n->next) {
@@ -650,7 +657,8 @@ alter_table(Client cntxt, mvc *sql, char
for (n = t->idxs.dset->h; n; n = n->next) {
sql_idx *i = n->data;
sql_idx *ni = mvc_bind_idx(sql, s,
i->base.name);
- mvc_drop_idx(sql, s, ni);
+ if(mvc_drop_idx(sql, s, ni))
+ throw(SQL,"sql.alter_table",
SQLSTATE(HY001) MAL_MALLOC_FAIL);
}
/* alter add index */
for (n = t->idxs.nelm; n; n = n->next) {
@@ -668,10 +676,13 @@ alter_table(Client cntxt, mvc *sql, char
}
}
if (i->type == imprints_idx) {
+ gdk_return r;
sql_kc *ic = i->columns->h->data;
BAT *b = mvc_bind(sql, nt->s->base.name,
nt->base.name, ic->c->base.name, 0);
- BATimprints(b);
+ r = BATimprints(b);
BBPunfix(b->batCacheid);
+ if (r != GDK_SUCCEED)
+ throw(SQL, "sql.alter_table",
GDK_EXCEPTION);
}
mvc_copy_idx(sql, nt, i);
}
@@ -682,8 +693,10 @@ alter_table(Client cntxt, mvc *sql, char
for (n = t->keys.dset->h; n; n = n->next) {
sql_key *k = n->data;
sql_key *nk = mvc_bind_key(sql, s,
k->base.name);
- if (nk)
- mvc_drop_key(sql, s, nk,
k->drop_action);
+ if (nk) {
+ if(mvc_drop_key(sql, s, nk,
k->drop_action))
+ throw(SQL,"sql.alter_table",
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+ }
}
/* alter add key */
for (n = t->keys.nelm; n; n = n->next) {
@@ -708,8 +721,10 @@ UPGdrop_func(Client cntxt, MalBlkPtr mb,
return msg;
func = sql_trans_find_func(sql->session->tr, id);
- if (func)
- mvc_drop_func(sql, func->s, func, 0);
+ if (func) {
+ if(mvc_drop_func(sql, func->s, func, 0))
+ throw(SQL, "sql.drop_func", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
+ }
return msg;
}
@@ -885,7 +900,8 @@ SQLdrop_schema(Client cntxt, MalBlkPtr m
!list_empty(s->funcs.set) || !list_empty(s->seqs.set))) {
throw(SQL,"sql.drop_schema",SQLSTATE(2BM37) "DROP SCHEMA:
unable to drop schema '%s' (there are database objects which depend on it)",
sname);
} else {
- mvc_drop_schema(sql, s, action);
+ if(mvc_drop_schema(sql, s, action))
+ throw(SQL,"sql.drop_schema", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
}
return msg;
}
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
@@ -815,7 +815,8 @@ rel_create_func(mvc *sql, dlist *qname,
return sql_error(sql, 02, SQLSTATE(42000)
"CREATE OR REPLACE %s%s: not allowed to replace system %s%s %s;", KF, F, kf,
fn, func->base.name);
}
- mvc_drop_func(sql, s, func, action);
+ if(mvc_drop_func(sql, s, func, action))
+ return sql_error(sql, 02, SQLSTATE(HY001)
MAL_MALLOC_FAIL);
sf = NULL;
} else {
if (params) {
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
@@ -880,7 +880,10 @@ table_element(mvc *sql, symbol *s, sql_s
}
}
}
- mvc_drop_column(sql, t, col, drop_action);
+ if(mvc_drop_column(sql, t, col, drop_action)) {
+ sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: %s\n",
MAL_MALLOC_FAIL);
+ return SQL_ERR;
+ }
} break;
case SQL_DROP_CONSTRAINT:
assert(0);
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -991,22 +991,22 @@ mvc_create_func(mvc *sql, sql_allocator
return f;
}
-void
+int
mvc_drop_func(mvc *m, sql_schema *s, sql_func *f, int drop_action)
{
if (mvc_debug)
fprintf(stderr, "#mvc_drop_func %s %s\n", s->base.name,
f->base.name);
- sql_trans_drop_func(m->session->tr, s, f->base.id, drop_action ?
DROP_CASCADE_START : DROP_RESTRICT);
+ return sql_trans_drop_func(m->session->tr, s, f->base.id, drop_action ?
DROP_CASCADE_START : DROP_RESTRICT);
}
-void
+int
mvc_drop_all_func(mvc *m, sql_schema *s, list *list_func, int drop_action)
{
if (mvc_debug)
fprintf(stderr, "#mvc_drop_all_func %s %s\n", s->base.name,
((sql_func *) list_func->h->data)->base.name);
- sql_trans_drop_all_func(m->session->tr, s, list_func, drop_action ?
DROP_CASCADE_START : DROP_RESTRICT);
+ return sql_trans_drop_all_func(m->session->tr, s, list_func,
drop_action ? DROP_CASCADE_START : DROP_RESTRICT);
}
sql_schema *
@@ -1021,12 +1021,12 @@ mvc_create_schema(mvc *m, const char *na
return s;
}
-void
+int
mvc_drop_schema(mvc *m, sql_schema * s, int drop_action)
{
if (mvc_debug)
fprintf(stderr, "#mvc_drop_schema %s\n", s->base.name);
- sql_trans_drop_schema(m->session->tr, s->base.id, drop_action ?
DROP_CASCADE_START : DROP_RESTRICT);
+ return sql_trans_drop_schema(m->session->tr, s->base.id, drop_action ?
DROP_CASCADE_START : DROP_RESTRICT);
}
sql_ukey *
@@ -1080,15 +1080,16 @@ mvc_create_fkc(mvc *m, sql_fkey *fk, sql
return sql_trans_create_fkc(m->session->tr, fk, c);
}
-void
+int
mvc_drop_key(mvc *m, sql_schema *s, sql_key *k, int drop_action)
{
if (mvc_debug)
fprintf(stderr, "#mvc_drop_key %s %s\n", s->base.name,
k->base.name);
- if (k->t->persistence == SQL_DECLARED_TABLE)
+ if (k->t->persistence == SQL_DECLARED_TABLE) {
drop_sql_key(k->t, k->base.id, drop_action);
- else
- sql_trans_drop_key(m->session->tr, s, k->base.id, drop_action ?
DROP_CASCADE_START : DROP_RESTRICT);
+ return 0;
+ } else
+ return sql_trans_drop_key(m->session->tr, s, k->base.id,
drop_action ? DROP_CASCADE_START : DROP_RESTRICT);
}
sql_idx *
@@ -1117,17 +1118,18 @@ mvc_create_ic(mvc *m, sql_idx * i, sql_c
return sql_trans_create_ic(m->session->tr, i, c);
}
-void
+int
mvc_drop_idx(mvc *m, sql_schema *s, sql_idx *i)
{
if (mvc_debug)
fprintf(stderr, "#mvc_drop_idx %s %s\n", s->base.name,
i->base.name);
- if (i->t->persistence == SQL_DECLARED_TABLE)
+ if (i->t->persistence == SQL_DECLARED_TABLE) {
/* declared tables should not end up in the catalog */
drop_sql_idx(i->t, i->base.id);
- else
- sql_trans_drop_idx(m->session->tr, s, i->base.id,
DROP_RESTRICT);
+ return 0;
+ } else
+ return sql_trans_drop_idx(m->session->tr, s, i->base.id,
DROP_RESTRICT);
}
sql_trigger *
@@ -1251,15 +1253,16 @@ mvc_create_column(mvc *m, sql_table *t,
return sql_trans_create_column(m->session->tr, t, name, tpe);
}
-void
+int
mvc_drop_column(mvc *m, sql_table *t, sql_column *col, int drop_action)
{
if (mvc_debug)
fprintf(stderr, "#mvc_drop_column %s %s\n", t->base.name,
col->base.name);
- if (col->t->persistence == SQL_DECLARED_TABLE)
+ if (col->t->persistence == SQL_DECLARED_TABLE) {
drop_sql_column(t, col->base.id, drop_action);
- else
- sql_trans_drop_column(m->session->tr, t, col->base.id,
drop_action ? DROP_CASCADE_START : DROP_RESTRICT);
+ return 0;
+ } else
+ return sql_trans_drop_column(m->session->tr, t, col->base.id,
drop_action ? DROP_CASCADE_START : DROP_RESTRICT);
}
void
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -174,10 +174,10 @@ extern sql_type *mvc_create_type(mvc *sq
extern int mvc_drop_type(mvc *sql, sql_schema *s, sql_type *t, int
drop_action);
extern sql_func *mvc_create_func(mvc *sql, sql_allocator *sa, sql_schema *s,
const char *name, list *args, list *res, int type, int lang, const char *mod,
const char *impl, const char *query, bit varres, bit vararg);
-extern void mvc_drop_func(mvc *c, sql_schema *s, sql_func * func, int
drop_action);
-extern void mvc_drop_all_func(mvc *c, sql_schema *s, list *list_func, int
drop_action);
+extern int mvc_drop_func(mvc *c, sql_schema *s, sql_func * func, int
drop_action);
+extern int mvc_drop_all_func(mvc *c, sql_schema *s, list *list_func, int
drop_action);
-extern void mvc_drop_schema(mvc *c, sql_schema *s, int drop_action);
+extern int mvc_drop_schema(mvc *c, sql_schema *s, int drop_action);
extern sql_schema *mvc_create_schema(mvc *m, const char *name, int auth_id,
int owner);
extern BUN mvc_clear_table(mvc *m, sql_table *t);
extern void mvc_drop_table(mvc *c, sql_schema *s, sql_table * t, int
drop_action);
@@ -185,7 +185,7 @@ extern sql_table *mvc_create_table(mvc *
extern sql_table *mvc_create_view(mvc *c, sql_schema *s, const char *name, int
persistence, const char *sql, bit system);
extern sql_table *mvc_create_remote(mvc *c, sql_schema *s, const char *name,
int persistence, const char *loc);
-extern void mvc_drop_column(mvc *c, sql_table *t, sql_column *col, int
drop_action);
+extern int mvc_drop_column(mvc *c, sql_table *t, sql_column *col, int
drop_action);
extern sql_column *mvc_create_column(mvc *c, sql_table *t, const char *name,
sql_subtype *type);
extern sql_column *mvc_create_column_(mvc *c, sql_table *t, const char *name,
const char *type, int digits);
extern sql_column *mvc_null(mvc *c, sql_column *col, int flag);
@@ -201,11 +201,11 @@ extern sql_fkey *mvc_create_fkey(mvc *m,
extern sql_key *mvc_create_kc(mvc *m, sql_key *k, sql_column *c);
extern sql_fkey *mvc_create_fkc(mvc *m, sql_fkey *fk, sql_column *c);
-extern void mvc_drop_key(mvc *c, sql_schema *s, sql_key *key, int drop_action);
+extern int mvc_drop_key(mvc *c, sql_schema *s, sql_key *key, int drop_action);
extern sql_idx *mvc_create_idx(mvc *m, sql_table *t, const char *iname,
idx_type it);
extern sql_idx *mvc_create_ic(mvc *m, sql_idx * i, sql_column *c);
-extern void mvc_drop_idx(mvc *c, sql_schema *s, sql_idx * i);
+extern int mvc_drop_idx(mvc *c, sql_schema *s, sql_idx * i);
extern sql_trigger * mvc_create_trigger(mvc *m, sql_table *t, const char
*name, sht time, sht orientation, sht event, const char *old_name, const char
*new_name, const char *condition, const char *statement );
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list