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