mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
f4afcec393
into hynda.mysql.fi:/home/my/mysql-maria BitKeeper/etc/ignore: auto-union BUILD/SETUP.sh: Auto merged BitKeeper/deleted/.del-CMakeLists.txt~99a50df6: Auto merged Makefile.am: Auto merged client/mysqldump.c: Auto merged configure.in: Auto merged include/Makefile.am: Auto merged include/keycache.h: Auto merged include/m_string.h: Auto merged include/my_sys.h: Auto merged libmysqld/Makefile.am: Auto merged mysql-test/extra/rpl_tests/rpl_insert_delayed.test: Auto merged mysql-test/lib/mtr_cases.pl: Auto merged mysql-test/lib/mtr_misc.pl: Auto merged mysql-test/lib/mtr_process.pl: Auto merged mysql-test/lib/mtr_report.pl: Auto merged mysql-test/lib/mtr_timer.pl: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/alter_table.result: Auto merged mysql-test/r/merge.result: Auto merged mysql-test/r/mysqldump.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/subselect.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/suite/ndb/r/ps_7ndb.result: Auto merged mysql-test/suite/rpl/r/rpl_events.result: Auto merged mysql-test/suite/rpl/r/rpl_insert.result: Auto merged mysql-test/suite/rpl/r/rpl_row_insert_delayed.result: Auto merged mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result: Auto merged mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result: Auto merged mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result: Auto merged mysql-test/suite/rpl/t/rpl_insert.test: Auto merged mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test: Auto merged mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test: Auto merged mysql-test/t/alter_table.test: Auto merged mysql-test/t/myisam.test: Auto merged mysql-test/t/mysqldump.test: Auto merged mysql-test/t/query_cache.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/view.test: Auto merged mysys/array.c: Auto merged mysys/mf_keycache.c: Auto merged mysys/my_init.c: Auto merged mysys/my_symlink2.c: Auto merged mysys/safemalloc.c: Auto merged mysys/thr_lock.c: Auto merged sql/Makefile.am: Auto merged sql/filesort.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_partition.cc: Auto merged sql/ha_partition.h: Auto merged sql/handler.h: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_xmlfunc.cc: Auto merged sql/lock.cc: Auto merged sql/log.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/net_serv.cc: Auto merged sql/opt_range.cc: Auto merged sql/set_var.cc: Auto merged sql/slave.cc: Auto merged sql/slave.h: Auto merged sql/sql_class.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/share/errmsg.txt: Auto merged sql/sql_test.cc: Auto merged sql/table.h: Auto merged sql/udf_example.c: Auto merged sql/uniques.cc: Auto merged sql/unireg.cc: Auto merged storage/csv/ha_tina.h: Auto merged storage/myisam/ft_boolean_search.c: Auto merged storage/myisam/ft_nlq_search.c: Auto merged storage/myisam/ft_parser.c: Auto merged storage/myisam/ft_stopwords.c: Auto merged storage/myisam/ha_myisam.cc: Auto merged storage/myisam/ha_myisam.h: Auto merged storage/myisam/mi_check.c: Auto merged storage/myisam/mi_create.c: Auto merged storage/myisam/mi_delete.c: Auto merged storage/myisam/mi_dynrec.c: Auto merged storage/myisam/mi_extra.c: Auto merged storage/myisam/mi_key.c: Auto merged storage/myisam/mi_locking.c: Auto merged storage/myisam/mi_log.c: Auto merged storage/myisam/mi_packrec.c: Auto merged storage/myisam/mi_rkey.c: Auto merged storage/myisam/mi_search.c: Auto merged storage/myisam/mi_test1.c: Auto merged storage/myisam/mi_test2.c: Auto merged storage/myisam/mi_update.c: Auto merged storage/myisam/mi_write.c: Auto merged storage/myisam/myisamchk.c: Auto merged storage/myisam/myisamlog.c: Auto merged storage/myisam/myisampack.c: Auto merged storage/myisam/sort.c: Auto merged storage/myisam/sp_test.c: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged storage/myisammrg/ha_myisammrg.h: Auto merged storage/ndb/src/mgmapi/mgmapi.cpp: Auto merged support-files/compiler_warnings.supp: Auto merged client/mysqltest.c: Manual merge between mysql-5.1 and mysql-maria include/my_base.h: Manual merge between mysql-5.1 and mysql-maria include/my_global.h: Manual merge between mysql-5.1 and mysql-maria include/myisam.h: Manual merge between mysql-5.1 and mysql-maria libmysql/Makefile.shared: Manual merge between mysql-5.1 and mysql-maria mysql-test/r/events_logs_tests.result: Manual merge between mysql-5.1 and mysql-maria mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result: Manual merge between mysql-5.1 and mysql-maria mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test: Manual merge between mysql-5.1 and mysql-maria mysql-test/t/disabled.def: Manual merge between mysql-5.1 and mysql-maria mysql-test/t/events_logs_tests.test: Manual merge between mysql-5.1 and mysql-maria mysys/my_compress.c: Manual merge between mysql-5.1 and mysql-maria mysys/my_getsystime.c: Manual merge between mysql-5.1 and mysql-maria mysys/my_open.c: Manual merge between mysql-5.1 and mysql-maria sql/handler.cc: Manual merge between mysql-5.1 and mysql-maria sql/set_var.h: Manual merge between mysql-5.1 and mysql-maria sql/sql_class.h: Manual merge between mysql-5.1 and mysql-maria sql/sql_show.cc: Manual merge between mysql-5.1 and mysql-maria sql/sql_sort.h: Manual merge between mysql-5.1 and mysql-maria sql/sql_yacc.yy: Manual merge between mysql-5.1 and mysql-maria sql/table.cc: Manual merge between mysql-5.1 and mysql-maria storage/csv/ha_tina.cc: Manual merge between mysql-5.1 and mysql-maria storage/myisam/mi_open.c: Manual merge between mysql-5.1 and mysql-maria storage/myisam/myisamdef.h: Manual merge between mysql-5.1 and mysql-maria unittest/mysys/my_atomic-t.c: Manual merge between mysql-5.1 and mysql-maria
83 lines
3.2 KiB
C
83 lines
3.2 KiB
C
/* Copyright (C) 2000 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
/* Defines used by filesort and uniques */
|
|
|
|
#define MERGEBUFF 7
|
|
#define MERGEBUFF2 15
|
|
|
|
/*
|
|
The structure SORT_ADDON_FIELD describes a fixed layout
|
|
for field values appended to sorted values in records to be sorted
|
|
in the sort buffer.
|
|
Only fixed layout is supported now.
|
|
Null bit maps for the appended values is placed before the values
|
|
themselves. Offsets are from the last sorted field, that is from the
|
|
record referefence, which is still last component of sorted records.
|
|
It is preserved for backward compatiblility.
|
|
The structure is used tp store values of the additional fields
|
|
in the sort buffer. It is used also when these values are read
|
|
from a temporary file/buffer. As the reading procedures are beyond the
|
|
scope of the 'filesort' code the values have to be retrieved via
|
|
the callback function 'unpack_addon_fields'.
|
|
*/
|
|
|
|
typedef struct st_sort_addon_field
|
|
{
|
|
/* Sort addon packed field */
|
|
Field *field; /* Original field */
|
|
uint offset; /* Offset from the last sorted field */
|
|
uint null_offset; /* Offset to to null bit from the last sorted field */
|
|
uint length; /* Length in the sort buffer */
|
|
uint8 null_bit; /* Null bit mask for the field */
|
|
} SORT_ADDON_FIELD;
|
|
|
|
struct BUFFPEK_COMPARE_CONTEXT
|
|
{
|
|
qsort_cmp2 key_compare;
|
|
void *key_compare_arg;
|
|
};
|
|
|
|
typedef struct st_sort_param {
|
|
uint rec_length; /* Length of sorted records */
|
|
uint sort_length; /* Length of sorted columns */
|
|
uint ref_length; /* Length of record ref. */
|
|
uint addon_length; /* Length of added packed fields */
|
|
uint res_length; /* Length of records in final sorted file/buffer */
|
|
uint keys; /* Max keys / buffer */
|
|
ha_rows max_rows,examined_rows;
|
|
TABLE *sort_form; /* For quicker make_sortkey */
|
|
SORT_FIELD *local_sortorder;
|
|
SORT_FIELD *end;
|
|
SORT_ADDON_FIELD *addon_field; /* Descriptors for companion fields */
|
|
uchar *unique_buff;
|
|
bool not_killable;
|
|
char* tmp_buffer;
|
|
/* The fields below are used only by Unique class */
|
|
qsort2_cmp compare;
|
|
BUFFPEK_COMPARE_CONTEXT cmp_context;
|
|
} SORTPARAM;
|
|
|
|
|
|
int merge_many_buff(SORTPARAM *param, uchar *sort_buffer,
|
|
BUFFPEK *buffpek,
|
|
uint *maxbuffer, IO_CACHE *t_file);
|
|
uint read_to_buffer(IO_CACHE *fromfile,BUFFPEK *buffpek,
|
|
uint sort_length);
|
|
int merge_buffers(SORTPARAM *param,IO_CACHE *from_file,
|
|
IO_CACHE *to_file, uchar *sort_buffer,
|
|
BUFFPEK *lastbuff,BUFFPEK *Fb,
|
|
BUFFPEK *Tb,int flag);
|
|
void reuse_freed_buff(QUEUE *queue, BUFFPEK *reuse, uint key_length);
|