Fixed delete in tables with hidden primary key

Remove not used BDB logs on shutdown
Don't give warnings for repair on slaves
Fixed transaction log files


Docs/manual.texi:
  Updated 'known bugs'
include/my_sys.h:
  Added define for checking number of bytes left in the IO_CACHE
mysql-test/mysql-test-run:
  Small bug fixes
mysys/mf_iocache2.c:
  Use new define
sql/filesort.cc:
  Temporary fix for FULLTEXT index
sql/ha_berkeley.cc:
  Fix for delete in tables with hidden primary key
  Remove not used BDB logs on shutdown
sql/ha_myisam.cc:
  Don't give warnings for repair on slaves
sql/hostname.cc:
  Portability fix
sql/log.cc:
  Fix transaction log files
sql/log_event.h:
  portability fix
sql/slave.cc:
  Don't give warnings for repair on slaves
sql/sql_class.h:
  Cleanup
sql/sql_parse.cc:
  Fixed typo
This commit is contained in:
unknown 2000-12-12 04:34:56 +02:00
parent 7847639270
commit 28ad76e22c
13 changed files with 65 additions and 24 deletions

View File

@ -39765,6 +39765,8 @@ though, so Version 3.23 is not released as a stable version yet.
@appendixsubsec Changes in release 3.23.29
@itemize @bullet
@item
Remove not used BDB logs on shutdown.
@item
When creating a table, put @code{PRIMARY} keys first, followed by
@code{UNIQUE} keys.
@item
@ -44312,6 +44314,34 @@ You can't use temporary tables more than once in the same query.
select * from temporary_table, temporary_table as t2;
@end example
@item
The optimizer may handle @code{DISTINCT} differently if you are using
'hidden' columns in a join or not. In a join, hidden columns are
counted as part of the result (even if they are not shown) while in
normal queries hidden columns doesn't participate in the @code{DISTINCT}
comparison. We will probably change this in the future to never compare
the hidden columns when executing @code{DISTINCT}
An example of this is:
@example
SELECT DISTINCT mp3id FROM band_downloads WHERE userid = 9 ORDER BY id
DESC;
and
SELECT DISTINCT band_downloads.mp3id, FROM band_downloads,band_mp3
WHERE band_downloads.userid = 9 AND band_mp3.id = band_downloads.mp3id
ORDER BY band_downloads.id DESC;
@end example
In the second case you may in @strong{MySQL} 3.23.x get two identical rows
in the result set (because the hidden 'id' column may differ).
Note that the this only happens for queries where you don't have the
ORDER BY columns in the result, something that is you are not allowed
to do in ANSI SQL.
@item
Because @strong{MySQL} allows you to work with table types that don't
support transactions, and thus can't @code{rollback} data, some things

View File

@ -332,6 +332,8 @@ typedef int (*qsort2_cmp)(const void *, const void *, const void *);
#define my_b_tell(info) ((info)->pos_in_file + \
((info)->rc_pos - (info)->rc_request_pos))
#define my_b_bytes_in_cache(info) ((uint) ((info)->rc_end - (info)->rc_pos))
typedef struct st_changeable_var {
const char *name; /* Name of variable */
long *varptr; /* Pointer to variable */

View File

@ -23,7 +23,7 @@ else
if [ -f ./mysql-test-run ] && [ -d ../sql ] ; then
SOURCE_DIST=1
else
echo "If you are using binary distirubution, run me from install root as \
echo "If you are using binary distribution, run me from install root as \
scripts/mysql-test-run. On source distribution run me from source root as \
mysql-test/mysql-test-run or from mysql-test as ./mysql-test-run"
exit 1
@ -100,18 +100,18 @@ fi
#++
# Program Definitions
#--
BASENAME=`which basename`
BASENAME=`which basename | head -1`
CAT=/bin/cat
CUT=/usr/bin/cut
ECHO=/bin/echo
EXPR=`which expr`
EXPR=`which expr | head -1`
FIND=/usr/bin/find
GCOV=`which gcov`
GCOV=`which gcov | head -1`
PRINTF=/usr/bin/printf
RM=/bin/rm
TIME=/usr/bin/time
TR=/usr/bin/tr
XARGS=`which xargs`
XARGS=`which xargs | head -1`
# on source dist, we pick up freshly build executables
# on binary, use what is installed
@ -130,7 +130,7 @@ fi
SLAVE_MYSQLD=$MYSQLD #this will be changed later if we are doing gcov
MYSQL_TEST="$MYSQL_TEST --socket=$MASTER_MYSOCK --database=$DB --user=$DBUSER --password=$DBPASSWD --silent"
MYSQL_TEST="$MYSQL_TEST --no-defaults --socket=$MASTER_MYSOCK --database=$DB --user=$DBUSER --password=$DBPASSWD --silent"
GDB_MASTER_INIT=/tmp/gdbinit.master
GDB_SLAVE_INIT=/tmp/gdbinit.slave
@ -358,7 +358,7 @@ stop_slave ()
{
if [ x$SLAVE_RUNNING = x1 ]
then
$MYSQLADMIN --socket=$SLAVE_MYSOCK -u root shutdown
$MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root shutdown
SLAVE_RUNNING=0
fi
}
@ -367,7 +367,7 @@ stop_master ()
{
if [ x$MASTER_RUNNING = x1 ]
then
$MYSQLADMIN --socket=$MASTER_MYSOCK -u root shutdown
$MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root shutdown
MASTER_RUNNING=0
fi
}

View File

@ -50,7 +50,8 @@ void my_b_seek(IO_CACHE *info,my_off_t pos)
}
/*
** Fill buffer
** Fill buffer. Note that this assumes that you have already used
** all characters in the CACHE, independent of the rc_pos value!
** return: 0 on error or EOF (info->error = -1 on error)
** number of characters
*/
@ -102,9 +103,9 @@ uint my_b_gets(IO_CACHE *info, char *to, uint max_length)
uint length;
max_length--; /* Save place for end \0 */
/* Calculate number of characters in buffer */
if (!(length= (uint) (info->rc_end - info->rc_pos)))
if (!(length=my_b_fill(info)))
return 0;
if (!(length= my_b_bytes_in_cache(info)) &&
!(length= my_b_fill(info)))
return 0;
for (;;)
{
char *pos,*end;

View File

@ -324,8 +324,12 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
file->rnd_init();
file->extra(HA_EXTRA_CACHE); /* Quicker reads */
}
else if (quick_select) // QQ For FULLTEXT
{ // QQ Should be removed soon
file->index_end();
select->quick->init();
}
if (!error)
for (;;)
{
if (quick_select)

View File

@ -161,6 +161,7 @@ bool berkeley_end(void)
DBUG_ENTER("berkeley_end");
if (!db_env)
return 1;
berkeley_cleanup_log_files();
error=db_env->close(db_env,0); // Error is logged
db_env=0;
hash_free(&bdb_open_tables);
@ -987,7 +988,7 @@ int ha_berkeley::remove_key(DB_TXN *sub_trans, uint keynr, const byte *record,
DBUG_PRINT("enter",("index: %d",keynr));
if ((table->key_info[keynr].flags & (HA_NOSAME | HA_NULL_PART_KEY)) ==
HA_NOSAME)
HA_NOSAME || keynr == primary_key)
{ // Unique key
dbug_assert(keynr == primary_key || prim_key->data != key_buff2);
error=key_file[keynr]->del(key_file[keynr], sub_trans,

View File

@ -563,7 +563,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
T_STATISTICS ? UPDATE_STAT : 0));
info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE |
HA_STATUS_CONST);
if (rows != file->state->records)
if (rows != file->state->records && ! (param.testflag & T_VERY_SILENT))
{
char llbuff[22],llbuff2[22];
mi_check_print_warning(&param,"Number of rows changed from %s to %s",

View File

@ -123,6 +123,7 @@ void reset_host_errors(struct in_addr *in)
my_string ip_to_hostname(struct in_addr *in, uint *errors)
{
uint i;
host_entry *entry;
DBUG_ENTER("ip_to_hostname");
@ -222,7 +223,7 @@ my_string ip_to_hostname(struct in_addr *in, uint *errors)
}
/* Check that 'gethostbyname' returned the used ip */
for (uint i=0; check->h_addr_list[i]; i++)
for (i=0; check->h_addr_list[i]; i++)
{
if (*(uint32*)(check->h_addr_list)[i] == in->s_addr)
{

View File

@ -76,7 +76,7 @@ static int find_uniq_filename(char *name)
MYSQL_LOG::MYSQL_LOG(): last_time(0), query_start(0),index_file(-1),
name(0), log_type(LOG_CLOSED),write_error(0),
inited(0), opened(0), no_rotate(0)
inited(0), no_rotate(0)
{
/*
We don't want to intialize LOCK_Log here as the thread system may
@ -616,7 +616,7 @@ bool MYSQL_LOG::write(Query_log_event* event_info)
IO_CACHE *file = (event_info->cache_stmt ? &thd->transaction.trans_log :
&log_file);
if ((!(thd->options & OPTION_BIN_LOG) &&
thd->master_access & PROCESS_ACL) ||
(thd->master_access & PROCESS_ACL)) ||
!db_ok(event_info->db, binlog_do_db, binlog_ignore_db))
{
VOID(pthread_mutex_unlock(&LOCK_log));
@ -684,14 +684,14 @@ bool MYSQL_LOG::write(IO_CACHE *cache)
if (is_open())
{
uint length;
my_off_t start_pos=my_b_tell(&log_file);
if (reinit_io_cache(cache, READ_CACHE, 0, 0, 0))
{
sql_print_error(ER(ER_ERROR_ON_WRITE), cache->file_name, errno);
goto err;
}
while ((length=my_b_fill(cache)))
length=my_b_bytes_in_cache(cache);
do
{
if (my_b_write(&log_file, cache->rc_pos, length))
{
@ -700,7 +700,7 @@ bool MYSQL_LOG::write(IO_CACHE *cache)
goto err;
}
cache->rc_pos=cache->rc_end; // Mark buffer used up
}
} while ((length=my_b_fill(cache)));
if (flush_io_cache(&log_file))
{
if (!write_error)

View File

@ -72,7 +72,7 @@ public:
static void operator delete(void *ptr, size_t size)
{
my_free((byte*)ptr, MYF(MY_WME|MY_ALLOW_ZERO_PTR));
my_free((gptr) ptr, MYF(MY_WME|MY_ALLOW_ZERO_PTR));
}
int write(IO_CACHE* file);

View File

@ -17,6 +17,7 @@
#include "mysql_priv.h"
#include <mysql.h>
#include <myisam.h>
#include "mini_client.h"
#include "slave.h"
#include <thr_alarm.h>
@ -360,6 +361,7 @@ static int create_table_from_dump(THD* thd, NET* net, const char* db,
HA_CHECK_OPT check_opt;
check_opt.init();
check_opt.flags|= T_VERY_SILENT;
check_opt.quick = 1;
thd->proc_info = "rebuilding the index on master dump table";
Vio* save_vio = thd->net.vio;

View File

@ -60,7 +60,7 @@ class MYSQL_LOG {
volatile enum_log_type log_type;
char time_buff[20],db[NAME_LEN+1];
char log_file_name[FN_REFLEN],index_file_name[FN_REFLEN];
bool write_error,inited,opened;
bool write_error,inited;
bool no_rotate; // for binlog - if log name can never change
// we should not try to rotate it or write any rotation events
// the user should use FLUSH MASTER instead of FLUSH LOGS for

View File

@ -1779,7 +1779,7 @@ mysql_execute_command(void)
}
else
{
thd->options= ((thd->options & (ulong) (OPTION_STATUS_NO_TRANS_UPDATE)) |
thd->options= ((thd->options & (ulong) ~(OPTION_STATUS_NO_TRANS_UPDATE)) |
OPTION_BEGIN);
thd->server_status|= SERVER_STATUS_IN_TRANS;
send_ok(&thd->net);