Changeset: 4b62f6a9b829 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4b62f6a9b829 Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_statement.c sql/test/miscellaneous/Tests/declared_tables.stable.err Branch: scoping Log Message:
Adding a different prefix (B) for function parameters (ie variables with no schema), makes name mangling easier diffs (172 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 @@ -1647,13 +1647,23 @@ exp2bin_args(backend *be, sql_exp *e, li } else if (e->f) { return exps2bin_args(be, e->f, args); } else if (e->r) { + char *nme; sql_var_name *vname = (sql_var_name*) e->r; - const char *mname = vname->sname ? vname->sname : "%%"; - char *nme = SA_NEW_ARRAY(sql->sa, char, strlen(mname) + strlen(vname->name) + 3); - - if (!nme) - return NULL; - stpcpy(stpcpy(stpcpy(stpcpy(nme, "A"), mname), "%%"), vname->name); + + if (vname->sname) { /* Declared variable */ + char levelstr[16]; + + snprintf(levelstr, sizeof(levelstr), "%u", e->flag); + nme = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(vname->sname) + strlen(vname->name) + 4); + if (!nme) + return NULL; + stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(nme, "A"), levelstr), "%%"), vname->sname), "%%"), vname->name); /* mangle variable name */ + } else { /* Parameter */ + nme = SA_NEW_ARRAY(be->mvc->sa, char, strlen(vname->name) + 2); + if (!nme) + return NULL; + stpcpy(stpcpy(nme, "B"), vname->name); /* mangle variable name */ + } if (!list_find(args, nme, (fcmp)&alias_cmp)) { stmt *s = stmt_var(be, vname->sname, vname->name, &e->tpe, 0, 0); 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 @@ -1344,9 +1344,9 @@ backend_create_sql_func(backend *be, sql char *buf; if (a->name) { - buf = SA_NEW_ARRAY(m->sa, char, strlen(a->name) + 6); + buf = SA_NEW_ARRAY(m->sa, char, strlen(a->name) + 2); if (buf) - stpcpy(stpcpy(buf, "A1%%%%%%"), a->name); /* mangle variable name */ + stpcpy(stpcpy(buf, "B"), a->name); /* mangle variable name */ } else { buf = SA_NEW_ARRAY(m->sa, char, IDLENGTH); if (buf) diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -325,6 +325,7 @@ stmt_var(backend *be, const char *sname, { MalBlkPtr mb = be->mb; InstrPtr q = NULL; + char *buf; if (level == 0) { /* global */ int tt = t->type->localtype; @@ -339,27 +340,38 @@ stmt_var(backend *be, const char *sname, setVarType(mb, getArg(q, 0), tt); setVarUDFtype(mb, getArg(q, 0)); } else if (!declare) { - const char *msname = sname ? sname : "%%"; - char levelstr[16], *buf; - - snprintf(levelstr, sizeof(levelstr), "%d", level); - buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(msname) + strlen(varname) + 4); - if (!buf) - return NULL; - stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "A"), levelstr), "%%"), msname), "%%"), varname); /* mangle variable name */ - + if (sname) { /* Declared variable */ + char levelstr[16]; + + snprintf(levelstr, sizeof(levelstr), "%d", level); + buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(sname) + strlen(varname) + 4); + if (!buf) + return NULL; + stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "A"), levelstr), "%%"), sname), "%%"), varname); /* mangle variable name */ + } else { /* Parameter */ + buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(varname) + 2); + if (!buf) + return NULL; + stpcpy(stpcpy(buf, "B"), varname); /* mangle variable name */ + } q = newAssignment(mb); q = pushArgumentId(mb, q, buf); } else { int tt = t->type->localtype; - const char *msname = sname ? sname : "%%"; - char levelstr[16], *buf; - - snprintf(levelstr, sizeof(levelstr), "%d", level); - buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(msname) + strlen(varname) + 4); - if (!buf) - return NULL; - stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "A"), levelstr), "%%"), msname), "%%"), varname); /* mangle variable name */ + if (sname) { /* Declared variable */ + char levelstr[16]; + + snprintf(levelstr, sizeof(levelstr), "%d", level); + buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(sname) + strlen(varname) + 4); + if (!buf) + return NULL; + stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "A"), levelstr), "%%"), sname), "%%"), varname); /* mangle variable name */ + } else { /* Parameter */ + buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(varname) + 2); + if (!buf) + return NULL; + stpcpy(stpcpy(buf, "B"), varname); /* mangle variable name */ + } q = newInstruction(mb, NULL, NULL); if (q == NULL) { @@ -3791,18 +3803,26 @@ stmt_assign(backend *be, const char *sna if (val && val->nr < 0) return NULL; if (level != 0) { - const char *msname = sname ? sname : "%%"; - char levelstr[16], *buf; + char *buf; if (!val) { /* drop declared table */ assert(0); } - snprintf(levelstr, sizeof(levelstr), "%d", level); - buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(msname) + strlen(varname) + 4); - if (!buf) - return NULL; - stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "A"), levelstr), "%%"), msname), "%%"), varname); /* mangle variable name */ + if (sname) { /* Declared variable */ + char levelstr[16]; + + snprintf(levelstr, sizeof(levelstr), "%d", level); + buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(levelstr) + strlen(sname) + strlen(varname) + 4); + if (!buf) + return NULL; + stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(buf, "A"), levelstr), "%%"), sname), "%%"), varname); /* mangle variable name */ + } else { /* Parameter */ + buf = SA_NEW_ARRAY(be->mvc->sa, char, strlen(varname) + 2); + if (!buf) + return NULL; + stpcpy(stpcpy(buf, "B"), varname); /* mangle variable name */ + } q = newInstruction(mb, NULL, NULL); if (q == NULL) { return NULL; diff --git a/sql/test/miscellaneous/Tests/declared_tables.stable.err b/sql/test/miscellaneous/Tests/declared_tables.stable.err --- a/sql/test/miscellaneous/Tests/declared_tables.stable.err +++ b/sql/test/miscellaneous/Tests/declared_tables.stable.err @@ -17,19 +17,6 @@ MAPI = (monetdb) /var/tmp/mtest-1000805 QUERY = select b; --error, b was never declared ERROR = !SELECT: identifier 'b' unknown CODE = 42000 -MAPI = (monetdb) /var/tmp/mtest-522051/.s.monetdb.31503 -QUERY = CREATE OR REPLACE FUNCTION testtruncate() RETURNS INT - BEGIN - DECLARE TABLE z (a int); - INSERT INTO z VALUES (1); - UPDATE z SET a = 2 WHERE a = 1; - TRUNCATE z; - INSERT INTO z VALUES (3); - DELETE FROM z WHERE a = 3; - RETURN SELECT a FROM z; - END; -ERROR = !SELECT: identifier 'a' ambiguous -CODE = 42000 # 14:29:33 > # 14:29:33 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list