Merge 4.1 - 5.0
This commit is contained in:
parent
cbe21a8eb6
commit
af50eff0d2
@ -668,11 +668,21 @@ ERROR 42S22: Unknown column 't2.a' in 'field list'
|
||||
insert into t1 select t2.a from t2 group by t2.a on duplicate key update a= t1.a + t2.b;
|
||||
ERROR 42S22: Unknown column 't2.b' in 'field list'
|
||||
drop table t1,t2,t3;
|
||||
create table t1(f1 varchar(5) key);
|
||||
insert into t1(f1) select if(max(f1) is null, '2000',max(f1)+1) from t1;
|
||||
insert into t1(f1) select if(max(f1) is null, '2000',max(f1)+1) from t1;
|
||||
insert into t1(f1) select if(max(f1) is null, '2000',max(f1)+1) from t1;
|
||||
select * from t1;
|
||||
f1
|
||||
2000
|
||||
2001
|
||||
2002
|
||||
drop table t1;
|
||||
create table t1(x int, y int);
|
||||
create table t2(x int, z int);
|
||||
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x);
|
||||
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z);
|
||||
ERROR 42S22: Unknown column 'z' in 'field list'
|
||||
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x);
|
||||
ERROR 42S02: Unknown table 't2' in field list
|
||||
ERROR 42S22: Unknown column 't2.x' in 'field list'
|
||||
drop table t1,t2;
|
||||
|
@ -2700,6 +2700,14 @@ a b c d
|
||||
1 2 2 1
|
||||
1 2 3 1
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
create table t1 (f1 int primary key, f2 int);
|
||||
create table t2 (f3 int, f4 int, primary key(f3,f4));
|
||||
insert into t1 values (1,1);
|
||||
insert into t2 values (1,1),(1,2);
|
||||
select distinct count(f2) >0 from t1 left join t2 on f1=f3 group by f1;
|
||||
count(f2) >0
|
||||
1
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 ( city char(30) );
|
||||
INSERT INTO t1 VALUES ('London');
|
||||
INSERT INTO t1 VALUES ('Paris');
|
||||
@ -2801,304 +2809,6 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||
1 SIMPLE t2 ref a a 23 test.t1.a 2
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 ( city char(30) );
|
||||
INSERT INTO t1 VALUES ('London');
|
||||
INSERT INTO t1 VALUES ('Paris');
|
||||
SELECT * FROM t1 WHERE city='London';
|
||||
city
|
||||
London
|
||||
SELECT * FROM t1 WHERE city='london';
|
||||
city
|
||||
London
|
||||
EXPLAIN SELECT * FROM t1 WHERE city='London' AND city='london';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
SELECT * FROM t1 WHERE city='London' AND city='london';
|
||||
city
|
||||
London
|
||||
EXPLAIN SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
|
||||
city
|
||||
London
|
||||
DROP TABLE t1;
|
||||
create table t1 (a int(11) unsigned, b int(11) unsigned);
|
||||
insert into t1 values (1,0), (1,1), (1,2);
|
||||
select a-b from t1 order by 1;
|
||||
a-b
|
||||
0
|
||||
1
|
||||
18446744073709551615
|
||||
select a-b , (a-b < 0) from t1 order by 1;
|
||||
a-b (a-b < 0)
|
||||
0 0
|
||||
1 0
|
||||
18446744073709551615 0
|
||||
select a-b as d, (a-b >= 0), b from t1 group by b having d >= 0;
|
||||
d (a-b >= 0) b
|
||||
1 1 0
|
||||
0 1 1
|
||||
18446744073709551615 1 2
|
||||
select cast((a - b) as unsigned) from t1 order by 1;
|
||||
cast((a - b) as unsigned)
|
||||
0
|
||||
1
|
||||
18446744073709551615
|
||||
drop table t1;
|
||||
create table t1 (a int(11));
|
||||
select all all * from t1;
|
||||
a
|
||||
select distinct distinct * from t1;
|
||||
a
|
||||
select all distinct * from t1;
|
||||
ERROR HY000: Incorrect usage of ALL and DISTINCT
|
||||
select distinct all * from t1;
|
||||
ERROR HY000: Incorrect usage of ALL and DISTINCT
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
kunde_intern_id int(10) unsigned NOT NULL default '0',
|
||||
kunde_id int(10) unsigned NOT NULL default '0',
|
||||
FK_firma_id int(10) unsigned NOT NULL default '0',
|
||||
aktuell enum('Ja','Nein') NOT NULL default 'Ja',
|
||||
vorname varchar(128) NOT NULL default '',
|
||||
nachname varchar(128) NOT NULL default '',
|
||||
geloescht enum('Ja','Nein') NOT NULL default 'Nein',
|
||||
firma varchar(128) NOT NULL default ''
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(3964,3051,1,'Ja','Vorname1','1Nachname','Nein','Print Schau XXXX'),
|
||||
(3965,3051111,1,'Ja','Vorname1111','1111Nachname','Nein','Print Schau XXXX');
|
||||
SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, geloescht FROM t1
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
( '' != '' AND firma LIKE CONCAT('%', '', '%'))
|
||||
OR
|
||||
(vorname LIKE CONCAT('%', 'Vorname1', '%') AND
|
||||
nachname LIKE CONCAT('%', '1Nachname', '%') AND
|
||||
'Vorname1' != '' AND 'xxxx' != '')
|
||||
)
|
||||
AND
|
||||
(
|
||||
aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2
|
||||
)
|
||||
)
|
||||
;
|
||||
kunde_id FK_firma_id aktuell vorname nachname geloescht
|
||||
SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname,
|
||||
geloescht FROM t1
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2
|
||||
)
|
||||
AND
|
||||
(
|
||||
( '' != '' AND firma LIKE CONCAT('%', '', '%') )
|
||||
OR
|
||||
( vorname LIKE CONCAT('%', 'Vorname1', '%') AND
|
||||
nachname LIKE CONCAT('%', '1Nachname', '%') AND 'Vorname1' != '' AND
|
||||
'xxxx' != '')
|
||||
)
|
||||
)
|
||||
;
|
||||
kunde_id FK_firma_id aktuell vorname nachname geloescht
|
||||
SELECT COUNT(*) FROM t1 WHERE
|
||||
( 0 OR (vorname LIKE '%Vorname1%' AND nachname LIKE '%1Nachname%' AND 1))
|
||||
AND FK_firma_id = 2;
|
||||
COUNT(*)
|
||||
0
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (b BIGINT(20) UNSIGNED NOT NULL, PRIMARY KEY (b));
|
||||
INSERT INTO t1 VALUES (0x8000000000000000);
|
||||
SELECT b FROM t1 WHERE b=0x8000000000000000;
|
||||
b
|
||||
9223372036854775808
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE `t1` ( `gid` int(11) default NULL, `uid` int(11) default NULL);
|
||||
CREATE TABLE `t2` ( `ident` int(11) default NULL, `level` char(16) default NULL);
|
||||
INSERT INTO `t2` VALUES (0,'READ');
|
||||
CREATE TABLE `t3` ( `id` int(11) default NULL, `name` char(16) default NULL);
|
||||
INSERT INTO `t3` VALUES (1,'fs');
|
||||
select * from t3 left join t1 on t3.id = t1.uid, t2 where t2.ident in (0, t1.gid, t3.id, 0);
|
||||
id name gid uid ident level
|
||||
1 fs NULL NULL 0 READ
|
||||
drop table t1,t2,t3;
|
||||
CREATE TABLE t1 (
|
||||
acct_id int(11) NOT NULL default '0',
|
||||
profile_id smallint(6) default NULL,
|
||||
UNIQUE KEY t1$acct_id (acct_id),
|
||||
KEY t1$profile_id (profile_id)
|
||||
);
|
||||
INSERT INTO t1 VALUES (132,17),(133,18);
|
||||
CREATE TABLE t2 (
|
||||
profile_id smallint(6) default NULL,
|
||||
queue_id int(11) default NULL,
|
||||
seq int(11) default NULL,
|
||||
KEY t2$queue_id (queue_id)
|
||||
);
|
||||
INSERT INTO t2 VALUES (17,31,4),(17,30,3),(17,36,2),(17,37,1);
|
||||
CREATE TABLE t3 (
|
||||
id int(11) NOT NULL default '0',
|
||||
qtype int(11) default NULL,
|
||||
seq int(11) default NULL,
|
||||
warn_lvl int(11) default NULL,
|
||||
crit_lvl int(11) default NULL,
|
||||
rr1 tinyint(4) NOT NULL default '0',
|
||||
rr2 int(11) default NULL,
|
||||
default_queue tinyint(4) NOT NULL default '0',
|
||||
KEY t3$qtype (qtype),
|
||||
KEY t3$id (id)
|
||||
);
|
||||
INSERT INTO t3 VALUES (30,1,29,NULL,NULL,0,NULL,0),(31,1,28,NULL,NULL,0,NULL,0),
|
||||
(36,1,34,NULL,NULL,0,NULL,0),(37,1,35,NULL,NULL,0,121,0);
|
||||
SELECT COUNT(*) FROM t1 a STRAIGHT_JOIN t2 pq STRAIGHT_JOIN t3 q
|
||||
WHERE
|
||||
(pq.profile_id = a.profile_id) AND (a.acct_id = 132) AND
|
||||
(pq.queue_id = q.id) AND (q.rr1 <> 1);
|
||||
COUNT(*)
|
||||
4
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (f1 int);
|
||||
insert into t1 values (1),(NULL);
|
||||
create table t2 (f2 int, f3 int, f4 int);
|
||||
create index idx1 on t2 (f4);
|
||||
insert into t2 values (1,2,3),(2,4,6);
|
||||
select A.f2 from t1 left join t2 A on A.f2 = f1 where A.f3=(select min(f3)
|
||||
from t2 C where A.f4 = C.f4) or A.f3 IS NULL;
|
||||
f2
|
||||
1
|
||||
NULL
|
||||
drop table t1,t2;
|
||||
create table t2 (a tinyint unsigned);
|
||||
create index t2i on t2(a);
|
||||
insert into t2 values (0), (254), (255);
|
||||
explain select * from t2 where a > -1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index t2i t2i 2 NULL 3 Using where; Using index
|
||||
select * from t2 where a > -1;
|
||||
a
|
||||
0
|
||||
254
|
||||
255
|
||||
drop table t2;
|
||||
CREATE TABLE t1 (a int, b int, c int);
|
||||
INSERT INTO t1
|
||||
SELECT 50, 3, 3 FROM DUAL
|
||||
WHERE NOT EXISTS
|
||||
(SELECT * FROM t1 WHERE a = 50 AND b = 3);
|
||||
SELECT * FROM t1;
|
||||
a b c
|
||||
50 3 3
|
||||
INSERT INTO t1
|
||||
SELECT 50, 3, 3 FROM DUAL
|
||||
WHERE NOT EXISTS
|
||||
(SELECT * FROM t1 WHERE a = 50 AND b = 3);
|
||||
select found_rows();
|
||||
found_rows()
|
||||
0
|
||||
SELECT * FROM t1;
|
||||
a b c
|
||||
50 3 3
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
1
|
||||
select found_rows();
|
||||
found_rows()
|
||||
1
|
||||
select count(*) from t1 limit 2,3;
|
||||
count(*)
|
||||
select found_rows();
|
||||
found_rows()
|
||||
0
|
||||
select SQL_CALC_FOUND_ROWS count(*) from t1 limit 2,3;
|
||||
count(*)
|
||||
select found_rows();
|
||||
found_rows()
|
||||
1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
(SELECT a, b AS c FROM t1) ORDER BY c+1;
|
||||
a c
|
||||
(SELECT a, b AS c FROM t1) ORDER BY b+1;
|
||||
a c
|
||||
SELECT a, b AS c FROM t1 ORDER BY c+1;
|
||||
a c
|
||||
SELECT a, b AS c FROM t1 ORDER BY b+1;
|
||||
a c
|
||||
drop table t1;
|
||||
create table t1(f1 int, f2 int);
|
||||
create table t2(f3 int);
|
||||
select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1));
|
||||
f1
|
||||
select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1));
|
||||
f1
|
||||
select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL));
|
||||
f1
|
||||
insert into t1 values(1,1),(2,null);
|
||||
insert into t2 values(2);
|
||||
select * from t1,t2 where f1=f3 and (f1,f2) = (2,null);
|
||||
f1 f2 f3
|
||||
select * from t1,t2 where f1=f3 and (f1,f2) <=> (2,null);
|
||||
f1 f2 f3
|
||||
2 NULL 2
|
||||
drop table t1,t2;
|
||||
create table t1 (f1 int not null auto_increment primary key, f2 varchar(10));
|
||||
create table t11 like t1;
|
||||
insert into t1 values(1,""),(2,"");
|
||||
show table status like 't1%';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 9 Dynamic 2 20 X X X X X X X X latin1_swedish_ci NULL
|
||||
t11 MyISAM 9 Dynamic 0 0 X X X X X X X X latin1_swedish_ci NULL
|
||||
select 123 as a from t1 where f1 is null;
|
||||
a
|
||||
drop table t1,t11;
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
(SELECT a, b AS c FROM t1) ORDER BY c+1;
|
||||
a c
|
||||
(SELECT a, b AS c FROM t1) ORDER BY b+1;
|
||||
a c
|
||||
SELECT a, b AS c FROM t1 ORDER BY c+1;
|
||||
a c
|
||||
SELECT a, b AS c FROM t1 ORDER BY b+1;
|
||||
a c
|
||||
drop table t1;
|
||||
CREATE TABLE t1 ( a INT NOT NULL, b INT NOT NULL, UNIQUE idx (a,b) );
|
||||
INSERT INTO t1 VALUES (1,1),(1,2),(1,3),(1,4);
|
||||
CREATE TABLE t2 ( a INT NOT NULL, b INT NOT NULL, c INT );
|
||||
INSERT INTO t2 VALUES ( 1,10,1), (1,10,2), (1,11,1), (1,11,2), (1,2,1), (1,2,2),
|
||||
(1,2,3);
|
||||
SELECT t2.a, t2.b, IF(t1.b IS NULL,'',c) AS c, COUNT(*) AS d FROM t2 LEFT JOIN
|
||||
t1 ON t2.a = t1.a AND t2.b = t1.b GROUP BY a, b, c;
|
||||
a b c d
|
||||
1 2 1 1
|
||||
1 2 2 1
|
||||
1 2 3 1
|
||||
1 10 2
|
||||
1 11 2
|
||||
SELECT t2.a, t2.b, IF(t1.b IS NULL,'',c) AS c, COUNT(*) AS d FROM t2 LEFT JOIN
|
||||
t1 ON t2.a = t1.a AND t2.b = t1.b GROUP BY t1.a, t1.b, c;
|
||||
a b c d
|
||||
1 10 4
|
||||
1 2 1 1
|
||||
1 2 2 1
|
||||
1 2 3 1
|
||||
SELECT t2.a, t2.b, IF(t1.b IS NULL,'',c) AS c, COUNT(*) AS d FROM t2 LEFT JOIN
|
||||
t1 ON t2.a = t1.a AND t2.b = t1.b GROUP BY t2.a, t2.b, c;
|
||||
a b c d
|
||||
1 2 1 1
|
||||
1 2 2 1
|
||||
1 2 3 1
|
||||
1 10 2
|
||||
1 11 2
|
||||
SELECT t2.a, t2.b, IF(t1.b IS NULL,'',c) AS c, COUNT(*) AS d FROM t2,t1
|
||||
WHERE t2.a = t1.a AND t2.b = t1.b GROUP BY a, b, c;
|
||||
a b c d
|
||||
1 2 1 1
|
||||
1 2 2 1
|
||||
1 2 3 1
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
create table t1 (a int, b int);
|
||||
create table t2 like t1;
|
||||
select t1.a from (t1 inner join t2 on t1.a=t2.a) where t2.a=1;
|
||||
@ -3478,14 +3188,6 @@ select count(*)
|
||||
from t1 inner join (t2 right join t3 on t2.id = t3.b_id) on t1.id = t3.a_id;
|
||||
count(*)
|
||||
6
|
||||
create table t1 (f1 int primary key, f2 int);
|
||||
create table t2 (f3 int, f4 int, primary key(f3,f4));
|
||||
insert into t1 values (1,1);
|
||||
insert into t2 values (1,1),(1,2);
|
||||
select distinct count(f2) >0 from t1 left join t2 on f1=f3 group by f1;
|
||||
count(f2) >0
|
||||
1
|
||||
drop table t1,t2;
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (a int);
|
||||
create table t2 (b int);
|
||||
|
@ -220,7 +220,7 @@ create table t2(x int, z int);
|
||||
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x);
|
||||
--error 1054
|
||||
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z);
|
||||
--error 1109
|
||||
--error 1054
|
||||
insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x);
|
||||
drop table t1,t2;
|
||||
|
||||
|
@ -514,8 +514,8 @@ HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, uchar *a)
|
||||
else
|
||||
a= end;
|
||||
break;
|
||||
case HA_KEYTYPE_VARTEXT:
|
||||
case HA_KEYTYPE_VARBINARY:
|
||||
case HA_KEYTYPE_VARTEXT1:
|
||||
case HA_KEYTYPE_VARBINARY1:
|
||||
{
|
||||
int a_length;
|
||||
get_key_length(a_length, a);
|
||||
|
@ -755,7 +755,8 @@ bool Item_string::eq(const Item *item, bool binary_cmp) const
|
||||
{
|
||||
if (binary_cmp)
|
||||
return !stringcmp(&str_value, &item->str_value);
|
||||
return !sortcmp(&str_value, &item->str_value, collation.collation);
|
||||
return (collation.collation == item->collation.collation &&
|
||||
!sortcmp(&str_value, &item->str_value, collation.collation));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1611,15 +1611,6 @@ void Item_func_date_format::fix_length_and_dec()
|
||||
{ // Optimize the normal case
|
||||
fixed_length=1;
|
||||
|
||||
/*
|
||||
Force case sensitive collation on format string.
|
||||
This needed because format modifiers with different case,
|
||||
for example %m and %M, have different meaning. Thus eq()
|
||||
will distinguish them.
|
||||
*/
|
||||
args[1]->collation.set(
|
||||
get_charset_by_csname(args[1]->collation.collation->csname,
|
||||
MY_CS_BINSORT,MYF(0)), DERIVATION_COERCIBLE);
|
||||
/*
|
||||
The result is a binary string (no reason to use collation->mbmaxlen
|
||||
This is becasue make_date_time() only returns binary strings
|
||||
@ -1637,6 +1628,30 @@ void Item_func_date_format::fix_length_and_dec()
|
||||
}
|
||||
|
||||
|
||||
bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const
|
||||
{
|
||||
Item_func_date_format *item_func;
|
||||
if (item->type() != FUNC_ITEM)
|
||||
return 0;
|
||||
if (func_name() != ((Item_func*) item)->func_name())
|
||||
return 0;
|
||||
if (this == item)
|
||||
return 1;
|
||||
item_func= (Item_func_date_format*) item;
|
||||
if (!args[0]->eq(item_func->args[0], binary_cmp))
|
||||
return 0;
|
||||
/*
|
||||
We must compare format string case sensitive.
|
||||
This needed because format modifiers with different case,
|
||||
for example %m and %M, have different meaning.
|
||||
*/
|
||||
if (!args[1]->eq(item_func->args[1], 1))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint Item_func_date_format::format_length(const String *format)
|
||||
{
|
||||
uint size=0;
|
||||
|
@ -537,6 +537,7 @@ public:
|
||||
{ return is_time_format ? "time_format" : "date_format"; }
|
||||
void fix_length_and_dec();
|
||||
uint format_length(const String *format);
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user