Changeset: 9cf25198e989 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9cf25198e989
Modified Files:
        monetdb5/modules/kernel/bat5.mx
        sql/test/BugTracker-2010/Tests/vacuum.stable.out
Branch: Apr2011
Log Message:

fixed problem with vacuum and varsize atoms


diffs (101 lines):

diff --git a/monetdb5/modules/kernel/bat5.mx b/monetdb5/modules/kernel/bat5.mx
--- a/monetdb5/modules/kernel/bat5.mx
+++ b/monetdb5/modules/kernel/bat5.mx
@@ -3881,13 +3881,29 @@
        case TYPE_dbl: @:shrinkloop(dbl)@ break;
        case TYPE_oid: @:shrinkloop(oid)@ break;
        default:
-               switch( b->T->width){
-               case 1:@:shrinkloop(bte)@ break;
-               case 2:@:shrinkloop(sht)@ break;
-               case 4:@:shrinkloop(int)@ break;
-               case 8:@:shrinkloop(lng)@ break;
-               default:
-                       throw(MAL, "bat.shrink", "Illegal argument type");
+               if (ATOMvarsized(bn->ttype)) {
+                       BUN p = BUNfirst(b);
+                       BUN q = BUNlast(b);
+                       BATiter bi = bat_iterator(b);
+
+                       cnt=0;
+                       for (;p<q; oidx++, p++) {
+                               if ( o < ol && *o == oidx ){
+                                       o++;
+                               } else {
+                                       BUNappend(bn, BUNtail(bi, p), FALSE);
+                                       cnt++;
+                               }
+                       }
+               } else {
+                       switch( b->T->width){
+                       case 1:@:shrinkloop(bte)@ break;
+                       case 2:@:shrinkloop(sht)@ break;
+                       case 4:@:shrinkloop(int)@ break;
+                       case 8:@:shrinkloop(lng)@ break;
+                       default:
+                               throw(MAL, "bat.shrink", "Illegal argument 
type");
+                       }
                }
        }
        BATaccessEnd(d, USE_TAIL, MMAP_SEQUENTIAL);
@@ -4044,13 +4060,32 @@
        case TYPE_oid: @:reuseloop(oid)@ break;
        case TYPE_str: /* to be done based on its index width */
        default:
-               switch( b->T->width){
-               case 1:@:reuseloop(bte)@ break;
-               case 2:@:reuseloop(sht)@ break;
-               case 4:@:reuseloop(int)@ break;
-               case 8:@:reuseloop(lng)@ break;
-               default:
-                       throw(MAL, "bat.shrink", "Illegal argument type");
+               if (ATOMvarsized(bn->ttype)) {
+                       BUN p = BUNfirst(b);
+                       BUN q = BUNlast(b);
+                       BATiter bi = bat_iterator(b);
+               
+                       for (;p<q; oidx++, p++) {
+                               if ( *o == oidx ){
+                                       while ( *ol == bidx && ol>o) {
+                                               bidx--;
+                                               ol--;q--;
+                                       }
+                                       BUNappend(bn, BUNtail(bi, --q), FALSE);
+                                       o += (o < ol);
+                                       bidx--;
+                               } else
+                                       BUNappend(bn, BUNtail(bi, p), FALSE);
+                       }
+               } else {
+                       switch( b->T->width){
+                       case 1:@:reuseloop(bte)@ break;
+                       case 2:@:reuseloop(sht)@ break;
+                       case 4:@:reuseloop(int)@ break;
+                       case 8:@:reuseloop(lng)@ break;
+                       default:
+                               throw(MAL, "bat.shrink", "Illegal argument 
type");
+                       }
                }
        }
     BATaccessEnd(d, USE_TAIL, MMAP_SEQUENTIAL);
diff --git a/sql/test/BugTracker-2010/Tests/vacuum.stable.out 
b/sql/test/BugTracker-2010/Tests/vacuum.stable.out
--- a/sql/test/BugTracker-2010/Tests/vacuum.stable.out
+++ b/sql/test/BugTracker-2010/Tests/vacuum.stable.out
@@ -104,12 +104,12 @@
 % sys.vac1,    sys.vac1 # table_name
 % i,   s # name
 % int, clob # type
-% 1,   4 # length
+% 1,   5 # length
 [ 1,   "the"   ]
-[ 3,   "runs"  ]
-[ 5,   "fox"   ]
-[ 4,   "over"  ]
-[ 6,   "dog"   ]
+[ 3,   "brown" ]
+[ 5,   "runs"  ]
+[ 4,   "fox"   ]
+[ 6,   "over"  ]
 #drop table vac1;
 
 # 21:53:59 >  
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to