From 65811a336dbde9d09b6ed0b470fa37bd488a7a74 Mon Sep 17 00:00:00 2001 From: Mattias Jonsson Date: Sun, 5 Oct 2008 00:40:30 +0200 Subject: Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table The fast/on-line add/drop index handler calls was not implemented whithin the partitioning. This implements it in the partitioning handler. Since this is only used by the not included InnoDB plugin, there is no test case. (Have tested it manually with the plugin, and it does not allow unique indexes not including partitioning function, or removal of pk, which in innodb generates a new pk, which is not in the partitioning function.) NOTE: This introduces a new handler method, and because of that changes the storage engine api. (One cannot use a handlerton to see the capabilities of a table's handler if it is partitioned. So I added a wrapper function in the handler that defaults to the handlerton function, which the partitioning handler overrides. sql/ha_partition.cc: Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table Added support for fast/on-line add/drop index. Implemented alter_table_flags as bit-or of the partitioned hton and the first partitions alter_table_flags. It is only to forward the calls for the other functions: check_if_incompatible_data add_index prepare_drop_index final_drop_index to all parts handler sql/ha_partition.h: Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table Added support for fast/on-line add/drop index. sql/handler.h: Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table Added the function on handler level, defaulting to use the handlerton function, but a handler can override it. Needed for partitioned tables. NOTE: Change of storage engine api. sql/sql_partition.cc: Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table Using the new handler function, instead of the handlerton function. This works better with the partitioning handler. sql/sql_table.cc: Bug#37453: Dropping/creating index on partitioned table with InnoDB Plugin locks table Using the new handler function, instead of the handlerton function. This works better with the partitioning handler. Also using new process info for 'manage keys' (kind of fix for bug-37550). --- sql/handler.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'sql/handler.h') diff --git a/sql/handler.h b/sql/handler.h index df6157f80b4..bea2952f4c1 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1724,6 +1724,12 @@ public: but we don't have a primary key */ virtual void use_hidden_primary_key(); + virtual uint alter_table_flags(uint flags) + { + if (ht->alter_table_flags) + return ht->alter_table_flags(flags); + return 0; + } protected: /* Service methods for use by storage engines. */ -- cgit v1.2.1 From b72d1507db95326119afdcb4764fa457a7f888b7 Mon Sep 17 00:00:00 2001 From: Mattias Jonsson Date: Wed, 29 Oct 2008 21:20:04 +0100 Subject: Bug#39084: Getting intermittent errors with statement-based binary logging Problem was that partitioning cached the table flags. These flags could change due to TRANSACTION LEVEL changes. Solution was to remove the cache and always return the table flags from the first partition (if the handler was initialized). mysql-test/r/partition_innodb_stmt.result: Bug#39084: Getting intermittent errors with statement-based binary logging New test result file. mysql-test/t/partition_innodb_stmt.test: Bug#39084: Getting intermittent errors with statement-based binary logging New test file. sql/ha_partition.cc: Bug#39084: Getting intermittent errors with statement-based binary logging Removed m_table_flags, and added m_handler_status. Added checks that all partitions have the same table flags. Moved some variable initializations. Updated some comments. Fixed typo initialise -> initialize Changed HA_EXTTA_NO_READCHECK to do nothing, since it is only used in ha_open, which is called for every partition in ::open anyway. sql/ha_partition.h: Bug#39084: Getting intermittent errors with statement-based binary logging Removed m_table_flags, and added m_handler_status. Always return the first partitions table flags, instead of using cached table flags. Added define of enabled/disabled partitioning table flags Fixed type initialise -> initialize Updated some comments. sql/handler.cc: Bug#39084: Getting intermittent errors with statement-based binary logging Fixed type initialise -> initialize. sql/handler.h: Bug#39084: Getting intermittent errors with statement-based binary logging Added comment to understand where the cached value is set. --- sql/handler.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'sql/handler.h') diff --git a/sql/handler.h b/sql/handler.h index b7d4d689d40..b8e7f17e089 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1198,6 +1198,9 @@ public: { return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0; } + /** + The cached_table_flags is set at ha_open and ha_external_lock + */ Table_flags ha_table_flags() const { return cached_table_flags; } /** These functions represent the public interface to *users* of the -- cgit v1.2.1