Changeset: 5a2a341768cb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5a2a341768cb
Added Files:
monetdb5/extras/jaql/jaqltests/Tests/unroll.jaql
monetdb5/extras/jaql/jaqltests/Tests/unroll.stable.err
monetdb5/extras/jaql/jaqltests/Tests/unroll.stable.out
Modified Files:
gdk/gdk.h
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_private.h
monetdb5/extras/jaql/Tests/group02.mal
monetdb5/extras/jaql/Tests/group02.stable.out
monetdb5/extras/jaql/jaqlgencode.c
monetdb5/extras/jaql/jaqltests/Tests/All
monetdb5/extras/jaql/jaqltests/Tests/shred.jaql.in
monetdb5/extras/jaql/jaqltests/Tests/shred.stable.err
monetdb5/extras/jaql/jaqltests/Tests/shred.stable.out
monetdb5/extras/jaql/parser/jaql.y
monetdb5/modules/kernel/bat5.c
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/sql.mx
sql/backends/monet5/sql_gencode.c
sql/server/rel_bin.c
sql/server/sql_statement.c
sql/server/sql_statement.h
testing/Mtest.py.in
Branch: lodrdf
Log Message:
Merged from default
diffs (truncated from 1661 to 300 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1838,11 +1838,11 @@ typedef struct {
} BBPrec;
gdk_export bat BBPlimit;
-#define N_BBPINIT 100
+#define N_BBPINIT 1000
#if SIZEOF_VOID_P == 4
#define BBPINITLOG 11
#else
-#define BBPINITLOG 13
+#define BBPINITLOG 14
#endif
#define BBPINIT (1 << BBPINITLOG)
/* absolute maximum number of BATs is N_BBPINIT * BBPINIT */
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -720,14 +720,14 @@ heapcopy(BAT *bn, char *ext, Heap *dst,
}
static void
-heapfree(Heap *src, Heap *dst)
+heapfree(Heap *dst, Heap *src)
{
- if (dst->filename == NULL) {
- dst->filename = src->filename;
- src->filename = NULL;
+ if (src->filename == NULL) {
+ src->filename = dst->filename;
+ dst->filename = NULL;
}
- HEAPfree(src);
- *src = *dst;
+ HEAPfree(dst);
+ *dst = *src;
}
static int
@@ -2657,8 +2657,7 @@ BATsetaccess(BAT *b, int newmode)
storage_t b0, b1, b2 = STORE_MEM, b3 = STORE_MEM;
if (b->batSharecnt && newmode != BAT_READ) {
-
- PROPDEBUG THRprintf(GDKout, "#BATsetaccess: %s has %d
views; deliver a copy.\n", BATgetId(b), b->batSharecnt);
+ BATDEBUG THRprintf(GDKout, "#BATsetaccess: %s has %d
views; creating a copy\n", BATgetId(b), b->batSharecnt);
b = BATsetaccess(BATcopy(b, b->htype, b->ttype, TRUE),
newmode);
if (b && b->batStamp > 0)
b->batStamp = -b->batStamp; /* prevent MIL
setaccess */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -399,6 +399,7 @@ recover_dir(int direxists)
return GDKmove(BAKDIR, "BBP", "dir", BATDIR, "BBP", "dir");
}
+static int BBPrecover(void);
static int BBPrecover_subdir(void);
static int BBPdiskscan(const char *);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -55,7 +55,6 @@ void BBPdump(void); /* never called: fo
void BBPexit(void);
void BBPinit(void);
bat BBPinsert(BATstore *bs);
-int BBPrecover(void);
void BBPreleaselref(bat i);
void BBPtrim(size_t delta);
void BBPunshare(bat b);
diff --git a/monetdb5/extras/jaql/Tests/group02.mal
b/monetdb5/extras/jaql/Tests/group02.mal
--- a/monetdb5/extras/jaql/Tests/group02.mal
+++ b/monetdb5/extras/jaql/Tests/group02.mal
@@ -6,11 +6,10 @@
jaql.x("[]->group into count($);");
# only works when the groupkey exists for all elements
jaql.x("[{\"a\": 1}, {\"a\": 2}]->group by d = $.a into count($);");
-#jaql.x("explain [{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into
count($);");
-# should return 0 for groups with no matching values
-#jaql.x("[{\"a\": 1, \"b\": 5}, {\"a\": 2}]->group by d = $.a into {d,
\"s\":sum($[*].b)};");
-#jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].a)};");
-#jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].b)};");
+jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into
count($);");
+jaql.x("[{\"a\": 1, \"b\": 5}, {\"a\": 2}]->group by d = $.a into {d,
\"s\":sum($[*].b)};");
+jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].a)};");
+jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].b)};");
jaql.x("[[],[1,2]] -> transform {\"cnt\": count($)};");
jaql.x("[[],[1,2]] -> transform {\"sum\": sum($)};");
diff --git a/monetdb5/extras/jaql/Tests/group02.stable.out
b/monetdb5/extras/jaql/Tests/group02.stable.out
--- a/monetdb5/extras/jaql/Tests/group02.stable.out
+++ b/monetdb5/extras/jaql/Tests/group02.stable.out
@@ -24,17 +24,20 @@ function user.main():void;
jaql.x("[]->group into count($);");
# only works when the groupkey exists for all elements
jaql.x("[{\"a\": 1}, {\"a\": 2}]->group by d = $.a into count($);");
-#jaql.x("explain [{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into
count($);");
-# should return 0 for groups with no matching values
-#jaql.x("[{\"a\": 1, \"b\": 5}, {\"a\": 2}]->group by d = $.a into {d,
\"s\":sum($[*].b)};");
-#jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].a)};");
-#jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].b)};");
+ jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into
count($);");
+ jaql.x("[{\"a\": 1, \"b\": 5}, {\"a\": 2}]->group by d = $.a into {d,
\"s\":sum($[*].b)};");
+ jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].a)};");
+ jaql.x("[{\"a\": 1}, {\"a\": 2}, {\"b\": 1}]->group by d = $.a into {d,
\"c\":count($[*].b)};");
jaql.x("[[],[1,2]] -> transform {\"cnt\": count($)};");
jaql.x("[[],[1,2]] -> transform {\"sum\": sum($)};");
jaql.x("[[],[1,2]] -> transform {\"avg\": avg($)};");
end main;
[ 0 ]
[ 1, 1 ]
+[ 1, 1 ]
+[ { "d": 1, "s": 5 }, { "d": 2, "s": null } ]
+[ { "d": 1, "c": 1 }, { "d": 2, "c": 1 } ]
+[ { "d": 1, "c": 0 }, { "d": 2, "c": 0 } ]
[ { "cnt": 0 }, { "cnt": 2 } ]
[ { "sum": null }, { "sum": 3 } ]
[ { "avg": null }, { "avg": 1.500000 } ]
diff --git a/monetdb5/extras/jaql/jaqlgencode.c
b/monetdb5/extras/jaql/jaqlgencode.c
--- a/monetdb5/extras/jaql/jaqlgencode.c
+++ b/monetdb5/extras/jaql/jaqlgencode.c
@@ -5593,10 +5593,13 @@ dumptree(jc *j, Client cntxt, MalBlkPtr
j->startoid = e;
MALCOMMENT(mb, "} j_expand");
break;
- case j_unroll:
+ case j_unroll: {
+ int h = 0, i = 0;
+ tree *w;
+
MALCOMMENT(mb, "j_unroll {");
- a = dumpwalkvar(mb, j->j1, j->j5, j->startoid);
- b = dumprefvar(j, mb, t->tval2, a);
+ d = dumpwalkvar(mb, j->j1, j->j5, j->startoid);
+ b = dumprefvar(j, mb, t->tval2, d);
/* we only want the arrays from here */
q = newInstruction(mb, ASSIGNsymbol);
@@ -5605,274 +5608,324 @@ dumptree(jc *j, Client cntxt, MalBlkPtr
q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
q = pushArgument(mb, q, j->j1);
q = pushArgument(mb, q, b);
- b = getArg(q, 0);
+ a = getArg(q, 0);
pushInstruction(mb, q);
q = newInstruction(mb, ASSIGNsymbol);
setModuleId(q, algebraRef);
setFunctionId(q, selectRef);
q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ q = pushArgument(mb, q, a);
+ q = pushBte(mb, q, 'a');
+ a = getArg(q, 0);
+ pushInstruction(mb, q);
+
+ /* check out contents of arrays */
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, batRef);
+ setFunctionId(q, mirrorRef);
+ q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ q = pushArgument(mb, q, a);
+ a = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, batRef);
+ setFunctionId(q, reverseRef);
+ q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ q = pushArgument(mb, q, j->j5);
+ c = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, leftjoinRef);
+ q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ q = pushArgument(mb, q, c);
+ q = pushArgument(mb, q, a);
+ a = getArg(q, 0);
+ pushInstruction(mb, q);
+
+ /* create full mapping per element */
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, leftjoinRef);
+ q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ q = pushArgument(mb, q, a);
q = pushArgument(mb, q, b);
- q = pushBte(mb, q, 'a');
c = getArg(q, 0);
pushInstruction(mb, q);
-
- /* get parent(s), we only do objects for the
moment */
- q = newInstruction(mb, ASSIGNsymbol);
- setModuleId(q, algebraRef);
- setFunctionId(q, joinRef);
- q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
- q = pushArgument(mb, q, j->j6);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, batRef);
+ setFunctionId(q, reverseRef);
+ q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
q = pushArgument(mb, q, c);
c = getArg(q, 0);
pushInstruction(mb, q);
+ /* c = elemid:arraymemberid */
+
q = newInstruction(mb, ASSIGNsymbol);
setModuleId(q, batRef);
- setFunctionId(q, mirrorRef);
- q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ setFunctionId(q, reverseRef);
+ q = pushReturn(mb, q, newTmpVariable(mb,
TYPE_any));
+ q = pushArgument(mb, q, a);
+ a = getArg(q, 0);
+ pushInstruction(mb, q);
+ /* a = arrayid:arraymemberid */
+
+ /* walk backwards up till the root array
duplicating
+ * entries */
+ dumpbatwritable(j, mb, 1);
+ dumpbatwritable(j, mb, 6);
+ dumpbatwritable(j, mb, 7);
+ for (w = t->tval2->tval1; w != NULL; w =
w->tval1) {
+ MALCOMMENT(mb, "| reverse object
traversal with re-creation");
+
+ /* get parents of variable matches */
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, joinRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, j->j6);
+ q = pushArgument(mb, q, b);
+ i = getArg(q, 0);
+ pushInstruction(mb, q);
+ /* retrieve all entries for the parent
objects */
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, batRef);
+ setFunctionId(q, reverseRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, j->j6);
+ e = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, leftjoinRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, e);
+ q = pushArgument(mb, q, i);
+ d = getArg(q, 0);
+ pushInstruction(mb, q);
+
+ /* explode into count that we need
(array sizes) */
+ g = dumpnextid(mb, j->j1);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, markTRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, c);
+ q = pushArgument(mb, q, g);
+ h = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, joinRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, d);
+ q = pushArgument(mb, q, h);
+ f = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, batRef);
+ setFunctionId(q, reverseRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, f);
+ f = getArg(q, 0);
+ pushInstruction(mb, q);
+
+ /* insert object names for values from
arrays */
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, semijoinRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, j->j7);
+ q = pushArgument(mb, q, b);
+ e = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, batRef);
+ setFunctionId(q, reverseRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, a);
+ g = getArg(q, 0);
+ pushInstruction(mb, q);
+ q = newInstruction(mb, ASSIGNsymbol);
+ setModuleId(q, algebraRef);
+ setFunctionId(q, joinRef);
+ q = pushReturn(mb, q,
newTmpVariable(mb, TYPE_any));
+ q = pushArgument(mb, q, g);
+ q = pushArgument(mb, q, e);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list