diff options
-rw-r--r-- | acconfig.h | 3 | ||||
-rw-r--r-- | acinclude.m4 | 77 | ||||
-rw-r--r-- | configure.in | 11 | ||||
-rw-r--r-- | innobase/configure.in | 3 | ||||
-rw-r--r-- | innobase/include/lock0types.h | 1 | ||||
-rw-r--r-- | innobase/include/os0file.h | 6 | ||||
-rw-r--r-- | innobase/include/os0sync.h | 4 | ||||
-rw-r--r-- | innobase/include/sync0types.h | 1 | ||||
-rw-r--r-- | innobase/os/os0sync.c | 27 | ||||
-rw-r--r-- | sql/Makefile.am | 8 | ||||
-rw-r--r-- | sql/ha_innobase.cc | 27 |
11 files changed, 144 insertions, 24 deletions
diff --git a/acconfig.h b/acconfig.h index f56627efdc9..967127d22cb 100644 --- a/acconfig.h +++ b/acconfig.h @@ -78,6 +78,9 @@ /* Define if int8, int16 and int32 types exist */ #undef HAVE_INT_8_16_32 +/* Using Innobase DB */ +#undef HAVE_INNOBASE_DB + /* Define if we have GNU readline */ #undef HAVE_LIBREADLINE diff --git a/acinclude.m4 b/acinclude.m4 index dedcdce3cc8..1806b1fc418 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -849,6 +849,83 @@ dnl END OF MYSQL_CHECK_BDB SECTION dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- +dnl Macro: MYSQL_CHECK_INNOBASE +dnl Sets HAVE_INNOBASE_DB if --with-innobase-db is used +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MYSQL_CHECK_INNOBASE], [ + AC_ARG_WITH([innobase-db], + [\ + --with-innobase-db Use Innobase DB], + [innobase="$withval"], + [innobase=no]) + + AC_MSG_CHECKING([for Innobase DB]) + + have_innobase_db=no + innobase_includes= + innobase_libs= + case "$innobase" in + yes ) + AC_MSG_RESULT([Using Innobase DB]) + AC_DEFINE(HAVE_INNOBASE_DB) + have_innobase_db="yes" + innobase_includes="-I../innobase/include" +dnl Some libs are listed several times, in order for gcc to sort out +dnl circular references. + innobase_libs="\ + ../innobase/usr/libusr.a\ + ../innobase/odbc/libodbc.a\ + ../innobase/srv/libsrv.a\ + ../innobase/que/libque.a\ + ../innobase/dict/libdict.a\ + ../innobase/ibuf/libibuf.a\ + ../innobase/row/librow.a\ + ../innobase/pars/libpars.a\ + ../innobase/btr/libbtr.a\ + ../innobase/trx/libtrx.a\ + ../innobase/read/libread.a\ + ../innobase/usr/libusr.a\ + ../innobase/buf/libbuf.a\ + ../innobase/ibuf/libibuf.a\ + ../innobase/eval/libeval.a\ + ../innobase/log/liblog.a\ + ../innobase/fsp/libfsp.a\ + ../innobase/fut/libfut.a\ + ../innobase/fil/libfil.a\ + ../innobase/lock/liblock.a\ + ../innobase/mtr/libmtr.a\ + ../innobase/page/libpage.a\ + ../innobase/rem/librem.a\ + ../innobase/thr/libthr.a\ + ../innobase/com/libcom.a\ + ../innobase/sync/libsync.a\ + ../innobase/data/libdata.a\ + ../innobase/mach/libmach.a\ + ../innobase/ha/libha.a\ + ../innobase/dyn/libdyn.a\ + ../innobase/mem/libmem.a\ + ../innobase/sync/libsync.a\ + ../innobase/ut/libut.a\ + ../innobase/os/libos.a\ + ../innobase/ut/libut.a" + + AC_CHECK_LIB(rt, aio_read, [innobase_libs="$innobase_libs -lrt"]) + ;; + * ) + AC_MSG_RESULT([Not using Innobase DB]) + ;; + esac + + AC_SUBST(innobase_includes) + AC_SUBST(innobase_libs) +]) + +dnl --------------------------------------------------------------------------- +dnl END OF MYSQL_CHECK_INNOBASE SECTION +dnl --------------------------------------------------------------------------- + +dnl --------------------------------------------------------------------------- dnl Got this from the GNU tar 1.13.11 distribution dnl by Paul Eggert <eggert@twinsun.com> dnl --------------------------------------------------------------------------- diff --git a/configure.in b/configure.in index 64524fd20d8..56027305bdf 100644 --- a/configure.in +++ b/configure.in @@ -1833,6 +1833,7 @@ AC_MSG_RESULT([default: $default_charset; compiled in: $CHARSETS]) MYSQL_CHECK_BDB +MYSQL_CHECK_INNOBASE # If we have threads generate some library functions and test programs @@ -1898,6 +1899,16 @@ mysql-noinstall-hack:' \ AC_DEFINE(HAVE_BERKELEY_DB) fi + if test X"$have_innobase_db" = Xyes + then + sql_server_dirs="innobase $sql_server_dirs" + echo "CONFIGURING FOR INNOBASE DB" + (cd innobase && sh ./configure) \ + || AC_MSG_ERROR([could not configure Innobase DB]) + + echo "END OF INNOBASE DB CONFIGURATION" + fi + if test "$with_posix_threads" = "no" -o "$with_mit_threads" = "yes" then # MIT user level threads diff --git a/innobase/configure.in b/innobase/configure.in index 1289f881344..ba95df0cc8c 100644 --- a/innobase/configure.in +++ b/innobase/configure.in @@ -1,5 +1,6 @@ # Process this file with autoconf to produce a configure script -AC_INIT(./os/os0file.c) +AC_INIT +AM_MAINTAINER_MODE AM_CONFIG_HEADER(ib_config.h) AM_INIT_AUTOMAKE(ib, 0.90) AC_PROG_CC diff --git a/innobase/include/lock0types.h b/innobase/include/lock0types.h index 705e64f6581..6c3e54ee1fc 100644 --- a/innobase/include/lock0types.h +++ b/innobase/include/lock0types.h @@ -9,6 +9,7 @@ Created 5/7/1996 Heikki Tuuri #ifndef lock0types_h #define lock0types_h +#define lock_t ib_lock_t typedef struct lock_struct lock_t; typedef struct lock_sys_struct lock_sys_t; diff --git a/innobase/include/os0file.h b/innobase/include/os0file.h index 5b90f24f12e..a02cd947c28 100644 --- a/innobase/include/os0file.h +++ b/innobase/include/os0file.h @@ -28,6 +28,12 @@ Created 10/21/1995 Heikki Tuuri #define POSIX_ASYNC_IO #endif +#ifndef S_IRWXU +#define S_IRWXU 00700 +#define S_IRWXG 00070 +#define S_IRWXO 00007 +#endif + #endif #ifdef __WIN__ diff --git a/innobase/include/os0sync.h b/innobase/include/os0sync.h index dcf519fdb9d..a45f738f22b 100644 --- a/innobase/include/os0sync.h +++ b/innobase/include/os0sync.h @@ -25,8 +25,8 @@ struct os_event_struct { fields */ ibool is_set; /* this is TRUE if the next mutex is not reserved */ - os_fast_mutex_t wait_mutex; /* this mutex is used in waiting for - the event */ + pthread_cond_t cond_var; /* condition variable is used in + waiting for the event */ }; typedef struct os_event_struct os_event_struct_t; typedef os_event_struct_t* os_event_t; diff --git a/innobase/include/sync0types.h b/innobase/include/sync0types.h index 2c31f80cca3..57478426f25 100644 --- a/innobase/include/sync0types.h +++ b/innobase/include/sync0types.h @@ -9,6 +9,7 @@ Created 9/5/1995 Heikki Tuuri #ifndef sync0types_h #define sync0types_h +#define mutex_t ib_mutex_t typedef struct mutex_struct mutex_t; diff --git a/innobase/os/os0sync.c b/innobase/os/os0sync.c index 1647dd982f3..4c283431575 100644 --- a/innobase/os/os0sync.c +++ b/innobase/os/os0sync.c @@ -60,9 +60,9 @@ os_event_create( event = ut_malloc(sizeof(struct os_event_struct)); os_fast_mutex_init(&(event->os_mutex)); - os_fast_mutex_init(&(event->wait_mutex)); + pthread_cond_init(&(event->cond_var), NULL); - event->is_set = TRUE; + event->is_set = FALSE; return(event); #endif @@ -119,8 +119,8 @@ os_event_set( if (event->is_set) { /* Do nothing */ } else { - os_fast_mutex_unlock(&(event->wait_mutex)); event->is_set = TRUE; + pthread_cond_broadcast(&(event->cond_var)); } os_fast_mutex_unlock(&(event->os_mutex)); @@ -148,7 +148,6 @@ os_event_reset( if (!event->is_set) { /* Do nothing */ } else { - os_fast_mutex_lock(&(event->wait_mutex)); event->is_set = FALSE; } @@ -173,7 +172,7 @@ os_event_free( ut_a(event); os_fast_mutex_free(&(event->os_mutex)); - os_fast_mutex_free(&(event->wait_mutex)); + pthread_cond_destroy(&(event->cond_var)); ut_free(event); #endif @@ -197,8 +196,22 @@ os_event_wait( ut_a(err == WAIT_OBJECT_0); #else - os_fast_mutex_lock(&(event->wait_mutex)); - os_fast_mutex_unlock(&(event->wait_mutex)); + os_fast_mutex_lock(&(event->os_mutex)); +loop: + if (event->is_set == TRUE) { + os_fast_mutex_unlock(&(event->os_mutex)); + + /* Ok, we may return */ + + return; + } + + pthread_cond_wait(&(event->cond_var), &(event->os_mutex)); + + /* Solaris manual said that spurious wakeups may occur: we have + to check the 'is_set' variable again */ + + goto loop; #endif } diff --git a/sql/Makefile.am b/sql/Makefile.am index a8fe9fc233f..7d4fd86878a 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -20,7 +20,9 @@ MYSQLDATAdir = $(localstatedir) MYSQLSHAREdir = $(pkgdatadir) MYSQLBASEdir= $(prefix) -INCLUDES = @MT_INCLUDES@ @bdb_includes@ -I$(srcdir)/../include \ +INCLUDES = @MT_INCLUDES@ \ + @bdb_includes@ @innobase_includes@ \ + -I$(srcdir)/../include \ -I$(srcdir)/../regex \ -I$(srcdir) -I../include -I.. -I. WRAPLIBS= @WRAPLIBS@ @@ -37,7 +39,9 @@ LDADD = ../isam/libnisam.a \ ../dbug/libdbug.a \ ../regex/libregex.a \ ../strings/libmystrings.a -mysqld_LDADD = @MYSQLD_EXTRA_LDFLAGS@ @bdb_libs@ $(LDADD) $(CXXLDFLAGS) $(WRAPLIBS) +mysqld_LDADD = @MYSQLD_EXTRA_LDFLAGS@ \ + @bdb_libs@ @innobase_libs@ \ + $(LDADD) $(CXXLDFLAGS) $(WRAPLIBS) noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \ item_strfunc.h item_timefunc.h item_uniq.h \ item_create.h mysql_priv.h \ diff --git a/sql/ha_innobase.cc b/sql/ha_innobase.cc index 4b33c7b87ae..65d12fd9729 100644 --- a/sql/ha_innobase.cc +++ b/sql/ha_innobase.cc @@ -1288,9 +1288,9 @@ calc_row_difference( uint n_fields; ulint o_len; ulint n_len; - mysql_byte* o_ptr; - mysql_byte* n_ptr; - mysql_byte* buf; + byte* o_ptr; + byte* n_ptr; + byte* buf; upd_field_t* ufield; ulint col_type; ulint is_unsigned; @@ -1300,7 +1300,7 @@ calc_row_difference( n_fields = table->fields; /* We use upd_buff to convert changed fields */ - buf = upd_buff; + buf = (byte*) upd_buff; for (i = 0; i < n_fields; i++) { field = table->field[i]; @@ -1312,8 +1312,8 @@ calc_row_difference( goto skip_field; } - o_ptr = old_row + get_field_offset(table, field); - n_ptr = new_row + get_field_offset(table, field); + o_ptr = (byte*) old_row + get_field_offset(table, field); + n_ptr = (byte*) new_row + get_field_offset(table, field); o_len = field->pack_length(); n_len = field->pack_length(); @@ -1353,8 +1353,10 @@ calc_row_difference( ufield = uvect->fields + n_changed; - buf = innobase_convert_and_store_changed_col(ufield, - buf, n_ptr, n_len, col_type, + buf = (byte*) + innobase_convert_and_store_changed_col(ufield, + (mysql_byte*)buf, + (mysql_byte*)n_ptr, n_len, col_type, is_unsigned); ufield->exp = NULL; ufield->field_no = @@ -1580,7 +1582,7 @@ ha_innobase::index_read( last_match_mode = match_mode; - ret = row_search_for_mysql(buf, mode, prebuilt, match_mode, 0); + ret = row_search_for_mysql((byte*) buf, mode, prebuilt, match_mode, 0); if (ret == DB_SUCCESS) { error = 0; @@ -1690,7 +1692,8 @@ ha_innobase::general_fetch( DBUG_ENTER("general_fetch"); - ret = row_search_for_mysql(buf, 0, prebuilt, match_mode, direction); + ret = row_search_for_mysql((byte*)buf, 0, prebuilt, + match_mode, direction); if (ret == DB_SUCCESS) { error = 0; @@ -2550,11 +2553,11 @@ ha_innobase::update_table_comment( char *str=my_malloc(length + 50,MYF(0)); if (!str) - return comment; + return (char*)comment; sprintf(str,"%s Innobase free: %lu kB", comment,innobase_get_free_space()); - return str; + return((char*) str); } |