summaryrefslogtreecommitdiff
path: root/sql/handler.h
diff options
context:
space:
mode:
authorNikita Malyavin <nikitamalyavin@gmail.com>2018-06-21 16:46:11 +1000
committerSergei Golubchik <serg@mariadb.org>2018-12-20 08:06:55 +0100
commit6a73569f12fe4883937a669c262716c11d1f9238 (patch)
tree5697b7e4521418a90c2dbb75949df63512682994 /sql/handler.h
parent7b2e2288e9f784ea12f85dc005503511fe99f796 (diff)
downloadmariadb-git-6a73569f12fe4883937a669c262716c11d1f9238.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/handler.h')
-rw-r--r--sql/handler.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/sql/handler.h b/sql/handler.h
index ed2ef822c88..d34064811f0 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -2874,7 +2874,7 @@ public:
bool keyread_enabled() { return keyread < MAX_KEY; }
int ha_start_keyread(uint idx)
{
- int res= keyread_enabled() ? 0 : extra(HA_EXTRA_KEYREAD);
+ int res= keyread_enabled() ? 0 : extra_opt(HA_EXTRA_KEYREAD, idx);
keyread= idx;
return res;
}
@@ -3278,7 +3278,7 @@ public:
uint part_id);
virtual int extra(enum ha_extra_function operation)
{ return 0; }
- virtual int extra_opt(enum ha_extra_function operation, ulong cache_size)
+ virtual int extra_opt(enum ha_extra_function operation, ulong arg)
{ return extra(operation); }
/**