mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
Merge mysql.com:/usr_rh9/home/elkin.rh9/MySQL/BARE/5.1
into mysql.com:/usr_rh9/home/elkin.rh9/MySQL/Merge/5.1
This commit is contained in:
commit
897a886f72
18 changed files with 182 additions and 27 deletions
|
@ -1482,7 +1482,7 @@ static uint dump_routines_for_db(char *db)
|
|||
|
||||
query_str_tail= strnmov(query_str, row[2],
|
||||
definer_begin - row[2]);
|
||||
query_str_tail= strmov(query_str_tail, "*/ /*!50019");
|
||||
query_str_tail= strmov(query_str_tail, "*/ /*!50020");
|
||||
query_str_tail= strnmov(query_str_tail, definer_begin,
|
||||
definer_end - definer_begin);
|
||||
query_str_tail= strxmov(query_str_tail, "*/ /*!50003",
|
||||
|
|
|
@ -295,9 +295,9 @@ int main(int argc, char **argv)
|
|||
client_flag|= CLIENT_MULTI_RESULTS;
|
||||
if (!opt_only_print)
|
||||
{
|
||||
if (!(mysql_real_connect(&mysql,host,user,opt_password,
|
||||
argv[0],opt_mysql_port,opt_mysql_unix_port,
|
||||
client_flag)))
|
||||
if (!(mysql_real_connect(&mysql, host, user, opt_password,
|
||||
NULL, opt_mysql_port,
|
||||
opt_mysql_unix_port, client_flag)))
|
||||
{
|
||||
fprintf(stderr,"%s: %s\n",my_progname,mysql_error(&mysql));
|
||||
free_defaults(defaults_argv);
|
||||
|
|
|
@ -423,7 +423,7 @@ enum ha_base_keytype {
|
|||
#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
|
||||
#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
|
||||
#define HA_STATE_EXTEND_BLOCK 2048
|
||||
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same was called */
|
||||
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same occupied lastkey2 */
|
||||
|
||||
/* myisampack expects no more than 32 field types. */
|
||||
enum en_fieldtype {
|
||||
|
|
|
@ -14,15 +14,34 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
|
||||
#if !defined(_my_no_pthread_h) && !defined(THREAD)
|
||||
#define _my_no_pthread_h
|
||||
|
||||
|
||||
/*
|
||||
This block is to access some thread-related type definitions
|
||||
even in builds which do not need thread functions,
|
||||
as some variables (based on these types) are declared
|
||||
even in non-threaded builds.
|
||||
Case in point: 'mf_keycache.c'
|
||||
*/
|
||||
#if defined(__WIN__) || defined(OS2)
|
||||
|
||||
#elif defined(HAVE_UNIXWARE7_THREADS)
|
||||
/* #include <thread.h> Currently, not relevant. Enable if needed. */
|
||||
|
||||
#else /* Normal threads */
|
||||
#include <pthread.h>
|
||||
|
||||
#endif /* defined(__WIN__) */
|
||||
|
||||
|
||||
/*
|
||||
This undefs some pthread mutex locks when one isn't using threads
|
||||
to make thread safe code, that should also work in single thread
|
||||
environment, easier to use.
|
||||
*/
|
||||
|
||||
#if !defined(_my_no_pthread_h) && !defined(THREAD)
|
||||
#define _my_no_pthread_h
|
||||
|
||||
#define pthread_mutex_init(A,B)
|
||||
#define pthread_mutex_lock(A)
|
||||
#define pthread_mutex_unlock(A)
|
||||
|
@ -32,4 +51,5 @@
|
|||
#define rw_wrlock(A)
|
||||
#define rw_unlock(A)
|
||||
#define rwlock_destroy(A)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2816,7 +2816,6 @@ my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt,
|
|||
{
|
||||
switch (attr_type) {
|
||||
case STMT_ATTR_UPDATE_MAX_LENGTH:
|
||||
*(my_bool*) value= stmt->update_max_length;
|
||||
break;
|
||||
case STMT_ATTR_CURSOR_TYPE:
|
||||
*(ulong*) value= stmt->flags;
|
||||
|
|
|
@ -155,11 +155,24 @@ sub collect_test_cases ($) {
|
|||
if ( $::opt_reorder )
|
||||
{
|
||||
@$cases = sort {
|
||||
if ( $a->{'master_restart'} and $b->{'master_restart'} or
|
||||
! $a->{'master_restart'} and ! $b->{'master_restart'} )
|
||||
if ( ! $a->{'master_restart'} and ! $b->{'master_restart'} )
|
||||
{
|
||||
return $a->{'name'} cmp $b->{'name'};
|
||||
}
|
||||
|
||||
if ( $a->{'master_restart'} and $b->{'master_restart'} )
|
||||
{
|
||||
my $cmp= mtr_cmp_opts($a->{'master_opt'}, $b->{'master_opt'});
|
||||
if ( $cmp == 0 )
|
||||
{
|
||||
return $a->{'name'} cmp $b->{'name'};
|
||||
}
|
||||
else
|
||||
{
|
||||
return $cmp;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $a->{'master_restart'} )
|
||||
{
|
||||
return 1; # Is greater
|
||||
|
|
|
@ -13,6 +13,9 @@ sub mtr_add_arg ($$@);
|
|||
sub mtr_path_exists(@);
|
||||
sub mtr_script_exists(@);
|
||||
sub mtr_exe_exists(@);
|
||||
sub mtr_copy_dir($$);
|
||||
sub mtr_same_opts($$);
|
||||
sub mtr_cmp_opts($$);
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
|
@ -108,5 +111,44 @@ sub mtr_exe_exists (@) {
|
|||
}
|
||||
}
|
||||
|
||||
sub mtr_copy_dir($$) {
|
||||
my $srcdir= shift;
|
||||
my $dstdir= shift;
|
||||
|
||||
# Create destination directory
|
||||
mkpath($dstdir);
|
||||
find(\&mtr_copy_one_file, $dstdir);
|
||||
}
|
||||
|
||||
sub mtr_copy_one_file {
|
||||
print $File::Find::name, "\n";
|
||||
}
|
||||
|
||||
sub mtr_same_opts ($$) {
|
||||
my $l1= shift;
|
||||
my $l2= shift;
|
||||
return mtr_cmp_opts($l1,$l2) == 0;
|
||||
}
|
||||
|
||||
sub mtr_cmp_opts ($$) {
|
||||
my $l1= shift;
|
||||
my $l2= shift;
|
||||
|
||||
my @l1= @$l1;
|
||||
my @l2= @$l2;
|
||||
|
||||
return -1 if @l1 < @l2;
|
||||
return 1 if @l1 > @l2;
|
||||
|
||||
while ( @l1 ) # Same length
|
||||
{
|
||||
my $e1= shift @l1;
|
||||
my $e2= shift @l2;
|
||||
my $cmp= ($e1 cmp $e2);
|
||||
return $cmp if $cmp != 0;
|
||||
}
|
||||
|
||||
return 0; # They are the same
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -481,9 +481,9 @@ sub initial_setup () {
|
|||
if ( $glob_cygwin_perl )
|
||||
{
|
||||
# Windows programs like 'mysqld' needs Windows paths
|
||||
$glob_mysql_test_dir= `cygpath -m $glob_mysql_test_dir`;
|
||||
$glob_mysql_test_dir= `cygpath -m "$glob_mysql_test_dir"`;
|
||||
my $shell= $ENV{'SHELL'} || "/bin/bash";
|
||||
$glob_cygwin_shell= `cygpath -w $shell`; # The Windows path c:\...
|
||||
$glob_cygwin_shell= `cygpath -w "$shell"`; # The Windows path c:\...
|
||||
chomp($glob_mysql_test_dir);
|
||||
chomp($glob_cygwin_shell);
|
||||
}
|
||||
|
@ -2031,13 +2031,37 @@ sub run_testcase ($) {
|
|||
|
||||
if ( ! $glob_use_running_server and ! $glob_use_embedded_server )
|
||||
{
|
||||
if ( $tinfo->{'master_restart'} or
|
||||
$master->[0]->{'running_master_is_special'} or
|
||||
# Stop if cluster is started but test cases does not need cluster
|
||||
( $opt_with_ndbcluster && $tinfo->{'ndb_test'} != $using_ndbcluster_master ) )
|
||||
# We try to find out if we are to restart the server
|
||||
my $do_restart= 0; # Assumes we don't have to
|
||||
|
||||
if ( $tinfo->{'master_sh'} )
|
||||
{
|
||||
$do_restart= 1; # Always restart if script to run
|
||||
}
|
||||
elsif ( $opt_with_ndbcluster and $tinfo->{'ndb_test'} != $using_ndbcluster_master )
|
||||
{
|
||||
$do_restart= 1; # Restart without cluster
|
||||
}
|
||||
elsif ( $master->[0]->{'running_master_is_special'} and
|
||||
$master->[0]->{'running_master_is_special'}->{'timezone'} eq
|
||||
$tinfo->{'timezone'} and
|
||||
mtr_same_opts($master->[0]->{'running_master_is_special'}->{'master_opt'},
|
||||
$tinfo->{'master_opt'}) )
|
||||
{
|
||||
# If running master was started with special settings, but
|
||||
# the current test requuires the same ones, we *don't* restart.
|
||||
$do_restart= 0;
|
||||
}
|
||||
elsif ( $tinfo->{'master_restart'} or
|
||||
$master->[0]->{'running_master_is_special'} )
|
||||
{
|
||||
$do_restart= 1;
|
||||
}
|
||||
|
||||
if ( $do_restart )
|
||||
{
|
||||
stop_masters();
|
||||
$master->[0]->{'running_master_is_special'}= 0; # Forget why we stopped
|
||||
delete $master->[0]->{'running_master_is_special'}; # Forget history
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
|
@ -2129,7 +2153,8 @@ sub run_testcase ($) {
|
|||
|
||||
if ( $tinfo->{'master_restart'} )
|
||||
{
|
||||
$master->[0]->{'running_master_is_special'}= 1;
|
||||
# Save this test case information, so next can examine it
|
||||
$master->[0]->{'running_master_is_special'}= $tinfo;
|
||||
}
|
||||
}
|
||||
elsif ( ! $opt_skip_im and $tinfo->{'component_id'} eq 'im' )
|
||||
|
|
|
@ -729,6 +729,24 @@ select * from t1 where bob is null and cip=1;
|
|||
cip time score bob
|
||||
1 00:01:00 0 NULL
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
id1 int not null auto_increment,
|
||||
id2 int not null default '0',
|
||||
t text not null,
|
||||
primary key (id1),
|
||||
key x (id2, t(32))
|
||||
) engine=myisam;
|
||||
insert into t1 (id2, t) values
|
||||
(10, 'abc'), (10, 'abc'), (10, 'abc'),
|
||||
(20, 'abc'), (20, 'abc'), (20, 'def'),
|
||||
(10, 'abc'), (10, 'abc');
|
||||
select count(*) from t1 where id2 = 10;
|
||||
count(*)
|
||||
5
|
||||
select count(id1) from t1 where id2 = 10;
|
||||
count(id1)
|
||||
5
|
||||
drop table t1;
|
||||
set storage_engine=MyISAM;
|
||||
drop table if exists t1,t2,t3;
|
||||
--- Testing varchar ---
|
||||
|
|
|
@ -2279,12 +2279,12 @@ UNLOCK TABLES;
|
|||
DELIMITER ;;
|
||||
/*!50003 DROP FUNCTION IF EXISTS `bug9056_func1` */;;
|
||||
/*!50003 SET SESSION SQL_MODE=""*/;;
|
||||
/*!50003 CREATE*/ /*!50019 DEFINER=`root`@`localhost`*/ /*!50003 FUNCTION `bug9056_func1`(a INT, b INT) RETURNS int(11)
|
||||
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 FUNCTION `bug9056_func1`(a INT, b INT) RETURNS int(11)
|
||||
RETURN a+b */;;
|
||||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;;
|
||||
/*!50003 DROP FUNCTION IF EXISTS `bug9056_func2` */;;
|
||||
/*!50003 SET SESSION SQL_MODE=""*/;;
|
||||
/*!50003 CREATE*/ /*!50019 DEFINER=`root`@`localhost`*/ /*!50003 FUNCTION `bug9056_func2`(f1 char binary) RETURNS char(1)
|
||||
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 FUNCTION `bug9056_func2`(f1 char binary) RETURNS char(1)
|
||||
begin
|
||||
set f1= concat( 'hello', f1 );
|
||||
return f1;
|
||||
|
@ -2292,17 +2292,17 @@ end */;;
|
|||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;;
|
||||
/*!50003 DROP PROCEDURE IF EXISTS `a'b` */;;
|
||||
/*!50003 SET SESSION SQL_MODE="REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI"*/;;
|
||||
/*!50003 CREATE*/ /*!50019 DEFINER="root"@"localhost"*/ /*!50003 PROCEDURE "a'b"()
|
||||
/*!50003 CREATE*/ /*!50020 DEFINER="root"@"localhost"*/ /*!50003 PROCEDURE "a'b"()
|
||||
select 1 */;;
|
||||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;;
|
||||
/*!50003 DROP PROCEDURE IF EXISTS `bug9056_proc1` */;;
|
||||
/*!50003 SET SESSION SQL_MODE=""*/;;
|
||||
/*!50003 CREATE*/ /*!50019 DEFINER=`root`@`localhost`*/ /*!50003 PROCEDURE `bug9056_proc1`(IN a INT, IN b INT, OUT c INT)
|
||||
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 PROCEDURE `bug9056_proc1`(IN a INT, IN b INT, OUT c INT)
|
||||
BEGIN SELECT a+b INTO c; end */;;
|
||||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;;
|
||||
/*!50003 DROP PROCEDURE IF EXISTS `bug9056_proc2` */;;
|
||||
/*!50003 SET SESSION SQL_MODE=""*/;;
|
||||
/*!50003 CREATE*/ /*!50019 DEFINER=`root`@`localhost`*/ /*!50003 PROCEDURE `bug9056_proc2`(OUT a INT)
|
||||
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 PROCEDURE `bug9056_proc2`(OUT a INT)
|
||||
BEGIN
|
||||
select sum(id) from t1 into a;
|
||||
END */;;
|
||||
|
|
|
@ -678,6 +678,25 @@ select * from t1 where bob is null and cip=1;
|
|||
create index bug on t1 (bob(22), cip, time);
|
||||
select * from t1 where bob is null and cip=1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
|
||||
#
|
||||
create table t1 (
|
||||
id1 int not null auto_increment,
|
||||
id2 int not null default '0',
|
||||
t text not null,
|
||||
primary key (id1),
|
||||
key x (id2, t(32))
|
||||
) engine=myisam;
|
||||
insert into t1 (id2, t) values
|
||||
(10, 'abc'), (10, 'abc'), (10, 'abc'),
|
||||
(20, 'abc'), (20, 'abc'), (20, 'def'),
|
||||
(10, 'abc'), (10, 'abc');
|
||||
select count(*) from t1 where id2 = 10;
|
||||
select count(id1) from t1 where id2 = 10;
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -12,3 +12,5 @@
|
|||
--exec $MYSQL_SLAP --only-print --delimiter=";" --query="select * from t1;select * from t2" --create="CREATE TABLE t1 (id int, name varchar(64)); create table t2(foo1 varchar(32), foo2 varchar(32)); INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2')" --engine="heap,myisam"
|
||||
|
||||
--exec $MYSQL_SLAP --silent --concurrency=5 --iterations=20 --delimiter=";" --query="select * from t1;select * from t2" --create="CREATE TABLE t1 (id int, name varchar(64)); create table t2(foo1 varchar(32), foo2 varchar(32)); INSERT INTO t1 VALUES (1, 'This is a test'); insert into t2 values ('test', 'test2')"
|
||||
|
||||
--exec $MYSQL_SLAP --silent --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql --create-schema=test_env
|
||||
|
|
|
@ -88,6 +88,8 @@ int mi_delete(MI_INFO *info,const byte *record)
|
|||
_mi_make_key(info,i,old_key,record,info->lastpos)))
|
||||
goto err;
|
||||
}
|
||||
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -444,6 +444,10 @@ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr,
|
|||
(char*) &blob_ptr,sizeof(char*));
|
||||
memcpy(blob_ptr,key,length);
|
||||
blob_ptr+=length;
|
||||
|
||||
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||
|
||||
_my_store_blob_length(record+keyseg->start,
|
||||
(uint) keyseg->bit_start,length);
|
||||
key+=length;
|
||||
|
|
|
@ -40,7 +40,7 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||
|
||||
if (info->s->concurrent_insert)
|
||||
rw_rdlock(&info->s->key_root_lock[inx]);
|
||||
|
||||
|
||||
switch (keyinfo->key_alg)
|
||||
{
|
||||
#ifdef HAVE_RTREE_KEYS
|
||||
|
@ -102,4 +102,4 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
DBUG_RETURN(my_errno);
|
||||
} /* mi_rnext */
|
||||
} /* mi_rnext_same */
|
||||
|
|
|
@ -30,6 +30,9 @@ my_bool mi_check_unique(MI_INFO *info, MI_UNIQUEDEF *def, byte *record,
|
|||
mi_unique_store(record+key->seg->start, unique_hash);
|
||||
_mi_make_key(info,def->key,key_buff,record,0);
|
||||
|
||||
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||
|
||||
if (_mi_search(info,info->s->keyinfo+def->key,key_buff,MI_UNIQUE_HASH_LENGTH,
|
||||
SEARCH_FIND,info->s->state.key_root[def->key]))
|
||||
{
|
||||
|
|
|
@ -111,6 +111,10 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec)
|
|||
{
|
||||
uint new_length=_mi_make_key(info,i,new_key,newrec,pos);
|
||||
uint old_length=_mi_make_key(info,i,old_key,oldrec,pos);
|
||||
|
||||
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||
|
||||
if (new_length != old_length ||
|
||||
memcmp((byte*) old_key,(byte*) new_key,new_length))
|
||||
{
|
||||
|
|
|
@ -132,6 +132,10 @@ int mi_write(MI_INFO *info, byte *record)
|
|||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||
|
||||
if (local_lock_tree)
|
||||
rw_unlock(&share->key_root_lock[i]);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue