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

Modified Files:
        milgen.brg 
Log Message:
-- The MIL implementation of the physical merge-adjacent-text-nodes operator
   has to cope with a position column.


U milgen.brg
Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -d -r1.166 -r1.167
--- milgen.brg  18 Jun 2008 17:32:39 -0000      1.166
+++ milgen.brg  19 Jun 2008 12:32:15 -0000      1.167
@@ -8307,23 +8307,28 @@
         /* Rel:      merge_adjacent (Rel) */
         case 117: /* fold( */
         {
-            PFalg_att_t         iter_att   = p->sem.ii.iter,
-                                item_att   = p->sem.ii.item;
+            PFalg_att_t         iter_att   = p->sem.iter_pos_item.iter,
+                                pos_att    = p->sem.iter_pos_item.pos,
+                                item_att   = p->sem.iter_pos_item.item;
             PFalg_simple_type_t item_ty    = type_of (L(p), item_att);
             mvar_t             *iter       = new_var (p->refctr),
+                               *pos        = new_var (p->refctr),
                                *pre        = new_var (p->refctr),
                                *frag       = new_var (p->refctr),
                                *a_iter     = NULL,
+                               *a_pos      = NULL,
                                *a_pre      = NULL,
                                *a_attr     = NULL,
                                *a_cont     = NULL,
                                *p_iter     = NULL,
+                               *p_pos      = NULL,
                                *p_pre      = NULL,
                                *p_cont     = NULL,
                                *ma;
             bool                treat_attr = false;
 
             env_add (p->env, iter_att, aat_nat, iter);
+            env_add (p->env, pos_att,  aat_nat, pos);
             env_add (p->env, item_att, aat_pre, pre);
             env_add (p->env, item_att, aat_frag, frag);
 
@@ -8333,6 +8338,7 @@
                 mvar_t *attr    = new_var (1),
                        *sel     = new_var (1),
                        *in_iter = env_mvar (L(p)->env, iter_att, aat_nat),
+                       *in_pos  = env_mvar (L(p)->env, pos_att,  aat_nat),
                        *in_frag = env_mvar (L(p)->env, item_att, aat_frag),
                        *in_pre  = env_mvar (L(p)->env, item_att, aat_pre),
                        *in_attr = env_mvar (L(p)->env, item_att, aat_attr);
@@ -8340,9 +8346,11 @@
                 treat_attr = true;
 
                 p_iter = new_var (1);
+                p_pos  = new_var (1);
                 p_pre  = new_var (1);
                 p_cont = new_var (1);
                 a_iter = new_var (1);
+                a_pos  = new_var (1);
                 a_pre  = new_var (1);
                 a_attr = new_var (1);
                 a_cont = new_var (1);
@@ -8361,6 +8369,7 @@
                 /* sel    := attr.uselect(true).hmark([EMAIL PROTECTED]);
                    p_pre  := leftfetchjoin (sel, pre);
                    p_iter := leftfetchjoin (sel, iter);
+                   p_pos  := leftfetchjoin (sel, pos);
                    p_cont := leftfetchjoin (sel, frag); */
                 execute (
                     assgn (var (sel->name),
@@ -8372,6 +8381,9 @@
                     assgn (var (p_iter->name),
                            leftfetchjoin (var (sel->name),
                                           var (in_iter->name))),
+                    assgn (var (p_pos->name),
+                           leftfetchjoin (var (sel->name),
+                                          var (in_pos->name))),
                     assgn (var (p_cont->name),
                            leftfetchjoin (var (sel->name),
                                           var (in_frag->name))));
@@ -8382,6 +8394,7 @@
                    a_pre  := leftfetchjoin (sel, pre);
                    a_attr := leftfetchjoin (sel, attr);
                    a_iter := leftfetchjoin (sel, iter);
+                   a_pos  := leftfetchjoin (sel, pos);
                    a_cont := leftfetchjoin (sel, frag); */
                 execute (
                     assgn (var (sel->name),
@@ -8396,6 +8409,9 @@
                     assgn (var (a_iter->name),
                            leftfetchjoin (var (sel->name),
                                           var (in_iter->name))),
+                    assgn (var (a_pos->name),
+                           leftfetchjoin (var (sel->name),
+                                          var (in_pos->name))),
                     assgn (var (a_cont->name),
                            leftfetchjoin (var (sel->name),
                                           var (in_frag->name))));
@@ -8405,6 +8421,7 @@
             }
             else {
                 p_iter = env_mvar (L(p)->env, iter_att, aat_nat);
+                p_pos  = env_mvar (L(p)->env, pos_att, aat_nat);
                 p_pre  = env_mvar (L(p)->env, item_att, aat_pre);
                 p_cont = env_mvar (L(p)->env, item_att, aat_frag);
             }
@@ -8423,6 +8440,11 @@
                            hmark (fetch (var (ma->name), lit_int (1)),
                                   lit_oid (0)),
                            VAR (L(p)->env, iter_att, aat_nat))),
+                assgn (var (pos->name),
+                       leftfetchjoin (
+                           hmark (fetch (var (ma->name), lit_int (1)),
+                                  lit_oid (0)),
+                           VAR (L(p)->env, pos_att, aat_nat))),
                 assgn (var (pre->name),
                        tmark (fetch (var (ma->name), lit_int (1)),
                               lit_oid (0))),
@@ -8451,28 +8473,34 @@
                            merged_union (
                                arg (var (a_iter->name),
                                arg (var (iter->name),
+                               arg (var (a_pos->name),
+                               arg (var (pos->name),
                                arg (var (a_pre->name),
                                arg (var (pre->name),
                                arg (var (a_attr->name),
                                arg (project (var (iter->name),
                                              cast (type (mty_oid), nil ())),
                                arg (var (a_cont->name),
-                                    var (frag->name)))))))))),
+                                    var (frag->name)))))))))))),
                     assgn (var (iter->name),
                            fetch (var (mu->name), lit_int (0))),
-                    assgn (var (pre->name),
+                    assgn (var (pos->name),
                            fetch (var (mu->name), lit_int (1))),
-                    assgn (var (attr->name),
+                    assgn (var (pre->name),
                            fetch (var (mu->name), lit_int (2))),
+                    assgn (var (attr->name),
+                           fetch (var (mu->name), lit_int (3))),
                     assgn (var (frag->name),
-                           fetch (var (mu->name), lit_int (3))));
+                           fetch (var (mu->name), lit_int (4))));
 
                 unpin (mu, 1);
 
                 unpin (p_iter, 1);
+                unpin (p_pos, 1);
                 unpin (p_pre, 1);
                 unpin (p_cont, 1);
                 unpin (a_iter, 1);
+                unpin (a_pos, 1);
                 unpin (a_pre, 1);
                 unpin (a_attr, 1);
                 unpin (a_cont, 1);


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to