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

Modified Files:
        pathfinder.mx pf_support.mx 
Log Message:
At the cost of maintaining some change information during an update, 
calculating the new indices is significantly easier.

Index: pathfinder.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pathfinder.mx,v
retrieving revision 1.379
retrieving revision 1.380
diff -u -d -r1.379 -r1.380
--- pathfinder.mx       8 Aug 2007 13:39:33 -0000       1.379
+++ pathfinder.mx       8 Aug 2007 14:02:16 -0000       1.380
@@ -477,8 +477,9 @@
 const DEL_PAGE := NEW_PAGE + 1;
 const DELETED_NID := DEL_PAGE + 1;
 const ADDED_NID := DELETED_NID + 1;
-const DELETED_ATTR := ADDED_NID + 1;
-const ADDED_ATTR := DELETED_ATTR + 1;
+const ADDED_ATTR := ADDED_NID + 1;
+const DELETED_TEXT_NID := ADDED_ATTR + 1;
+const ADDED_TEXT_NID := DELETED_TEXT_NID + 1;
 
 
 # transaction debugging / performance profiling 
@@ -599,8 +600,9 @@
        .insert(oid,"del_page")
        .insert(oid,"deleted_nid")
        .insert(oid,"added_nid")
-       .insert(oid,"deleted_attr")
        .insert(oid,"added_attr")
+       .insert(oid,"deleted_text_nid")
+       .insert(oid,"added_text_nid")
        .access(BAT_READ).rename("ws_update");
 
 # the bats that get changed using the logger in case of updates reach up until 
qn_histogram

Index: pf_support.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pf_support.mx,v
retrieving revision 1.260
retrieving revision 1.261
diff -u -d -r1.260 -r1.261
--- pf_support.mx       8 Aug 2007 12:27:33 -0000       1.260
+++ pf_support.mx       8 Aug 2007 14:02:17 -0000       1.261
@@ -2681,7 +2681,6 @@
   ws.fetch(NEW_PAGE).reverse().accbuild("hash");
   ws.fetch(DELETED_NID).reverse().accbuild("hash");
   ws.fetch(ADDED_NID).reverse().accbuild("hash");
-  ws.fetch(DELETED_ATTR).reverse().accbuild("hash");
   ws.fetch(ADDED_ATTR).reverse().accbuild("hash");
 
   [EMAIL PROTECTED]() {
@@ -2835,7 +2834,10 @@
   # prepare for postcommit
 
   var deleted_nid := ws.fetch(DELETED_NID);
-  var deleted_attr := ws.fetch(DELETED_ATTR);
+  # note that all modified and deleted attributes end up in MODIFIED_ATTR
+  var modified_attr := ws.fetch(MODIFIED_ATTR);
+
+  var deleted_text_nid := ws.fetch(DELETED_TEXT_NID);
 
   var old_attr := new(oid,bat);
   var old_text := new(oid,bat);
@@ -2850,114 +2852,39 @@
     var nid_rid := ws.fetch(NID_RID).find(cont);
     var map_pid := ws.fetch(MAP_PID).find(cont);
     var pre_prop := ws.fetch(PRE_PROP).find(cont);
-    var attr_own := ws.fetch(ATTR_OWN).find(cont);
-    var attr_qn := ws.fetch(ATTR_QN).find(cont);
-    var attr_prop := ws.fetch(ATTR_PROP).find(cont);
-    var prop_val := ws.fetch(PROP_VAL).find(cont);
+    {
+      var attr_own := ws.fetch(ATTR_OWN).find(cont);
+      var attr_qn := ws.fetch(ATTR_QN).find(cont);
+      var attr_prop := ws.fetch(ATTR_PROP).find(cont);
+      var prop_val := ws.fetch(PROP_VAL).find(cont);
 
-    var nids := deleted_nid.reverse().uselect(cont).reverse(); # [nil,NID]
+      var nids := deleted_nid.reverse().uselect(cont).reverse(); # [nil,NID]
 
-    var elemqns := nids.leftjoin(nid_rid).select(oid_nil, 
oid_nil).[swizzle](map_pid).leftjoin(pre_prop); # [nil,QNID]
-    var attrids := nids.leftjoin(attr_own.reverse()); # [nil,ATID]
-    # combine with deleted attributes (with double elimination)
-    var attrs := deleted_attr.reverse().uselect(cont); # [ATID,nil]
-    attrids := attrids.reverse().kunion(attrs).hmark([EMAIL PROTECTED]); # 
[j,ATID]
+      var elemqns := nids.leftjoin(nid_rid).select(oid_nil, 
oid_nil).[swizzle](map_pid).leftjoin(pre_prop); # [nil,QNID]
+      var attrids := nids.leftjoin(attr_own.reverse()); # [nil,ATID]
+      # combine with deleted attributes (with double elimination)
+      var attrs := modified_attr.reverse().uselect(cont); # [ATID,nil]
+      attrids := attrids.reverse().kunion(attrs).hmark([EMAIL PROTECTED]); # 
[j,ATID]
 
-    var attrqns := attrids.leftjoin(attr_qn); # [j,ATQN]
-    var attrvals := attrids.leftjoin(attr_prop).leftjoin(prop_val); # 
[j,ATVAL(str)]
-    var elemnids := attrids.leftjoin(attr_own); # [j,NID]
-    var elemqns := 
elemnids.leftjoin(nid_rid).[swizzle](map_pid).leftjoin(pre_prop); # [j,QNID]
+      var attrqns := attrids.leftjoin(attr_qn); # [j,ATQN]
+      var attrvals := attrids.leftjoin(attr_prop).leftjoin(prop_val); # 
[j,ATVAL(str)]
+      var elemnids := attrids.leftjoin(attr_own); # [j,NID]
+      var elemqns := 
elemnids.leftjoin(nid_rid).[swizzle](map_pid).leftjoin(pre_prop); # [j,QNID]
 
-    old_attr.insert(cont, vx_maintain(elemnids, elemqns, attrqns, attrvals));
+      old_attr.insert(cont, vx_maintain(elemnids, elemqns, attrqns, attrvals));
+    }
 
     # then do text
     {
-      var newvx;
-      var oldvx;
-      var rid_prop_update := ws.fetch(RID_PROP_UPDATE).find(cont); # 
[RID,PROP] (updated properties)
-      var map_pid := ws.fetch(MAP_PID).find(cont);
-      var map_pid_update := ws.fetch(MAP_PID_UPDATE).find(cont);
-      var del_page := ws.fetch(DEL_PAGE).reverse().uselect(cont).hmark([EMAIL 
PROTECTED]); # [i,PAGEID]
-      if ((rid_prop_update.count() > 0) or (del_page.count() > 0)) {
-        var rids := rid_prop_update.hmark([EMAIL PROTECTED]);  # [i,RID]
-        # figure out RIDs of deleted pages
-        # we're only interested in deleted original pages (i.e. not
-        # pages that were allocated and deleted in the same
-        # transaction).
-        # just append the RID values to the list of RIDs to be considered.
-        if (del_page.count() > 0) {
-          rids.access(BAT_WRITE);
-          [EMAIL PROTECTED]() {
-            if (map_pid.exist($t)) {
-              if (not(isnil(map_pid.find($t)))) {
-                rids.append(densebat(wrd(REMAP_PAGE_SIZE)).seqbase(oid(lng($t) 
<< REMAP_PAGE_BITS)).reverse());
-              }
-            }
-          }
-          # eliminate duplicates introduced by RIDs of deleted pages already 
being in RID_PROP_UPDATE
-          rids := rids.tunique().hmark([EMAIL PROTECTED]);
-        }
-        var oldpres := [swizzle](rids, map_pid);  # [i,PRE]
-        oldpres := 
oldpres.join(ws.fetch(PRE_KIND).find(cont)).uselect(TEXT).mirror().join(oldpres).tmark([EMAIL
 PROTECTED]);  # [j,PRE] (original text nodes)
-        if (oldpres.count() > 0) {
-          var oldtext := 
oldpres.leftjoin(ws.fetch(PRE_PROP).find(cont)).leftjoin(ws.fetch(PROP_TEXT).find(cont));
 # [j,str]
-          var oldnids := oldpres.leftjoin(ws.fetch(PRE_NID).find(cont));
-          oldvx := vx_maintain(oldnids, oldtext);
-        } else {
-          oldvx := new(int,oid);
-        }
-        {
-          # figure out where to get new value
-          # rid is on old page and was modified
-          var b := rids.join(ws.fetch(RID_KIND_UPDATE).find(cont));
-          # rid is on old page and was unmodified
-          var c := 
rids.kdiff(b).[swizzle](map_pid).join(ws.fetch(PRE_KIND).find(cont));
-          # select text elements and combine
-          var t := 
b.access(BAT_WRITE).insert(c).uselect(TEXT).sort().mirror(); # [i,i] (text 
elems only)
-          rids := t.leftjoin(rids).tmark([EMAIL PROTECTED]); # [i,RID] (only 
text elements, new numbering)
-        }
-        if (rids.count() > 0) {
-          # rid is on old page and was modified
-          var b := rids.join(ws.fetch(RID_NID_UPDATE).find(cont));
-          # rid is on old page and was unmodified
-          var c := 
rids.kdiff(b).[swizzle](map_pid).join(ws.fetch(PRE_NID).find(cont));
-          # select text elements and combine
-          var nids := b.access(BAT_WRITE).insert(c).order().tmark([EMAIL 
PROTECTED]); # [i,NID]
-          # rid is on old page and was modified
-          b := rids.join(ws.fetch(RID_PROP_UPDATE).find(cont));
-          # rid is on old page and was unmodified
-          c := 
rids.kdiff(b).[swizzle](map_pid).join(ws.fetch(PRE_PROP).find(cont));
-          # select text elements and combine
-          var props := b.access(BAT_WRITE).insert(c).order().tmark([EMAIL 
PROTECTED]); # [i,PROP]
-          var vals := props.leftjoin(ws.fetch(PROP_TEXT).find(cont));  # 
[i,TEXT]
-          newvx := vx_maintain(nids, vals);
-        } else {
-          newvx := new(int,oid);
-        }
-      } else {
-        oldvx := new(int,oid);
-        newvx := new(int,oid);
-      }
-      # handle new pages separately
-      var npages := kdiff(map_pid_update.uselect(oid_nil, oid_nil), 
map_pid.uselect(oid_nil, oid_nil));
-      if (npages.count() > 0) {
-        newvx.access(BAT_WRITE);
-        var rid_kind := ws.fetch(_RID_KIND).find(cont);
-        var rid_prop := ws.fetch(_RID_PROP).find(cont);
-        var rid_nid := ws.fetch(_RID_NID).find(cont);
-        var prop_text := ws.fetch(_PROP_TEXT).find(cont);
-        [EMAIL PROTECTED]() {
-          var f := oid(lng($h) << REMAP_PAGE_BITS);
-          var l := oid(lng(f) + REMAP_PAGE_MASK);
-          var r := rid_kind.reverse().ord_select(f, 
l).reverse().ord_uselect(TEXT).hmark([EMAIL PROTECTED]); # [i,RID] (text 
elements)
-          var p := r.leftjoin(rid_prop).leftjoin(prop_text);
-          var n := r.leftjoin(rid_nid);
-          newvx.insert(vx_maintain(n, p));
-        }
-      }
-      old_text.insert(cont, sdiff(oldvx, newvx));
-      new_text.insert(cont, sdiff(newvx, oldvx));
+      var prop_text := ws.fetch(PROP_TEXT).find(cont);
+      var nids := deleted_text_nid.reverse().uselect(cont).hmark([EMAIL 
PROTECTED]); # [i,NID]
+      var texts := nids.leftjoin(nid_rid).select(oid_nil, oid_nil) # [i,RID]
+        .[swizzle](map_pid) # [i,PRE]
+        .leftjoin(pre_prop) # [i,PROP]
+        .leftjoin(prop_text); # [i,TEXT]
+      old_text.insert(cont, vx_maintain(nids, texts));
     }
+
     extend_unprotect(ws, cont);
   }
 
@@ -3035,6 +2962,7 @@
 
   var added_nid := ws.fetch(ADDED_NID);
   var added_attr := ws.fetch(ADDED_ATTR);
+  var added_text_nid := ws.fetch(ADDED_TEXT_NID);
 
   ws.seqbase(oid_nil); # indicate that we are done reading our snapshot
 
@@ -3062,33 +2990,46 @@
     if (ws_log_active)
       ws_log(ws, "commit-apply exec" + str(ws_logtime - (ws_logtime := 
usec()))); 
 
+    var newattr;
     var nid_rid := ws.fetch(_NID_RID).find(cont);
     var rid_prop := ws.fetch(_RID_PROP).find(cont);
-    var attr_own := ws.fetch(_ATTR_OWN).find(cont);
-    var attr_qn := ws.fetch(_ATTR_QN).find(cont);
-    var attr_prop := ws.fetch(_ATTR_PROP).find(cont);
-    var prop_val := ws.fetch(_PROP_VAL).find(cont);
+    {
+      var attr_own := ws.fetch(_ATTR_OWN).find(cont);
+      var attr_qn := ws.fetch(_ATTR_QN).find(cont);
+      var attr_prop := ws.fetch(_ATTR_PROP).find(cont);
+      var prop_val := ws.fetch(_PROP_VAL).find(cont);
 
-    var nids := added_nid.reverse().uselect(cont).reverse(); # [nil,NID]
+      var nids := added_nid.reverse().uselect(cont).reverse(); # [nil,NID]
 
-    var elemqns := nids.leftjoin(nid_rid).select(oid_nil, 
oid_nil).leftjoin(rid_prop); # [nil,QNID]
-    var attrids := nids.leftjoin(attr_own.reverse()); # [nil,ATID]
-    # combine with deleted attributes (with double elimination)
-    var attrs := added_attr.reverse().uselect(cont); # [ATID,nil]
-    attrids := attrids.reverse().kunion(attrs).hmark([EMAIL PROTECTED]); # 
[j,ATID]
+      var elemqns := nids.leftjoin(nid_rid).select(oid_nil, 
oid_nil).leftjoin(rid_prop); # [nil,QNID]
+      var attrids := nids.leftjoin(attr_own.reverse()); # [nil,ATID]
+      # combine with deleted attributes (with double elimination)
+      var attrs := added_attr.reverse().uselect(cont); # [ATID,nil]
+      attrids := attrids.reverse().kunion(attrs).hmark([EMAIL PROTECTED]); # 
[j,ATID]
 
-    var attrqns := attrids.leftjoin(attr_qn); # [j,ATQN]
-    var attrvals := attrids.leftjoin(attr_prop).leftjoin(prop_val); # 
[j,ATVAL(str)]
-    var elemnids := attrids.leftjoin(attr_own); # [j,NID]
-    var elemqns := elemnids.leftjoin(nid_rid).leftjoin(rid_prop); # [j,QNID]
+      var attrqns := attrids.leftjoin(attr_qn); # [j,ATQN]
+      var attrvals := attrids.leftjoin(attr_prop).leftjoin(prop_val); # 
[j,ATVAL(str)]
+      var elemnids := attrids.leftjoin(attr_own); # [j,NID]
+      var elemqns := elemnids.leftjoin(nid_rid).leftjoin(rid_prop); # [j,QNID]
 
-    var newattr := vx_maintain(elemnids, elemqns, attrqns, attrvals);
+      newattr := vx_maintain(elemnids, elemqns, attrqns, attrvals);
+    }
+
+    var newtext;
+    {
+      var prop_text := ws.fetch(_PROP_TEXT).find(cont);
+      var nids := added_text_nid.reverse().uselect(cont).hmark([EMAIL 
PROTECTED]); # [i,NID]
+      var texts := nids.leftjoin(nid_rid).select(oid_nil, oid_nil) # [i,RID]
+        .leftjoin(rid_prop) # [i,PROP]
+        .leftjoin(prop_text); # [i,TEXT]
+      newtext := vx_maintain(nids, texts);
+    }
 
     # ws_postcommit maintains the indices and releases the collection lock
     __ws_postcommit(ws, cont,
                     newattr,
                     old_attr.find(cont),
-                    new_text.find(cont),
+                    newtext,
                     old_text.find(cont),
                     ws.fetch(NID_QN_INS_UPDATE).find(cont).reverse(), 
                     ws.fetch(NID_QN_DEL_UPDATE).find(cont).reverse(), 
@@ -3218,7 +3159,6 @@
     {
       var contattr := aconts.reverse().join(aitem);
       ws.fetch(MODIFIED_ATTR).insert(contattr);
-      ws.fetch(DELETED_ATTR).insert(contattr);
       ws.fetch(ADDED_ATTR).insert(contattr);
     }
     aconts.tunique()@batloop() {
@@ -3240,6 +3180,7 @@
     elems := elems.mirror();
     var eitem := elems.leftjoin(update_node_item); # [i,PRE]
     var econts := elems.leftjoin(conts); # [i,CONT]
+    var modified_nid := ws.fetch(MODIFIED_NID);
     var deleted_nid := ws.fetch(DELETED_NID);
     var added_nid := ws.fetch(ADDED_NID);
     econts.tunique()@batloop() {
@@ -3261,7 +3202,6 @@
       var erids := [swizzle](epres, pid_map);
       var pre_nid := ws.fetch(PRE_NID).find(cont);
       {
-        var modified_nid := ws.fetch(MODIFIED_NID);
         modified_nid.reverse().accbuild("hash");
         
modified_nid.insert([lng](epres.join(pre_nid).reverse().project(cont).reverse()).[>>](OID_PAGE_BITS));
       }
@@ -3321,7 +3261,6 @@
     {
       var contattr := aconts.reverse().join(aitem);
       ws.fetch(MODIFIED_ATTR).insert(contattr);
-      ws.fetch(DELETED_ATTR).insert(contattr);
       ws.fetch(ADDED_ATTR).insert(contattr);
     }
     aconts.tunique()@batloop() {
@@ -3338,6 +3277,9 @@
     elems := elems.mirror(); # [i,i]
     var eitem := elems.leftjoin(update_node_item); # [i.PRE]
     var econts := elems.leftjoin(conts); # [i,CONT]
+    var modified_nid := ws.fetch(MODIFIED_NID);
+    var deleted_text_nid := ws.fetch(DELETED_TEXT_NID);
+    var added_text_nid := ws.fetch(ADDED_TEXT_NID);
     econts.tunique()@batloop() {
       var cont := $h;
 
@@ -3357,7 +3299,6 @@
         ERROR("node must be of type TEXT, COMMENT, PI, or ATTRIBUTE\n");
       }
       {
-        var modified_nid := ws.fetch(MODIFIED_NID);
         modified_nid.reverse().accbuild("hash");
         
modified_nid.insert([lng](epres.join(pre_nid).reverse().project(cont).reverse()).[>>](OID_PAGE_BITS));
       }
@@ -3371,6 +3312,9 @@
         var elvalid := add_string_bulk(ws, cont, _PROP_TEXT, PROP_TEXT_UPDATE, 
elval, true); # [i,PROPID]
         var upd := etext.leftjoin(erids).reverse().join(elvalid); # 
[RID,PROPID]
         rid_prop_update.insert(upd);
+        var contnid := 
etext.leftjoin(epres).leftjoin(pre_nid).reverse().project(cont).reverse(); # 
[cont,NID]
+        deleted_text_nid.insert(contnid);
+        added_text_nid.insert(contnid);
       }
       if (ecomment.count() > 0) {
         var elval := ecomment.leftjoin(update_replace); # [i,update_replace]
@@ -3486,6 +3430,7 @@
     var ancestor_nid := ws.fetch(ANCESTOR_NID);
     var new_page := ws.fetch(NEW_PAGE);
     var added_nid := ws.fetch(ADDED_NID);
+    var added_text_nid := ws.fetch(ADDED_TEXT_NID);
     # one at a time
     elements.leftjoin(update_insert_node_item)@batloop() {
 #       if (debug) printf("\nstart of loop for argument %d\n", int($h));
@@ -4073,10 +4018,10 @@
               insprop := insprop.copy().access(BAT_WRITE);
               if (texts.count() > 0) {
                 lastdata := max(lastdata, texts.reverse().max());
-                texts := texts.mirror().tmark([EMAIL PROTECTED]);
-                var textval := mposjoin(texts.leftjoin(insert_pre_prop), 
texts.leftjoin(insert_pre_cont), ws.fetch(PROP_TEXT));
+                var t := texts.hmark([EMAIL PROTECTED]);
+                var textval := mposjoin(t.leftjoin(insert_pre_prop), 
t.leftjoin(insert_pre_cont), ws.fetch(PROP_TEXT));
                 var textids := add_string_bulk(ws, doccont, _PROP_TEXT, 
PROP_TEXT_UPDATE, textval, true);
-                insprop.replace(texts.reverse().join(textids));
+                insprop.replace(t.reverse().join(textids));
               }
               if (comments.count() > 0) {
                 lastdata := max(lastdata, comments.reverse().max());
@@ -4094,6 +4039,10 @@
                 insprop.replace(pis.reverse().join(pis.reverse().join(piids)));
               }
             }
+            if (texts.count() > 0) {
+                var contnid := 
texts.project(doccont).reverse().leftjoin(insnnids);
+                added_text_nid.insert(contnid);
+            }
             if (elems.count() > 0) {
               lastdata := max(lastdata, elems.reverse().max());
               elems := elems.mirror(); # PRE-PRE subset of the elements
@@ -4207,6 +4156,8 @@
   var modified_nid := ws.fetch(MODIFIED_NID);
   var deleted_nid := ws.fetch(DELETED_NID);
   var added_nid := ws.fetch(ADDED_NID);
+  var deleted_text_nid := ws.fetch(DELETED_TEXT_NID);
+  var added_text_nid := ws.fetch(ADDED_TEXT_NID);
 
   var pageno := oid(lng(newpre) >> REMAP_PAGE_BITS);
   var pageid := map_pid_update.reverse().find(pageno);
@@ -4322,6 +4273,7 @@
       # deleted, where the RID refers to the new RID value.
       var nid_qn_del;
       var delnid;
+      var deltnid;
       if (isoldpage) {
         var rk := 
update_data.mirror().outerjoin(rid_kind_update).access(BAT_WRITE); # 
[RID,KIND/nil]
         
rk.replace(rk.uselect(chr_nil).mirror().[swizzle](map_pid).join(pre_kind));  # 
[RID,KIND]
@@ -4334,10 +4286,14 @@
           .join(pre_prop);                  # [RID,oldPROP]
         nid_qn_del := rn.reverse().join(rp);
         delnid := rn.reverse().project(cont).reverse();
+        var rt := rk.uselect(TEXT).mirror();                                   
      # [RID,RID] (text)
+        var rtn := rt.outerjoin(rid_nid_update).access(BAT_WRITE);             
      # [RID,NID/nil]
+        
rtn.replace(rtn.uselect(oid_nil).mirror().[swizzle](map_pid).join(pre_nid)); # 
[RID,NID]
+        deltnid := rtn.reverse().project(cont).reverse();
       } else {
-        var nr := update_data.mirror()      # [newRID,newRID]
-          .join(rid_kind)                   # [newRID,KIND]
-          .uselect(ELEMENT)                 # [newRID,nil] (elements)
+        var nk := update_data.mirror()      # [newRID,newRID]
+          .join(rid_kind);                  # [newRID,KIND]
+        var nr := nk.uselect(ELEMENT)       # [newRID,nil] (elements)
           .mirror()                         # [newRID,newRID]
           .join(rid_nid)                    # [newRID,NID]
           .reverse();                       # [NID,newRID]
@@ -4347,6 +4303,11 @@
           .[swizzle](map_pid)               # [NID,oldPRE]
           .join(pre_prop);                  # [NID,QN]
         delnid := nr.project(cont).reverse();
+        var nrt := nk.uselect(TEXT)         # [newRID,nil] (text)
+          .mirror()                         # [newRID,newRID]
+          .join(rid_nid)                    # [newRID,NID]
+          .reverse();                       # [NID,newRID]
+        deltnid := nrt.project(cont).reverse();
       }
       # remove all NIDs in update_data from the nid_qn_ins_update; no
       # need to figure out which QNs go with them: we remove them all
@@ -4355,6 +4316,8 @@
       nid_qn_del_update.insert(nid_qn_del);
       deleted_nid.insert(delnid);
       added_nid.deleteBuns(added_nid.sintersect(delnid));
+      deleted_text_nid.insert(deltnid);
+      added_text_nid.deleteBuns(added_text_nid.sintersect(deltnid));
     }
 
     var rid_nid_page;
@@ -4490,7 +4453,6 @@
     {
       var contattr := aconts.reverse().join(update_node_item);
       ws.fetch(MODIFIED_ATTR).insert(contattr);
-      ws.fetch(DELETED_ATTR).insert(contattr);
       var added_attr := ws.fetch(ADDED_ATTR);
       added_attr.deleteBuns(added_attr.sintersect(contattr));
     }


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to