diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2018-06-21 16:46:11 +1000 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-09-21 15:05:54 +0200 |
commit | c16a54c02e1882a07f48e58e788674e9ed3be129 (patch) | |
tree | 4a8f6591189403299ffd24a7bbdee7e3c038fad9 /sql/ha_partition.h | |
parent | 8893d199efae16c8072cdbbe35c808a12d0583e5 (diff) | |
download | mariadb-git-c16a54c02e1882a07f48e58e788674e9ed3be129.tar.gz |
MDEV-16429: Assertion `!table || (!table->read_set || bitmap_is_set(table->read_set, field_index))' fails upon attempt to update virtual column on partitioned versioned table
When using buffered sort in `UPDATE`, keyread is used. In this case,
`TABLE::update_virtual_field` should be aborted, but it actually isn't,
because it is called not with a top-level handler, but with the one that
is actually going to access the disk. Here the problemm is issued with
partitioning, so the solution is to recursively mark for keyread all the
underlying partition handlers.
* ha_partition: update keyread state for child partitions
Closes #800
Diffstat (limited to 'sql/ha_partition.h')
-rw-r--r-- | sql/ha_partition.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 8a251016703..8a374fe87b7 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -844,7 +844,7 @@ public: int change_partitions_to_open(List<String> *partition_names); int open_read_partitions(char *name_buff, size_t name_buff_size); virtual int extra(enum ha_extra_function operation); - virtual int extra_opt(enum ha_extra_function operation, ulong cachesize); + virtual int extra_opt(enum ha_extra_function operation, ulong arg); virtual int reset(void); virtual uint count_query_cache_dependant_tables(uint8 *tables_type); virtual my_bool @@ -854,6 +854,8 @@ public: uint *n); private: + typedef int handler_callback(handler *, void *); + my_bool reg_query_cache_dependant_table(THD *thd, char *engine_key, uint engine_key_len, @@ -864,7 +866,7 @@ private: **block_table, handler *file, uint *n); static const uint NO_CURRENT_PART_ID= NOT_A_PARTITION_ID; - int loop_extra(enum ha_extra_function operation); + int loop_partitions(handler_callback callback, void *param); int loop_extra_alter(enum ha_extra_function operations); void late_extra_cache(uint partition_id); void late_extra_no_cache(uint partition_id); |