Update of /cvsroot/monetdb/pathfinder/runtime
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv18990/runtime

Modified Files:
      Tag: PF_ROX
        pathfinder.mx pf_support.mx 
Log Message:
propagated changes of Tuesday Jun 10 2008
from the development trunk to the PF_ROX branch



U pathfinder.mx
Index: pathfinder.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pathfinder.mx,v
retrieving revision 1.395.2.22
retrieving revision 1.395.2.23
diff -u -d -r1.395.2.22 -r1.395.2.23
--- pathfinder.mx       6 Jun 2008 14:25:43 -0000       1.395.2.22
+++ pathfinder.mx       10 Jun 2008 14:47:42 -0000      1.395.2.23
@@ -159,7 +159,7 @@
 #       For them RID=PRE=NID in all cases, the RID-PRE-NID transformations 
(leftfetchjoin/ 
 #       siwzzle) are zero-cost. This is also true for the transient document 
container. 
 #
-# NOTE: MAP_PID page indices start at oid(0). by putting the rid_* phyisical 
pages 
+# NOTE: MAP_PID page indices start at oid(0). by putting the rid_* physical 
pages 
 #       in the order specified by MAP_PID we get the original pre_* tables 
back.
 #
 # qn_* tables contain qualified names (elements, attributes). 

Index: pf_support.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pf_support.mx,v
retrieving revision 1.277.4.20
retrieving revision 1.277.4.21
diff -u -d -r1.277.4.20 -r1.277.4.21
--- pf_support.mx       30 May 2008 12:45:42 -0000      1.277.4.20
+++ pf_support.mx       10 Jun 2008 14:47:44 -0000      1.277.4.21
@@ -3076,7 +3076,7 @@
 # destination *must* be a hole (XXX check this).
 # size *must* be smaller than a page
 # from + size + delta (delta > 0) *must be on the same page as from
-# deom + size *must be on the same page as from + delta (delta < 0)
+# from + size *must be on the same page as from + delta (delta < 0)
 # Delta can be positive (move data down) or negative (move data up).
 PROC movedata(bat[void,bat] ws, oid cont, oid from, int size, int delta): void
 {
@@ -3291,13 +3291,13 @@
   # the PRE_SIZE table has the correct sizes, but we now need to
   # actually move the data in all PRE tables
   var update_hole;
-  var from_pre := swizzle(from_rid, map_pid);
-  var last_pre := swizzle(last, map_pid);
+  var from_oldpre := swizzle(from_rid, map_pid);
+  var last_oldpre := swizzle(last, map_pid);
 
   {
     var data;
     if (isoldpage) {
-      data := pre_size.reverse().select(from_pre, 
last_pre).reverse().copy().access(BAT_WRITE).seqbase(from_rid).key(true);
+      data := pre_size.reverse().select(from_oldpre, 
last_oldpre).reverse().copy().access(BAT_WRITE).seqbase(from_rid).key(true);
       data.myupdate(rid_size_update.reverse().select(from_rid, 
last).reverse());
     } else {
       data := rid_size.reverse().select(from_rid, 
last).reverse().copy().access(BAT_WRITE).key(true);
@@ -3325,7 +3325,7 @@
     }
 
     # now fix the head values (i.e. move the data)
-    var update_data := data.reverse().mark(oid(lng(from_rid) + 
delta)).reverse();
+    var update_data := data.tmark(oid(lng(from_rid) + delta));
     # we're not actually using the tail value here...
     update_hole := rid_size.reverse().select(newholefirst, 
newholelast).reverse();
     if (update_hole.count() < delta) {
@@ -3344,12 +3344,12 @@
   {
     var update_data;
     if (isoldpage) {
-      update_data := pre_level.reverse().select(from_pre, 
last_pre).reverse().copy().seqbase(from_rid);
+      update_data := pre_level.reverse().select(from_oldpre, 
last_oldpre).reverse().copy().seqbase(from_rid);
       update_data := 
update_data.access(BAT_WRITE).key(true).myupdate(rid_level_update.reverse().select(from_rid,
 last).reverse());
     } else {
-      update_data := rid_level.reverse().select(from_rid, last).reverse();
+      update_data := rid_level.reverse().select(from_rid, 
last).reverse().copy();
     }
-    update_data := update_data.reverse().mark(oid(lng(from_rid) + 
delta)).reverse();
+    update_data := update_data.tmark(oid(lng(from_rid) + delta));
     update_hole := update_hole.project(cast(nil, rid_level.ttype()));
     if (isoldpage) {
       rid_level_update.myupdate(update_hole).myupdate(update_data);
@@ -3361,12 +3361,12 @@
   {
     var update_data;
     if (isoldpage) {
-      update_data := pre_kind.reverse().select(from_pre, 
last_pre).reverse().copy().seqbase(from_rid);
+      update_data := pre_kind.reverse().select(from_oldpre, 
last_oldpre).reverse().copy().seqbase(from_rid);
       update_data := 
update_data.access(BAT_WRITE).key(true).myupdate(rid_kind_update.reverse().select(from_rid,
 last).reverse());
     } else {
-      update_data := rid_kind.reverse().select(from_rid, last).reverse();
+      update_data := rid_kind.reverse().select(from_rid, 
last).reverse().copy();
     }
-    update_data := update_data.reverse().mark(oid(lng(from_rid) + 
delta)).reverse();
+    update_data := update_data.tmark(oid(lng(from_rid) + delta));
     update_hole := update_hole.project(cast(nil, rid_kind.ttype()));
     if (isoldpage) {
       rid_kind_update.myupdate(update_hole).myupdate(update_data);
@@ -3378,12 +3378,12 @@
   {
     var update_data;
     if (isoldpage) {
-      update_data := pre_prop.reverse().select(from_pre, 
last_pre).reverse().copy().seqbase(from_rid);
+      update_data := pre_prop.reverse().select(from_oldpre, 
last_oldpre).reverse().copy().seqbase(from_rid);
       update_data := 
update_data.access(BAT_WRITE).key(true).myupdate(rid_prop_update.reverse().select(from_rid,
 last).reverse());
     } else {
-      update_data := rid_prop.reverse().select(from_rid, last).reverse();
+      update_data := rid_prop.reverse().select(from_rid, 
last).reverse().copy();
     }
-    update_data := update_data.reverse().mark(oid(lng(from_rid) + 
delta)).reverse();
+    update_data := update_data.tmark(oid(lng(from_rid) + delta));
     update_hole := update_hole.project(oid_nil);
     if (isoldpage) {
       rid_prop_update.myupdate(update_hole).myupdate(update_data);
@@ -3395,12 +3395,12 @@
   {
     var update_data;
     if (isoldpage) {
-      update_data := pre_nid.reverse().select(from_pre, 
last_pre).reverse().copy().seqbase(from_rid);
+      update_data := pre_nid.reverse().select(from_oldpre, 
last_oldpre).reverse().copy().seqbase(from_rid);
       update_data := 
update_data.access(BAT_WRITE).key(true).myupdate(rid_nid_update.reverse().select(from_rid,
 last).reverse());
     } else {
-      update_data := rid_nid.reverse().select(from_rid, last).reverse();
+      update_data := rid_nid.reverse().select(from_rid, last).reverse().copy();
     }
-    update_data := update_data.reverse().mark(oid(lng(from_rid) + 
delta)).reverse();
+    update_data := update_data.tmark(oid(lng(from_rid) + delta));
     update_hole := update_hole.project(oid_nil);
     if (isoldpage) {
       rid_nid_update.myupdate(update_hole).myupdate(update_data);
@@ -3503,13 +3503,33 @@
   {
     var inserts := command.ord_select(UPDATE_INSERT_FIRST, 
UPDATE_REPLACENODE); # [i,insertcommand]
     if (inserts.count() > 0) {
+
+      # UPDATE_INSERT_LAST and UPDATE_INSERT_BEFORE commands must be executed 
in reverse order
+      var order := inserts.ord_uselect(UPDATE_INSERT_LAST, 
UPDATE_INSERT_BEFORE).copy().mark([EMAIL PROTECTED]);
+      if (order.count() > 1) {
+        
pre_tgt.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(pre_tgt).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
pre_cont_tgt.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(pre_cont_tgt).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
attr_tgt.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(attr_tgt).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
attr_cont_tgt.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(attr_cont_tgt).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
pre_ins.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(pre_ins).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
pre_cont_ins.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(pre_cont_ins).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
attr_ins.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(attr_ins).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
attr_cont_ins.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(attr_cont_ins).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
inserts.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(inserts).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+        
command.access(BAT_WRITE).replace(order.leftjoin(order.mirror().leftjoin(command).access(BAT_WRITE).revert().tmark([EMAIL
 PROTECTED])));
+      }
+
       var inserts_pre_ins := inserts.mirror().leftfetchjoin(pre_ins); # [i,PRE]
       var inserts_elems := inserts_pre_ins.ord_uselect(oid_nil, 
oid_nil).hmark([EMAIL PROTECTED]); # [j,i] inserts on elements
       var inserts_attrs := inserts_pre_ins.ord_uselect(oid_nil).hmark([EMAIL 
PROTECTED]); # [k,i] inserts on attributes
+
+
       if (inserts_attrs.count() > 0) {
         do_update_insert_attributes(ws, inserts_attrs.leftjoin(pre_tgt), 
inserts_attrs.leftjoin(pre_cont_tgt), inserts_attrs.leftjoin(attr_ins), 
inserts_attrs.leftjoin(attr_cont_ins));
       }
       if (inserts_elems.count() > 0) {
+        # for debugging:
+        # var insert_update := inserts_elems.leftjoin(command), 
update_node_item := inserts_elems.leftjoin(pre_tgt), batdoccont := 
inserts_elems.leftjoin(pre_cont_tgt), update_insert_node_item := 
inserts_elems.leftjoin(pre_ins), batcont := 
inserts_elems.leftjoin(pre_cont_ins);
         do_update_insert_elements(ws, inserts_elems.leftjoin(command), 
inserts_elems.leftjoin(pre_tgt), inserts_elems.leftjoin(pre_cont_tgt), 
inserts_elems.leftjoin(pre_ins), inserts_elems.leftjoin(pre_cont_ins));
       }
     }
@@ -4443,7 +4463,7 @@
         var rid_nid_update := ws.fetch(RID_NID_UPDATE).find(doccont);
 
         var docsize;            # current size of document
-        # if the size of item 0 was changed, used the new size, else use the 
original size
+        # if the size of item 0 was changed, use the new size, else use the 
original size
         # we assume that page 0 on which item 0 is located already exists...
         {
           var root_rid := antiswizzle([EMAIL PROTECTED], map_pid_update);


-------------------------------------------------------------------------
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