Changeset: 0d051e216321 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0d051e216321 Modified Files: sql/backends/monet5/rel_bin.c sql/server/rel_propagate.c sql/server/rel_schema.c sql/server/rel_updates.c sql/server/rel_updates.h sql/server/sql_partition.c Branch: default Log Message:
A leftover I forgot from scoping. While parsing a default value or any other expression, set the session's schema to the correspondent table's schema diffs (139 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 @@ -1670,9 +1670,9 @@ sql_Nop_(backend *be, const char *fname, } static stmt * -parse_value(backend *be, char *query, sql_subtype *tpe, char emode) +parse_value(backend *be, sql_schema *s, char *query, sql_subtype *tpe, char emode) { - sql_exp *e = rel_parse_val(be->mvc, query, tpe, emode, NULL); + 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); @@ -4740,7 +4740,7 @@ sql_delete_set_Fkeys(backend *be, sql_ke if (action == ACT_SET_DEFAULT) { if (fc->c->def) { - stmt *sq = parse_value(be, fc->c->def, &fc->c->type, sql->emode); + stmt *sq = parse_value(be, fc->c->t->s, fc->c->def, &fc->c->type, sql->emode); if (!sq) return NULL; upd = sq; @@ -4798,7 +4798,7 @@ sql_update_cascade_Fkeys(backend *be, sq upd = updates[c->c->colnr]; } else if (action == ACT_SET_DEFAULT) { if (fc->c->def) { - stmt *sq = parse_value(be, fc->c->def, &fc->c->type, sql->emode); + stmt *sq = parse_value(be, fc->c->t->s, fc->c->def, &fc->c->type, sql->emode); if (!sq) return NULL; upd = sq; diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c --- a/sql/server/rel_propagate.c +++ b/sql/server/rel_propagate.c @@ -36,7 +36,7 @@ rel_generate_anti_expression(mvc *sql, s //res = exp_ref(sql, res); } else if (isPartitionedByExpressionTable(mt)) { *anti_rel = rel_project(sql->sa, *anti_rel, NULL); - if (!(res = rel_parse_val(sql, mt->part.pexp->exp, NULL, sql->emode, (*anti_rel)->l))) + if (!(res = rel_parse_val(sql, mt->s, mt->part.pexp->exp, NULL, sql->emode, (*anti_rel)->l))) return NULL; } else { assert(0); @@ -100,7 +100,7 @@ rel_generate_anti_insert_expression(mvc res = list_fetch((*anti_rel)->exps, colr); } else if (isPartitionedByExpressionTable(t)) { *anti_rel = rel_project(sql->sa, *anti_rel, rel_projections(sql, *anti_rel, NULL, 1, 1)); - if (!(res = rel_parse_val(sql, t->part.pexp->exp, NULL, sql->emode, (*anti_rel)->l))) + if (!(res = rel_parse_val(sql, t->s, t->part.pexp->exp, NULL, sql->emode, (*anti_rel)->l))) return NULL; exp_label(sql->sa, res, ++sql->label); append((*anti_rel)->exps, res); 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 @@ -1538,7 +1538,7 @@ sql_alter_table(sql_query *query, dlist if (!c->base.new || c->base.deleted) continue; if (c->def) { - e = rel_parse_val(sql, c->def, &c->type, sql->emode, NULL); + e = rel_parse_val(sql, nt->s, c->def, &c->type, sql->emode, NULL); } else { e = exp_atom(sql->sa, atom_general(sql->sa, &c->type, NULL)); } 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 @@ -30,7 +30,7 @@ insert_value(sql_query *query, sql_colum return exp_atom(sql->sa, atom_general(sql->sa, &c->type, NULL)); } else if (s->token == SQL_DEFAULT) { if (c->def) { - sql_exp *e = rel_parse_val(sql, c->def, &c->type, sql->emode, NULL); + 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 e; @@ -357,7 +357,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_ sql_exp *e = NULL; if (c->def) { - e = rel_parse_val(sql, c->def, &c->type, sql->emode, NULL); + 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); } else { @@ -964,7 +964,7 @@ update_generate_assignments(sql_query *q if (!c) return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42S22) "%s: no such column '%s.%s'", action, t->base.name, colname); if (c->def) { - v = rel_parse_val(sql, c->def, &c->type, sql->emode, NULL); + v = rel_parse_val(sql, t->s, c->def, &c->type, sql->emode, NULL); } else { return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' has no valid default value", action, c->base.name); } @@ -1847,7 +1847,7 @@ copyto(sql_query *query, symbol *sq, con } sql_exp * -rel_parse_val(mvc *m, char *query, sql_subtype *tpe, char emode, sql_rel *from) +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; @@ -1860,6 +1860,9 @@ rel_parse_val(mvc *m, char *query, sql_s m->qc = NULL; + if (sch) + m->session->schema = sch; + m->emode = emode; b = malloc(sizeof(buffer)); len += 8; /* add 'select ;' */ diff --git a/sql/server/rel_updates.h b/sql/server/rel_updates.h --- a/sql/server/rel_updates.h +++ b/sql/server/rel_updates.h @@ -22,7 +22,7 @@ extern sql_rel *rel_insert(mvc *sql, sql extern sql_rel *rel_delete(sql_allocator *sa, sql_rel *t, sql_rel *deletes); extern sql_rel *rel_truncate(sql_allocator *sa, sql_rel *t, int restart_sequences, int drop_action); -extern sql_exp *rel_parse_val(mvc *m, char *query, sql_subtype *tpe, char emode, sql_rel *from); +extern sql_exp *rel_parse_val(mvc *m, sql_schema *s, char *query, sql_subtype *tpe, char emode, sql_rel *from); extern sql_rel *rel_updates(sql_query *query, symbol *sym); 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 @@ -249,7 +249,7 @@ bootstrap_partition_expression(mvc *sql, r = rel_basetable(sql, mt, mt->base.name); query = mt->part.pexp->exp; - if ((exp = rel_parse_val(sql, query, NULL, sql->emode, r)) == NULL) { + if (!(exp = rel_parse_val(sql, mt->s, query, NULL, sql->emode, r))) { if (*sql->errstr) { if (strlen(sql->errstr) > 6 && sql->errstr[5] == '!') throw(SQL, "sql.partition", "%s", sql->errstr); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list