mirror of
https://github.com/MariaDB/server.git
synced 2025-10-12 12:25:37 +03:00
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:
@@ -14572,7 +14572,8 @@ TABLE *
|
||||
create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
ORDER *group, bool distinct, bool save_sum_fields,
|
||||
ulonglong select_options, ha_rows rows_limit,
|
||||
const char *table_alias, bool do_not_open)
|
||||
const char *table_alias, bool do_not_open,
|
||||
bool keep_row_order)
|
||||
{
|
||||
MEM_ROOT *mem_root_save, own_root;
|
||||
TABLE *table;
|
||||
@@ -15375,6 +15376,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
share->db_record_offset= 1;
|
||||
table->used_for_duplicate_elimination= (param->sum_func_count == 0 &&
|
||||
(table->group || table->distinct));
|
||||
table->keep_row_order= keep_row_order;
|
||||
|
||||
if (!do_not_open)
|
||||
{
|
||||
@@ -15712,7 +15714,8 @@ bool create_internal_tmp_table(TABLE *table, KEY *keyinfo,
|
||||
table->no_rows ? NO_RECORD :
|
||||
(share->reclength < 64 &&
|
||||
!share->blob_fields ? STATIC_RECORD :
|
||||
table->used_for_duplicate_elimination ?
|
||||
table->used_for_duplicate_elimination ||
|
||||
table->keep_row_order ?
|
||||
DYNAMIC_RECORD : BLOCK_RECORD),
|
||||
share->keys, &keydef,
|
||||
(uint) (*recinfo-start_recinfo),
|
||||
|
Reference in New Issue
Block a user