Changeset: e3b0cf7867f5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e3b0cf7867f5
Modified Files:
        sql/backends/monet5/copy.c
        sql/backends/monet5/rel_copy.c
Branch: copyparpipe
Log Message:

Mark sends and receives as such

This is basically a generic assignment:
    (a,b) := (c,d)
It's surprisingly hard to write, hope I got it right.


diffs (91 lines):

diff --git a/sql/backends/monet5/copy.c b/sql/backends/monet5/copy.c
--- a/sql/backends/monet5/copy.c
+++ b/sql/backends/monet5/copy.c
@@ -788,6 +788,42 @@ end:
        return msg;
 }
 
+static str
+COPYpair_assign(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void)cntxt;
+       (void)mb;
+
+       int tpe = getArgGDKType(mb, pci, 2);
+       stk->stk[pci->argv[0]] = stk->stk[pci->argv[2]];
+       stk->stk[pci->argv[1]] = stk->stk[pci->argv[3]];
+
+       (void)tpe;
+       return MAL_SUCCEED;
+}
+
+static inline str
+COPYpair_assign_bats(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       (void)cntxt;
+       (void)mb;
+       (void)stk;
+       (void)pci;
+
+       bat left = *getArgReference_bat(stk, pci, 2);
+       bat right = *getArgReference_bat(stk, pci, 3);
+
+       if (!is_bat_nil(left))
+               BBPretain(left);
+       if (!is_bat_nil(right))
+               BBPretain(right);
+
+       *getArgReference_bat(stk, pci, 0) = left;
+       *getArgReference_bat(stk, pci, 1) = right;
+
+       return MAL_SUCCEED;
+}
+
 static mel_func copy_init_funcs[] = {
  command("copy", "read", COPYread, true, "Clear the BAT and read 'block_size' 
bytes into it from 's'",
        args(1, 4,
@@ -809,6 +845,23 @@ static mel_func copy_init_funcs[] = {
        batarg("block", bte), batarg("offsets", int), argany("type", 1)
  )),
 
+ // temporary
+ pattern("copy", "send", COPYpair_assign, false, "dummy", args(2, 4,
+       argany("", 1), argany("", 1),
+       argany("chan_val", 1), argany("nil_val", 1)
+ )),
+ pattern("copy", "recv", COPYpair_assign, false, "dummy", args(2, 4,
+       argany("", 1), argany("", 1),
+       argany("chan_val", 1), argany("nil_val", 1)
+ )),
+ pattern("copy", "send", COPYpair_assign_bats, false, "dummy", args(2, 4,
+       batargany("", 1), batargany("", 1),
+       batargany("chan_val", 1), batargany("nil_val", 1)
+ )),
+ pattern("copy", "recv", COPYpair_assign_bats, false, "dummy", args(2, 4,
+       batargany("", 1), batargany("", 1),
+       batargany("chan_val", 1), batargany("nil_val", 1)
+ )),
 
  { .imp=NULL }
 };
diff --git a/sql/backends/monet5/rel_copy.c b/sql/backends/monet5/rel_copy.c
--- a/sql/backends/monet5/rel_copy.c
+++ b/sql/backends/monet5/rel_copy.c
@@ -30,7 +30,7 @@ extract_parameter(backend *be, list *stm
 static int
 emit_receive(MalBlkPtr mb, int var_channel, int tpe)
 {
-       InstrPtr q = newAssignment(mb);
+       InstrPtr q = newStmt(mb, "copy", "recv");
        q = pushReturn(mb, q, var_channel);
        q = pushArgument(mb, q, var_channel);
        q = pushNil(mb, q, tpe);
@@ -40,7 +40,7 @@ emit_receive(MalBlkPtr mb, int var_chann
 static void
 emit_send(MalBlkPtr mb, int var_channel, int tpe, int var_msg)
 {
-       InstrPtr q = newAssignment(mb);
+       InstrPtr q = newStmt(mb, "copy", "send");
        setReturnArgument(q, var_channel);
        q = pushReturn(mb, q, var_msg);
        q = pushArgument(mb, q, var_msg);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to