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

Reply via email to