Changeset: afb38dae7b37 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=afb38dae7b37
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_execute.h
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_scenario.h
Branch: default
Log Message:
Move execution related code to proper place
Reducing the size of sql.c by moving runMAL
related calls to sql_execute
diffs (truncated from 312 to 300 lines):
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -5101,123 +5101,6 @@ sql_storage(Client cntxt, MalBlkPtr mb,
return MAL_SUCCEED;
}
-str
-RAstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
- int pos = 0;
- str *expr = getArgReference_str(stk, pci, 1);
- bit *opt = getArgReference_bit(stk, pci, 2);
- backend *b = NULL;
- mvc *m = NULL;
- str msg;
- sql_rel *rel;
- list *refs;
-
- if ((msg = getSQLContext(cntxt, mb, &m, &b)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- if (!m->sa)
- m->sa = sa_create();
- refs = sa_list(m->sa);
- rel = rel_read(m, *expr, &pos, refs);
- if (rel) {
- int oldvtop = cntxt->curprg->def->vtop;
- int oldstop = cntxt->curprg->def->stop;
- stmt *s;
- MalStkPtr oldglb = cntxt->glb;
-
- if (*opt)
- rel = rel_optimizer(m, rel);
- s = output_rel_bin(m, rel);
- rel_destroy(rel);
-
- MSinitClientPrg(cntxt, "user", "test");
-
- /* generate MAL code */
- backend_callinline(b, cntxt, s, 1);
- 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);
- if( !(cntxt->glb == 0 || cntxt->glb == oldglb))
- msg= createException(MAL,"sql","global stack
leakage"); /* detect leak */
- }
- cntxt->glb = oldglb;
- }
- return msg;
-}
-
-str
-RAstatement2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{
- int pos = 0;
- str *mod = getArgReference_str(stk, pci, 1);
- str *nme = getArgReference_str(stk, pci, 2);
- str *expr = getArgReference_str(stk, pci, 3);
- str *sig = getArgReference_str(stk, pci, 4), c = *sig;
- backend *b = NULL;
- mvc *m = NULL;
- str msg;
- sql_rel *rel;
- list *refs, *ops;
- char buf[BUFSIZ];
-
- if ((msg = getSQLContext(cntxt, mb, &m, &b)) != NULL)
- return msg;
- if ((msg = checkSQLContext(cntxt)) != NULL)
- return msg;
- if (!m->sa)
- m->sa = sa_create();
-
- ops = sa_list(m->sa);
- snprintf(buf, BUFSIZ, "%s %s", *sig, *expr);
- while (c && *c && !isspace(*c)) {
- char *vnme = c, *tnme;
- char *p = strchr(++c, (int)' ');
- int d,s,nr;
- sql_subtype t;
- atom *a;
-
- *p++ = 0;
- vnme = sa_strdup(m->sa, vnme);
- nr = strtol(vnme+1, NULL, 10);
- tnme = p;
- p = strchr(p, (int)'(');
- *p++ = 0;
- tnme = sa_strdup(m->sa, tnme);
-
- d = strtol(p, &p, 10);
- p++; /* skip , */
- s = strtol(p, &p, 10);
-
- sql_find_subtype(&t, tnme, d, s);
- a = atom_general(m->sa, &t, NULL);
- /* the argument list may have holes and maybe out of order, ie
- * done use sql_add_arg, but special numbered version
- * sql_set_arg(m, a, nr);
- * */
- sql_set_arg(m, nr, a);
- append(ops, stmt_alias(m->sa, stmt_varnr(m->sa, nr, &t), NULL,
vnme));
- c = strchr(p, (int)',');
- if (c)
- c++;
- }
- refs = sa_list(m->sa);
- rel = rel_read(m, *expr, &pos, refs);
- if (!rel)
- throw(SQL, "sql.register", "Cannot register %s", buf);
- if (rel) {
- monet5_create_relational_function(m, *mod, *nme, rel,
stmt_list(m->sa, ops), 0);
- rel_destroy(rel);
- }
- sqlcleanup(m, 0);
- return msg;
-}
-
-
void
freeVariables(Client c, MalBlkPtr mb, MalStkPtr glb, int start)
{
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
@@ -19,11 +19,22 @@
#include "sql_scenario.h"
#include "sql_result.h"
#include "sql_gencode.h"
-#include "sql_optimizer.h"
+#include "sql_assert.h"
+#include "sql_execute.h"
#include "sql_env.h"
#include "sql_mvc.h"
-#include "sql_execute.h"
-#include "rel_exp.h"
+#include "sql_readline.h"
+#include "sql_user.h"
+#include <sql_optimizer.h>
+#include <sql_datetime.h>
+#include <rel_optimizer.h>
+#include <rel_partition.h>
+#include <rel_distribute.h>
+#include <rel_select.h>
+#include <rel_rel.h>
+#include <rel_exp.h>
+#include <rel_dump.h>
+#include <rel_bin.h>
#include "mal_debugger.h"
#include <mtime.h>
#include "optimizer.h"
@@ -480,3 +491,121 @@ cleanup_engine:
c->glb = oldglb;
return msg;
}
+
+/* a hook is provided to execute relational algebra expressions */
+str
+RAstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ int pos = 0;
+ str *expr = getArgReference_str(stk, pci, 1);
+ bit *opt = getArgReference_bit(stk, pci, 2);
+ backend *b = NULL;
+ mvc *m = NULL;
+ str msg;
+ sql_rel *rel;
+ list *refs;
+
+ if ((msg = getSQLContext(cntxt, mb, &m, &b)) != NULL)
+ return msg;
+ if ((msg = checkSQLContext(cntxt)) != NULL)
+ return msg;
+ if (!m->sa)
+ m->sa = sa_create();
+ refs = sa_list(m->sa);
+ rel = rel_read(m, *expr, &pos, refs);
+ if (rel) {
+ int oldvtop = cntxt->curprg->def->vtop;
+ int oldstop = cntxt->curprg->def->stop;
+ stmt *s;
+ MalStkPtr oldglb = cntxt->glb;
+
+ if (*opt)
+ rel = rel_optimizer(m, rel);
+ s = output_rel_bin(m, rel);
+ rel_destroy(rel);
+
+ MSinitClientPrg(cntxt, "user", "test");
+
+ /* generate MAL code */
+ backend_callinline(b, cntxt, s, 1);
+ 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);
+ if( !(cntxt->glb == 0 || cntxt->glb == oldglb))
+ msg= createException(MAL,"sql","global stack
leakage"); /* detect leak */
+ }
+ cntxt->glb = oldglb;
+ }
+ return msg;
+}
+
+str
+RAstatement2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ int pos = 0;
+ str *mod = getArgReference_str(stk, pci, 1);
+ str *nme = getArgReference_str(stk, pci, 2);
+ str *expr = getArgReference_str(stk, pci, 3);
+ str *sig = getArgReference_str(stk, pci, 4), c = *sig;
+ backend *b = NULL;
+ mvc *m = NULL;
+ str msg;
+ sql_rel *rel;
+ list *refs, *ops;
+ char buf[BUFSIZ];
+
+ if ((msg = getSQLContext(cntxt, mb, &m, &b)) != NULL)
+ return msg;
+ if ((msg = checkSQLContext(cntxt)) != NULL)
+ return msg;
+ if (!m->sa)
+ m->sa = sa_create();
+
+ ops = sa_list(m->sa);
+ snprintf(buf, BUFSIZ, "%s %s", *sig, *expr);
+ while (c && *c && !isspace(*c)) {
+ char *vnme = c, *tnme;
+ char *p = strchr(++c, (int)' ');
+ int d,s,nr;
+ sql_subtype t;
+ atom *a;
+
+ *p++ = 0;
+ vnme = sa_strdup(m->sa, vnme);
+ nr = strtol(vnme+1, NULL, 10);
+ tnme = p;
+ p = strchr(p, (int)'(');
+ *p++ = 0;
+ tnme = sa_strdup(m->sa, tnme);
+
+ d = strtol(p, &p, 10);
+ p++; /* skip , */
+ s = strtol(p, &p, 10);
+
+ sql_find_subtype(&t, tnme, d, s);
+ a = atom_general(m->sa, &t, NULL);
+ /* the argument list may have holes and maybe out of order, ie
+ * done use sql_add_arg, but special numbered version
+ * sql_set_arg(m, a, nr);
+ * */
+ sql_set_arg(m, nr, a);
+ append(ops, stmt_alias(m->sa, stmt_varnr(m->sa, nr, &t), NULL,
vnme));
+ c = strchr(p, (int)',');
+ if (c)
+ c++;
+ }
+ refs = sa_list(m->sa);
+ rel = rel_read(m, *expr, &pos, refs);
+ if (!rel)
+ throw(SQL, "sql.register", "Cannot register %s", buf);
+ if (rel) {
+ monet5_create_relational_function(m, *mod, *nme, rel,
stmt_list(m->sa, ops), 0);
+ rel_destroy(rel);
+ }
+ sqlcleanup(m, 0);
+ return msg;
+}
+
diff --git a/sql/backends/monet5/sql_execute.h
b/sql/backends/monet5/sql_execute.h
--- a/sql/backends/monet5/sql_execute.h
+++ b/sql/backends/monet5/sql_execute.h
@@ -15,5 +15,7 @@ sql5_export str SQLstatementIntern(Clien
sql5_export str SQLexecutePrepared(Client c, backend *be, cq *q);
sql5_export str SQLengineIntern(Client c, backend *be);
sql5_export str SQLrecompile(Client c, backend *be);
+sql5_export str RAstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+sql5_export str RAstatement2(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
#endif /* _SQL_EXECUTE_H_ */
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
@@ -37,7 +37,6 @@
#include "sql_readline.h"
#include "sql_user.h"
#include "sql_datetime.h"
-#include "sql_optimizer.h"
#include "mal_io.h"
#include "mal_parser.h"
#include "mal_builder.h"
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list