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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list