Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv6264/src/backends/monet5
Modified Files:
Tag: Nov2009
sql_gencode.mx sql_scenario.mx
Log Message:
more leak fixing
more like join fixing
Index: sql_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_scenario.mx,v
retrieving revision 1.356.2.14
retrieving revision 1.356.2.15
diff -u -d -r1.356.2.14 -r1.356.2.15
--- sql_scenario.mx 12 Nov 2009 00:20:47 -0000 1.356.2.14
+++ sql_scenario.mx 22 Nov 2009 20:30:17 -0000 1.356.2.15
@@ -315,7 +315,8 @@
optimizer= GDKgetenv("sql_optimizer");
if (optimizer == NULL)
optimizer= "default_pipe";
- SQLglobal("optimizer", setOptimizers(optimizer));
+ SQLglobal("optimizer", optimizer=setOptimizers(optimizer));
+ GDKfree(optimizer);
SQLglobal("trace","show,ticks,stmt");
typename = "sec_interval";
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.336.2.4
retrieving revision 1.336.2.5
diff -u -d -r1.336.2.4 -r1.336.2.5
--- sql_gencode.mx 11 Nov 2009 08:43:01 -0000 1.336.2.4
+++ sql_gencode.mx 22 Nov 2009 20:30:17 -0000 1.336.2.5
@@ -300,28 +300,42 @@
return 0;
}
-void
-dump_1(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
+static int
+_dump_1(MalBlkPtr mb, char *mod, char *name, int o1)
{
InstrPtr q;
- int o1 = _dumpstmt(sql, mb, s->op1.stval);
q = newStmt2(mb, mod, name);
q = pushArgument(mb, q, o1);
- s->nr = getDestVar(q);
+ return getDestVar(q);
}
-void
-dump_2(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
+static void
+dump_1(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
{
- InstrPtr q;
int o1 = _dumpstmt(sql, mb, s->op1.stval);
- int o2 = _dumpstmt(sql, mb, s->op2.stval);
+
+ s->nr = _dump_1(mb, mod, name, o1);
+}
+
+static int
+_dump_2( MalBlkPtr mb, char *mod, char *name, int o1, int o2)
+{
+ InstrPtr q;
q = newStmt2(mb, mod, name);
q = pushArgument(mb, q, o1);
q = pushArgument(mb, q, o2);
- s->nr = getDestVar(q);
+ return getDestVar(q);
+}
+
+static void
+dump_2(backend *sql, MalBlkPtr mb, stmt *s, char *mod, char *name)
+{
+ int o1 = _dumpstmt(sql, mb, s->op1.stval);
+ int o2 = _dumpstmt(sql, mb, s->op2.stval);
+
+ s->nr = _dump_2(mb, mod, name, o1, o2);
}
InstrPtr
@@ -340,6 +354,36 @@
}
InstrPtr
+dump_crossproduct(MalBlkPtr mb, int l, int r)
+{
+ int z;
+ InstrPtr q;
+
+ q = newStmt1(mb, calcRef, "int");
+ q = pushInt(mb, q, 0);
+ z = getDestVar(q);
+
+ q = newStmt2(mb, algebraRef, projectRef);
+ q = pushArgument(mb, q, r);
+ q = pushArgument(mb, q, z);
+ r = getDestVar(q);
+
+ q = newStmt2(mb, batRef, reverseRef);
+ q = pushArgument(mb, q, r);
+ r = getDestVar(q);
+
+ q = newStmt2(mb, algebraRef, projectRef);
+ q = pushArgument(mb, q, l);
+ q = pushArgument(mb, q, z);
+ l = getDestVar(q);
+
+ q = newStmt2(mb, algebraRef, joinRef);
+ q = pushArgument(mb, q, l);
+ q = pushArgument(mb, q, r);
+ return q;
+}
+
+InstrPtr
multiplexN(MalBlkPtr mb, char *mod, char *name)
{
InstrPtr q = NULL;
@@ -349,6 +393,85 @@
return q;
}
+int
+dump_joinN(backend *sql, MalBlkPtr mb, stmt *s)
+{
+ char *mod = sql_func_mod(s->op4.funcval->func);
+ char *fimp = sql_func_imp(s->op4.funcval->func);
+ node *n;
+ InstrPtr q;
+ int l, r, k;
+ int need_not = (s->flag & ANTI);
+
+ /* dump left and right operands */
+ (void)_dumpstmt(sql, mb, s->op1.stval);
+ (void)_dumpstmt(sql, mb, s->op2.stval);
+
+ /* find left and right columns (need more work) */
+ l = ((stmt*)s->op1.stval->op1.lval->h->data)->nr;
+ r = ((stmt*)s->op2.stval->op1.lval->h->data)->nr;
+
+ q = dump_crossproduct(mb, l, r);
+ k = getDestVar(q);
+
+ /* split */
+ q = newStmt2(mb, algebraRef, markHRef);
+ q = pushArgument(mb, q, k);
+ q = pushOid(mb, q, 0);
+ r = getDestVar(q);
+
+ q = newStmt2(mb, algebraRef, markTRef);
+ q = pushArgument(mb, q, k);
+ q = pushOid(mb, q, 0);
+ l = getDestVar(q);
+
+ l = _dump_1(mb, batRef, reverseRef, l );
+
+ /* join left columns */
+ for (n = s->op1.stval->op1.lval->h; n; n = n->next) {
+ stmt *op = n->data;
+
+ if (op->nrcols)
+ op->nr = _dump_2(mb, algebraRef, joinRef, l, op->nr);
+ }
+ /* join right columns */
+ for (n = s->op2.stval->op1.lval->h; n; n = n->next) {
+ stmt *op = n->data;
+
+ if (op->nrcols)
+ op->nr = _dump_2(mb, algebraRef, joinRef, r, op->nr);
+ }
+
+ /* execute multiplexed function */
+ q = newStmt(mb, "mal","multiplex");
+ setVarType(mb,getArg(q,0), newBatType(TYPE_oid, TYPE_bit));
+ setVarUDFtype(mb,getArg(q,0));
+ q = pushStr(mb, q, mod);
+ q = pushStr(mb, q, fimp);
+ for (n = s->op1.stval->op1.lval->h; n; n = n->next) {
+ stmt *op = n->data;
+ q = pushArgument(mb, q, op->nr);
+ }
+ for (n = s->op2.stval->op1.lval->h; n; n = n->next) {
+ stmt *op = n->data;
+ q = pushArgument(mb, q, op->nr);
+ }
+ k = getDestVar(q);
+
+ /* filter qualifying tuples, return oids of h and tail */
+ q = newStmt2(mb, algebraRef, uselectRef);
+ q = pushArgument(mb, q, k);
+ q = pushBit(mb, q, !need_not);
+ k = getDestVar(q);
+
+ k = _dump_1(mb, batRef, mirrorRef, k);
+ k = _dump_2(mb, algebraRef, joinRef, k, l);
+ k = _dump_1(mb, batRef, reverseRef, k);
+ k = _dump_2(mb, algebraRef, joinRef, k, r);
+ return k;
+}
+
+
InstrPtr
pushSchema(MalBlkPtr mb, InstrPtr q, sql_table *t)
{
@@ -650,7 +773,7 @@
if (s->nrcols == 0) {
q = newStmt1(mb, algebraRef, "find");
q = pushArgument(mb, q, l);
- pushOid(mb,q,0);
+ q = pushOid(mb,q,0);
l = getDestVar(q);
}
s->nr = l;
@@ -734,6 +857,7 @@
showException(SQL,"sql","Unknown
operator");
}
+ /* select on join */
q = newStmt2(mb, batRef, mirrorRef );
q = pushArgument(mb, q, l);
hml = getDestVar(q);
@@ -747,13 +871,14 @@
q = pushArgument(mb, q, tmr);
j = getDestVar(q);
- q = newStmt1(mb, algebraRef, "markH");
+ q = newStmt2(mb, algebraRef, markHRef);
q = pushArgument(mb, q, j);
q = pushOid(mb, q, 0);
mhj = getDestVar(q);
q = newStmt2(mb, algebraRef, markTRef);
q = pushArgument(mb, q, j);
+ q = pushOid(mb, q, 0);
mtj = getDestVar(q);
q = newStmt2(mb, batRef, reverseRef );
@@ -891,6 +1016,13 @@
(s->flag&ANTI ? antiuselectRef : uselectRef) :
joinRef;
+ if (s->op2.stval->nrcols > 0 &&
+ (s->type == st_select2 || s->type == st_uselect)) {
+ /* We need to add a range function to m5 */
+ /* range(a,l,h,lb:bit,hb:bit):bat[:any,:bit] */
+ assert(0);
+ break;
+ }
/* if st_join2 try to convert to bandjoin */
/* ie check if we substract/add a constant, to the
same column */
@@ -954,6 +1086,14 @@
s->nr = getDestVar(q);
}
break;
+ case st_uselectN:
+ case st_selectN: {
+ assert(0);
+ break;
+ }
+ case st_joinN:
+ s->nr = dump_joinN(sql, mb, s);
+ break;
case st_semijoin:{
dump_2(sql, mb, s, algebraRef, semijoinRef);
}
@@ -1019,33 +1159,11 @@
break;
case cmp_all: /* aka cross table */
{
- int z;
-
q = newStmt2(mb, batRef, reverseRef);
q = pushArgument(mb, q, r);
r = getDestVar(q);
- q = newStmt1(mb, calcRef, "int");
- q = pushInt(mb, q, 0);
- z = getDestVar(q);
-
- q = newStmt2(mb, algebraRef, projectRef);
- q = pushArgument(mb, q, r);
- q = pushArgument(mb, q, z);
- r = getDestVar(q);
-
- q = newStmt2(mb, batRef, reverseRef);
- q = pushArgument(mb, q, r);
- r = getDestVar(q);
-
- q = newStmt2(mb, algebraRef, projectRef);
- q = pushArgument(mb, q, l);
- q = pushArgument(mb, q, z);
- l = getDestVar(q);
-
- q = newStmt2(mb, algebraRef, joinRef);
- q = pushArgument(mb, q, l);
- q = pushArgument(mb, q, r);
+ q = dump_crossproduct(mb, l, r);
break;
}
case cmp_project:
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins