Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8394/compiler/mil

Modified Files:
        mil.c milgen.brg milprint.c 
Log Message:
* Add mil functions hmark, tmark and leftfetchjoin for the algebra backend.
* With the help of hmark and leftfetchjoin now the fn:name works as it should,
  thus test benchmark/XPathMark/A11.xq should produce the right output from 
  now on.


Index: milprint.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milprint.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- milprint.c  11 Jan 2008 10:47:10 -0000      1.59
+++ milprint.c  17 Jan 2008 14:10:54 -0000      1.60
@@ -228,11 +228,14 @@
     , [m_fetch]        = "fetch"
     , [m_project]      = "project"
     , [m_mark]         = "mark"
+    , [m_hmark]        = "hmark"
+    , [m_tmark]        = "tmark"
     , [m_mark_grp]     = "mark_grp"
     , [m_access]       = "access"
     , [m_cross]        = "cross"
     , [m_join]         = "join"
     , [m_leftjoin]     = "leftjoin"
+    , [m_leftfetchjoin]= "leftfetchjoin"
     , [m_thetajoin]    = "thetajoin"
     , [m_unq2_tjoin]   = "htordered_unique_thetajoin"
     , [m_unq1_tjoin]   = "ll_htordered_unique_thetajoin"
@@ -749,6 +752,10 @@
         case m_project:
         /* expression : expression '.mark (' expression ')' */
         case m_mark:
+        /* expression : expression '.hmark (' expression ')' */
+        case m_hmark:
+        /* expression : expression '.tmark (' expression ')' */
+        case m_tmark:
         /* expression : expression '.mark_grp (' expression ')' */
         case m_mark_grp:
         /* expression : expression '.cross (' expression ')' */
@@ -757,6 +764,8 @@
         case m_join:
         /* expression : expression '.leftjoin (' expression ')' */
         case m_leftjoin:
+        /* expression : expression '.leftfetchjoin (' expression ')' */
+        case m_leftfetchjoin:
         /* expression : expression '.CTrefine (' expression ')' */
         case m_ctrefine:
         /* expression : expression '.CTrefine_rev (' expression ')' */

Index: mil.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/mil.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- mil.c       15 Jan 2008 15:52:58 -0000      1.46
+++ mil.c       17 Jan 2008 14:10:53 -0000      1.47
@@ -591,6 +591,25 @@
 }
 
 /**
+ * Monet hmark() function.
+ */
+PFmil_t *
+PFmil_hmark (const PFmil_t *bat, const PFmil_t *value)
+{
+    return wire2 (m_hmark, bat, value);
+}
+
+/**
+ * Monet tmark() function.
+ */
+PFmil_t *
+PFmil_tmark (const PFmil_t *bat, const PFmil_t *value)
+{
+    return wire2 (m_tmark, bat, value);
+}
+
+
+/**
  * Monet mark_grp() function.
  */
 PFmil_t *
@@ -649,6 +668,16 @@
 }
 
 /**
+ * Monet join operator
+ */
+PFmil_t *
+PFmil_leftfetchjoin (const PFmil_t *a, const PFmil_t *b)
+{
+    return wire2 (m_leftfetchjoin, a, b);
+}
+
+
+/**
  * Monet thetajoin() operator
  */
 PFmil_t *

Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -d -r1.97 -r1.98
--- milgen.brg  15 Jan 2008 15:52:58 -0000      1.97
+++ milgen.brg  17 Jan 2008 14:10:53 -0000      1.98
@@ -4062,9 +4062,13 @@
                     PFalg_att_t         att;
                     PFmil_t             *name     = NULL;
                     PFmil_t             *frag     = NULL;
+                    PFmil_t             *args     = NULL;
                     PFmil_ident_t       node_qn   = PF_MIL_VAR_UNUSED;
                     PFmil_ident_t       node_cont = PF_MIL_VAR_UNUSED;
                     mvar_t              *prefix   = new_var(1);
+                    mvar_t              *prefix_bool   = new_var(1);
+                    mvar_t              *true_oid      = new_var(1);
+                    mvar_t              *false_oid     = new_var(1);
 
 
                     att = p->sem.fun_1to1.refs.atts[0];
@@ -4086,10 +4090,7 @@
                             assert(!"should never reach here"); break;
                     } 
 
-                    /* get all prefix and add : to the ones that are not "" */
-                    /* FIXME: not sure if this mil code (the first execute
-                              command) actually works correctly, therefore
-                              it must be tested and changed if necessery. */
+                    /* get all prefix */
                     execute ( 
                         assgn (var (prefix->name),
                                mposjoin ( mposjoin (name,
@@ -4101,11 +4102,37 @@
                                                     fetch (var (PF_MIL_VAR_WS),
                                                            var (node_cont))),
                                           fetch (var (PF_MIL_VAR_WS),
-                                                 var (PF_MIL_VAR_QN_PREFIX)))),
-                        madd (uselect (meq (var (prefix->name),
-                                            lit_str("")),
-                                       lit_bit(false)),
-                              lit_str(":")));
+                                                 var 
(PF_MIL_VAR_QN_PREFIX)))));
+
+                    /* add ":" only to prefix that are not "" */
+
+                    execute (
+                        assgn (var (prefix_bool->name),
+                               meq (var (prefix->name),
+                                    lit_str(""))),
+                        assgn (var (true_oid->name),
+                               hmark (uselect (var (prefix_bool->name),
+                                               lit_bit(true)),
+                                      lit_oid(0))),
+                        assgn (var (false_oid->name),
+                               hmark (uselect (var (prefix_bool->name),
+                                               lit_bit(false)),
+                                      lit_oid(0))),
+                        assgn (var (prefix->name),
+                               madd (leftfetchjoin (var (false_oid->name),
+                                                    var (prefix->name)),
+                                     lit_str(":"))));
+
+                    args = arg ( arg (var (true_oid->name), var 
(false_oid->name)),
+                                 arg (lit_str(""), var (prefix->name))); 
+                    execute (
+                        assgn (var (prefix->name),
+                               fetch (merged_union (args),
+                                      lit_int(1))));
+
+                    unpin(prefix_bool, 1);
+                    unpin(true_oid, 1);
+                    unpin(false_oid, 1);
 
                     execute (
                         assgn (var (res->name),


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to