Changeset: a6600500a107 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a6600500a107
Modified Files:
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_gencode.c
Branch: sqlfuncfix
Log Message:
SQL functions are created in the 'sql' module. Small cleanup
diffs (111 lines):
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -788,11 +788,12 @@ RAstatement(Client c, MalBlkPtr mb, MalS
} else {
SQLaddQueryToCache(c);
msg = SQLoptimizeFunction(c,c->curprg->def);
+ if( msg == MAL_SUCCEED)
+ msg = SQLrun(c,m);
+ resetMalBlk(c->curprg->def);
+ SQLremoveQueryFromCache(c);
}
rel_destroy(rel);
- if( msg == MAL_SUCCEED)
- msg = SQLrun(c,m);
- resetMalBlk(c->curprg->def);
}
return RAcommit_statement(be, msg);
}
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
@@ -845,6 +845,7 @@ backend_dumpproc(backend *be, Client c,
char arg[IDLENGTH];
int argc = 1, res = 0, added_to_cache = 0;
backend bebackup;
+ const char *sql_private_module = putName(sql_private_module_name);
symbackup = c->curprg;
memcpy(&bebackup, be, sizeof(backend)); /* backup current backend */
@@ -854,12 +855,8 @@ backend_dumpproc(backend *be, Client c,
argc += list_length(m->params);
if (argc < MAXARG)
argc = MAXARG;
- if (cq) {
- assert(strlen(cq->name) < IDLENGTH);
- c->curprg = newFunctionArgs(putName(sql_private_module_name),
putName(cq->name), FUNCTIONsymbol, argc);
- } else {
- c->curprg = newFunctionArgs(putName(sql_private_module_name),
"tmp", FUNCTIONsymbol, argc);
- }
+ assert(cq && strlen(cq->name) < IDLENGTH);
+ c->curprg = newFunctionArgs(sql_private_module, putName(cq->name),
FUNCTIONsymbol, argc);
if (c->curprg == NULL) {
sql_error(m, 001, SQLSTATE(HY013) MAL_MALLOC_FAIL);
res = -1;
@@ -870,7 +867,7 @@ backend_dumpproc(backend *be, Client c,
curInstr = getInstrPtr(mb, 0);
/* we do not return anything */
setVarType(mb, 0, TYPE_void);
- setModuleId(curInstr, putName(sql_private_module_name));
+ setModuleId(curInstr, sql_private_module);
if (m->params) { /* needed for prepare statements */
argc = 0;
@@ -909,13 +906,11 @@ backend_dumpproc(backend *be, Client c,
if ((res = backend_dumpstmt(be, mb, r, m->emode == m_prepare, 1, be->q
? be->q->f->query : NULL)) < 0)
goto cleanup;
- if (cq) {
- SQLaddQueryToCache(c);
- added_to_cache = 1;
- // optimize this code the 'old' way
- if (m->emode == m_prepare && !c->curprg->def->errors)
- c->curprg->def->errors =
SQLoptimizeFunction(c,c->curprg->def);
- }
+ SQLaddQueryToCache(c);
+ added_to_cache = 1;
+ // optimize this code the 'old' way
+ if (m->emode == m_prepare && !c->curprg->def->errors)
+ c->curprg->def->errors = SQLoptimizeFunction(c,c->curprg->def);
if (c->curprg->def->errors) {
sql_error(m, 003, SQLSTATE(42000) "Internal error while
compiling statement: %s", c->curprg->def->errors);
res = -1;
@@ -1147,6 +1142,8 @@ backend_create_sql_func(backend *be, sql
backend bebackup;
sql_func *pf = NULL;
char befname[IDLENGTH];
+ const char *sql_shared_module = putName(sql_shared_module_name);
+ Module mod = getModule(sql_shared_module);
sql_rel *r = rel_parse(m, f->s, f->query, m_instantiate);
if (r)
@@ -1172,7 +1169,7 @@ backend_create_sql_func(backend *be, sql
backend_reset(be);
nargs = (f->res && f->type == F_UNION ? list_length(f->res) :
1) + (f->vararg && ops ? list_length(ops) : f->ops ? list_length(f->ops) : 0);
- c->curprg = newFunctionArgs(putName(sql_shared_module_name),
putName(befname), FUNCTIONsymbol, nargs);
+ c->curprg = newFunctionArgs(sql_shared_module,
putName(befname), FUNCTIONsymbol, nargs);
if (c->curprg == NULL) {
sql_error(m, 001, SQLSTATE(HY013) MAL_MALLOC_FAIL);
res = -1;
@@ -1279,8 +1276,8 @@ backend_create_sql_func(backend *be, sql
curBlk->inlineProp = 1;
if (sideeffects)
curBlk->unsafeProp = 1;
- /* optimize the code */
- SQLaddQueryToCache(c);
+ /* optimize the code, but beforehand add it to the cache, so
recursive functions will be found */
+ insertSymbol(mod, c->curprg);
added_to_cache = 1;
if (curBlk->inlineProp == 0 && !c->curprg->def->errors) {
msg = SQLoptimizeFunction(c, c->curprg->def);
@@ -1307,7 +1304,7 @@ cleanup:
if (!added_to_cache)
freeSymbol(c->curprg);
else
- SQLremoveQueryFromCache(c);
+ deleteSymbol(mod, c->curprg);
_DELETE(f->imp);
} else {
f->instantiated = TRUE; /* make sure 'instantiated'
gets set after 'imp' */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list