Changeset: 3a5e7b302732 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3a5e7b302732
Modified Files:
configure.ag
gdk/Makefile.ag
gdk/gdk.h
gdk/gdk_cbp.c
gdk/gdk_system.c
gdk/gdk_system.h
gdk/gdk_utils.c
monetdb5/mal/Tests/All
monetdb5/mal/Tests/dataflow00.mal
monetdb5/mal/mal_interpreter.c
monetdb5/modules/atoms/url.c
monetdb5/modules/mal/tablet.c
monetdb5/optimizer/Tests/All
monetdb5/optimizer/Tests/dataflow.mal
monetdb5/optimizer/opt_commonTerms.c
monetdb5/optimizer/opt_joinpath.c
monetdb5/optimizer/opt_mitosis.c
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_support.c
sql/backends/monet5/sql.mx
sql/backends/monet5/sql_user.c
sql/backends/monet5/vaults/fits.c
sql/backends/monet5/vaults/mseed.c
Branch: headless
Log Message:
Merge with default branch.
diffs (truncated from 2226 to 300 lines):
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -795,6 +795,9 @@
# include <netdb.h>
# include <netinet/in.h>
#endif
+#ifdef HAVE_SYS_UIO_H
+# include <sys/uio.h>
+#endif
#ifdef HAVE_MALLOC_H
#include <malloc.h>
diff --git a/common/utils/mutils.c b/common/utils/mutils.c
--- a/common/utils/mutils.c
+++ b/common/utils/mutils.c
@@ -36,12 +36,12 @@
# include <mach-o/dyld.h> /* _NSGetExecutablePath on OSX >=10.5 */
#endif
-#ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h> /* realpath on OSX */
+#ifdef HAVE_LIMITS_H
+# include <limits.h> /* PATH_MAX on Solaris */
#endif
-#ifdef HAVE_LIMITS_H
-# include <limits.h> /* PATH_MAX on Solaris */
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h> /* realpath on OSX, prerequisite of sys/sysctl on
OpenBSD */
#endif
#ifdef HAVE_SYS_SYSCTL_H
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -50,6 +50,10 @@
PKG_PROG_PKG_CONFIG
+if test x"$PKG_CONFIG" = x ; then
+ AC_MSG_ERROR([pkg-config is required to configure MonetDB])
+fi
+
dnl VERSION_TO_NUMBER macro (copied from libxslt)
AC_DEFUN([MONETDB_VERSION_TO_NUMBER],
[`$1 | sed 's|[[_\-]][[a-zA-Z0-9]]*$||' | awk 'BEGIN { FS = "."; } { printf
"%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'`])
@@ -1272,9 +1276,6 @@
AC_CHECK_PROG(MV,mv,mv -f)
AC_PROG_LN_S
AC_CHECK_PROG(LOCKFILE,lockfile,lockfile -r 2,echo)
-if test x"$LOCKFILE" = x"echo" ; then
- AC_MSG_WARN([no lockfile found, please do NOT parallelise the build
process!])
-fi
AC_CHECK_PROGS(RPMBUILD,rpmbuild rpm)
@@ -1598,15 +1599,18 @@
AC_PROG_YACC
AC_DEFINE(YYENABLE_NLS, 0, [Needed to compile bison-generated code.])
AC_DEFINE(YYLTYPE_IS_TRIVIAL, 0, [Needed to compile bison-generated code.])
-if test "x$YACC" = x; then
- if test "x$enable_sql" = xyes; then
- AC_MSG_ERROR([MonetDB/SQL requires YACC or BISON.])
- fi
- enable_sql=no
- if test "x$disable_sql" = x; then
- disable_sql="(MonetDB/SQL requires YACC or BISON.)"
- fi
-fi
+case "$YACC" in
+ bison*) YACC="$YACC" ;;
+ *)
+ if test "x$enable_sql" = xyes; then
+ AC_MSG_ERROR([MonetDB/SQL requires bison])
+ fi
+ enable_sql=no
+ if test "x$disable_sql" = x; then
+ disable_sql="(MonetDB/SQL requires bison)"
+ fi
+ ;;
+esac
AC_CHECK_PROG(TEXI2HTML,texi2html,texi2html)
AC_CHECK_PROG(LATEX2HTML,latex2html,latex2html)
@@ -1815,16 +1819,14 @@
fi
;;
*)
- req_java_ver_min=1.5 # >= $req_java_ver_min required
- req_java_ver_max=1.6 # < $req_java_ver_max required
- if test MONETDB_VERSION_TO_NUMBER(echo $JAVA_VERSION) -ge
MONETDB_VERSION_TO_NUMBER(echo "$req_java_ver_min") -a
MONETDB_VERSION_TO_NUMBER(echo $JAVA_VERSION) -lt
MONETDB_VERSION_TO_NUMBER(echo "$req_java_ver_max"); then
+ if test MONETDB_VERSION_TO_NUMBER(echo $JAVA_VERSION) =
MONETDB_VERSION_TO_NUMBER(echo "1.5") ; then
have_java_jdbc=yes
else
if test "x$enable_jdbc" = xyes; then
- AC_MSG_ERROR([MonetDB JDBC requires ant and Java >=
$req_java_ver_min, but < $req_java_ver_max.])
+ AC_MSG_ERROR([MonetDB JDBC requires ant and Java 1.5])
else
enable_jdbc=no
- disable_jdbc="(MonetDB JDBC currently requires Java >=
$req_java_ver_min, but < $req_java_ver_max to build)"
+ disable_jdbc="(MonetDB JDBC currently requires Java 1.5
to build)"
fi
fi
;;
@@ -2498,10 +2500,10 @@
sys/param.h \
sys/resource.h \
sys/socket.h \
- sys/sysctl.h \
sys/time.h \
sys/times.h \
sys/types.h \
+ sys/uio.h \
sys/un.h \
sys/utime.h \
sys/wait.h \
@@ -2514,6 +2516,15 @@
xmmintrin.h \
])
+dnl on OpenBSD, sys/sysctl.h requires sys/param.h to be included beforehand
+AC_CHECK_HEADERS([sys/sysctl.h], [], [],
+[
+ #ifdef HAVE_SYS_PARAM_H
+ # include <sys/param.h>
+ #endif
+])
+
+
SOCKET_LIBS=""
have_setsockopt=no
@@ -2541,8 +2552,6 @@
AC_CHECK_LIB(socket, setsockopt, [ SOCKET_LIBS="-lsocket
$SOCKET_LIBS"; have_setsockopt=yes; ]))
fi
-AC_CHECK_HEADERS([sys/socket.h winsock.h])
-
have_getaddrinfo=no
save_LIBS="$LIBS"
LIBS="$LIBS $SOCKET_LIBS"
@@ -2965,10 +2974,14 @@
AC_SUBST(QXlocalstatedir)
Xlogdir="`$translatepath "$logdir"`"
eval "Elogdir=${Xlogdir}"
+# need second eval because localstatedir defaults to being ${prefix}/var
+eval "Elogdir=${Elogdir}"
AC_SUBST(logdir)
AC_SUBST(Elogdir)
Xrundir="`$translatepath "$rundir"`"
eval "Erundir=${Xrundir}"
+# need second eval because localstatedir defaults to being ${prefix}/var
+eval "Erundir=${Erundir}"
AC_SUBST(rundir)
AC_SUBST(Erundir)
Qlibdir="$libdir"
@@ -3231,3 +3244,28 @@
echo
echo "* Important options:"
echo " OID size: " ${bits} bits
+echo
+
+dnl give some hints to the user
+case "`make -v 2>&1`" in
+'GNU Make '*)
+ ;;
+*)
+ echo "'make' not found in PATH or not GNU Make."
+ case "`gmake -v 2>&1`" in
+ 'GNU Make '*)
+ echo "Please use 'gmake' to build MonetDB."
+ ;;
+ *)
+ echo "'gmake' not found in PATH or not GNU Make."
+ echo "Please make sure you have GNU Make installed and use it
to build MonetDB."
+ ;;
+ esac
+ echo
+ ;;
+esac
+
+if test x"$LOCKFILE" = x"echo" ; then
+ echo "'lockfile' not found (usually part of a package named procmail)"
+ echo "Please do NOT parallelise the build process! (use -j1 with make)"
+fi
diff --git a/gdk/ChangeLog b/gdk/ChangeLog
--- a/gdk/ChangeLog
+++ b/gdk/ChangeLog
@@ -1,3 +1,7 @@
# ChangeLog file for MonetDB
# This file is updated with Maddlog
+* Wed May 11 2011 Sjoerd Mullender <[email protected]>
+- Implemented automatic conversion of a 64-bit database with 32-bit OIDs
+ to one with 64-bit OIDs.
+
diff --git a/gdk/gdk_cbp.c b/gdk/gdk_cbp.c
--- a/gdk/gdk_cbp.c
+++ b/gdk/gdk_cbp.c
@@ -375,17 +375,235 @@
static int CBPrecover_subdir(void);
static int CBPdiskscan(const char *);
+#if SIZEOF_SIZE_T == 8 && SIZEOF_OID == 8
+/* Convert 32-bit OIDs to 64 bits.
+ * This function must be called at the end of CBPinit(), just before
+ * "normal processing" starts. All errors that happen during the
+ * conversion are fatal. This function is "safe" in the sense that
+ * when it is interrupted, recovery will just start over. No
+ * permanent changes are made to the database until all string heaps
+ * have been converted, and then the changes are made atomically. */
+
+static void
+fixoidheapcolumn(COL *b, const char *nme, const char *filename)
+{
+ Heap h1, h2;
+ int *old;
+ oid *new;
+ oid i;
+ char *s;
+ unsigned short w;
+
+ if (b->type == TYPE_str) {
+ h1 = b->heap;
+ h1.filename = NULL;
+ h1.base = NULL;
+ h1.dirty = 0;
+ h1.parentid = 0;
+ h2 = *b->vheap;
+ h2.filename = NULL;
+ h2.base = NULL;
+ h2.dirty = 0;
+ h2.parentid = 0;
+
+ /* load old string heap */
+ if (HEAPload(&h1, filename, "tail", 0) < 0)
+ GDKfatal("fixoidheap: loading old heap "
+ "for COL %d failed\n", b->cacheid);
+ if (HEAPload(&h2, filename, "theap", 0) < 0)
+ GDKfatal("fixoidheap: loading old string heap "
+ "for COL %d failed\n", b->cacheid);
+
+ /* create new string heap */
+ if (HEAPdelete(&b->heap, nme, "tail"))
+ GDKfatal("fixoidheap: deleting heap "
+ "for COL %d failed\n", b->cacheid);
+ b->heap.filename = GDKmalloc(strlen(nme) + 12);
+ if (b->heap.filename == NULL)
+ GDKfatal("fixoidheap: GDKmalloc failed\n");
+ GDKfilepath(b->heap.filename, NULL, nme, "tail");
+ w = b->width; /* remember old width */
+ b->width = 1;
+ b->shift = 0;
+ if (HEAPalloc(&b->heap, b->capacity, SIZEOF_OID) < 0)
+ GDKfatal("fixoidheap: allocating new heap "
+ "for COL %d failed\n", b->cacheid);
+
+ b->heap.dirty = TRUE;
+ if (HEAPdelete(b->vheap, nme, "theap"))
+ GDKfatal("fixoidheap: deleting string heap "
+ "for COL %d failed\n", b->cacheid);
+ b->vheap->filename = GDKmalloc(strlen(nme) + 12);
+ if (b->vheap->filename == NULL)
+ GDKfatal("fixoidheap: GDKmalloc failed\n");
+ GDKfilepath(b->vheap->filename, NULL, nme, "theap");
+ if (ATOMheap(TYPE_str, b->vheap, b->capacity))
+ GDKfatal("fixoidheap: initializing new string "
+ "heap for COL %d failed\n", b->cacheid);
+ b->vheap->parentid = b->cacheid;
+
+ /* do the conversion */
+ b->heap.dirty = TRUE;
+ b->vheap->dirty = TRUE;
+ for (i = 0; i < b->count; i++) {
+ /* s = h2.base + VarHeapVal(h1.base, i, w); */
+ switch (w) {
+ case 1:
+ s = (char *) h2.base + (((var_t) ((unsigned
char *) h1.base)[i] + ((GDK_STRHASHTABLE * sizeof(unsigned short)) >> 3)) << 3);
+ break;
+ case 2:
+ s = (char *) h2.base + (((var_t) ((unsigned
short *) h1.base)[i] + ((GDK_STRHASHTABLE * sizeof(unsigned short)) >> 3)) <<
3);
+ break;
+ case 4:
+ s = (char *) h2.base + ((var_t) ((unsigned int
*) h1.base)[i] << 3);
+ break;
+ default:
+ assert(0);
+ }
+ b->heap.free += b->width;
+ COLset_str(b, i, s, 0);
+ }
+ HEAPfree(&h1);
+ HEAPfree(&h2);
+ } else if (b->type == TYPE_oid ||
+ (b->type != TYPE_void && b->varsized)) {
+ h1 = b->heap;
+ h1.filename = NULL;
+ h1.base = NULL;
+ h1.dirty = 0;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list