MDEV-4978 - Server cursor is broken with blobs in the select list,

ORDER BY does not work

Use "dynamic" row format (instead of "block") for MARIA internal
temporary tables created for cursors.

With "block" row format MARIA may shuffle rows, with "dynamic" row
format records are inserted sequentially (there are no gaps in data
file while we fill temporary tables).

This is needed to preserve row order when scanning materialized cursors.
This commit is contained in:
Sergey Vojtovich 2013-09-06 15:59:19 +04:00
commit bbc9e57981
9 changed files with 94 additions and 10 deletions

View file

@ -129,6 +129,7 @@ bool select_union::flush()
table_alias name of the temporary table
bit_fields_as_long convert bit fields to ulonglong
create_table whether to physically create result table
keep_row_order keep rows in order as they were inserted
DESCRIPTION
Create a temporary table that is used to store the result of a UNION,
@ -143,7 +144,8 @@ bool
select_union::create_result_table(THD *thd_arg, List<Item> *column_types,
bool is_union_distinct, ulonglong options,
const char *alias,
bool bit_fields_as_long, bool create_table)
bool bit_fields_as_long, bool create_table,
bool keep_row_order)
{
DBUG_ASSERT(table == 0);
tmp_table_param.init();
@ -153,7 +155,7 @@ select_union::create_result_table(THD *thd_arg, List<Item> *column_types,
if (! (table= create_tmp_table(thd_arg, &tmp_table_param, *column_types,
(ORDER*) 0, is_union_distinct, 1,
options, HA_POS_ERROR, alias,
!create_table)))
!create_table, keep_row_order)))
return TRUE;
table->keys_in_use_for_query.clear_all();