Changeset: 32964c0be02f for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=32964c0be02f Modified Files: gdk/gdk_col.c gdk/gdk_utils.c monetdb5/mal/mal_interpreter.c monetdb5/modules/kernel/column.mx Branch: headless Log Message:
Merge with default branch. diffs (196 lines): diff --git a/gdk/ChangeLog.Mar2011 b/gdk/ChangeLog.Mar2011 --- a/gdk/ChangeLog.Mar2011 +++ b/gdk/ChangeLog.Mar2011 @@ -1,3 +1,7 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Tue Mar 22 2011 Fabian Groffen <[email protected]> +- Fixed memory detection on Darwin (Mac OS X) systems not to return + bogus values + diff --git a/gdk/gdk_col.c b/gdk/gdk_col.c --- a/gdk/gdk_col.c +++ b/gdk/gdk_col.c @@ -971,6 +971,13 @@ } } } + if (b->key == TRUE && cmp <= 0) { + /* cmp==0: definitely not key, + * cmd<0: we don't know */ + b->nokey[0] = i - 1; + b->nokey[1] = i; + b->key = b->dense = FALSE; + } } else if (b->sorted == (bit) GDK_SORTED_REV) { ptr prv = BUNhead(bi, p - 1); @@ -979,8 +986,15 @@ b->nosorted_rev = i; b->sorted = FALSE; } - } - if (b->key == TRUE && cmp <= 0) { + if (b->key == TRUE && cmp >= 0) { + /* cmp==0: definitely not key, + * cmd>0: we don't know */ + b->nokey[0] = i - 1; + b->nokey[1] = i; + b->key = b->dense = FALSE; + } + } else if (b->key == TRUE) { + /* we don't know anything, so unset key */ b->nokey[0] = i - 1; b->nokey[1] = i; b->key = b->dense = FALSE; diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -413,8 +413,18 @@ _MT_pagesize = sysInfo.dwPageSize; } #else -# if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) +# if defined(HAVE_SYS_SYSCTL_H) && defined(HW_PAGESIZE) + { + int size = 0; + size_t len = sizeof(size); + + sysctlbyname("hw.pagesize", &size, &len, NULL, 0); + _MT_pagesize = size; + } +# else +# if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) _MT_pagesize = sysconf(_SC_PAGESIZE); +# endif # endif #endif if (_MT_pagesize <= 0) @@ -437,19 +447,17 @@ _MT_npages = memStat.dwTotalPhys / _MT_pagesize; } # else -# if defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) - _MT_npages = sysconf(_SC_PHYS_PAGES); -# else -# if defined(HAVE_SYS_SYSCTL_H) && defined(HW_USERMEM) +# if defined(HAVE_SYS_SYSCTL_H) && defined(HW_MEMSIZE) { - uint64_t size; + uint64_t size = 0; size_t len = sizeof(size); - /* This is the 'non-kernel memory', e.g. what's left to a user - * process to allocate. */ - sysctlbyname("hw.usermem", &size, &len, NULL, 0); + sysctlbyname("hw.memsize", &size, &len, NULL, 0); _MT_npages = size / _MT_pagesize; } +# else +# if defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) + _MT_npages = sysconf(_SC_PHYS_PAGES); # else # error "don't know how to get the amount of physical memory for your OS" # endif /* sysctl */ diff --git a/monetdb5/modules/kernel/column.mx b/monetdb5/modules/kernel/column.mx --- a/monetdb5/modules/kernel/column.mx +++ b/monetdb5/modules/kernel/column.mx @@ -3115,13 +3115,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"); + } } } COLaccessEnd(d, USE_TAIL, MMAP_SEQUENTIAL); @@ -3278,13 +3294,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"); + } } } COLaccessEnd(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
