diff options
author | unknown <monty@donna.mysql.com> | 2000-09-14 02:39:07 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-09-14 02:39:07 +0300 |
commit | d5964ba20ca4c00a443c185186def44bb90831b3 (patch) | |
tree | 47d3199e561726437875c3247556ac5797525366 /mysys/queues.c | |
parent | 9e37676d7cd9ca30a05025b9fcc3424c4e4a1932 (diff) | |
download | mariadb-git-d5964ba20ca4c00a443c185186def44bb90831b3.tar.gz |
Fixes for MERGE TABLES and HEAP tables
Docs/manual.texi:
Updated MERGE table stuff + more
extra/perror.c:
Added missing error messages
include/myisammrg.h:
Fixes for MERGE TABLE
include/queues.h:
Fixes for MERGE TABLE
isam/isamlog.c:
Fixed hard bug
myisam/mi_log.c:
cleanup
myisam/mi_open.c:
Fixed file name format in myisam log
myisam/myisamlog.c:
Bug fixes
myisammrg/mymrgdef.h:
Fixes for MERGE TABLE
myisammrg/myrg_create.c:
Fixes for MERGE TABLE
myisammrg/myrg_open.c:
Fixes for MERGE TABLE
myisammrg/myrg_queue.c:
Fixes for MERGE TABLE
myisammrg/myrg_rfirst.c:
Fixes for MERGE TABLE
myisammrg/myrg_rkey.c:
Fixes for MERGE TABLE
myisammrg/myrg_rlast.c:
Fixes for MERGE TABLE
myisammrg/myrg_rnext.c:
Fixes for MERGE TABLE
myisammrg/myrg_rprev.c:
Fixes for MERGE TABLE
myisammrg/myrg_rrnd.c:
Fixes for MERGE TABLE
mysql.proj:
update
mysys/queues.c:
Fixed bug when using reverse queues
sql-bench/test-insert.sh:
Separated some things to get better timings
sql/ha_heap.cc:
Fixed heap table bug
sql/ha_heap.h:
Fixed heap table bug
sql/ha_myisam.h:
Fixed wrong max_keys
sql/ha_myisammrg.cc:
Fixed MERGE TABLES
sql/ha_myisammrg.h:
Fixed MERGE TABLES
sql/handler.h:
Fix for MERGE TABLES and HEAP tables
sql/lex.h:
Fixed MERGE TABLES
sql/mysql_priv.h:
Cleanup of code
sql/sql_acl.cc:
Fixed that privilege tables are flushed at start
sql/sql_lex.h:
Fixed MERGE TABLES
sql/sql_parse.cc:
Fixed MERGE TABLES
sql/sql_select.cc:
Fixes for HEAP tables
sql/sql_table.cc:
Cleanup
sql/sql_yacc.yy:
Fixed MERGE TABLES
Diffstat (limited to 'mysys/queues.c')
-rw-r--r-- | mysys/queues.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/mysys/queues.c b/mysys/queues.c index 40aa3c8db53..1c7a1a4a618 100644 --- a/mysys/queues.c +++ b/mysys/queues.c @@ -25,7 +25,7 @@ #include <queues.h> - /* The actuall code for handling queues */ +/* Init queue */ int init_queue(QUEUE *queue, uint max_elements, uint offset_to_key, pbool max_at_top, int (*compare) (void *, byte *, byte *), @@ -44,6 +44,12 @@ int init_queue(QUEUE *queue, uint max_elements, uint offset_to_key, DBUG_RETURN(0); } +/* + Reinitialize queue for new usage; Note that you can't currently resize + the number of elements! If you need this, fix it :) +*/ + + int reinit_queue(QUEUE *queue, uint max_elements, uint offset_to_key, pbool max_at_top, int (*compare) (void *, byte *, byte *), void *first_cmp_arg) @@ -78,6 +84,7 @@ void delete_queue(QUEUE *queue) void queue_insert(register QUEUE *queue, byte *element) { reg2 uint idx,next; + int cmp; #ifndef DBUG_OFF if (queue->elements < queue->max_elements) @@ -86,10 +93,12 @@ void queue_insert(register QUEUE *queue, byte *element) queue->root[0]=element; idx= ++queue->elements; - while ((queue->compare(queue->first_cmp_arg, - element+queue->offset_to_key, - queue->root[(next=idx >> 1)]+queue->offset_to_key) - ^ queue->max_at_top) < 0) + /* max_at_top swaps the comparison if we want to order by desc */ + while ((cmp=queue->compare(queue->first_cmp_arg, + element+queue->offset_to_key, + queue->root[(next=idx >> 1)] + + queue->offset_to_key)) && + (cmp ^ queue->max_at_top) < 0) { queue->root[idx]=queue->root[next]; idx=next; |