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:
parent
7847639270
commit
28ad76e22c
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -563,7 +563,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, 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(¶m,"Number of rows changed from %s to %s",
|
||||
|
@ -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)
|
||||
{
|
||||
|
10
sql/log.cc
10
sql/log.cc
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user