summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-09-26 22:39:45 +0300
committerunknown <monty@donna.mysql.com>2000-09-26 22:39:45 +0300
commitb31f06a74efdfb790e139dae2fc0fb54bc2341b6 (patch)
treeea6dbe861611447827a284bc7e8a9fafd9222d6d
parentf0c7c8384123639570f2bc61b7e2c806a386e780 (diff)
downloadmariadb-git-b31f06a74efdfb790e139dae2fc0fb54bc2341b6.tar.gz
Small fixes for release
Docs/manual.texi: Update of file limits on windows myisam/mi_close.c: Fix for alter table on windows myisam/mi_extra.c: Fix for alter table on windows myisam/myisamlog.c: Corrected statistics information sql-bench/limits/mysql-3.23.cfg: Update to new crash-me sql-bench/limits/mysql.cfg: Update to new crash-me sql/sql_base.cc: Fix if end of memory sql/table.cc: Fix of new introduced index-handling bug
-rw-r--r--Docs/manual.texi3
-rw-r--r--myisam/mi_close.c2
-rw-r--r--myisam/mi_extra.c2
-rw-r--r--myisam/myisamlog.c30
-rw-r--r--sql-bench/limits/mysql-3.23.cfg9
-rw-r--r--sql-bench/limits/mysql.cfg9
-rw-r--r--sql/sql_base.cc9
-rw-r--r--sql/table.cc15
8 files changed, 51 insertions, 28 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 19e38188467..87ee4925f68 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -7694,6 +7694,9 @@ able to mix @code{INSERT} and @code{SELECT}. Currently we use mutexes
to emulate @code{pread()}/@code{pwrite()}. We will in the long run
replace the file level interface with a virtual interface so that we can
use the @code{readfile()}/@code{writefile()} interface on NT to get more speed.
+The current implementation will however limit the number of open files
+@strong{MySQL} can use to 1024, which means that you will not be able to
+run as many concurrent threads on NT as on Unix.
@item Blocking read
@strong{MySQL} uses a blocking read for each connection.
diff --git a/myisam/mi_close.c b/myisam/mi_close.c
index ebd64aa2349..059e7d3223a 100644
--- a/myisam/mi_close.c
+++ b/myisam/mi_close.c
@@ -36,7 +36,7 @@ int mi_close(register MI_INFO *info)
if (info->lock_type == F_EXTRA_LCK)
info->lock_type=F_UNLCK; /* HA_EXTRA_NO_USER_CHANGE */
- if (share->reopen == 1)
+ if (share->reopen == 1 && share->kfile >= 0)
_mi_decrement_open_count(info);
if (info->lock_type != F_UNLCK)
diff --git a/myisam/mi_extra.c b/myisam/mi_extra.c
index b9ded70402a..b90b5b35780 100644
--- a/myisam/mi_extra.c
+++ b/myisam/mi_extra.c
@@ -241,6 +241,8 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function)
error=my_errno;
info->lock_type = F_UNLCK;
}
+ if (share->kfile >= 0)
+ _mi_decrement_open_count(info);
if (share->kfile >= 0 && my_close(share->kfile,MYF(0)))
error=my_errno;
{
diff --git a/myisam/myisamlog.c b/myisam/myisamlog.c
index e5e8bba6ea6..a492448065d 100644
--- a/myisam/myisamlog.c
+++ b/myisam/myisamlog.c
@@ -355,7 +355,7 @@ static int examine_log(my_string file_name, char **table_names)
}
command=(uint) head[0];
if (command < sizeof(com_count)/sizeof(com_count[0][0])/3 &&
- (!curr_file_info || curr_file_info->used))
+ (!table_names[0] || (curr_file_info && curr_file_info->used)))
{
com_count[command][0]++;
if (result)
@@ -363,9 +363,12 @@ static int examine_log(my_string file_name, char **table_names)
}
switch ((enum myisam_log_commands) command) {
case MI_LOG_OPEN:
- com_count[command][0]--; /* Must be counted explicite */
- if (result)
- com_count[command][1]--;
+ if (!table_names[0])
+ {
+ com_count[command][0]--; /* Must be counted explicite */
+ if (result)
+ com_count[command][1]--;
+ }
if (curr_file_info)
printf("\nWarning: %s is opened twice with same process and filenumber\n",
@@ -502,6 +505,8 @@ static int examine_log(my_string file_name, char **table_names)
{
if (!recover)
goto com_err;
+ if (verbose)
+ printf_log("error: Didn't find row to delete with mi_rrnd");
com_count[command][2]++; /* Mark error */
}
mi_result=mi_delete(curr_file_info->isam,curr_file_info->record);
@@ -512,6 +517,9 @@ static int examine_log(my_string file_name, char **table_names)
goto com_err;
if (mi_result)
com_count[command][2]++; /* Mark error */
+ if (verbose)
+ printf_log("error: Got result %d from mi_delete instead of %d",
+ mi_result, result);
}
}
break;
@@ -550,6 +558,8 @@ static int examine_log(my_string file_name, char **table_names)
result=0;
goto com_err;
}
+ if (verbose)
+ printf_log("error: Didn't find row to update with mi_rrnd");
if (recover == 1 || result ||
find_record_with_key(curr_file_info,buff))
{
@@ -564,6 +574,9 @@ static int examine_log(my_string file_name, char **table_names)
{
if (!recover)
goto com_err;
+ if (verbose)
+ printf_log("error: Got result %d from mi_update instead of %d",
+ mi_result, result);
if (mi_result)
com_count[command][2]++; /* Mark error */
}
@@ -576,15 +589,18 @@ static int examine_log(my_string file_name, char **table_names)
{
if (!recover)
goto com_err;
+ if (verbose)
+ printf_log("error: Got result %d from mi_write instead of %d",
+ mi_result, result);
if (mi_result)
com_count[command][2]++; /* Mark error */
}
- if (! recover && filepos != curr_file_info->isam->lastpos)
+ if (!recover && filepos != curr_file_info->isam->lastpos)
{
- printf("Warning: Wrote at position: %s, should have been %s",
+ printf("error: Wrote at position: %s, should have been %s",
llstr(curr_file_info->isam->lastpos,llbuff),
llstr(filepos,llbuff2));
- goto com_err;
+ goto end;
}
}
}
diff --git a/sql-bench/limits/mysql-3.23.cfg b/sql-bench/limits/mysql-3.23.cfg
index fe724549bfb..3dde8039f1a 100644
--- a/sql-bench/limits/mysql-3.23.cfg
+++ b/sql-bench/limits/mysql-3.23.cfg
@@ -1,4 +1,4 @@
-#This file is automaticly generated by crash-me 1.48
+#This file is automaticly generated by crash-me 1.49
NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic
@@ -36,7 +36,7 @@ constraint_check=no # Column constraints
constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style)
crash_me_safe=no # crash me safe
-crash_me_version=1.48 # crash me version
+crash_me_version=1.49 # crash me version
create_default=yes # default value for column
create_default_func=no # default value function for column
create_if_not_exists=yes # create table if not exists
@@ -378,8 +378,9 @@ quote_ident_with_`=yes # ` as identifier quote
quote_with_"=yes # Allows ' and " as string markers
remember_end_space=no # Remembers end space in char()
remember_end_space_varchar=no # Remembers end space in varchar()
+rename_table=yes # rename table
repeat_string_size=1048576 # return string size from function
-right_outer_join=no # right outer join
+right_outer_join=yes # right outer join
rowid=auto_increment # Type for row id
select_constants=yes # Select constants
select_limit=with LIMIT # LIMIT number of rows
@@ -387,7 +388,7 @@ select_limit2=yes # SELECT with LIMIT #,#
select_string_size=1048565 # constant string size in SELECT
select_table_update=no # Update with sub select
select_without_from=yes # SELECT without FROM
-server_version=MySQL 3.23.22 beta debug # server version
+server_version=MySQL 3.23.25 beta debug # server version
simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values
subqueries=no # subqueries
diff --git a/sql-bench/limits/mysql.cfg b/sql-bench/limits/mysql.cfg
index fe724549bfb..3dde8039f1a 100644
--- a/sql-bench/limits/mysql.cfg
+++ b/sql-bench/limits/mysql.cfg
@@ -1,4 +1,4 @@
-#This file is automaticly generated by crash-me 1.48
+#This file is automaticly generated by crash-me 1.49
NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic
@@ -36,7 +36,7 @@ constraint_check=no # Column constraints
constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style)
crash_me_safe=no # crash me safe
-crash_me_version=1.48 # crash me version
+crash_me_version=1.49 # crash me version
create_default=yes # default value for column
create_default_func=no # default value function for column
create_if_not_exists=yes # create table if not exists
@@ -378,8 +378,9 @@ quote_ident_with_`=yes # ` as identifier quote
quote_with_"=yes # Allows ' and " as string markers
remember_end_space=no # Remembers end space in char()
remember_end_space_varchar=no # Remembers end space in varchar()
+rename_table=yes # rename table
repeat_string_size=1048576 # return string size from function
-right_outer_join=no # right outer join
+right_outer_join=yes # right outer join
rowid=auto_increment # Type for row id
select_constants=yes # Select constants
select_limit=with LIMIT # LIMIT number of rows
@@ -387,7 +388,7 @@ select_limit2=yes # SELECT with LIMIT #,#
select_string_size=1048565 # constant string size in SELECT
select_table_update=no # Update with sub select
select_without_from=yes # SELECT without FROM
-server_version=MySQL 3.23.22 beta debug # server version
+server_version=MySQL 3.23.25 beta debug # server version
simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values
subqueries=no # subqueries
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 711ea291e5d..eb3952be281 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -859,10 +859,11 @@ TABLE *reopen_name_locked_table(THD* thd, TABLE_LIST* table_list)
key_length=(uint) (strmov(strmov(key,db)+1,table_name)-key)+1;
pthread_mutex_lock(&LOCK_open);
- if(open_unireg_entry(table, db, table_name, table_name) ||
- !(table->table_cache_key =memdup_root(&table->mem_root,(char*) key,
- key_length)))
+ if (open_unireg_entry(table, db, table_name, table_name) ||
+ !(table->table_cache_key =memdup_root(&table->mem_root,(char*) key,
+ key_length)))
{
+ closefrm(table);
pthread_mutex_unlock(&LOCK_open);
DBUG_RETURN(0);
}
@@ -999,7 +1000,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
MEM_ROOT* glob_alloc;
LINT_INIT(glob_alloc);
- if(errno == ENOENT &&
+ if (errno == ENOENT &&
(glob_alloc = my_pthread_getspecific_ptr(MEM_ROOT*,THR_MALLOC)))
// Sasha: needed for replication
// remember the name of the non-existent table
diff --git a/sql/table.cc b/sql/table.cc
index ac70387df5a..66a2ef767b0 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -448,14 +448,13 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
keyinfo->key_length ? UNIQUE_KEY_FLAG : MULTIPLE_KEY_FLAG);
if (i == 0)
field->key_start|= ((key_map) 1 << key);
- if (ha_option & HA_HAVE_KEY_READ_ONLY &&
- field->key_length() == key_part->length)
- {
- if (field->key_type() != HA_KEYTYPE_TEXT &&
- !(ha_option & HA_KEY_READ_WRONG_STR) &&
- !(keyinfo->flags & HA_FULLTEXT))
- field->part_of_key|= ((key_map) 1 << key);
- }
+ if ((ha_option & HA_HAVE_KEY_READ_ONLY) &&
+ field->key_length() == key_part->length &&
+ field->type() != FIELD_TYPE_BLOB &&
+ (field->key_type() != HA_KEYTYPE_TEXT ||
+ (!(ha_option & HA_KEY_READ_WRONG_STR) &&
+ !(keyinfo->flags & HA_FULLTEXT))))
+ field->part_of_key|= ((key_map) 1 << key);
if (!(key_part->key_part_flag & HA_REVERSE_SORT) &&
usable_parts == i)
usable_parts++; // For FILESORT