summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <brian@brian-akers-computer.local>2004-04-14 14:36:36 -0400
committerunknown <brian@brian-akers-computer.local>2004-04-14 14:36:36 -0400
commitf10d01a747267e169d9f0b80d30a71b00f0bce7c (patch)
treef2093400a62fb1870556251762c63545c99eb586
parentf76d2ce34f4947648fc910669b4639182da6dbaa (diff)
parentb26c1ed58a6a8026d48b7f27ff9620f61e9a84b0 (diff)
downloadmariadb-git-f10d01a747267e169d9f0b80d30a71b00f0bce7c.tar.gz
Resolved changes between example storage engine and NDB storage engine.
BitKeeper/etc/logging_ok: auto-union acconfig.h: Auto merged acinclude.m4: Merged in example storage engine with NDB configure.in: Resolved conflict between NDB check with EXAMPLE DB.
-rw-r--r--BitKeeper/etc/logging_ok1
-rw-r--r--acconfig.h3
-rw-r--r--acinclude.m431
-rw-r--r--configure.in1
-rw-r--r--include/my_base.h3
-rw-r--r--sql/Makefile.am8
-rw-r--r--sql/examples/ha_example.cc300
-rw-r--r--sql/examples/ha_example.h91
-rw-r--r--sql/handler.cc9
-rw-r--r--sql/handler.h2
-rw-r--r--sql/mysql_priv.h2
-rw-r--r--sql/mysqld.cc7
12 files changed, 452 insertions, 6 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index 55756692a18..d844c855de3 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -24,6 +24,7 @@ bell@laptop.sanja.is.com.ua
bell@sanja.is.com.ua
bk@admin.bk
bk@mysql.r18.ru
+brian@brian-akers-computer.local
carsten@tsort.bitbybit.dk
davida@isil.mysql.com
dlenev@brandersnatch.localdomain
diff --git a/acconfig.h b/acconfig.h
index 88c9e54e713..67e9d1759c6 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -112,6 +112,9 @@
/* Define if we are using OSF1 DEC threads on 3.2 */
#undef HAVE_DEC_3_2_THREADS
+/* Builds Example DB */
+#undef HAVE_EXAMPLE_DB
+
/* fp_except from ieeefp.h */
#undef HAVE_FP_EXCEPT
diff --git a/acinclude.m4 b/acinclude.m4
index a67273f3ed8..677c3cc9e99 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1303,6 +1303,36 @@ dnl END OF MYSQL_CHECK_INNODB SECTION
dnl ---------------------------------------------------------------------------
dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_CHECK_EXAMPLEDB
+dnl Sets HAVE_EXAMPLE_DB if --with-example-storage-engine is used
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([MYSQL_CHECK_EXAMPLEDB], [
+ AC_ARG_WITH([example-storage-engine],
+ [
+ --with-example-storage-engine
+ Enable the Example Storge Engine],
+ [exampledb="$withval"],
+ [exampledb=no])
+ AC_MSG_CHECKING([for example storage engine])
+
+ case "$exampledb" in
+ yes )
+ AC_DEFINE(HAVE_EXAMPLE_DB)
+ AC_MSG_RESULT([yes])
+ [exampledb=yes]
+ ;;
+ * )
+ AC_MSG_RESULT([no])
+ [exampledb=no]
+ ;;
+ esac
+
+])
+dnl ---------------------------------------------------------------------------
+dnl END OF MYSQL_CHECK_EXAMPLE SECTION
+dnl ---------------------------------------------------------------------------
+
+dnl ---------------------------------------------------------------------------
dnl Macro: MYSQL_CHECK_NDBCLUSTER
dnl Sets HAVE_NDBCLUSTER_DB if --with-ndbcluster is used
dnl ---------------------------------------------------------------------------
@@ -1343,6 +1373,7 @@ dnl END OF MYSQL_CHECK_NDBCLUSTER SECTION
dnl ---------------------------------------------------------------------------
+>>>>>>>
dnl By default, many hosts won't let programs access large files;
dnl one must use special compiler options to get large-file access to work.
dnl For more details about this brain damage please see:
diff --git a/configure.in b/configure.in
index c218df7be1c..94ad5a47991 100644
--- a/configure.in
+++ b/configure.in
@@ -2618,6 +2618,7 @@ AC_DEFINE_UNQUOTED(MYSQL_DEFAULT_COLLATION_NAME,"$default_collation")
MYSQL_CHECK_ISAM
MYSQL_CHECK_BDB
MYSQL_CHECK_INNODB
+MYSQL_CHECK_EXAMPLEDB
MYSQL_CHECK_NDBCLUSTER
# If we have threads generate some library functions and test programs
diff --git a/include/my_base.h b/include/my_base.h
index b38e177fd89..61d4c4e3225 100644
--- a/include/my_base.h
+++ b/include/my_base.h
@@ -364,4 +364,7 @@ typedef ulong ha_rows;
#define MAX_FILE_SIZE LONGLONG_MAX
#endif
+/* Currently used for saying which interfaces a Storage Engine implements */
+#define HA_ERR_NOT_IMPLEMENTED -1
+
#endif /* _my_base_h */
diff --git a/sql/Makefile.am b/sql/Makefile.am
index 4aa6aaaa1ee..bacf3bc58d1 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -37,7 +37,7 @@ LDADD = @isam_libs@ \
../mysys/libmysys.a \
../dbug/libdbug.a \
../regex/libregex.a \
- ../strings/libmystrings.a
+ ../strings/libmystrings.a
mysqld_LDADD = @MYSQLD_EXTRA_LDFLAGS@ \
@bdb_libs@ @innodb_libs@ @pstack_libs@ \
@@ -57,7 +57,8 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
lex.h lex_symbol.h sql_acl.h sql_crypt.h \
log_event.h sql_repl.h slave.h \
stacktrace.h sql_sort.h sql_cache.h set_var.h \
- spatial.h gstream.h client_settings.h
+ spatial.h gstream.h client_settings.h \
+ examples/ha_example.h
mysqld_SOURCES = sql_lex.cc sql_handler.cc \
item.cc item_sum.cc item_buff.cc item_func.cc \
item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \
@@ -86,7 +87,8 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
slave.cc sql_repl.cc sql_union.cc sql_derived.cc \
client.c sql_client.cc mini_client_errors.c pack.c\
stacktrace.c repl_failsafe.h repl_failsafe.cc sql_olap.cc\
- gstream.cc spatial.cc sql_help.cc protocol_cursor.cc
+ gstream.cc spatial.cc sql_help.cc protocol_cursor.cc \
+ examples/ha_example.cc
gen_lex_hash_SOURCES = gen_lex_hash.cc
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
diff --git a/sql/examples/ha_example.cc b/sql/examples/ha_example.cc
new file mode 100644
index 00000000000..e2463761e67
--- /dev/null
+++ b/sql/examples/ha_example.cc
@@ -0,0 +1,300 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifdef __GNUC__
+#pragma implementation // gcc: Class implementation
+#endif
+
+#include <mysql_priv.h>
+
+#ifdef HAVE_EXAMPLE_DB
+#include "ha_example.h"
+
+/* Variables for example share methods */
+pthread_mutex_t example_mutex;
+static HASH example_open_tables;
+static int example_init= 0;
+
+static byte* example_get_key(EXAMPLE_SHARE *share,uint *length,
+ my_bool not_used __attribute__((unused)))
+{
+ *length=share->table_name_length;
+ return (byte*) share->table_name;
+}
+
+
+/*
+ Example of simple lock controls.
+*/
+static EXAMPLE_SHARE *get_share(const char *table_name, TABLE *table)
+{
+ EXAMPLE_SHARE *share;
+ uint length;
+ char *tmp_name;
+
+ if (!example_init)
+ {
+ /* Hijack a mutex for init'ing the storage engine */
+ pthread_mutex_lock(&LOCK_mysql_create_db);
+ if (!example_init)
+ {
+ example_init++;
+ VOID(pthread_mutex_init(&example_mutex,MY_MUTEX_INIT_FAST));
+ (void) hash_init(&example_open_tables,system_charset_info,32,0,0,
+ (hash_get_key) example_get_key,0,0);
+ }
+ pthread_mutex_unlock(&LOCK_mysql_create_db);
+ }
+ pthread_mutex_lock(&example_mutex);
+ length=(uint) strlen(table_name);
+
+ if (!(share=(EXAMPLE_SHARE*) hash_search(&example_open_tables,
+ (byte*) table_name,
+ length)))
+ {
+ if (!(share=(EXAMPLE_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &share, sizeof(*share),
+ &tmp_name, length+1,
+ NullS)))
+ {
+ pthread_mutex_unlock(&example_mutex);
+ return NULL;
+ }
+
+ share->use_count=0;
+ share->table_name_length=length;
+ share->table_name=tmp_name;
+ strmov(share->table_name,table_name);
+ if (my_hash_insert(&example_open_tables, (byte*) share))
+ goto error;
+ thr_lock_init(&share->lock);
+ pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST);
+ }
+ share->use_count++;
+ pthread_mutex_unlock(&example_mutex);
+
+ return share;
+
+error2:
+ thr_lock_delete(&share->lock);
+ pthread_mutex_destroy(&share->mutex);
+error:
+ pthread_mutex_unlock(&example_mutex);
+ my_free((gptr) share, MYF(0));
+
+ return NULL;
+}
+
+
+/*
+ Free lock controls.
+*/
+static int free_share(EXAMPLE_SHARE *share)
+{
+ pthread_mutex_lock(&example_mutex);
+ if (!--share->use_count)
+ {
+ hash_delete(&example_open_tables, (byte*) share);
+ thr_lock_delete(&share->lock);
+ pthread_mutex_destroy(&share->mutex);
+ my_free((gptr) share, MYF(0));
+ }
+ pthread_mutex_unlock(&example_mutex);
+
+ return 0;
+}
+
+
+const char **ha_example::bas_ext() const
+{ static const char *ext[]= { NullS }; return ext; }
+
+
+int ha_example::open(const char *name, int mode, uint test_if_locked)
+{
+ DBUG_ENTER("ha_example::open");
+
+ if (!(share = get_share(name, table)))
+ DBUG_RETURN(1);
+ thr_lock_data_init(&share->lock,&lock,NULL);
+
+ DBUG_RETURN(0);
+}
+
+int ha_example::close(void)
+{
+ DBUG_ENTER("ha_example::close");
+ DBUG_RETURN(free_share(share));
+}
+
+int ha_example::write_row(byte * buf)
+{
+ DBUG_ENTER("ha_example::write_row");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::update_row(const byte * old_data, byte * new_data)
+{
+
+ DBUG_ENTER("ha_example::update_row");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::delete_row(const byte * buf)
+{
+ DBUG_ENTER("ha_example::delete_row");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::index_read(byte * buf, const byte * key,
+ uint key_len __attribute__((unused)),
+ enum ha_rkey_function find_flag
+ __attribute__((unused)))
+{
+ DBUG_ENTER("ha_example::index_read");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::index_read_idx(byte * buf, uint index, const byte * key,
+ uint key_len __attribute__((unused)),
+ enum ha_rkey_function find_flag
+ __attribute__((unused)))
+{
+ DBUG_ENTER("ha_example::index_read_idx");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+
+int ha_example::index_next(byte * buf)
+{
+ DBUG_ENTER("ha_example::index_next");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::index_prev(byte * buf)
+{
+ DBUG_ENTER("ha_example::index_prev");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::index_first(byte * buf)
+{
+ DBUG_ENTER("ha_example::index_first");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::index_last(byte * buf)
+{
+ DBUG_ENTER("ha_example::index_last");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::rnd_init(bool scan)
+{
+ DBUG_ENTER("ha_example::rnd_init");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::rnd_next(byte *buf)
+{
+ DBUG_ENTER("ha_example::rnd_next");
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+}
+
+void ha_example::position(const byte *record)
+{
+ DBUG_ENTER("ha_example::position");
+ DBUG_VOID_RETURN;
+}
+
+int ha_example::rnd_pos(byte * buf, byte *pos)
+{
+ DBUG_ENTER("ha_example::rnd_pos");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+void ha_example::info(uint flag)
+{
+ DBUG_ENTER("ha_example::info");
+ DBUG_VOID_RETURN;
+}
+
+int ha_example::extra(enum ha_extra_function operation)
+{
+ DBUG_ENTER("ha_example::extra");
+ DBUG_RETURN(0);
+}
+
+int ha_example::reset(void)
+{
+ DBUG_ENTER("ha_example::reset");
+ DBUG_RETURN(0);
+}
+
+
+int ha_example::delete_all_rows()
+{
+ DBUG_ENTER("ha_example::delete_all_rows");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+int ha_example::external_lock(THD *thd, int lock_type)
+{
+ DBUG_ENTER("ha_example::external_lock");
+ DBUG_RETURN(0);
+}
+
+THR_LOCK_DATA **ha_example::store_lock(THD *thd,
+ THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type)
+{
+ if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK)
+ lock.type=lock_type;
+ *to++= &lock;
+ return to;
+}
+
+int ha_example::delete_table(const char *name)
+{
+ DBUG_ENTER("ha_example::delete_table");
+ /* This is not implemented but we want someone to be able that it works. */
+ DBUG_RETURN(0);
+}
+
+int ha_example::rename_table(const char * from, const char * to)
+{
+ DBUG_ENTER("ha_example::rename_table ");
+ DBUG_RETURN(HA_ERR_NOT_IMPLEMENTED);
+}
+
+ha_rows ha_example::records_in_range(int inx,
+ const byte *start_key,uint start_key_len,
+ enum ha_rkey_function start_search_flag,
+ const byte *end_key,uint end_key_len,
+ enum ha_rkey_function end_search_flag)
+{
+ DBUG_ENTER("ha_example::records_in_range ");
+ DBUG_RETURN(records); // HA_ERR_NOT_IMPLEMENTED
+}
+
+
+int ha_example::create(const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info)
+{
+ DBUG_ENTER("ha_example::create");
+ /* This is not implemented but we want someone to be able that it works. */
+ DBUG_RETURN(0);
+}
+#endif /* HAVE_EXAMPLE_DB */
diff --git a/sql/examples/ha_example.h b/sql/examples/ha_example.h
new file mode 100644
index 00000000000..466632a1795
--- /dev/null
+++ b/sql/examples/ha_example.h
@@ -0,0 +1,91 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+typedef struct st_example_share {
+ char *table_name;
+ uint table_name_length,use_count;
+ pthread_mutex_t mutex;
+ THR_LOCK lock;
+} EXAMPLE_SHARE;
+
+class ha_example: public handler
+{
+ THR_LOCK_DATA lock; /* MySQL lock */
+ EXAMPLE_SHARE *share; /* Shared lock info */
+
+public:
+ ha_example(TABLE *table): handler(table)
+ {
+ }
+ ~ha_example()
+ {
+ }
+ const char *table_type() const { return "EXAMPLE"; }
+ const char *index_type(uint inx) { return "NONE"; }
+ const char **bas_ext() const;
+ ulong table_flags() const
+ {
+ return 0;
+ }
+ ulong index_flags(uint inx) const
+ {
+ return 0;
+ }
+ uint max_record_length() const { return HA_MAX_REC_LENGTH; }
+ uint max_keys() const { return 0; }
+ uint max_key_parts() const { return 0; }
+ uint max_key_length() const { return 0; }
+ /*
+ Called in test_quick_select to determine if indexes should be used.
+ */
+ virtual double scan_time() { return (double) (records+deleted) / 20.0+10; }
+ /* The next method will never be called */
+ virtual double read_time(ha_rows rows) { return (double) rows / 20.0+1; }
+ virtual bool fast_key_read() { return 1;}
+
+ int open(const char *name, int mode, uint test_if_locked);
+ int close(void);
+ int write_row(byte * buf);
+ int update_row(const byte * old_data, byte * new_data);
+ int delete_row(const byte * buf);
+ int index_read(byte * buf, const byte * key,
+ uint key_len, enum ha_rkey_function find_flag);
+ int index_read_idx(byte * buf, uint idx, const byte * key,
+ uint key_len, enum ha_rkey_function find_flag);
+ int index_next(byte * buf);
+ int index_prev(byte * buf);
+ int index_first(byte * buf);
+ int index_last(byte * buf);
+ int rnd_init(bool scan=1);
+ int rnd_next(byte *buf);
+ int rnd_pos(byte * buf, byte *pos);
+ void position(const byte *record);
+ void info(uint);
+ int extra(enum ha_extra_function operation);
+ int reset(void);
+ int external_lock(THD *thd, int lock_type);
+ int delete_all_rows(void);
+ ha_rows records_in_range(int inx, const byte *start_key,uint start_key_len,
+ enum ha_rkey_function start_search_flag,
+ const byte *end_key,uint end_key_len,
+ enum ha_rkey_function end_search_flag);
+ int delete_table(const char *from);
+ int rename_table(const char * from, const char * to);
+ int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info);
+
+ THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type);
+};
diff --git a/sql/handler.cc b/sql/handler.cc
index 2b22563bc3c..97abc11abe3 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -32,6 +32,9 @@
#ifdef HAVE_BERKELEY_DB
#include "ha_berkeley.h"
#endif
+#ifdef HAVE_EXAMPLE_DB
+#include "examples/ha_example.h"
+#endif
#ifdef HAVE_INNOBASE_DB
#include "ha_innodb.h"
#else
@@ -76,6 +79,8 @@ struct show_table_type_st sys_table_types[]=
"Supports transactions and page-level locking", DB_TYPE_BERKELEY_DB},
{"BERKELEYDB",&have_berkeley_db,
"Alias for BDB", DB_TYPE_BERKELEY_DB},
+ {"EXAMPLE",&have_example_db,
+ "Example storage engine", DB_TYPE_EXAMPLE_DB},
{NullS, NULL, NullS, DB_TYPE_UNKNOWN}
};
@@ -172,6 +177,10 @@ handler *get_new_handler(TABLE *table, enum db_type db_type)
case DB_TYPE_INNODB:
return new ha_innobase(table);
#endif
+#ifdef HAVE_EXAMPLE_DB
+ case DB_TYPE_EXAMPLE_DB:
+ return new ha_example(table);
+#endif
case DB_TYPE_HEAP:
return new ha_heap(table);
default: // should never happen
diff --git a/sql/handler.h b/sql/handler.h
index 4cb6ab86a37..9d39eff1301 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -146,7 +146,7 @@ enum db_type { DB_TYPE_UNKNOWN=0,DB_TYPE_DIAB_ISAM=1,
DB_TYPE_RMS_ISAM, DB_TYPE_HEAP, DB_TYPE_ISAM,
DB_TYPE_MRG_ISAM, DB_TYPE_MYISAM, DB_TYPE_MRG_MYISAM,
DB_TYPE_BERKELEY_DB, DB_TYPE_INNODB, DB_TYPE_GEMINI,
- DB_TYPE_DEFAULT };
+ DB_TYPE_EXAMPLE_DB, DB_TYPE_DEFAULT };
struct show_table_type_st {
const char *type;
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 1175b93b9ba..c1b796d19c7 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -908,7 +908,7 @@ extern struct my_option my_long_options[];
/* optional things, have_* variables */
-extern SHOW_COMP_OPTION have_isam, have_innodb, have_berkeley_db;
+extern SHOW_COMP_OPTION have_isam, have_innodb, have_berkeley_db, have_example_db;
extern SHOW_COMP_OPTION have_raid, have_openssl, have_symlink;
extern SHOW_COMP_OPTION have_query_cache, have_berkeley_db, have_innodb;
extern SHOW_COMP_OPTION have_crypt;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 5176ee33a17..585c28f3959 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -370,7 +370,7 @@ KEY_CACHE *sql_key_cache;
CHARSET_INFO *system_charset_info, *files_charset_info ;
CHARSET_INFO *national_charset_info, *table_alias_charset;
-SHOW_COMP_OPTION have_berkeley_db, have_innodb, have_isam;
+SHOW_COMP_OPTION have_berkeley_db, have_innodb, have_isam, have_example_db;
SHOW_COMP_OPTION have_raid, have_openssl, have_symlink, have_query_cache;
SHOW_COMP_OPTION have_crypt, have_compress;
@@ -5121,6 +5121,11 @@ static void mysql_init_variables(void)
#else
have_isam=SHOW_OPTION_NO;
#endif
+#ifdef HAVE_EXAMPLE_DB
+ have_example_db= SHOW_OPTION_YES;
+#else
+ have_example_db= SHOW_OPTION_NO;
+#endif
#ifdef USE_RAID
have_raid=SHOW_OPTION_YES;
#else