summaryrefslogtreecommitdiff
path: root/sql/ha_heap.h
diff options
context:
space:
mode:
authorunknown <ingo@mysql.com>2004-05-06 15:53:01 +0200
committerunknown <ingo@mysql.com>2004-05-06 15:53:01 +0200
commit0bc9c4ae8d2471fc95e6da87ca62c5c062e5df08 (patch)
tree7facff5ed1695a7cdb0e0ab674137605074739d9 /sql/ha_heap.h
parent30be794283ce245ba8ac4bc4c38f561764335cb8 (diff)
downloadmariadb-git-0bc9c4ae8d2471fc95e6da87ca62c5c062e5df08.tar.gz
WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again).
HEAP: Copies the key count to a backup variable and sets the key count to zero. That way, no HEAP function will ever try to touch any index. Re-enabling is done by copying back the backup variable. To avoid memory leak at table close, disable deletes all index trees. Re-enabling must be done with empty indexes and data anyway. Otherwise, the indexes would need to be repaired, wich HEAP is not capable of. MyISAM: Only the key_map is cleared and set. Re-enabling must be done with empty indexes and data. Otherwise, repair needs to be done which will enable all keys persistently. The former implementation disabled only non-unique keys and maked this persistent. The new implementation additionally can disable all keys, but only without making this persistent. Re-enabling all keys can be done without repair, if data file and indexes are empty. heap/heapdef.h: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Pulled hp_clear_keys() out of hp_clear(). heap/hp_clear.c: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Pulled hp_clear_keys() out of hp_clear(). Added the new functions for disabling and enabling keys and to ask for the key state. include/heap.h: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Added a new HP_SHARE element to save the key count while keys are disabled. Added declarations for the new functions. myisam/mi_open.c: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Added the new functions for disabling and enabling keys and to ask for the key state. myisam/myisamdef.h: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Added declarations for the new functions. sql/ha_heap.cc: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Pulled set_keys_for_scanning() out of open(). Added the new functions for disabling and enabling keys and to ask for the key state. sql/ha_heap.h: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Added declarations for the new functions. sql/ha_myisam.cc: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Extended disable_indexes() for all keys and no save. The argument is now 'mode' as it must handle different cases. Extended enable_indexes() for no save. The new feature needs the new argument 'mode' with the same semantics as in disable_indexes(). Added indexes_are_disabled() to ask for the key state. Extended the existing call to enable_indexes() by the new argument. sql/ha_myisam.h: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Modified the declarations of dis-/enable_indexes() for the new argument. Added the declaration of the new function to ask for the key state. sql/handler.h: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Added declarations for the operation modes for the key switching functions. Modified the declarations of dis-/enable_indexes() for the new argument. Added the declaration of the new function to ask for the key state. sql/sql_select.cc: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). In create_myisam_from_heap() take notice of disabled keys and disable them in the new table before copying the data. sql/sql_table.cc: WL#1687 - Optimize UNION DISTINCT ... UNION ALL (again). Modified the calls of dis-/enable_indexes() for the new argument.
Diffstat (limited to 'sql/ha_heap.h')
-rw-r--r--sql/ha_heap.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/sql/ha_heap.h b/sql/ha_heap.h
index 68406202c76..2f849d2574b 100644
--- a/sql/ha_heap.h
+++ b/sql/ha_heap.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+/* Copyright (C) 2000,2004 MySQL AB & MySQL Finland AB & TCX DataKonsult 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
@@ -61,6 +61,7 @@ class ha_heap: public handler
int open(const char *name, int mode, uint test_if_locked);
int close(void);
+ void set_keys_for_scanning(void);
int write_row(byte * buf);
int update_row(const byte * old_data, byte * new_data);
int delete_row(const byte * buf);
@@ -82,6 +83,9 @@ class ha_heap: public handler
int extra(enum ha_extra_function operation);
int external_lock(THD *thd, int lock_type);
int delete_all_rows(void);
+ int disable_indexes(uint mode);
+ int enable_indexes(uint mode);
+ int indexes_are_disabled(void);
ha_rows records_in_range(int inx, const byte *start_key,uint start_key_len,
enum ha_rkey_function start_search_flag,
const byte *end_key,uint end_key_len,