Re: [Maria-developers] MDEV-4978 - Server cursor is broken with blobs in the select list
Hi, Sergey! On Sep 06, Sergey Vojtovich wrote:
revno: 3878 revision-id: svoj@mariadb.org-20130906111656-oy2c3pwy2o1q0zqn parent: wlad@montyprogram.com-20130903204512-hgwu77prle0lw7a3 committer: Sergey Vojtovich <svoj@mariadb.org> branch nick: 5.5-mdev4978 timestamp: Fri 2013-09-06 15:16:56 +0400 message: 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.
=== modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2013-09-03 14:41:07 +0000 +++ b/sql/sql_select.cc 2013-09-06 11:16:56 +0000 @@ -15373,7 +15374,8 @@ create_tmp_table(THD *thd, TMP_TABLE_PAR if (thd->is_fatal_error) // If end of memory goto err; /* purecov: inspected */ share->db_record_offset= 1; - table->used_for_duplicate_elimination= (param->sum_func_count == 0 && + table->used_for_duplicate_elimination= keep_row_order || + (param->sum_func_count == 0 && (table->group || table->distinct));
That's very confusing. Why keep_row_order means that the table is "used for duplicate elimination"? I had to check the code to see that used_for_duplicate_elimination affects the row format in Aria. This is not obvious too. And it forces the row format to be DYNAMIC for a very different reason, not for preserving row order. Perhaps it'd be better to rename used_for_duplicate_elimination to "force_dynamic_Aria_row_format" ? A prettier solution would be to introduce another flag: table->keep_row_order. Regards, Sergei
Hi Sergei, 06.09.2013, в 15:29, Sergei Golubchik <serg@mariadb.org> написал(а):
Hi, Sergey!
On Sep 06, Sergey Vojtovich wrote:
revno: 3878 revision-id: svoj@mariadb.org-20130906111656-oy2c3pwy2o1q0zqn parent: wlad@montyprogram.com-20130903204512-hgwu77prle0lw7a3 committer: Sergey Vojtovich <svoj@mariadb.org> branch nick: 5.5-mdev4978 timestamp: Fri 2013-09-06 15:16:56 +0400 message: 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.
=== modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2013-09-03 14:41:07 +0000 +++ b/sql/sql_select.cc 2013-09-06 11:16:56 +0000 @@ -15373,7 +15374,8 @@ create_tmp_table(THD *thd, TMP_TABLE_PAR if (thd->is_fatal_error) // If end of memory goto err; /* purecov: inspected */ share->db_record_offset= 1; - table->used_for_duplicate_elimination= (param->sum_func_count == 0 && + table->used_for_duplicate_elimination= keep_row_order || + (param->sum_func_count == 0 && (table->group || table->distinct));
That's very confusing. Why keep_row_order means that the table is "used for duplicate elimination"?
I had to check the code to see that used_for_duplicate_elimination affects the row format in Aria. This is not obvious too.
And it forces the row format to be DYNAMIC for a very different reason, not for preserving row order. Can't disagree.
Perhaps it'd be better to rename used_for_duplicate_elimination to "force_dynamic_Aria_row_format" ? A prettier solution would be to introduce another flag: table->keep_row_order.
I submitted another patch with the "prettier" solution. Though I tend to think that it'd be better not to fill TABLE object with things like keep_row_order and used_for_duplicate_elimination - they can go as an argument to create_internal_tmp_table(force_dynamic_aria_row_format). Thanks, Sergey
Regards, Sergei
Hi, Sergey! On Sep 06, Sergey Vojtovich wrote:
06.09.2013, в 15:29, Sergei Golubchik <serg@mariadb.org> написал(а):
Perhaps it'd be better to rename used_for_duplicate_elimination to "force_dynamic_Aria_row_format" ? A prettier solution would be to introduce another flag: table->keep_row_order.
I submitted another patch with the "prettier" solution. Though I tend to think that it'd be better not to fill TABLE object with things like keep_row_order and used_for_duplicate_elimination - they can go as an argument to create_internal_tmp_table(force_dynamic_aria_row_format).
Agree. But it may need more complex changes. Do as you like - either push your second patch, or fix the code to remove TABLE::used_for_duplicate_elimination and TABLE::keep_row_order. Regards, Sergei
participants (2)
-
Sergei Golubchik
-
Sergey Vojtovich