summaryrefslogtreecommitdiff
path: root/sql/ha_blackhole.cc
diff options
context:
space:
mode:
authorunknown <brian@zim.(none)>2005-03-22 16:10:39 -0800
committerunknown <brian@zim.(none)>2005-03-22 16:10:39 -0800
commit8a99997d6061ec3e2d75616422eac413868ceada (patch)
tree5c6b4d736e4b7ef46a5f108c4b75ea97249d7398 /sql/ha_blackhole.cc
parent5b32b8e1dd281d15de4ccafb23dde29b43303850 (diff)
downloadmariadb-git-8a99997d6061ec3e2d75616422eac413868ceada.tar.gz
Additional storage engine called "blackhole". Customer request, and for that matter a Zawodny request. With this you can alter table to a type of table that would never store data. Its a /dev/null for a database.
acinclude.m4: New macro rule for ha_blackhole. configure.in: Rule enabling blackhole engine sql/Makefile.am: Additions to Makefile for blackhole engine sql/handler.cc: Ifdef enable code for blackhole (and message for "what does this thing do"). sql/handler.h: Flag for storage engine type. sql/mysql_priv.h: Added blackhole type. sql/mysqld.cc: Updates for building backhole. sql/set_var.cc: Show variable for blackhole engine
Diffstat (limited to 'sql/ha_blackhole.cc')
-rw-r--r--sql/ha_blackhole.cc164
1 files changed, 164 insertions, 0 deletions
diff --git a/sql/ha_blackhole.cc b/sql/ha_blackhole.cc
new file mode 100644
index 00000000000..e13c433b0ac
--- /dev/null
+++ b/sql/ha_blackhole.cc
@@ -0,0 +1,164 @@
+/* Copyright (C) 2005 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_BLACKHOLE_DB
+#include "ha_blackhole.h"
+
+
+const char **ha_blackhole::bas_ext() const
+{
+ static const char *ext[]= { NullS };
+ return ext;
+}
+
+int ha_blackhole::open(const char *name, int mode, uint test_if_locked)
+{
+ DBUG_ENTER("ha_blackhole::open");
+ thr_lock_init(&thr_lock);
+ thr_lock_data_init(&thr_lock,&lock,NULL);
+ DBUG_RETURN(0);
+}
+
+int ha_blackhole::close(void)
+{
+ DBUG_ENTER("ha_blackhole::close");
+ thr_lock_delete(&thr_lock);
+ DBUG_RETURN(0);
+}
+
+int ha_blackhole::create(const char *name, TABLE *table_arg,
+ HA_CREATE_INFO *create_info)
+{
+ DBUG_ENTER("ha_blackhole::create");
+ DBUG_RETURN(0);
+}
+
+const char *ha_blackhole::index_type(uint key_number)
+{
+ DBUG_ENTER("ha_blackhole::index_type");
+ DBUG_RETURN((table->key_info[key_number].flags & HA_FULLTEXT) ?
+ "FULLTEXT" :
+ (table->key_info[key_number].flags & HA_SPATIAL) ?
+ "SPATIAL" :
+ (table->key_info[key_number].algorithm == HA_KEY_ALG_RTREE) ?
+ "RTREE" :
+ "BTREE");
+}
+
+int ha_blackhole::write_row(byte * buf)
+{
+ DBUG_ENTER("ha_blackhole::write_row");
+ DBUG_RETURN(0);
+}
+
+int ha_blackhole::rnd_init(bool scan)
+{
+ DBUG_ENTER("ha_blackhole::rnd_init");
+ DBUG_RETURN(0);
+}
+
+
+int ha_blackhole::rnd_next(byte *buf)
+{
+ DBUG_ENTER("ha_blackhole::rnd_next");
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+}
+
+
+int ha_blackhole::rnd_pos(byte * buf, byte *pos)
+{
+ DBUG_ENTER("ha_blackhole::rnd_pos");
+ DBUG_RETURN(0);
+}
+
+
+void ha_blackhole::position(const byte *record)
+{
+ DBUG_ENTER("ha_blackhole::position");
+ DBUG_VOID_RETURN;
+}
+
+
+void ha_blackhole::info(uint flag)
+{
+ DBUG_ENTER("ha_blackhole::info");
+
+ records= 0;
+ deleted= 0;
+ errkey= 0;
+ mean_rec_length= 0;
+ data_file_length= 0;
+ index_file_length= 0;
+ max_data_file_length= 0;
+ delete_length= 0;
+ if (flag & HA_STATUS_AUTO)
+ auto_increment_value= 1;
+ DBUG_VOID_RETURN;
+}
+
+int ha_blackhole::external_lock(THD *thd, int lock_type)
+{
+ DBUG_ENTER("ha_blackhole::external_lock");
+ DBUG_RETURN(0);
+}
+
+
+THR_LOCK_DATA **ha_blackhole::store_lock(THD *thd,
+ THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type)
+{
+ if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK)
+ {
+ /*
+ Here is where we get into the guts of a row level lock.
+ If TL_UNLOCK is set
+ If we are not doing a LOCK TABLE or DISCARD/IMPORT
+ TABLESPACE, then allow multiple writers
+ */
+
+ if ((lock_type >= TL_WRITE_CONCURRENT_INSERT &&
+ lock_type <= TL_WRITE) && !thd->in_lock_tables
+ && !thd->tablespace_op)
+ lock_type = TL_WRITE_ALLOW_WRITE;
+
+ /*
+ In queries of type INSERT INTO t1 SELECT ... FROM t2 ...
+ MySQL would use the lock TL_READ_NO_INSERT on t2, and that
+ would conflict with TL_WRITE_ALLOW_WRITE, blocking all inserts
+ to t2. Convert the lock to a normal read lock to allow
+ concurrent inserts to t2.
+ */
+
+ if (lock_type == TL_READ_NO_INSERT && !thd->in_lock_tables)
+ lock_type = TL_READ;
+
+ lock.type=lock_type;
+ }
+
+ *to++= &lock;
+
+ return to;
+}
+
+
+#endif /* HAVE_BLACKHOLE_DB */