Changeset: a9623118e6ac for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/a9623118e6ac Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_gencode.c sql/server/rel_semantic.c sql/server/rel_updates.c Branch: sqlfuncfix Log Message:
Give more detailed error messages when parsing functions fail. Backup mvc structure only when required diffs (130 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -1685,10 +1685,11 @@ sql_Nop_(backend *be, const char *fname, static stmt * parse_value(backend *be, sql_schema *s, char *query, sql_subtype *tpe, char emode) { - sql_exp *e = rel_parse_val(be->mvc, s, query, tpe, emode, NULL); - if (e) - return exp_bin(be, e, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0); - return sql_error(be->mvc, 02, SQLSTATE(HY001) MAL_MALLOC_FAIL); + sql_exp *e = NULL; + + if (!(e = rel_parse_val(be->mvc, s, query, tpe, emode, NULL))) + return NULL; + return exp_bin(be, e, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0); } static stmt * diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -1023,7 +1023,6 @@ monet5_resolve_function(ptr M, sql_func static int mal_function_find_implementation_address(mvc *m, sql_func *f) { - mvc o = *m; buffer *b = NULL; bstream *bs = NULL; stream *buf = NULL; @@ -1053,6 +1052,7 @@ mal_function_find_implementation_address (void) sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); return -1; } + mvc o = *m; scanner_init(&m->scanner, bs, NULL); m->scanner.mode = LINE_1; bstream_next(m->scanner.rs); diff --git a/sql/server/rel_semantic.c b/sql/server/rel_semantic.c --- a/sql/server/rel_semantic.c +++ b/sql/server/rel_semantic.c @@ -26,7 +26,6 @@ sql_rel * rel_parse(mvc *m, sql_schema *s, const char *query, char emode) { - mvc o = *m; sql_rel *rel = NULL; buffer *b; bstream *bs; @@ -40,7 +39,7 @@ rel_parse(mvc *m, sql_schema *s, const c return NULL; if ((n = malloc(len + 1 + 1)) == NULL) { free(b); - return NULL; + return sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); } snprintf(n, len + 2, "%s\n", query); len++; @@ -48,13 +47,14 @@ rel_parse(mvc *m, sql_schema *s, const c buf = buffer_rastream(b, "sqlstatement"); if(buf == NULL) { buffer_destroy(b); - return NULL; + return sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); } bs = bstream_create(buf, b->len); if(bs == NULL) { buffer_destroy(b); - return NULL; + return sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); } + mvc o = *m; scanner_init( &m->scanner, bs, NULL); m->scanner.mode = LINE_1; bstream_next(m->scanner.rs); diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -31,7 +31,7 @@ insert_value(sql_query *query, sql_colum if (c->def) { sql_exp *e = rel_parse_val(sql, c->t->s, c->def, &c->type, sql->emode, NULL); if (!e || (e = exp_check_type(sql, &c->type, r ? *r : NULL, e, type_equal)) == NULL) - return sql_error(sql, 02, SQLSTATE(HY005) "%s: default expression could not be evaluated", action); + return NULL; return e; } else { return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' has no valid default value", action, c->base.name); @@ -359,7 +359,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_ if (c->def) { e = rel_parse_val(sql, t->s, c->def, &c->type, sql->emode, NULL); if (!e || (e = exp_check_type(sql, &c->type, r, e, type_equal)) == NULL) - return sql_error(sql, 02, SQLSTATE(HY005) "%s: default expression could not be evaluated", action); + return NULL; } else { atom *a = atom_general(sql->sa, &c->type, NULL); e = exp_atom(sql->sa, a); @@ -1882,7 +1882,6 @@ copyto(sql_query *query, symbol *sq, con sql_exp * rel_parse_val(mvc *m, sql_schema *sch, char *query, sql_subtype *tpe, char emode, sql_rel *from) { - mvc o = *m; sql_exp *e = NULL; buffer *b; char *n; @@ -1897,7 +1896,7 @@ rel_parse_val(mvc *m, sql_schema *sch, c if(!b || !n) { free(b); free(n); - return NULL; + return sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); } snprintf(n, len + 2, "select %s;\n", query); len++; @@ -1905,13 +1904,14 @@ rel_parse_val(mvc *m, sql_schema *sch, c s = buffer_rastream(b, "sqlstatement"); if(!s) { buffer_destroy(b); - return NULL; + return sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); } bs = bstream_create(s, b->len); if(bs == NULL) { buffer_destroy(b); - return NULL; + return sql_error(m, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL); } + mvc o = *m; scanner_init(&m->scanner, bs, NULL); m->scanner.mode = LINE_1; bstream_next(m->scanner.rs); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list