> + DBUG_RETURN(TRUE);
> + }
> num_fields++;
> + }
> }
> if (unlikely(num_fields > MAX_REF_PARTS))
> {
> diff --git a/sql/table.cc b/sql/table.cc
> index ce7a34a8fe2..0c2ff1eea5a 100644
> --- a/sql/table.cc
> +++ b/sql/table.cc
> @@ -1776,7 +1776,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
> goto err;
> DBUG_PRINT("info", ("Columns with system versioning: [%d, %d]", row_start, row_end));
> versioned= VERS_TIMESTAMP;
> - vers_can_native= plugin_hton(se_plugin)->flags & HTON_NATIVE_SYS_VERSIONING;
> + vers_can_native= handler_file->vers_can_native(thd);
Interesting. How does that work? Your ha_partition::vers_can_native() is
bool can= !thd->lex->part_info
|| thd->lex->part_info->part_type != VERSIONING_PARTITION;
for (uint i= 0; i < m_tot_parts && can; i++)
can= can && m_file[i]->vers_can_native(thd);
return can;
But it doesn't look like thd->lex->part_info->part_type is initialized
at this point in time. Try to add to your test case
flush tables;
select * from t1;
Yes, part_info is going to be filled only if creating, or altering table.
It works as follows:
If we're creating/altering, then check thd->lex->part_info;
else, check m_file array, which is initialized at that point.
Added this as the comment for clarity.