Changeset: d2e50a5176f4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d2e50a5176f4
Modified Files:
sql/backends/monet5/sql.mx
Branch: default
Log Message:
make sure the update bats are proper subsets for the given
part.
diffs (95 lines):
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -2626,10 +2626,14 @@
/* partitioned access */
lval = *(oid *)getArgReference(stk, pci, 6);
hval = *(oid *)getArgReference(stk, pci, 7);
- bn = BATslice(b, lval,hval);
- BATseqbase(bn, lval);
+ if (*access == 0) {
+ bn = BATslice(b, lval,hval);
+ BATseqbase(bn, lval);
+ BBPreleaseref(b->batCacheid);
+ } else {
+ bn = b;
+ }
BBPkeepref( *bid = bn->batCacheid);
- BBPreleaseref(b->batCacheid);
return MAL_SUCCEED;
} else if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_int){
BUN cnt = BATcount(b), psz;
@@ -2637,9 +2641,22 @@
int part_nr = *(int *)getArgReference(stk, pci, 6);
int nr_parts = *(int *)getArgReference(stk, pci, 7);
- psz = cnt?(cnt/nr_parts):0;
- bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?BATcount(b):((part_nr+1)*psz));
- BATseqbase(bn, part_nr*psz);
+ if (*access == 0) {
+ psz = cnt?(cnt/nr_parts):0;
+ bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?cnt:((part_nr+1)*psz));
+ BATseqbase(bn, part_nr*psz);
+ } else {
+ oid l, h;
+ BAT *c = mvc_bind(m, *sname, *tname, *cname, 0);
+ cnt = BATcount(c);
+ psz = cnt?(cnt/nr_parts):0;
+ l = part_nr*psz;
+ h = (part_nr+1==nr_parts)?cnt:((part_nr+1)*psz);
+ h--;
+ bn = BATmirror(BATselect(BATmirror(b), &l, &h));
+
+ BBPreleaseref(c->batCacheid);
+ }
BBPkeepref( *bid = bn->batCacheid);
BBPreleaseref(b->batCacheid);
return MAL_SUCCEED;
@@ -2669,13 +2686,17 @@
b = mvc_bind_idxbat(m, *sname, *tname, *iname, *access);
if (b) {
if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_oid){
- /* partitioned access */
+ /* partitioned access, TODO fix update bats */
lval = *(oid *)getArgReference(stk, pci, 6);
hval = *(oid *)getArgReference(stk, pci, 7);
- bn = BATslice(b, lval,hval);
- BATseqbase(bn, lval);
+ if (*access == 0) {
+ bn = BATslice(b, lval,hval);
+ BATseqbase(bn, lval);
+ BBPreleaseref(b->batCacheid);
+ } else {
+ bn = b;
+ }
BBPkeepref( *bid = bn->batCacheid);
- BBPreleaseref(b->batCacheid);
return MAL_SUCCEED;
} else if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_int){
BUN cnt = BATcount(b), psz;
@@ -2683,9 +2704,22 @@
int part_nr = *(int *)getArgReference(stk, pci, 6);
int nr_parts = *(int *)getArgReference(stk, pci, 7);
- psz = cnt?(cnt/nr_parts):0;
- bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?BATcount(b):((part_nr+1)*psz));
- BATseqbase(bn, part_nr*psz);
+ if (*access == 0) {
+ psz = cnt?(cnt/nr_parts):0;
+ bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?cnt:((part_nr+1)*psz));
+ BATseqbase(bn, part_nr*psz);
+ } else {
+ oid l, h;
+ BAT *c = mvc_bind_idxbat(m, *sname, *tname,
*iname, 0);
+ cnt = BATcount(c);
+ psz = cnt?(cnt/nr_parts):0;
+ l = part_nr*psz;
+ h = (part_nr+1==nr_parts)?cnt:((part_nr+1)*psz);
+ h--;
+ bn = BATmirror(BATselect(BATmirror(b), &l, &h));
+
+ BBPreleaseref(c->batCacheid);
+ }
BBPkeepref( *bid = bn->batCacheid);
BBPreleaseref(b->batCacheid);
return MAL_SUCCEED;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list