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

Reply via email to