mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge moonbone.local:/mnt/gentoo64/work/test-5.0-opt-mysql
into moonbone.local:/mnt/gentoo64/work/test-5.1-opt-mysql
This commit is contained in:
@@ -633,6 +633,37 @@ EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785;
|
|||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #25866: Getting "#HY000 Can't find record in..." on and INSERT
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8;
|
||||||
|
INSERT INTO t1 VALUES ('uk'),('bg');
|
||||||
|
SELECT * FROM t1 WHERE a = 'uk';
|
||||||
|
DELETE FROM t1 WHERE a = 'uk';
|
||||||
|
SELECT * FROM t1 WHERE a = 'uk';
|
||||||
|
UPDATE t1 SET a = 'us' WHERE a = 'uk';
|
||||||
|
SELECT * FROM t1 WHERE a = 'uk';
|
||||||
|
|
||||||
|
CREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
|
||||||
|
INSERT INTO t2 VALUES ('uk'),('bg');
|
||||||
|
SELECT * FROM t2 WHERE a = 'uk';
|
||||||
|
DELETE FROM t2 WHERE a = 'uk';
|
||||||
|
SELECT * FROM t2 WHERE a = 'uk';
|
||||||
|
INSERT INTO t2 VALUES ('uk');
|
||||||
|
UPDATE t2 SET a = 'us' WHERE a = 'uk';
|
||||||
|
SELECT * FROM t2 WHERE a = 'uk';
|
||||||
|
|
||||||
|
CREATE TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;
|
||||||
|
INSERT INTO t3 VALUES ('uk'),('bg');
|
||||||
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
|
DELETE FROM t3 WHERE a = 'uk';
|
||||||
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
|
INSERT INTO t3 VALUES ('uk');
|
||||||
|
UPDATE t3 SET a = 'us' WHERE a = 'uk';
|
||||||
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
19
mysql-test/r/error_simulation.result
Normal file
19
mysql-test/r/error_simulation.result
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 't1'
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(32) character set utf8 collate utf8_bin NOT NULL,
|
||||||
|
b varchar(32) character set utf8 collate utf8_bin NOT NULL )
|
||||||
|
ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('AAAAAAAAAA','AAAAAAAAAA'), ('AAAAAAAAAB','AAAAAAAAAB '),
|
||||||
|
('AAAAAAAAAB','AAAAAAAAAB'), ('AAAAAAAAAC','AAAAAAAAAC'),
|
||||||
|
('AAAAAAAAAD','AAAAAAAAAD'), ('AAAAAAAAAE','AAAAAAAAAE'),
|
||||||
|
('AAAAAAAAAF','AAAAAAAAAF'), ('AAAAAAAAAG','AAAAAAAAAG'),
|
||||||
|
('AAAAAAAAAH','AAAAAAAAAH'), ('AAAAAAAAAI','AAAAAAAAAI'),
|
||||||
|
('AAAAAAAAAJ','AAAAAAAAAJ'), ('AAAAAAAAAK','AAAAAAAAAK');
|
||||||
|
set tmp_table_size=1024;
|
||||||
|
SELECT MAX(a) FROM t1 GROUP BY a,b;
|
||||||
|
ERROR 23000: Can't write; duplicate key in table ''
|
||||||
|
set tmp_table_size=default;
|
||||||
|
DROP TABLE t1;
|
@@ -865,6 +865,27 @@ SELECT Overlaps(@horiz1, @point2) FROM DUAL;
|
|||||||
Overlaps(@horiz1, @point2)
|
Overlaps(@horiz1, @point2)
|
||||||
0
|
0
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1(f1 geometry, f2 point, f3 linestring);
|
||||||
|
select f1 from t1 union select f1 from t1;
|
||||||
|
f1
|
||||||
|
insert into t1 (f2,f3) values (GeomFromText('POINT(1 1)'),
|
||||||
|
GeomFromText('LINESTRING(0 0,1 1,2 2)'));
|
||||||
|
select AsText(f2),AsText(f3) from t1;
|
||||||
|
AsText(f2) AsText(f3)
|
||||||
|
POINT(1 1) LINESTRING(0 0,1 1,2 2)
|
||||||
|
select AsText(a) from (select f2 as a from t1 union select f3 from t1) t;
|
||||||
|
AsText(a)
|
||||||
|
POINT(1 1)
|
||||||
|
LINESTRING(0 0,1 1,2 2)
|
||||||
|
create table t2 as select f2 as a from t1 union select f3 from t1;
|
||||||
|
desc t2;
|
||||||
|
Field Type Null Key Default Extra
|
||||||
|
a point YES NULL
|
||||||
|
select AsText(a) from t2;
|
||||||
|
AsText(a)
|
||||||
|
POINT(1 1)
|
||||||
|
LINESTRING(0 0,1 1,2 2)
|
||||||
|
drop table t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
|
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
|
||||||
create view v1 as select * from t1;
|
create view v1 as select * from t1;
|
||||||
|
@@ -621,6 +621,42 @@ EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t2 range idx1,idx2 idx1 9 NULL 2 Using where; Using index
|
1 SIMPLE t2 range idx1,idx2 idx1 9 NULL 2 Using where; Using index
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8;
|
||||||
|
INSERT INTO t1 VALUES ('uk'),('bg');
|
||||||
|
SELECT * FROM t1 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
uk
|
||||||
|
DELETE FROM t1 WHERE a = 'uk';
|
||||||
|
SELECT * FROM t1 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
UPDATE t1 SET a = 'us' WHERE a = 'uk';
|
||||||
|
SELECT * FROM t1 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
CREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
|
||||||
|
INSERT INTO t2 VALUES ('uk'),('bg');
|
||||||
|
SELECT * FROM t2 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
uk
|
||||||
|
DELETE FROM t2 WHERE a = 'uk';
|
||||||
|
SELECT * FROM t2 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
INSERT INTO t2 VALUES ('uk');
|
||||||
|
UPDATE t2 SET a = 'us' WHERE a = 'uk';
|
||||||
|
SELECT * FROM t2 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
CREATE TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;
|
||||||
|
INSERT INTO t3 VALUES ('uk'),('bg');
|
||||||
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
uk
|
||||||
|
DELETE FROM t3 WHERE a = 'uk';
|
||||||
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
INSERT INTO t3 VALUES ('uk');
|
||||||
|
UPDATE t3 SET a = 'us' WHERE a = 'uk';
|
||||||
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
|
a
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
CREATE TABLE t1 (a int, b int);
|
CREATE TABLE t1 (a int, b int);
|
||||||
insert into t1 values (1,1),(1,2);
|
insert into t1 values (1,1),(1,2);
|
||||||
|
@@ -2853,7 +2853,6 @@ a
|
|||||||
3
|
3
|
||||||
4
|
4
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
|
||||||
CREATE TABLE t1 (f1 INT);
|
CREATE TABLE t1 (f1 INT);
|
||||||
CREATE TABLE t2 (f2 INT);
|
CREATE TABLE t2 (f2 INT);
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
@@ -1 +1,3 @@
|
|||||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select adddate(current_timestamp(), interval -4 day))' at line 1
|
||||||
|
purge master logs before adddate(current_timestamp(), interval -4 day);
|
||||||
|
@@ -411,6 +411,22 @@ if(@bug28261 = f1, '', @bug28261:= f1)
|
|||||||
2001-01-01
|
2001-01-01
|
||||||
2002-02-02
|
2002-02-02
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1(f1 datetime);
|
||||||
|
insert into t1 values('2001-01-01'),('2002-02-02');
|
||||||
|
select * from t1 where f1 between 20020101 and 20070101000000;
|
||||||
|
f1
|
||||||
|
2002-02-02 00:00:00
|
||||||
|
select * from t1 where f1 between 2002010 and 20070101000000;
|
||||||
|
f1
|
||||||
|
2001-01-01 00:00:00
|
||||||
|
2002-02-02 00:00:00
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Incorrect datetime value: '2002010' for column 'f1' at row 1
|
||||||
|
select * from t1 where f1 between 20020101 and 2007010100000;
|
||||||
|
f1
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Incorrect datetime value: '2007010100000' for column 'f1' at row 1
|
||||||
|
drop table t1;
|
||||||
set @org_mode=@@sql_mode;
|
set @org_mode=@@sql_mode;
|
||||||
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
|
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
|
||||||
Warnings:
|
Warnings:
|
||||||
|
1
mysql-test/t/error_simulation-master.opt
Normal file
1
mysql-test/t/error_simulation-master.opt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--loose-debug=d,raise_error
|
29
mysql-test/t/error_simulation.test
Normal file
29
mysql-test/t/error_simulation.test
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
-- source include/have_debug.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #28499: crash for grouping query when tmp_table_size is too small
|
||||||
|
#
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(32) character set utf8 collate utf8_bin NOT NULL,
|
||||||
|
b varchar(32) character set utf8 collate utf8_bin NOT NULL )
|
||||||
|
ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('AAAAAAAAAA','AAAAAAAAAA'), ('AAAAAAAAAB','AAAAAAAAAB '),
|
||||||
|
('AAAAAAAAAB','AAAAAAAAAB'), ('AAAAAAAAAC','AAAAAAAAAC'),
|
||||||
|
('AAAAAAAAAD','AAAAAAAAAD'), ('AAAAAAAAAE','AAAAAAAAAE'),
|
||||||
|
('AAAAAAAAAF','AAAAAAAAAF'), ('AAAAAAAAAG','AAAAAAAAAG'),
|
||||||
|
('AAAAAAAAAH','AAAAAAAAAH'), ('AAAAAAAAAI','AAAAAAAAAI'),
|
||||||
|
('AAAAAAAAAJ','AAAAAAAAAJ'), ('AAAAAAAAAK','AAAAAAAAAK');
|
||||||
|
|
||||||
|
set tmp_table_size=1024;
|
||||||
|
|
||||||
|
--error ER_DUP_KEY
|
||||||
|
SELECT MAX(a) FROM t1 GROUP BY a,b;
|
||||||
|
|
||||||
|
set tmp_table_size=default;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
@@ -558,6 +558,19 @@ SELECT Overlaps(@horiz1, @point2) FROM DUAL;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#28763: Selecting geometry fields in UNION caused server crash.
|
||||||
|
#
|
||||||
|
create table t1(f1 geometry, f2 point, f3 linestring);
|
||||||
|
select f1 from t1 union select f1 from t1;
|
||||||
|
insert into t1 (f2,f3) values (GeomFromText('POINT(1 1)'),
|
||||||
|
GeomFromText('LINESTRING(0 0,1 1,2 2)'));
|
||||||
|
select AsText(f2),AsText(f3) from t1;
|
||||||
|
select AsText(a) from (select f2 as a from t1 union select f3 from t1) t;
|
||||||
|
create table t2 as select f2 as a from t1 union select f3 from t1;
|
||||||
|
desc t2;
|
||||||
|
select AsText(a) from t2;
|
||||||
|
drop table t1, t2;
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1821,13 +1821,6 @@ SELECT * FROM t1
|
|||||||
|
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
#
|
|
||||||
# BUG #10308: purge log with subselect
|
|
||||||
#
|
|
||||||
|
|
||||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#18503: Queries with a quantified subquery returning empty set may
|
# Bug#18503: Queries with a quantified subquery returning empty set may
|
||||||
# return a wrong result.
|
# return a wrong result.
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
# BUG #10308: purge log with subselect
|
# BUG#10308: purge log with subselect
|
||||||
|
# Bug#28553: mysqld crash in "purge master log before(select time from information_schema)"
|
||||||
#
|
#
|
||||||
|
--error 1064
|
||||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||||
|
purge master logs before adddate(current_timestamp(), interval -4 day);
|
||||||
|
@@ -272,6 +272,16 @@ select if(@bug28261 = f1, '', @bug28261:= f1) from t1;
|
|||||||
select if(@bug28261 = f1, '', @bug28261:= f1) from t1;
|
select if(@bug28261 = f1, '', @bug28261:= f1) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#28778: Wrong result of BETWEEN when comparing a DATETIME field with an
|
||||||
|
# integer constants.
|
||||||
|
#
|
||||||
|
create table t1(f1 datetime);
|
||||||
|
insert into t1 values('2001-01-01'),('2002-02-02');
|
||||||
|
select * from t1 where f1 between 20020101 and 20070101000000;
|
||||||
|
select * from t1 where f1 between 2002010 and 20070101000000;
|
||||||
|
select * from t1 where f1 between 20020101 and 2007010100000;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test of storing datetime into date fields
|
# Test of storing datetime into date fields
|
||||||
|
@@ -6426,7 +6426,8 @@ uint Field_string::get_key_image(uchar *buff, uint length, imagetype type_arg)
|
|||||||
length / field_charset->mbmaxlen);
|
length / field_charset->mbmaxlen);
|
||||||
memcpy(buff, ptr, bytes);
|
memcpy(buff, ptr, bytes);
|
||||||
if (bytes < length)
|
if (bytes < length)
|
||||||
bzero(buff + bytes, length - bytes);
|
field_charset->cset->fill(field_charset, buff + bytes, length - bytes,
|
||||||
|
field_charset->pad_char);
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -423,6 +423,12 @@ public:
|
|||||||
return field_length / charset()->mbmaxlen;
|
return field_length / charset()->mbmaxlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual geometry_type get_geometry_type()
|
||||||
|
{
|
||||||
|
/* shouldn't get here. */
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
return GEOM_GEOMETRY;
|
||||||
|
}
|
||||||
/* Hash value */
|
/* Hash value */
|
||||||
virtual void hash(ulong *nr, ulong *nr2);
|
virtual void hash(ulong *nr, ulong *nr2);
|
||||||
friend bool reopen_table(THD *,struct st_table *,bool);
|
friend bool reopen_table(THD *,struct st_table *,bool);
|
||||||
@@ -1415,6 +1421,7 @@ public:
|
|||||||
uint get_key_image(uchar *buff,uint length,imagetype type);
|
uint get_key_image(uchar *buff,uint length,imagetype type);
|
||||||
uint size_of() const { return sizeof(*this); }
|
uint size_of() const { return sizeof(*this); }
|
||||||
int reset(void) { return !maybe_null() || Field_blob::reset(); }
|
int reset(void) { return !maybe_null() || Field_blob::reset(); }
|
||||||
|
geometry_type get_geometry_type() { return geom_type; };
|
||||||
};
|
};
|
||||||
#endif /*HAVE_SPATIAL*/
|
#endif /*HAVE_SPATIAL*/
|
||||||
|
|
||||||
|
@@ -4405,7 +4405,9 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
|
|||||||
case MYSQL_TYPE_GEOMETRY:
|
case MYSQL_TYPE_GEOMETRY:
|
||||||
return new Field_geom(max_length, maybe_null, name, table->s,
|
return new Field_geom(max_length, maybe_null, name, table->s,
|
||||||
(Field::geometry_type)
|
(Field::geometry_type)
|
||||||
((Item_geometry_func *)this)->get_geometry_type());
|
((type() == Item::TYPE_HOLDER) ?
|
||||||
|
((Item_type_holder *)this)->get_geometry_type() :
|
||||||
|
((Item_geometry_func *)this)->get_geometry_type()));
|
||||||
}
|
}
|
||||||
if (field)
|
if (field)
|
||||||
field->init(table);
|
field->init(table);
|
||||||
@@ -6514,6 +6516,10 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item)
|
|||||||
if (Field::result_merge_type(fld_type) == INT_RESULT)
|
if (Field::result_merge_type(fld_type) == INT_RESULT)
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
prev_decimal_int_part= item->decimal_int_part();
|
prev_decimal_int_part= item->decimal_int_part();
|
||||||
|
if (item->field_type() == MYSQL_TYPE_GEOMETRY)
|
||||||
|
geometry_type= (item->type() == Item::FIELD_ITEM) ?
|
||||||
|
((Item_field *)item)->get_geometry_type() :
|
||||||
|
(Field::geometry_type)((Item_geometry_func *)item)->get_geometry_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1399,6 +1399,11 @@ public:
|
|||||||
int fix_outer_field(THD *thd, Field **field, Item **reference);
|
int fix_outer_field(THD *thd, Field **field, Item **reference);
|
||||||
virtual Item *update_value_transformer(uchar *select_arg);
|
virtual Item *update_value_transformer(uchar *select_arg);
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
|
Field::geometry_type get_geometry_type()
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(field_type() == MYSQL_TYPE_GEOMETRY);
|
||||||
|
return field->get_geometry_type();
|
||||||
|
}
|
||||||
friend class Item_default_value;
|
friend class Item_default_value;
|
||||||
friend class Item_insert_value;
|
friend class Item_insert_value;
|
||||||
friend class st_select_lex_unit;
|
friend class st_select_lex_unit;
|
||||||
@@ -2692,6 +2697,7 @@ class Item_type_holder: public Item
|
|||||||
protected:
|
protected:
|
||||||
TYPELIB *enum_set_typelib;
|
TYPELIB *enum_set_typelib;
|
||||||
enum_field_types fld_type;
|
enum_field_types fld_type;
|
||||||
|
Field::geometry_type geometry_type;
|
||||||
|
|
||||||
void get_full_info(Item *item);
|
void get_full_info(Item *item);
|
||||||
|
|
||||||
@@ -2711,6 +2717,7 @@ public:
|
|||||||
Field *make_field_by_type(TABLE *table);
|
Field *make_field_by_type(TABLE *table);
|
||||||
static uint32 display_length(Item *item);
|
static uint32 display_length(Item *item);
|
||||||
static enum_field_types get_real_type(Item *);
|
static enum_field_types get_real_type(Item *);
|
||||||
|
Field::geometry_type get_geometry_type() { return geometry_type; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1810,6 +1810,23 @@ void Item_func_between::fix_length_and_dec()
|
|||||||
ge_cmp.set_datetime_cmp_func(args, args + 1);
|
ge_cmp.set_datetime_cmp_func(args, args + 1);
|
||||||
le_cmp.set_datetime_cmp_func(args, args + 2);
|
le_cmp.set_datetime_cmp_func(args, args + 2);
|
||||||
}
|
}
|
||||||
|
else if (args[0]->real_item()->type() == FIELD_ITEM &&
|
||||||
|
thd->lex->sql_command != SQLCOM_CREATE_VIEW &&
|
||||||
|
thd->lex->sql_command != SQLCOM_SHOW_CREATE)
|
||||||
|
{
|
||||||
|
Field *field=((Item_field*) (args[0]->real_item()))->field;
|
||||||
|
if (field->can_be_compared_as_longlong())
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
The following can't be recoded with || as convert_constant_item
|
||||||
|
changes the argument
|
||||||
|
*/
|
||||||
|
if (convert_constant_item(thd, field,&args[1]))
|
||||||
|
cmp_type=INT_RESULT; // Works for all types.
|
||||||
|
if (convert_constant_item(thd, field,&args[2]))
|
||||||
|
cmp_type=INT_RESULT; // Works for all types.
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -932,20 +932,24 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
if (values_list.elements == 1 && (!(thd->options & OPTION_WARNINGS) ||
|
if (values_list.elements == 1 && (!(thd->options & OPTION_WARNINGS) ||
|
||||||
!thd->cuted_fields))
|
!thd->cuted_fields))
|
||||||
{
|
{
|
||||||
thd->row_count_func= info.copied+info.deleted+info.updated;
|
thd->row_count_func= info.copied + info.deleted +
|
||||||
|
((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||||
|
info.touched : info.updated);
|
||||||
send_ok(thd, (ulong) thd->row_count_func, id);
|
send_ok(thd, (ulong) thd->row_count_func, id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char buff[160];
|
char buff[160];
|
||||||
|
ha_rows updated=((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||||
|
info.touched : info.updated);
|
||||||
if (ignore)
|
if (ignore)
|
||||||
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
||||||
(lock_type == TL_WRITE_DELAYED) ? (ulong) 0 :
|
(lock_type == TL_WRITE_DELAYED) ? (ulong) 0 :
|
||||||
(ulong) (info.records - info.copied), (ulong) thd->cuted_fields);
|
(ulong) (info.records - info.copied), (ulong) thd->cuted_fields);
|
||||||
else
|
else
|
||||||
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
||||||
(ulong) (info.deleted+info.updated), (ulong) thd->cuted_fields);
|
(ulong) (info.deleted + updated), (ulong) thd->cuted_fields);
|
||||||
thd->row_count_func= info.copied+info.deleted+info.updated;
|
thd->row_count_func= info.copied + info.deleted + updated;
|
||||||
::send_ok(thd, (ulong) thd->row_count_func, id, buff);
|
::send_ok(thd, (ulong) thd->row_count_func, id, buff);
|
||||||
}
|
}
|
||||||
thd->abort_on_warning= 0;
|
thd->abort_on_warning= 0;
|
||||||
@@ -3136,7 +3140,9 @@ bool select_insert::send_eof()
|
|||||||
else
|
else
|
||||||
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
sprintf(buff, ER(ER_INSERT_INFO), (ulong) info.records,
|
||||||
(ulong) (info.deleted+info.updated), (ulong) thd->cuted_fields);
|
(ulong) (info.deleted+info.updated), (ulong) thd->cuted_fields);
|
||||||
thd->row_count_func= info.copied+info.deleted+info.updated;
|
thd->row_count_func= info.copied + info.deleted +
|
||||||
|
((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||||
|
info.touched : info.updated);
|
||||||
|
|
||||||
id= (thd->first_successful_insert_id_in_cur_stmt > 0) ?
|
id= (thd->first_successful_insert_id_in_cur_stmt > 0) ?
|
||||||
thd->first_successful_insert_id_in_cur_stmt :
|
thd->first_successful_insert_id_in_cur_stmt :
|
||||||
|
@@ -10414,7 +10414,9 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
|
|||||||
*/
|
*/
|
||||||
while (!table->file->rnd_next(new_table.record[1]))
|
while (!table->file->rnd_next(new_table.record[1]))
|
||||||
{
|
{
|
||||||
if ((write_err= new_table.file->write_row(new_table.record[1])))
|
write_err= new_table.file->write_row(new_table.record[1]);
|
||||||
|
DBUG_EXECUTE_IF("raise_error", write_err= HA_ERR_FOUND_DUPP_KEY ;);
|
||||||
|
if (write_err)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
/* copy row that filled HEAP table */
|
/* copy row that filled HEAP table */
|
||||||
@@ -10446,7 +10448,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
DBUG_PRINT("error",("Got error: %d",write_err));
|
DBUG_PRINT("error",("Got error: %d",write_err));
|
||||||
table->file->print_error(error,MYF(0)); // Give table is full error
|
table->file->print_error(write_err, MYF(0)); // Give table is full error
|
||||||
(void) table->file->ha_rnd_end();
|
(void) table->file->ha_rnd_end();
|
||||||
(void) new_table.file->close();
|
(void) new_table.file->close();
|
||||||
err1:
|
err1:
|
||||||
@@ -10454,6 +10456,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
|
|||||||
err2:
|
err2:
|
||||||
delete new_table.file;
|
delete new_table.file;
|
||||||
thd->proc_info=save_proc_info;
|
thd->proc_info=save_proc_info;
|
||||||
|
table->mem_root= new_table.mem_root;
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9046,6 +9046,7 @@ purge:
|
|||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
lex->type=0;
|
lex->type=0;
|
||||||
|
lex->sql_command = SQLCOM_PURGE;
|
||||||
} purge_options
|
} purge_options
|
||||||
{}
|
{}
|
||||||
;
|
;
|
||||||
@@ -9057,7 +9058,6 @@ purge_options:
|
|||||||
purge_option:
|
purge_option:
|
||||||
TO_SYM TEXT_STRING_sys
|
TO_SYM TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
Lex->sql_command = SQLCOM_PURGE;
|
|
||||||
Lex->to_log = $2.str;
|
Lex->to_log = $2.str;
|
||||||
}
|
}
|
||||||
| BEFORE_SYM expr
|
| BEFORE_SYM expr
|
||||||
|
@@ -16161,6 +16161,69 @@ static void test_bug27876()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Bug#28505: mysql_affected_rows() returns wrong value if CLIENT_FOUND_ROWS
|
||||||
|
flag is set.
|
||||||
|
*/
|
||||||
|
static void test_bug28505()
|
||||||
|
{
|
||||||
|
MYSQL *l_mysql;
|
||||||
|
my_bool error= 0;
|
||||||
|
my_ulonglong res;
|
||||||
|
|
||||||
|
if (!(l_mysql= mysql_init(NULL)))
|
||||||
|
{
|
||||||
|
myerror("mysql_init() failed");
|
||||||
|
DIE_UNLESS(1);
|
||||||
|
}
|
||||||
|
if (!(mysql_real_connect(l_mysql, opt_host, opt_user,
|
||||||
|
opt_password, current_db, opt_port,
|
||||||
|
opt_unix_socket, CLIENT_FOUND_ROWS)))
|
||||||
|
{
|
||||||
|
myerror("connection failed");
|
||||||
|
error= 1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
l_mysql->reconnect= 1;
|
||||||
|
if (mysql_query(l_mysql, "drop table if exists t1"))
|
||||||
|
{
|
||||||
|
myerror(NULL);
|
||||||
|
error= 1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (mysql_query(l_mysql, "create table t1(f1 int primary key)"))
|
||||||
|
{
|
||||||
|
myerror(NULL);
|
||||||
|
error= 1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (mysql_query(l_mysql, "insert into t1 values(1)"))
|
||||||
|
{
|
||||||
|
myerror(NULL);
|
||||||
|
error= 1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (mysql_query(l_mysql,
|
||||||
|
"insert into t1 values(1) on duplicate key update f1=1"))
|
||||||
|
{
|
||||||
|
myerror(NULL);
|
||||||
|
error= 1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
res= mysql_affected_rows(l_mysql);
|
||||||
|
if (!res)
|
||||||
|
error= 1;
|
||||||
|
if (mysql_query(l_mysql, "drop table t1"))
|
||||||
|
{
|
||||||
|
myerror(NULL);
|
||||||
|
error= 1;
|
||||||
|
}
|
||||||
|
end:
|
||||||
|
mysql_close(l_mysql);
|
||||||
|
DIE_UNLESS(error == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read and parse arguments and MySQL options from my.cnf
|
Read and parse arguments and MySQL options from my.cnf
|
||||||
*/
|
*/
|
||||||
@@ -16442,6 +16505,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_bug15518", test_bug15518 },
|
{ "test_bug15518", test_bug15518 },
|
||||||
{ "test_bug23383", test_bug23383 },
|
{ "test_bug23383", test_bug23383 },
|
||||||
{ "test_bug21635", test_bug21635 },
|
{ "test_bug21635", test_bug21635 },
|
||||||
|
{ "test_bug28505", test_bug28505 },
|
||||||
{ "test_status", test_status },
|
{ "test_status", test_status },
|
||||||
{ "test_bug24179", test_bug24179 },
|
{ "test_bug24179", test_bug24179 },
|
||||||
{ "test_ps_query_cache", test_ps_query_cache },
|
{ "test_ps_query_cache", test_ps_query_cache },
|
||||||
|
Reference in New Issue
Block a user