summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.fi>2001-03-11 23:09:09 +0200
committerunknown <monty@donna.mysql.fi>2001-03-11 23:09:09 +0200
commit765c255873bdc2bad425a48aaf257f91da1fb3f3 (patch)
treef32505d03cc3878a4d4e8a1c03bbdc14aee3012f /sql
parent97acb7b3d17dc60f6b879044aa53b7f422f553c2 (diff)
downloadmariadb-git-765c255873bdc2bad425a48aaf257f91da1fb3f3.tar.gz
Optimization of delete with record cache (for MyISAM tables)
Added missing files for innobase to the distribution BUILD/compile-pentium-debug: Always compile with BDB tables BUILD/compile-pentium: Always compile with BDB tables configure.in: Added missing files for innobase to the distribution innobase/mem/Makefile.am: Added missing files for innobase to the distribution innobase/pars/Makefile.am: Added missing files for innobase to the distribution sql/ha_isam.h: Don't use record cache with delete sql/handler.h: Optimization of delete with record cache sql/mysql_priv.h: Optimization of delete with record cache sql/records.cc: Optimization of delete with record cache sql/sql_delete.cc: Optimization of delete with record cache
Diffstat (limited to 'sql')
-rw-r--r--sql/ha_isam.h3
-rw-r--r--sql/handler.h1
-rw-r--r--sql/mysql_priv.h2
-rw-r--r--sql/records.cc8
-rw-r--r--sql/sql_delete.cc2
5 files changed, 10 insertions, 6 deletions
diff --git a/sql/ha_isam.h b/sql/ha_isam.h
index c8305c655ef..b255e8ba87f 100644
--- a/sql/ha_isam.h
+++ b/sql/ha_isam.h
@@ -33,7 +33,8 @@ class ha_isam: public handler
int_option_flag(HA_READ_NEXT+HA_READ_PREV+HA_READ_RND_SAME+
HA_KEYPOS_TO_RNDPOS+ HA_READ_ORDER+ HA_LASTKEY_ORDER+
HA_HAVE_KEY_READ_ONLY+HA_READ_NOT_EXACT_KEY+
- HA_LONGLONG_KEYS+HA_KEY_READ_WRONG_STR + HA_DUPP_POS)
+ HA_LONGLONG_KEYS+HA_KEY_READ_WRONG_STR + HA_DUPP_POS +
+ HA_NOT_DELETE_WITH_CACHE)
{}
~ha_isam() {}
const char *table_type() const { return "ISAM"; }
diff --git a/sql/handler.h b/sql/handler.h
index 25c5d834be9..1c8a83ac9ed 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -71,6 +71,7 @@
#define HA_PRIMARY_KEY_IN_READ_INDEX (HA_NO_WRITE_DELAYED*2)
#define HA_DROP_BEFORE_CREATE (HA_PRIMARY_KEY_IN_READ_INDEX*2)
#define HA_NOT_READ_AFTER_KEY (HA_DROP_BEFORE_CREATE*2)
+#define HA_NOT_DELETE_WITH_CACHE (HA_NOT_READ_AFTER_KEY*2)
/* Parameters for open() (in register form->filestat) */
/* HA_GET_INFO does a implicit HA_ABORT_IF_LOCKED */
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 7348563cee6..a975cab3c7c 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -595,7 +595,7 @@ void change_byte(byte *,uint,char,char);
void unireg_abort(int exit_code);
void init_read_record(READ_RECORD *info, THD *thd, TABLE *reg_form,
SQL_SELECT *select,
- bool use_record_cache, bool print_errors);
+ int use_record_cache, bool print_errors);
void end_read_record(READ_RECORD *info);
ha_rows filesort(TABLE **form,struct st_sort_field *sortorder, uint s_length,
SQL_SELECT *select, ha_rows special,ha_rows max_rows);
diff --git a/sql/records.cc b/sql/records.cc
index 89eae81fe27..e6f76e7fec6 100644
--- a/sql/records.cc
+++ b/sql/records.cc
@@ -31,7 +31,7 @@ static int rr_cmp(uchar *a,uchar *b);
void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
SQL_SELECT *select,
- bool use_record_cache, bool print_error)
+ int use_record_cache, bool print_error)
{
IO_CACHE *tempfile;
DBUG_ENTER("init_read_record");
@@ -97,9 +97,11 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
info->read_record=rr_sequential;
table->file->rnd_init();
/* We can use record cache if we don't update dynamic length tables */
- if (use_record_cache ||
+ if (use_record_cache > 0 ||
(int) table->reginfo.lock_type <= (int) TL_READ_HIGH_PRIORITY ||
- !(table->db_options_in_use & HA_OPTION_PACK_RECORD))
+ !(table->db_options_in_use & HA_OPTION_PACK_RECORD) ||
+ (use_record_cache < 0 &&
+ !(table->file->option_flag() & HA_NOT_DELETE_WITH_CACHE)))
VOID(table->file->extra(HA_EXTRA_CACHE)); // Cache reads
}
DBUG_VOID_RETURN;
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index fc150b08a69..c20a656c547 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -192,7 +192,7 @@ int mysql_delete(THD *thd,TABLE_LIST *table_list,COND *conds,ha_rows limit,
(void) table->file->extra(HA_EXTRA_NO_READCHECK);
if (options & OPTION_QUICK)
(void) table->file->extra(HA_EXTRA_QUICK);
- init_read_record(&info,thd,table,select,0,1);
+ init_read_record(&info,thd,table,select,-1,1);
ulong deleted=0L;
thd->proc_info="updating";
while (!(error=info.read_record(&info)) && !thd->killed)