Changeset: b03ff9830d7e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b03ff9830d7e
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_partition.c
Branch: iso
Log Message:
Allocation checks
diffs (215 lines):
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -363,7 +363,11 @@ create_table_or_view(mvc *sql, char* sna
so no additional dependencies are needed */
if (strncmp(c->def, next_value_for,
strlen(next_value_for)) != 0) {
list *blist = rel_dependencies(sql, r);
- mvc_create_dependencies(sql, blist,
nt->base.id, FUNC_DEPENDENCY);
+ if (mvc_create_dependencies(sql, blist,
nt->base.id, FUNC_DEPENDENCY)) {
+ rel_destroy(r);
+ sa_reset(sql->sa);
+ throw(SQL, "sql.catalog",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
}
rel_destroy(r);
sa_reset(sql->sa);
@@ -477,7 +481,11 @@ create_table_or_view(mvc *sql, char* sna
r = sql_processrelation(sql, r, 0, 0);
if (r) {
list *blist = rel_dependencies(sql, r);
- mvc_create_dependencies(sql, blist, nt->base.id,
VIEW_DEPENDENCY);
+ if (mvc_create_dependencies(sql, blist, nt->base.id,
VIEW_DEPENDENCY)) {
+ sa_reset(sql->ta);
+ sql->sa = osa;
+ throw(SQL, "sql.catalog", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
}
sa_reset(sql->ta);
if (!r) {
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
@@ -517,18 +517,25 @@ create_trigger(mvc *sql, char *sname, ch
sql_rel *r = NULL;
sql_allocator *sa = sql->sa;
- sql->sa = sa_create(sql->pa);
- if (!sql->sa)
- throw(SQL, "sql.catalog",SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- buf = sa_strdup(sql->sa, query);
- if (!buf)
- throw(SQL, "sql.catalog",SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ if (!(sql->sa = sa_create(sql->pa))) {
+ sql->sa = sa;
+ throw(SQL, "sql.create_trigger", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
+ if (!(buf = sa_strdup(sql->sa, query))) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ throw(SQL, "sql.create_trigger", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
r = rel_parse(sql, s, buf, m_deps);
if (r)
r = sql_processrelation(sql, r, 0, 0);
if (r) {
list *blist = rel_dependencies(sql, r);
- mvc_create_dependencies(sql, blist, tri->base.id,
TRIGGER_DEPENDENCY);
+ if (mvc_create_dependencies(sql, blist, tri->base.id,
TRIGGER_DEPENDENCY)) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ throw(SQL, "sql.create_trigger",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
}
sa_destroy(sql->sa);
sql->sa = sa;
@@ -915,10 +922,15 @@ create_func(mvc *sql, char *sname, char
sql_allocator *sa = sql->sa;
assert(nf->query);
- if (!(sql->sa = sa_create(sql->pa)))
+ if (!(sql->sa = sa_create(sql->pa))) {
+ sql->sa = sa;
throw(SQL, "sql.create_func", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- if (!(buf = sa_strdup(sql->sa, nf->query)))
+ }
+ if (!(buf = sa_strdup(sql->sa, nf->query))) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
throw(SQL, "sql.create_func", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
r = rel_parse(sql, s, buf, m_deps);
if (r)
r = sql_processrelation(sql, r, 0, 0);
@@ -930,19 +942,29 @@ create_func(mvc *sql, char *sname, char
for (n = f->ops->h; n; n = n->next) {
sql_arg *a = n->data;
- if (a->type.type->s)
- mvc_create_dependency(sql,
&a->type.type->base, nf->base.id, TYPE_DEPENDENCY);
+ if (a->type.type->s &&
mvc_create_dependency(sql, &a->type.type->base, nf->base.id, TYPE_DEPENDENCY)) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ throw(SQL, "sql.create_func",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
}
}
if (!f->varres && f->res) {
for (n = f->res->h; n; n = n->next) {
sql_arg *a = n->data;
- if (a->type.type->s)
- mvc_create_dependency(sql,
&a->type.type->base, nf->base.id, TYPE_DEPENDENCY);
+ if (a->type.type->s &&
mvc_create_dependency(sql, &a->type.type->base, nf->base.id, TYPE_DEPENDENCY)) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ throw(SQL, "sql.create_func",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
}
}
- mvc_create_dependencies(sql, blist, nf->base.id,
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY);
+ if (mvc_create_dependencies(sql, blist, nf->base.id,
!IS_PROC(f) ? FUNC_DEPENDENCY : PROC_DEPENDENCY)) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ throw(SQL, "sql.create_func", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
}
sa_destroy(sql->sa);
sql->sa = sa;
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
@@ -64,7 +64,11 @@ mvc_init_create_view(mvc *m, sql_schema
r = sql_processrelation(m, r, 0, 0);
if (r) {
list *blist = rel_dependencies(m, r);
- mvc_create_dependencies(m, blist, t->base.id,
VIEW_DEPENDENCY);
+ if (mvc_create_dependencies(m, blist, t->base.id,
VIEW_DEPENDENCY)) {
+ sa_reset(m->ta);
+ (void) sql_error(m, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return NULL;
+ }
}
sa_reset(m->ta);
assert(r);
@@ -1311,29 +1315,37 @@ mvc_drop_column(mvc *m, sql_table *t, sq
return sql_trans_drop_column(m->session->tr, t, col->base.id,
drop_action ? DROP_CASCADE_START : DROP_RESTRICT);
}
-void
+int
mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id, sql_dependency
depend_type)
{
+ int res = LOG_OK;
+
TRC_DEBUG(SQL_TRANS, "Create dependency: %d %d %d\n", b->id, depend_id,
(int) depend_type);
if ( (b->id != depend_id) || (depend_type == BEDROPPED_DEPENDENCY) ) {
if (!b->new)
- sql_trans_add_dependency(m->session->tr, b->id, ddl);
- sql_trans_create_dependency(m->session->tr, b->id, depend_id,
depend_type);
+ res = sql_trans_add_dependency(m->session->tr, b->id,
ddl);
+ if (res == LOG_OK)
+ res = sql_trans_create_dependency(m->session->tr,
b->id, depend_id, depend_type);
}
+ return res;
}
-void
+int
mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id, sql_dependency
dep_type)
{
+ int res = LOG_OK;
+
TRC_DEBUG(SQL_TRANS, "Create dependencies on '%d' of type: %d\n",
depend_id, (int) dep_type);
if (!list_empty(blist)) {
- for (node *n = blist->h ; n ; n = n->next) {
+ for (node *n = blist->h ; n && res == LOG_OK ; n = n->next) {
sql_base *b = n->data;
if (!b->new) /* only add old objects to the transaction
dependency list */
- sql_trans_add_dependency(m->session->tr, b->id,
ddl);
- mvc_create_dependency(m, b, depend_id, dep_type);
+ res = sql_trans_add_dependency(m->session->tr,
b->id, ddl);
+ if (res == LOG_OK)
+ res = mvc_create_dependency(m, b, depend_id,
dep_type);
}
}
+ return res;
}
int
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
@@ -237,8 +237,8 @@ extern sql_trigger * mvc_create_trigger(
extern int mvc_drop_trigger(mvc *m, sql_schema *s, sql_trigger * tri);
/*dependency control*/
-extern void mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id,
sql_dependency depend_type);
-extern void mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id,
sql_dependency dep_type);
+extern int mvc_create_dependency(mvc *m, sql_base *b, sqlid depend_id,
sql_dependency depend_type);
+extern int mvc_create_dependencies(mvc *m, list *blist, sqlid depend_id,
sql_dependency dep_type);
extern int mvc_check_dependency(mvc *m, sqlid id, sql_dependency type, list
*ignore_ids);
/* variable management */
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -293,7 +293,7 @@ bootstrap_partition_expression(mvc *sql,
}
}
- if (instantiate) {
+ if (instantiate && !msg) {
r = rel_project(sql->sa, r, NULL);
sql_rel *base = r->l, *nr = r;
r->l = NULL; /* omit table from list of dependencies */
@@ -302,7 +302,8 @@ bootstrap_partition_expression(mvc *sql,
nr = sql_processrelation(sql, nr, 0, 0);
if (nr) {
list *blist = rel_dependencies(sql, nr);
- mvc_create_dependencies(sql, blist, mt->base.id,
FUNC_DEPENDENCY);
+ if (mvc_create_dependencies(sql, blist, mt->base.id,
FUNC_DEPENDENCY))
+ msg = createException(SQL, "sql.partition",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
r->l = base;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list