summaryrefslogtreecommitdiff
path: root/sql/handler.cc
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-12-14 15:01:02 -0800
committerunknown <jimw@mysql.com>2005-12-14 15:01:02 -0800
commit4e82e0af516d47aeb34b37f8b64865509189bcf5 (patch)
treedb0e40dbafbcbe2da6f2fe8801d3c2c2c937efad /sql/handler.cc
parent9a3cc2827c891e1466dcc8127d76fa9576babc61 (diff)
downloadmariadb-git-4e82e0af516d47aeb34b37f8b64865509189bcf5.tar.gz
Fix crash when trying to open table using a disabled storage engine. (Bug #15185)
sql/handler.cc: Don't create handler object for engines that are disabled.
Diffstat (limited to 'sql/handler.cc')
-rw-r--r--sql/handler.cc35
1 files changed, 25 insertions, 10 deletions
diff --git a/sql/handler.cc b/sql/handler.cc
index 47010de3002..5a0e0d27b40 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -300,39 +300,56 @@ handler *get_new_handler(TABLE *table, MEM_ROOT *alloc, enum db_type db_type)
case DB_TYPE_HASH:
return new (alloc) ha_hash(table);
#endif
+ case DB_TYPE_MRG_MYISAM:
case DB_TYPE_MRG_ISAM:
return new (alloc) ha_myisammrg(table);
#ifdef HAVE_BERKELEY_DB
case DB_TYPE_BERKELEY_DB:
- return new (alloc) ha_berkeley(table);
+ if (have_berkeley_db == SHOW_OPTION_YES)
+ return new (alloc) ha_berkeley(table);
+ return NULL;
#endif
#ifdef HAVE_INNOBASE_DB
case DB_TYPE_INNODB:
- return new (alloc) ha_innobase(table);
+ if (have_innodb == SHOW_OPTION_YES)
+ return new (alloc) ha_innobase(table);
+ return NULL;
#endif
#ifdef HAVE_EXAMPLE_DB
case DB_TYPE_EXAMPLE_DB:
- return new (alloc) ha_example(table);
+ if (have_example_db == SHOW_OPTION_YES)
+ return new (alloc) ha_example(table);
+ return NULL;
#endif
#if defined(HAVE_ARCHIVE_DB) && !defined(__NETWARE__)
case DB_TYPE_ARCHIVE_DB:
- return new (alloc) ha_archive(table);
+ if (have_archive_db == SHOW_OPTION_YES)
+ return new (alloc) ha_archive(table);
+ return NULL;
#endif
#ifdef HAVE_BLACKHOLE_DB
case DB_TYPE_BLACKHOLE_DB:
- return new (alloc) ha_blackhole(table);
+ if (have_blackhole_db == SHOW_OPTION_YES)
+ return new (alloc) ha_blackhole(table);
+ return NULL;
#endif
#ifdef HAVE_FEDERATED_DB
case DB_TYPE_FEDERATED_DB:
- return new (alloc) ha_federated(table);
+ if (have_federated_db == SHOW_OPTION_YES)
+ return new (alloc) ha_federated(table);
+ return NULL;
#endif
#ifdef HAVE_CSV_DB
case DB_TYPE_CSV_DB:
- return new (alloc) ha_tina(table);
+ if (have_csv_db == SHOW_OPTION_YES)
+ return new (alloc) ha_tina(table);
+ return NULL;
#endif
#ifdef HAVE_NDBCLUSTER_DB
case DB_TYPE_NDBCLUSTER:
- return new (alloc) ha_ndbcluster(table);
+ if (have_ndbcluster == SHOW_OPTION_YES)
+ return new (alloc) ha_ndbcluster(table);
+ return NULL;
#endif
case DB_TYPE_HEAP:
return new (alloc) ha_heap(table);
@@ -346,8 +363,6 @@ handler *get_new_handler(TABLE *table, MEM_ROOT *alloc, enum db_type db_type)
/* Fall back to MyISAM */
case DB_TYPE_MYISAM:
return new (alloc) ha_myisam(table);
- case DB_TYPE_MRG_MYISAM:
- return new (alloc) ha_myisammrg(table);
}
}