mirror of
https://github.com/MariaDB/server.git
synced 2025-05-13 01:01:44 +03:00
Merge bk-internal:/home/bk/mysql-5.0
into magare.gmz:/home/kgeorge/mysql/work/merge-5.0-bugteam
This commit is contained in:
commit
771d861c99
@ -533,8 +533,12 @@ C_MODE_END
|
|||||||
#undef DBUG_OFF
|
#undef DBUG_OFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_lint) && !defined(DBUG_OFF)
|
/* We might be forced to turn debug off, if not turned off already */
|
||||||
|
#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF)
|
||||||
# define DBUG_OFF
|
# define DBUG_OFF
|
||||||
|
# ifdef DBUG_ON
|
||||||
|
# undef DBUG_ON
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <my_dbug.h>
|
#include <my_dbug.h>
|
||||||
|
@ -247,4 +247,11 @@ t1 CREATE TABLE `t1` (
|
|||||||
`c2` text NOT NULL
|
`c2` text NOT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1(a MEDIUMTEXT CHARACTER SET gbk,
|
||||||
|
b MEDIUMTEXT CHARACTER SET big5);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(REPEAT(0x1125,200000), REPEAT(0x1125,200000)), ('', ''), ('', '');
|
||||||
|
SELECT a FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||||
|
SELECT b FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||||
|
DROP TABLES t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -4374,4 +4374,11 @@ a4 f3 a6
|
|||||||
1 NULL NULL
|
1 NULL NULL
|
||||||
2 NULL NULL
|
2 NULL NULL
|
||||||
DROP TABLE t1, t2, t3, t4;
|
DROP TABLE t1, t2, t3, t4;
|
||||||
|
create table t1 (a float(5,4) zerofill);
|
||||||
|
create table t2 (a float(5,4),b float(2,0));
|
||||||
|
select t1.a from t1 where
|
||||||
|
t1.a= (select b from t2 limit 1) and not
|
||||||
|
t1.a= (select a from t2 limit 1) ;
|
||||||
|
a
|
||||||
|
drop table t1, t2;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -770,4 +770,13 @@ SELECT ROW(1, 2) IN (SELECT t1.a, 2 FROM t2) FROM t1 GROUP BY t1.a;
|
|||||||
ROW(1, 2) IN (SELECT t1.a, 2 FROM t2)
|
ROW(1, 2) IN (SELECT t1.a, 2 FROM t2)
|
||||||
1
|
1
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
CREATE TABLE t2 SELECT * FROM t1;
|
||||||
|
SELECT 1 FROM t1 WHERE t1.a NOT IN (SELECT 1 FROM t1, t2 WHERE 0);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP TABLE t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -946,4 +946,11 @@ SELECT ROUND(20061108085411.000002);
|
|||||||
ROUND(20061108085411.000002)
|
ROUND(20061108085411.000002)
|
||||||
20061108085411
|
20061108085411
|
||||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||||
|
create table t1(`c` decimal(9,2));
|
||||||
|
insert into t1 values (300),(201.11);
|
||||||
|
select max(case 1 when 1 then c else null end) from t1 group by c;
|
||||||
|
max(case 1 when 1 then c else null end)
|
||||||
|
201.11
|
||||||
|
300.00
|
||||||
|
drop table t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -53,4 +53,18 @@ alter table t1 change c1 c1 mediumtext character set gbk not null;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#35993: severe memory corruption and crash with multibyte conversion
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1(a MEDIUMTEXT CHARACTER SET gbk,
|
||||||
|
b MEDIUMTEXT CHARACTER SET big5);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(REPEAT(0x1125,200000), REPEAT(0x1125,200000)), ('', ''), ('', '');
|
||||||
|
|
||||||
|
SELECT a FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||||
|
SELECT b FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||||
|
|
||||||
|
DROP TABLES t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -3259,5 +3259,17 @@ GROUP BY a4;
|
|||||||
|
|
||||||
DROP TABLE t1, t2, t3, t4;
|
DROP TABLE t1, t2, t3, t4;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#36139 "float, zerofill, crash with subquery"
|
||||||
|
#
|
||||||
|
create table t1 (a float(5,4) zerofill);
|
||||||
|
create table t2 (a float(5,4),b float(2,0));
|
||||||
|
|
||||||
|
select t1.a from t1 where
|
||||||
|
t1.a= (select b from t2 limit 1) and not
|
||||||
|
t1.a= (select a from t2 limit 1) ;
|
||||||
|
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
@ -605,4 +605,17 @@ SELECT ROW(1, 2) IN (SELECT t1.a, 2 FROM t2) FROM t1 GROUP BY t1.a;
|
|||||||
|
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #36005: crash in subselect with single row
|
||||||
|
# (subselect_single_select_engine::exec)
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
CREATE TABLE t2 SELECT * FROM t1;
|
||||||
|
|
||||||
|
SELECT 1 FROM t1 WHERE t1.a NOT IN (SELECT 1 FROM t1, t2 WHERE 0);
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -521,4 +521,12 @@ SELECT ROUND(20061108085411.000002);
|
|||||||
|
|
||||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#36023: Incorrect handling of zero length caused an assertion to fail.
|
||||||
|
#
|
||||||
|
create table t1(`c` decimal(9,2));
|
||||||
|
insert into t1 values (300),(201.11);
|
||||||
|
select max(case 1 when 1 then c else null end) from t1 group by c;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -14,8 +14,7 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
/* To avoid problems with alarms in debug code, we disable DBUG here */
|
/* To avoid problems with alarms in debug code, we disable DBUG here */
|
||||||
#undef DBUG_OFF
|
#define FORCE_DBUG_OFF
|
||||||
#define DBUG_OFF
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
|
|
||||||
#if defined(THREAD) && !defined(DONT_USE_THR_ALARM)
|
#if defined(THREAD) && !defined(DONT_USE_THR_ALARM)
|
||||||
|
@ -4156,10 +4156,15 @@ static void convert_zerofill_number_to_string(Item **item, Field_num *field)
|
|||||||
String tmp(buff,sizeof(buff), field->charset()), *res;
|
String tmp(buff,sizeof(buff), field->charset()), *res;
|
||||||
|
|
||||||
res= (*item)->val_str(&tmp);
|
res= (*item)->val_str(&tmp);
|
||||||
|
if ((*item)->is_null())
|
||||||
|
*item= new Item_null();
|
||||||
|
else
|
||||||
|
{
|
||||||
field->prepend_zeros(res);
|
field->prepend_zeros(res);
|
||||||
pos= (char *) sql_strmake (res->ptr(), res->length());
|
pos= (char *) sql_strmake (res->ptr(), res->length());
|
||||||
*item= new Item_string(pos, res->length(), field->charset());
|
*item= new Item_string(pos, res->length(), field->charset());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -164,14 +164,23 @@ inline int check_result_and_overflow(uint mask, int result, my_decimal *val)
|
|||||||
inline uint my_decimal_length_to_precision(uint length, uint scale,
|
inline uint my_decimal_length_to_precision(uint length, uint scale,
|
||||||
bool unsigned_flag)
|
bool unsigned_flag)
|
||||||
{
|
{
|
||||||
return (uint) (length - (scale>0 ? 1:0) - (unsigned_flag ? 0:1));
|
/* Precision can't be negative thus ignore unsigned_flag when length is 0. */
|
||||||
|
DBUG_ASSERT(length || !scale);
|
||||||
|
return (uint) (length - (scale>0 ? 1:0) -
|
||||||
|
(unsigned_flag || !length ? 0:1));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint32 my_decimal_precision_to_length(uint precision, uint8 scale,
|
inline uint32 my_decimal_precision_to_length(uint precision, uint8 scale,
|
||||||
bool unsigned_flag)
|
bool unsigned_flag)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
When precision is 0 it means that original length was also 0. Thus
|
||||||
|
unsigned_flag is ignored in this case.
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(precision || !scale);
|
||||||
set_if_smaller(precision, DECIMAL_MAX_PRECISION);
|
set_if_smaller(precision, DECIMAL_MAX_PRECISION);
|
||||||
return (uint32)(precision + (scale>0 ? 1:0) + (unsigned_flag ? 0:1));
|
return (uint32)(precision + (scale>0 ? 1:0) +
|
||||||
|
(unsigned_flag || !precision ? 0:1));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
@ -832,6 +832,7 @@ JOIN::optimize()
|
|||||||
"Impossible HAVING" : "Impossible WHERE"));
|
"Impossible HAVING" : "Impossible WHERE"));
|
||||||
zero_result_cause= having_value == Item::COND_FALSE ?
|
zero_result_cause= having_value == Item::COND_FALSE ?
|
||||||
"Impossible HAVING" : "Impossible WHERE";
|
"Impossible HAVING" : "Impossible WHERE";
|
||||||
|
tables= 0;
|
||||||
error= 0;
|
error= 0;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
@ -307,14 +307,16 @@ static int my_strnxfrm_big5(CHARSET_INFO *cs __attribute__((unused)),
|
|||||||
{
|
{
|
||||||
uint16 e;
|
uint16 e;
|
||||||
uint dstlen= len;
|
uint dstlen= len;
|
||||||
|
uchar *dest_end= dest + dstlen;
|
||||||
|
|
||||||
len = srclen;
|
len = srclen;
|
||||||
while (len--)
|
while (len-- && dest < dest_end)
|
||||||
{
|
{
|
||||||
if ((len > 0) && isbig5code(*src, *(src+1)))
|
if ((len > 0) && isbig5code(*src, *(src+1)))
|
||||||
{
|
{
|
||||||
e = big5strokexfrm((uint16) big5code(*src, *(src+1)));
|
e = big5strokexfrm((uint16) big5code(*src, *(src+1)));
|
||||||
*dest++ = big5head(e);
|
*dest++ = big5head(e);
|
||||||
|
if (dest < dest_end)
|
||||||
*dest++ = big5tail(e);
|
*dest++ = big5tail(e);
|
||||||
src +=2;
|
src +=2;
|
||||||
len--;
|
len--;
|
||||||
|
@ -2668,14 +2668,16 @@ static int my_strnxfrm_gbk(CHARSET_INFO *cs __attribute__((unused)),
|
|||||||
{
|
{
|
||||||
uint16 e;
|
uint16 e;
|
||||||
uint dstlen= len;
|
uint dstlen= len;
|
||||||
|
uchar *dest_end= dest + dstlen;
|
||||||
|
|
||||||
len = srclen;
|
len = srclen;
|
||||||
while (len--)
|
while (len-- && dest < dest_end)
|
||||||
{
|
{
|
||||||
if ((len > 0) && isgbkcode(*src, *(src+1)))
|
if ((len > 0) && isgbkcode(*src, *(src+1)))
|
||||||
{
|
{
|
||||||
e = gbksortorder((uint16) gbkcode(*src, *(src+1)));
|
e = gbksortorder((uint16) gbkcode(*src, *(src+1)));
|
||||||
*dest++ = gbkhead(e);
|
*dest++ = gbkhead(e);
|
||||||
|
if (dest < dest_end)
|
||||||
*dest++ = gbktail(e);
|
*dest++ = gbktail(e);
|
||||||
src+=2;
|
src+=2;
|
||||||
len--;
|
len--;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user