Changeset: af82b4caabd3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=af82b4caabd3
Modified Files:
clients/Tests/exports.stable.out
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_gencode.h
sql/backends/monet5/sql_scenario.c
Branch: default
Log Message:
Code cleanup
split callinline from dumpproc
diffs (190 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1562,7 +1562,6 @@ int OPTmacroImplementation(Client cntxt,
int OPTmatpackImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTmergetableImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
int OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
-int OPTmitosisPlanOverdue(Client cntxt, str fname);
int OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
str OPTmultiplexSimple(Client cntxt, MalBlkPtr mb);
str OPTorcam(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
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
@@ -197,10 +197,11 @@ SQLstatementIntern(Client c, str *expr,
goto endofcompile;
}
/* generate MAL code */
- if (backend_callinline(sql, c, s, 1) == 0)
+ if( backend_callinline(be, c) < 0 ||
+ backend_dumpstmt(be, c->curprg->def, s, 1, 1) < 0)
+ err = 1;
+ else
addQueryToCache(c);
- else
- err = 1;
if (err ||c->curprg->def->errors) {
/* restore the state */
@@ -514,11 +515,14 @@ RAstatement(Client cntxt, MalBlkPtr mb,
MSinitClientPrg(cntxt, "user", "test");
- /* generate MAL code */
- backend_callinline(b, cntxt, s, 1);
- addQueryToCache(cntxt);
-
- msg = (str) runMAL(cntxt, cntxt->curprg->def, 0, 0);
+ /* generate MAL code, ignoring any code generation error */
+ if( backend_callinline(b, cntxt) < 0 ||
+ backend_dumpstmt(b, cntxt->curprg->def, s, 1, 1) < 0)
+ msg = createException(SQL,"RAstatement","Program
contains errors");
+ else {
+ addQueryToCache(cntxt);
+ msg = (str) runMAL(cntxt, cntxt->curprg->def, 0, 0);
+ }
if (!msg) {
resetMalBlk(cntxt->curprg->def, oldstop);
freeVariables(cntxt, cntxt->curprg->def, NULL, oldvtop);
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
@@ -46,7 +46,6 @@
#include <rel_remote.h>
static int _dumpstmt(backend *sql, MalBlkPtr mb, stmt *s);
-static int backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s, int top, int
addend);
/*
* @+ MAL code support
@@ -2756,7 +2755,7 @@ static int
* by using the SQLstatment.
*/
-static int
+int
backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s, int top, int add_end)
{
mvc *c = be->mvc;
@@ -2799,15 +2798,14 @@ backend_dumpstmt(backend *be, MalBlkPtr
return 0;
}
+/* Generate the assignments of the query arguments to the query template*/
int
-backend_callinline(backend *be, Client c, stmt *s, int add_end)
+backend_callinline(backend *be, Client c)
{
mvc *m = be->mvc;
InstrPtr curInstr = 0;
MalBlkPtr curBlk = c->curprg->def;
- curInstr = getInstrPtr(curBlk, 0);
-
if (m->argc) {
int argc = 0;
@@ -2832,8 +2830,6 @@ backend_callinline(backend *be, Client c
}
}
}
- if (backend_dumpstmt(be, curBlk, s, 1, add_end) < 0)
- return -1;
c->curprg->def = curBlk;
return 0;
}
diff --git a/sql/backends/monet5/sql_gencode.h
b/sql/backends/monet5/sql_gencode.h
--- a/sql/backends/monet5/sql_gencode.h
+++ b/sql/backends/monet5/sql_gencode.h
@@ -18,7 +18,8 @@
#include <mal_function.h>
sql5_export Symbol backend_dumpproc(backend *be, Client c, cq *q, stmt *s);
-sql5_export int backend_callinline(backend *be, Client c, stmt *s, int
add_end);
+sql5_export int backend_callinline(backend *be, Client c);
+sql5_export int backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s, int top,
int addend);
sql5_export void backend_call(backend *be, Client c, cq *q);
sql5_export void initSQLreferences(void);
sql5_export int monet5_resolve_function(ptr M, sql_func *f);
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -7,19 +7,11 @@
*/
/*
- * @f sql_scenario
- * @t SQL catwalk management
- * @a N. Nes, M.L. Kersten
- * @+ SQL scenario
+ * (authors) N. Nes, M.L. Kersten
* The SQL scenario implementation is a derivative of the MAL session scenario.
*
- * It is also the first version that uses state records attached to
- * the client record. They are initialized as part of the initialization
- * phase of the scenario.
- *
*/
/*
- * @+ Scenario routines
* Before we are can process SQL statements the global catalog
* should be initialized. Thereafter, each time a client enters
* we update its context descriptor to denote an SQL scenario.
@@ -1226,18 +1218,22 @@ SQLparser(Client c)
}
assert(s);
- /* generate the MAL prelude codea in the query wrapper */
+ /* generate the MAL prelude code in the query wrapper */
SQLsetTrace(c, m, TRUE);
SQLsetDebugger(c, m, TRUE);
if (!caching(m) || !cachable(m, s)) {
+ /* Query template should not be cached */
scanner_query_processed(&(m->scanner));
- if (backend_callinline(be, c, s, 0) == 0) {
- opt = 1;
- } else {
+ err = 0;
+ if( backend_callinline(be, c) < 0 ||
+ backend_dumpstmt(be, c->curprg->def, s, 1, 0) <
0)
err = 1;
- }
+ else opt = 1;
} else {
+ /* Add the query tree to the SQL query cache
+ * and bake a MAL program for it.
+ */
char *q = query_cleaned(QUERY(m->scanner));
be->q = qc_insert(m->qc, m->sa, /* the allocator */
r, /* keep relational query */
@@ -1266,7 +1262,7 @@ SQLparser(Client c)
if (err)
m->session->status = -10;
if (err == 0) {
- /* no parsing error encountered */
+ /* no parsing error encountered, finalize the code of the query
wrapper */
if (be->q) {
if (m->emode == m_prepare)
/* For prepared queries, return a table with
result set structure*/
@@ -1282,16 +1278,11 @@ SQLparser(Client c)
/* In the final phase we add any debugging control */
SQLsetTrace(c, m, FALSE);
SQLsetDebugger(c, m, FALSE);
-
- /*
- * During the execution of the query exceptions can be raised.
- * The default action is to print them out at the end of the
- * query block.
- */
pushEndInstruction(c->curprg->def);
- chkTypes(c->fdout, c->nspace, c->curprg->def, TRUE); /*
resolve types */
- if (opt) {
+ /* check the query wrapper for errors */
+ chkTypes(c->fdout, c->nspace, c->curprg->def, TRUE);
+ if (opt && !c->curprg->def->errors ) {
str msg = optimizeQuery(c);
if (msg != MAL_SUCCEED) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list