List:Commits« Previous MessageNext Message »
From:horst.hunger Date:February 7 2012 1:32pm
Subject:bzr push into mysql-trunk-wl5824 branch (horst.hunger:3794 to 3795)
View as plain text  
 3795 horst.hunger@stripped	2012-02-07
      wl5824: First MTR tests for memcached.

    added:
      mysql-test/suite/memcached/
      mysql-test/suite/memcached/inc/
      mysql-test/suite/memcached/inc/memcache_config.inc
      mysql-test/suite/memcached/r/
      mysql-test/suite/memcached/r/memcached_add.result
      mysql-test/suite/memcached/r/memcached_decr.result
      mysql-test/suite/memcached/r/memcached_delete.result
      mysql-test/suite/memcached/r/memcached_get.result
      mysql-test/suite/memcached/r/memcached_incr.result
      mysql-test/suite/memcached/r/memcached_replace.result
      mysql-test/suite/memcached/r/memcached_set.result
      mysql-test/suite/memcached/t/
      mysql-test/suite/memcached/t/memcached_add-master.opt
      mysql-test/suite/memcached/t/memcached_add.test
      mysql-test/suite/memcached/t/memcached_decr-master.opt
      mysql-test/suite/memcached/t/memcached_decr.test
      mysql-test/suite/memcached/t/memcached_delete-master.opt
      mysql-test/suite/memcached/t/memcached_delete.test
      mysql-test/suite/memcached/t/memcached_get-master.opt
      mysql-test/suite/memcached/t/memcached_get.test
      mysql-test/suite/memcached/t/memcached_incr-master.opt
      mysql-test/suite/memcached/t/memcached_incr.test
      mysql-test/suite/memcached/t/memcached_replace-master.opt
      mysql-test/suite/memcached/t/memcached_replace.test
      mysql-test/suite/memcached/t/memcached_set-master.opt
      mysql-test/suite/memcached/t/memcached_set.test
    modified:
      mysql-test/include/plugin.defs
 3794 Jimmy Yang	2012-02-03 [merge]
      Merge mysql-trunk-wl5824 with mysql-trunk

    removed:
      include/byteorder/
    added:
      mysql-test/include/function_defaults.inc
      mysql-test/include/function_defaults_notembedded.inc
      mysql-test/include/libdaemon_example.ini
      mysql-test/r/function_defaults.result
      mysql-test/r/function_defaults_notembedded.result
      mysql-test/std_data/onerow.xml
      mysql-test/suite/rpl/r/rpl_function_defaults.result
      mysql-test/suite/rpl/t/rpl_function_defaults.test
      mysql-test/t/function_defaults.test
      mysql-test/t/function_defaults_notembedded.test
      mysql-test/wl5874_updown
      sql/delayable_insert_operation.h
      unittest/gunit/copy_info-t.cc
      unittest/gunit/create_field-t.cc
      unittest/gunit/delayable_insert_operation-t.cc
      unittest/gunit/fake_table.h
      unittest/gunit/field_timestamp-t.cc
      unittest/gunit/item_func_now_local-t.cc
      unittest/gunit/mock_create_field.h
      unittest/gunit/mock_field_datetime.h
      unittest/gunit/mock_field_timestamp.h
      unittest/gunit/mock_field_timestampf.h
      unittest/gunit/sql_table-t.cc
    renamed:
      include/byteorder/big_endian.h => include/big_endian.h
      include/byteorder/byte_order_generic.h => include/byte_order_generic.h
      include/byteorder/byte_order_generic_x86.h => include/byte_order_generic_x86.h
      include/byteorder/byte_order_generic_x86_64.h => include/byte_order_generic_x86_64.h
      include/byteorder/little_endian.h => include/little_endian.h
    modified:
      client/mysql_plugin.c
      include/CMakeLists.txt
      include/my_bitmap.h
      include/my_byteorder.h
      mysql-test/collections/default.daily
      mysql-test/collections/default.experimental
      mysql-test/collections/default.weekly
      mysql-test/include/icp_tests.inc
      mysql-test/include/order_by.inc
      mysql-test/include/subquery_sj.inc
      mysql-test/r/change_user.result
      mysql-test/r/create.result
      mysql-test/r/derived.result
      mysql-test/r/func_in_all.result
      mysql-test/r/group_by.result
      mysql-test/r/group_min_max.result
      mysql-test/r/index_merge_myisam.result
      mysql-test/r/innodb_icp.result
      mysql-test/r/innodb_icp_all.result
      mysql-test/r/innodb_icp_none.result
      mysql-test/r/innodb_mrr_all.result
      mysql-test/r/innodb_mrr_cost_all.result
      mysql-test/r/join_cache_bka.result
      mysql-test/r/join_cache_bka_nixbnl.result
      mysql-test/r/join_cache_bkaunique.result
      mysql-test/r/join_cache_bnl.result
      mysql-test/r/join_cache_nojb.result
      mysql-test/r/myisam.result
      mysql-test/r/myisam_explain_non_select_all.result
      mysql-test/r/myisam_icp.result
      mysql-test/r/myisam_icp_all.result
      mysql-test/r/myisam_icp_none.result
      mysql-test/r/mysql_plugin.result
      mysql-test/r/mysqld--help-notwin.result
      mysql-test/r/mysqld--help-win.result
      mysql-test/r/mysqldump.result
      mysql-test/r/optimizer_debug_sync.result
      mysql-test/r/order_by_all.result
      mysql-test/r/order_by_icp_mrr.result
      mysql-test/r/order_by_none.result
      mysql-test/r/subquery_all.result
      mysql-test/r/subquery_all_bka.result
      mysql-test/r/subquery_mat.result
      mysql-test/r/subquery_mat_none.result
      mysql-test/r/subquery_sj_all.result
      mysql-test/r/subquery_sj_all_bka.result
      mysql-test/r/subquery_sj_all_bka_nixbnl.result
      mysql-test/r/subquery_sj_all_bkaunique.result
      mysql-test/r/subquery_sj_dupsweed.result
      mysql-test/r/subquery_sj_dupsweed_bka.result
      mysql-test/r/subquery_sj_dupsweed_bka_nixbnl.result
      mysql-test/r/subquery_sj_dupsweed_bkaunique.result
      mysql-test/r/subquery_sj_firstmatch.result
      mysql-test/r/subquery_sj_firstmatch_bka.result
      mysql-test/r/subquery_sj_firstmatch_bka_nixbnl.result
      mysql-test/r/subquery_sj_firstmatch_bkaunique.result
      mysql-test/r/subquery_sj_loosescan.result
      mysql-test/r/subquery_sj_loosescan_bka.result
      mysql-test/r/subquery_sj_loosescan_bka_nixbnl.result
      mysql-test/r/subquery_sj_loosescan_bkaunique.result
      mysql-test/r/subquery_sj_mat.result
      mysql-test/r/subquery_sj_mat_bka.result
      mysql-test/r/subquery_sj_mat_bka_nixbnl.result
      mysql-test/r/subquery_sj_mat_bkaunique.result
      mysql-test/r/subquery_sj_mat_nosj.result
      mysql-test/r/subquery_sj_none.result
      mysql-test/r/subquery_sj_none_bka.result
      mysql-test/r/subquery_sj_none_bka_nixbnl.result
      mysql-test/r/subquery_sj_none_bkaunique.result
      mysql-test/r/subselect_innodb.result
      mysql-test/r/type_temporal_fractional.result
      mysql-test/r/type_timestamp.result
      mysql-test/suite/innodb/r/innodb-index.result
      mysql-test/suite/innodb/r/innodb_monitor.result
      mysql-test/suite/innodb/r/innodb_mysql.result
      mysql-test/suite/innodb/t/innodb-index.test
      mysql-test/suite/innodb/t/innodb_bug34300.test
      mysql-test/suite/opt_trace/r/bugs_no_prot_all.result
      mysql-test/suite/opt_trace/r/bugs_ps_prot_all.result
      mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result
      mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result
      mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result
      mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result
      mysql-test/suite/sys_vars/r/optimizer_switch_basic.result
      mysql-test/t/change_user.test
      mysql-test/t/create.test
      mysql-test/t/group_by.test
      mysql-test/t/myisam.test
      mysql-test/t/mysql_plugin.test
      mysql-test/t/mysqldump.test
      mysql-test/t/optimizer_debug_sync.test
      mysql-test/t/type_temporal_fractional.test
      mysql-test/t/type_timestamp.test
      mysys/my_bitmap.c
      sql/event_db_repository.cc
      sql/field.cc
      sql/field.h
      sql/field_conv.cc
      sql/ha_ndbcluster.cc
      sql/ha_partition.cc
      sql/item.cc
      sql/item.h
      sql/item_timefunc.cc
      sql/item_timefunc.h
      sql/log_event.cc
      sql/log_event_old.cc
      sql/rpl_info_table.cc
      sql/sp.cc
      sql/sp_head.cc
      sql/sql_base.cc
      sql/sql_class.cc
      sql/sql_class.h
      sql/sql_executor.cc
      sql/sql_insert.cc
      sql/sql_insert.h
      sql/sql_load.cc
      sql/sql_parse.cc
      sql/sql_partition.cc
      sql/sql_priv.h
      sql/sql_select.cc
      sql/sql_show.cc
      sql/sql_table.cc
      sql/sql_table.h
      sql/sql_time.cc
      sql/sql_update.cc
      sql/table.cc
      sql/table.h
      sql/unireg.cc
      storage/archive/ha_archive.cc
      storage/csv/ha_tina.cc
      storage/example/ha_example.cc
      storage/federated/ha_federated.cc
      storage/heap/ha_heap.cc
      storage/innobase/btr/btr0btr.cc
      storage/innobase/btr/btr0sea.cc
      storage/innobase/buf/buf0buf.cc
      storage/innobase/buf/buf0dblwr.cc
      storage/innobase/fil/fil0fil.cc
      storage/innobase/handler/ha_innodb.cc
      storage/innobase/ibuf/ibuf0ibuf.cc
      storage/innobase/include/btr0btr.ic
      storage/innobase/include/buf0buf.h
      storage/innobase/include/page0page.ic
      storage/innobase/include/univ.i
      storage/innobase/lock/lock0lock.cc
      storage/innobase/page/page0cur.cc
      storage/innobase/page/page0page.cc
      storage/innobase/row/row0merge.cc
      storage/innobase/row/row0sel.cc
      storage/innobase/srv/srv0mon.cc
      storage/myisam/ha_myisam.cc
      storage/myisam/mi_check.c
      storage/myisammrg/ha_myisammrg.cc
      unittest/gunit/CMakeLists.txt
=== modified file 'mysql-test/include/plugin.defs'
--- a/mysql-test/include/plugin.defs	2011-09-23 10:55:10 +0000
+++ b/mysql-test/include/plugin.defs	2012-02-07 13:20:25 +0000
@@ -42,3 +42,4 @@ ha_federated       storage/federated  FE
 mypluglib          plugin/fulltext    SIMPLE_PARSER
 adt_null           plugin/audit_null  AUDIT_NULL
 libdaemon_example  plugin/daemon_example DAEMONEXAMPLE
+libmemcached       plugin/innodb_memcached/daemon_memcached DAEMON_MEMCACHED daemon_memcached

=== added directory 'mysql-test/suite/memcached'
=== added directory 'mysql-test/suite/memcached/inc'
=== added file 'mysql-test/suite/memcached/inc/memcache_config.inc'
--- a/mysql-test/suite/memcached/inc/memcache_config.inc	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/inc/memcache_config.inc	2012-02-07 13:20:25 +0000
@@ -0,0 +1,70 @@
+create database innodb_memcache;
+
+use innodb_memcache;
+
+#-- ------------------------------------------------------------------------
+#-- Table `cache_policies`
+#--
+#-- Each record in this table represents a named caching policy, specifying:
+#--  * How the memcache GET command is executed, including whether to get
+#--    records from local cache only, from InnoDB only, from local cache if
+#--    present (treating InnoDB as a backing store), or not at all.
+#--  * Similarly, how memcache SET commands are executed.
+#--  * How memcache DELETE commands are executed.
+#--  * Whether flushing the cache should cause a mass delete from NDB.
+#--
+#-- ------------------------------------------------------------------------
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+	`policy_name` VARCHAR(40) PRIMARY KEY,
+	`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+	 NOT NULL ,
+	`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+	 NOT NULL ,
+	`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+	 NOT NULL,
+	`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+	 NOT NULL
+) ENGINE = innodb;
+
+
+#-- ------------------------------------------------------------------------
+#-- Table `containers`
+#--
+#-- A container record describes an InnoDB table used for data storage by
+#-- InnoDB Memcache.
+#-- There must be a unique index on the `key column`, and unique index name
+#-- is specified in the `unique_idx_name_on_key` column of the table
+#-- `value_columns` are comma-separated lists of the columns that make up
+#-- the memcache key and value.
+#--
+#-- ------------------------------------------------------------------------
+
+CREATE  TABLE IF NOT EXISTS `containers` (
+	`name` varchar(50) not null primary key,
+	`db_schema` VARCHAR(250) NOT NULL,
+	`db_table` VARCHAR(250) NOT NULL,
+	`key_columns` VARCHAR(250) NOT NULL,
+	`value_columns` VARCHAR(250),
+	`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+	`cas_column` VARCHAR(250),
+	`expire_time_column` VARCHAR(250),
+	`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+
+CREATE  TABLE IF NOT EXISTS `config_options` (
+	`name` varchar(50) not null primary key,
+	`value` varchar(50)) ENGINE = InnoDB;
+	
+#-- ------------------------------------------------------------------------
+#-- This is an example
+#-- We create a InnoDB table `demo_test` is the `test` database
+#-- and insert an entry into contrainers' table to tell InnoDB Memcache
+#-- that we has such InnoDB table as back store:
+#-- c1 -> key
+#-- c2 -> value
+#-- c3 -> flags
+#-- c4 -> cas
+#-- c5 -> exp time
+#-- PRIMARY -> use primary key to search
+#-- ------------------------------------------------------------------------
+

=== added directory 'mysql-test/suite/memcached/r'
=== added file 'mysql-test/suite/memcached/r/memcached_add.result'
--- a/mysql-test/suite/memcached/r/memcached_add.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_add.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,80 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+CREATE TABLE t1        (c1 VARCHAR(32),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Add E|Essen:
+Ok.
+Add E|Essen:
+Error: E|Essen is still existing.
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+E	Essen
+H	Hamburg
+Here the memcached results with E:
+Essen
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+E	Essen
+H	Hamburg
+Here the memcached results with E,H:
+Essen
+Hamburg
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/r/memcached_decr.result'
--- a/mysql-test/suite/memcached/r/memcached_decr.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_decr.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,75 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+DROP TABLE IF EXISTS t1;
+Warnings:
+Note	1051	Unknown table 'test.t1'
+CREATE TABLE t1        (c1 VARCHAR(255),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('1', '10', 0, 0, 0);
+INSERT INTO t1 VALUES ('2', '20', 0, 0, 0);
+INSERT INTO t1 VALUES ('3', 'Berlin', 0, 0 ,0);
+INSERT INTO t1 VALUES ('4', '40', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+1	10
+2	20
+3	Berlin
+4	40
+Here the memcached results:
+10
+20
+Berlin
+40
+Here the memcached results after decr 4|40:
+39
+19
+19
+SELECT c1,c2 FROM t1;
+c1	c2
+1	10
+2	20
+3	0
+4	19
+DROP TABLE IF EXISTS t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/r/memcached_delete.result'
--- a/mysql-test/suite/memcached/r/memcached_delete.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_delete.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,89 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+CREATE TABLE t1        (c1 VARCHAR(32),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Add E|Essen:
+Ok.
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+E	Essen
+H	Hamburg
+Here the memcached results with E:
+Essen
+Delete E|Essen:
+Ok.
+Delete E|Essen:
+Error: E|Essen doesn't  exist.
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Here the memcached results with E,H:
+Hamburg
+Delete D|Darmstadt:
+Ok.
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+H	Hamburg
+Here the memcached results with H,D:
+Hamburg
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/r/memcached_get.result'
--- a/mysql-test/suite/memcached/r/memcached_get.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_get.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,79 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+CREATE TABLE t1        (c1 VARCHAR(32),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Here the memcached results with D,B,H,C:
+Darmstadt
+Berlin
+Hamburg
+Cottbus
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Here the memcached results with B:
+Berlin
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Here the memcached results with D,H:
+Darmstadt
+Hamburg
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/r/memcached_incr.result'
--- a/mysql-test/suite/memcached/r/memcached_incr.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_incr.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,76 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+DROP TABLE IF EXISTS t1;
+Warnings:
+Note	1051	Unknown table 'test.t1'
+CREATE TABLE t1        (c1 VARCHAR(255),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('1', '10', 0, 0, 0);
+INSERT INTO t1 VALUES ('2', '20', 0, 0, 0);
+INSERT INTO t1 VALUES ('3', 'Berlin', 0, 0 ,0);
+INSERT INTO t1 VALUES ('4', '40', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+1	10
+2	20
+3	Berlin
+4	40
+Here the memcached results:
+10
+20
+Berlin
+40
+Here the memcached results after incr 4|40:
+41
+85
+85
+1
+SELECT c1,c2 FROM t1;
+c1	c2
+1	10
+2	20
+3	1
+4	85
+DROP TABLE IF EXISTS t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/r/memcached_replace.result'
--- a/mysql-test/suite/memcached/r/memcached_replace.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_replace.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,78 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+CREATE TABLE t1        (c1 VARCHAR(32),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Replace H|Hamburg by Hannover:
+Ok.
+Replace H|Hamburg by Hannover:
+Ok.
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hannover
+Here the memcached results with H:
+Hannover
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hannover
+Here the memcached results with D,H:
+Darmstadt
+Hannover
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/r/memcached_set.result'
--- a/mysql-test/suite/memcached/r/memcached_set.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/r/memcached_set.result	2012-02-07 13:20:25 +0000
@@ -0,0 +1,77 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+UNINSTALL PLUGIN daemon_memcached;
+create database innodb_memcache;
+use innodb_memcache;
+CREATE  TABLE IF NOT EXISTS `cache_policies` (
+`policy_name` VARCHAR(40) PRIMARY KEY,
+`get_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL ,
+`set_policy` ENUM('innodb_only', 'cache_only','caching','disabled')
+NOT NULL ,
+`delete_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL,
+`flush_policy` ENUM('innodb_only', 'cache_only', 'caching','disabled')
+NOT NULL
+) ENGINE = innodb;
+CREATE  TABLE IF NOT EXISTS `containers` (
+`name` varchar(50) not null primary key,
+`db_schema` VARCHAR(250) NOT NULL,
+`db_table` VARCHAR(250) NOT NULL,
+`key_columns` VARCHAR(250) NOT NULL,
+`value_columns` VARCHAR(250),
+`flags` VARCHAR(250) NOT NULL DEFAULT "0",
+`cas_column` VARCHAR(250),
+`expire_time_column` VARCHAR(250),
+`unique_idx_name_on_key` VARCHAR(250) NOT NULL
+) ENGINE = InnoDB;
+CREATE  TABLE IF NOT EXISTS `config_options` (
+`name` varchar(50) not null primary key,
+`value` varchar(50)) ENGINE = InnoDB;
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+"innodb_only", "innodb_only", "innodb_only");
+INSERT INTO config_options VALUES("separator", "|");
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+"c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+USE test;
+CREATE TABLE t1        (c1 VARCHAR(32),
+c2 VARCHAR(1024),
+c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+H	Hamburg
+Set E|Essen:
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+E	Essen
+H	Hamburg
+Here the memcached results with E:
+Essen
+SELECT c1,c2 FROM t1;
+c1	c2
+B	Berlin
+C	Cottbus
+D	Darmstadt
+E	Essen
+H	Hamburg
+Here the memcached results with E,H:
+Essen
+Hamburg
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+SET @@global.tx_isolation= @tx_isolation;

=== added directory 'mysql-test/suite/memcached/t'
=== added file 'mysql-test/suite/memcached/t/memcached_add-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_add-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_add-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_add.test'
--- a/mysql-test/suite/memcached/t/memcached_add.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_add.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,113 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+CREATE TABLE t1        (c1 VARCHAR(32),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Add E|Essen:\n";
+if ($memd->add("E","Essen")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: E|Essen is still existing.\n";
+}
+$memd->disconnect_all;
+EOF
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Add E|Essen:\n";
+if ($memd->add("E","Essen")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: E|Essen is still existing.\n";
+}
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with E:\n";
+$val = $memd->get("E");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with E,H:\n";
+$val = $memd->get("E");
+if ($val) { print "$val\n"; }
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/t/memcached_decr-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_decr-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_decr-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_decr.test'
--- a/mysql-test/suite/memcached/t/memcached_decr.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_decr.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,81 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+DROP TABLE IF EXISTS t1;
+
+CREATE TABLE t1        (c1 VARCHAR(255),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('1', '10', 0, 0, 0);
+INSERT INTO t1 VALUES ('2', '20', 0, 0, 0);
+INSERT INTO t1 VALUES ('3', 'Berlin', 0, 0 ,0);
+INSERT INTO t1 VALUES ('4', '40', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results:\n";
+$val = $memd->get("1");
+if ($val) { print "$val\n"; }
+$val = $memd->get("2");
+if ($val) { print "$val\n"; }
+$val = $memd->get("3");
+if ($val) { print "$val\n"; }
+$val = $memd->get("4");
+if ($val) { print "$val\n"; }
+print "Here the memcached results after decr 4|40:\n";
+$val = $memd->decr("4");
+if ($val) { print "$val\n"; }
+$val = $memd->decr("4","20");
+if ($val) { print "$val\n"; }
+$val = $memd->get("4");
+if ($val) { print "$val\n"; }
+$val = $memd->decr("3");
+if ($val) { print "$val\n"; }
+$val = $memd->decr("3","Bern");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+DROP TABLE IF EXISTS t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/t/memcached_delete-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_delete-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_delete-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_delete.test'
--- a/mysql-test/suite/memcached/t/memcached_delete.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_delete.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,163 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+CREATE TABLE t1        (c1 VARCHAR(32),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Add E|Essen:\n";
+if ($memd->add("E","Essen")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: E|Essen is still existing.\n";
+}
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with E:\n";
+$val = $memd->get("E");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Delete E|Essen:\n";
+if ($memd->delete("E")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: E|Essen doesn't  exist.\n";
+}
+$memd->disconnect_all;
+EOF
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Delete E|Essen:\n";
+if ($memd->delete("E")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: E|Essen doesn't  exist.\n";
+}
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with E,H:\n";
+$val = $memd->get("E");
+if ($val) { print "$val\n"; }
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Delete D|Darmstadt:\n";
+if ($memd->delete("D")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: D|Darmstatd doesn't  exist.\n";
+}
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with H,D:\n";
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$val = $memd->get("D");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/t/memcached_get-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_get-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_get-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_get.test'
--- a/mysql-test/suite/memcached/t/memcached_get.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_get.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,99 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+CREATE TABLE t1        (c1 VARCHAR(32),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with D,B,H,C:\n";
+$val = $memd->get("D");
+if ($val) { print "$val\n"; }
+$val = $memd->get("B");
+if ($val) { print "$val\n"; }
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$val = $memd->get("C");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with B:\n";
+$val = $memd->get("B");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with D,H:\n";
+$val = $memd->get("D");
+if ($val) { print "$val\n"; }
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/t/memcached_incr-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_incr-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_incr-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_incr.test'
--- a/mysql-test/suite/memcached/t/memcached_incr.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_incr.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,81 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+DROP TABLE IF EXISTS t1;
+
+CREATE TABLE t1        (c1 VARCHAR(255),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('1', '10', 0, 0, 0);
+INSERT INTO t1 VALUES ('2', '20', 0, 0, 0);
+INSERT INTO t1 VALUES ('3', 'Berlin', 0, 0 ,0);
+INSERT INTO t1 VALUES ('4', '40', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results:\n";
+$val = $memd->get("1");
+if ($val) { print "$val\n"; }
+$val = $memd->get("2");
+if ($val) { print "$val\n"; }
+$val = $memd->get("3");
+if ($val) { print "$val\n"; }
+$val = $memd->get("4");
+if ($val) { print "$val\n"; }
+print "Here the memcached results after incr 4|40:\n";
+$val = $memd->incr("4");
+if ($val) { print "$val\n"; }
+$val = $memd->incr("4","44");
+if ($val) { print "$val\n"; }
+$val = $memd->get("4");
+if ($val) { print "$val\n"; }
+$val = $memd->incr("3");
+if ($val) { print "$val\n"; }
+$val = $memd->incr("3","Bern");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+DROP TABLE IF EXISTS t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/t/memcached_replace-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_replace-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_replace-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_replace.test'
--- a/mysql-test/suite/memcached/t/memcached_replace.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_replace.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,113 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+CREATE TABLE t1        (c1 VARCHAR(32),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Replace H|Hamburg by Hannover:\n";
+if ($memd->replace("H","Hannover")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: H cannot be replaced.\n";
+}
+$memd->disconnect_all;
+EOF
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Replace H|Hamburg by Hannover:\n";
+if ($memd->replace("H","Hannover")) {
+  print "Ok.\n";
+}
+else {
+  print "Error: H cannot be replaced.\n";
+}
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with H:\n";
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with D,H:\n";
+$val = $memd->get("D");
+if ($val) { print "$val\n"; }
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

=== added file 'mysql-test/suite/memcached/t/memcached_set-master.opt'
--- a/mysql-test/suite/memcached/t/memcached_set-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_set-master.opt	2012-02-07 13:20:25 +0000
@@ -0,0 +1,2 @@
+$DAEMON_MEMCACHED_OPT
+$DAEMON_MEMCACHED_LOAD

=== added file 'mysql-test/suite/memcached/t/memcached_set.test'
--- a/mysql-test/suite/memcached/t/memcached_set.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/memcached/t/memcached_set.test	2012-02-07 13:20:25 +0000
@@ -0,0 +1,94 @@
+CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
+CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
+CALL mtr.add_suppression("InnoDB: Warning: MySQL is trying to drop");
+
+SET @tx_isolation= @@global.tx_isolation;
+SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
+
+source include/have_innodb.inc;
+
+# Stop plugin befor innodb_memcached configuration
+UNINSTALL PLUGIN daemon_memcached;
+
+# Create the memcached tables
+source suite/memcached/inc/memcache_config.inc;
+
+INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
+				  "innodb_only", "innodb_only", "innodb_only");
+
+INSERT INTO config_options VALUES("separator", "|");
+
+# describe table for memcache
+INSERT INTO containers VALUES ("desc_t1", "test", "t1",
+			       "c1", "c2",  "c3", "c4", "c5", "PRIMARY");
+
+USE test;
+
+CREATE TABLE t1        (c1 VARCHAR(32),
+			c2 VARCHAR(1024),
+			c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
+ENGINE = INNODB;
+
+INSERT INTO t1 VALUES ('D', 'Darmstadt', 0, 0, 0);
+INSERT INTO t1 VALUES ('B', 'Berlin', 0, 0, 0);
+INSERT INTO t1 VALUES ('C', 'Cottbus', 0, 0 ,0);
+INSERT INTO t1 VALUES ('H', 'Hamburg', 0, 0, 0);
+
+# Tables must exist before plugin can be started!
+INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Set E|Essen:\n";
+if (!$memd->set("E","Essen")) {
+  print "Error: E|Essen cannot be inserted.\n";
+}
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with E:\n";
+$val = $memd->get("E");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+# The following select is writing all to  memcache otherwisw memcache is empty.
+--sorted_result
+SELECT c1,c2 FROM t1;
+
+perl;
+use DBI;
+use Cache::Memcached;
+my $memd = new Cache::Memcached {
+  'servers' => [ "127.0.0.1:11211" ]
+};
+print "Here the memcached results with E,H:\n";
+$val = $memd->get("E");
+if ($val) { print "$val\n"; }
+$val = $memd->get("H");
+if ($val) { print "$val\n"; }
+$memd->disconnect_all;
+EOF
+
+DROP TABLE t1;
+DROP DATABASE innodb_memcache;
+ 
+SET @@global.tx_isolation= @tx_isolation;

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-trunk-wl5824 branch (horst.hunger:3794 to 3795) horst.hunger8 Feb