Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into olga.mysql.com:/home/igor/dev-opt/mysql-5.1-opt mysql-test/r/binary.result: Auto merged mysql-test/r/ctype_collate.result: Auto merged mysql-test/r/ctype_utf8.result: Auto merged mysql-test/t/binary.test: Auto merged mysql-test/t/create.test: Auto merged mysql-test/t/ctype_utf8.test: Auto merged sql/field_conv.cc: Auto merged sql/item.cc: Auto merged sql/item_subselect.cc: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/sql_class.h: Auto merged sql/sql_insert.cc: Auto merged sql/sql_select.cc: Auto merged sql-common/client.c: Auto merged sql/sql_select.h: Auto merged sql/table.cc: Auto merged storage/myisam/mi_open.c: Auto merged strings/ctype-simple.c: Auto merged mysql-test/r/create.result: Manual merge. mysql-test/r/subselect.result: Manual merge. mysql-test/r/type_enum.result: Manual merge. mysql-test/t/type_enum.test: Manual merge. mysql-test/include/mix1.inc: Manual merge. mysql-test/r/innodb_mysql.result: Manual merge. mysql-test/t/subselect.test: Manual merge. sql/sql_parse.cc: Manual merge. storage/myisam/mi_key.c: Manual merge.
This commit is contained in:
commit
26a2b00498
@ -672,6 +672,41 @@ SELECT * FROM t3 WHERE a = 'uk';
|
|||||||
|
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #29154: LOCK TABLES is not atomic when >1 InnoDB tables are locked
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
CONNECT (c1,localhost,root,,);
|
||||||
|
CONNECT (c2,localhost,root,,);
|
||||||
|
|
||||||
|
--echo switch to connection c1
|
||||||
|
CONNECTION c1;
|
||||||
|
SET AUTOCOMMIT=0;
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
|
||||||
|
--echo switch to connection c2
|
||||||
|
CONNECTION c2;
|
||||||
|
SET AUTOCOMMIT=0;
|
||||||
|
--error ER_LOCK_WAIT_TIMEOUT
|
||||||
|
LOCK TABLES t1 READ, t2 READ;
|
||||||
|
|
||||||
|
--echo switch to connection c1
|
||||||
|
CONNECTION c1;
|
||||||
|
COMMIT;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
|
--echo switch to connection default
|
||||||
|
CONNECTION default;
|
||||||
|
SET AUTOCOMMIT=default;
|
||||||
|
DISCONNECT c1;
|
||||||
|
DISCONNECT c2;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -160,3 +160,41 @@ hex(col1)
|
|||||||
62000000000000000000
|
62000000000000000000
|
||||||
62200000000000000000
|
62200000000000000000
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a binary(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
|
||||||
|
index idx(a)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 SET a=unhex('1F9480179366F2BF567E1C4B964C1EF029087575');
|
||||||
|
INSERT INTO t1 SET a=unhex('1F9480179366F2BF567E1C4B964C1EF029082020');
|
||||||
|
INSERT INTO t1 SET a=unhex('1F9480179366F2BF567E1C4B964C1EF029080707');
|
||||||
|
SELECT hex(a) FROM t1 order by a;
|
||||||
|
hex(a)
|
||||||
|
1F9480179366F2BF567E1C4B964C1EF029080707
|
||||||
|
1F9480179366F2BF567E1C4B964C1EF029082020
|
||||||
|
1F9480179366F2BF567E1C4B964C1EF029087575
|
||||||
|
EXPLAIN SELECT hex(a) FROM t1 order by a;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index NULL idx 20 NULL 3 Using index
|
||||||
|
SELECT hex(a) from t1 WHERE a=unhex('1F9480179366F2BF567E1C4B964C1EF029082020');
|
||||||
|
hex(a)
|
||||||
|
1F9480179366F2BF567E1C4B964C1EF029082020
|
||||||
|
EXPLAIN
|
||||||
|
SELECT hex(a) from t1 WHERE a=unhex('1F9480179366F2BF567E1C4B964C1EF029082020');
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ref idx idx 20 const 1 Using where; Using index
|
||||||
|
SELECT hex(a) from t1 WHERE a=unhex('1F9480179366F2BF567E1C4B964C1EF02908');
|
||||||
|
hex(a)
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id numeric(20) NOT NULL,
|
||||||
|
lang varchar(8) NOT NULL,
|
||||||
|
msg varchar(32) NOT NULL,
|
||||||
|
PRIMARY KEY (id,lang)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (33, 'en', 'zzzzzzz');
|
||||||
|
INSERT INTO t1 VALUES (31, 'en', 'xxxxxxx');
|
||||||
|
INSERT INTO t1 VALUES (32, 'en', 'yyyyyyy');
|
||||||
|
SELECT * FROM t1 WHERE id=32;
|
||||||
|
id lang msg
|
||||||
|
32 en yyyyyyy
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -595,3 +595,11 @@ EXPLAIN SELECT * FROM t1 WHERE s2 LIKE 'a' COLLATE latin1_german1_ci;
|
|||||||
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 t1 ALL s2 NULL NULL NULL 10 Using where
|
1 SIMPLE t1 ALL s2 NULL NULL NULL 10 Using where
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1(f1 varchar(10) character set latin2 collate latin2_hungarian_ci, key(f1));
|
||||||
|
insert into t1 set f1=0x3F3F9DC73F;
|
||||||
|
insert into t1 set f1=0x3F3F1E563F;
|
||||||
|
insert into t1 set f1=0x3F3F;
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
drop table t1;
|
||||||
|
@ -1657,3 +1657,40 @@ colA colB colA colB
|
|||||||
1 foo 1 foo
|
1 foo 1 foo
|
||||||
2 foo bar 2 foo bar
|
2 foo bar 2 foo bar
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
SELECT 'н1234567890' UNION SELECT _binary '1';
|
||||||
|
н1234567890
|
||||||
|
н1234567890
|
||||||
|
1
|
||||||
|
SELECT 'н1234567890' UNION SELECT 1;
|
||||||
|
н1234567890
|
||||||
|
н1234567890
|
||||||
|
1
|
||||||
|
SELECT '1' UNION SELECT 'н1234567890';
|
||||||
|
1
|
||||||
|
1
|
||||||
|
н1234567890
|
||||||
|
SELECT 1 UNION SELECT 'н1234567890';
|
||||||
|
1
|
||||||
|
1
|
||||||
|
н1234567890
|
||||||
|
CREATE TABLE t1 (c VARCHAR(11)) CHARACTER SET utf8;
|
||||||
|
CREATE TABLE t2 (b CHAR(1) CHARACTER SET binary, i INT);
|
||||||
|
INSERT INTO t1 (c) VALUES ('н1234567890');
|
||||||
|
INSERT INTO t2 (b, i) VALUES ('1', 1);
|
||||||
|
SELECT c FROM t1 UNION SELECT b FROM t2;
|
||||||
|
c
|
||||||
|
н1234567890
|
||||||
|
1
|
||||||
|
SELECT c FROM t1 UNION SELECT i FROM t2;
|
||||||
|
c
|
||||||
|
н1234567890
|
||||||
|
1
|
||||||
|
SELECT b FROM t2 UNION SELECT c FROM t1;
|
||||||
|
b
|
||||||
|
1
|
||||||
|
н1234567890
|
||||||
|
SELECT i FROM t2 UNION SELECT c FROM t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
н1234567890
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -665,6 +665,21 @@ UPDATE t3 SET a = 'us' WHERE a = 'uk';
|
|||||||
SELECT * FROM t3 WHERE a = 'uk';
|
SELECT * FROM t3 WHERE a = 'uk';
|
||||||
a
|
a
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||||
|
switch to connection c1
|
||||||
|
SET AUTOCOMMIT=0;
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
switch to connection c2
|
||||||
|
SET AUTOCOMMIT=0;
|
||||||
|
LOCK TABLES t1 READ, t2 READ;
|
||||||
|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||||
|
switch to connection c1
|
||||||
|
COMMIT;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
switch to connection default
|
||||||
|
SET AUTOCOMMIT=default;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
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);
|
||||||
|
@ -101,3 +101,41 @@ select hex(col1) from t1;
|
|||||||
insert into t1 values ('b'),('b ');
|
insert into t1 values ('b'),('b ');
|
||||||
select hex(col1) from t1;
|
select hex(col1) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #29087: assertion abort for a search in a BINARY non-nullable index
|
||||||
|
# by a key with trailing spaces
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a binary(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
|
||||||
|
index idx(a)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 SET a=unhex('1F9480179366F2BF567E1C4B964C1EF029087575');
|
||||||
|
INSERT INTO t1 SET a=unhex('1F9480179366F2BF567E1C4B964C1EF029082020');
|
||||||
|
INSERT INTO t1 SET a=unhex('1F9480179366F2BF567E1C4B964C1EF029080707');
|
||||||
|
|
||||||
|
SELECT hex(a) FROM t1 order by a;
|
||||||
|
EXPLAIN SELECT hex(a) FROM t1 order by a;
|
||||||
|
|
||||||
|
SELECT hex(a) from t1 WHERE a=unhex('1F9480179366F2BF567E1C4B964C1EF029082020');
|
||||||
|
EXPLAIN
|
||||||
|
SELECT hex(a) from t1 WHERE a=unhex('1F9480179366F2BF567E1C4B964C1EF029082020');
|
||||||
|
|
||||||
|
SELECT hex(a) from t1 WHERE a=unhex('1F9480179366F2BF567E1C4B964C1EF02908');
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id numeric(20) NOT NULL,
|
||||||
|
lang varchar(8) NOT NULL,
|
||||||
|
msg varchar(32) NOT NULL,
|
||||||
|
PRIMARY KEY (id,lang)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (33, 'en', 'zzzzzzz');
|
||||||
|
INSERT INTO t1 VALUES (31, 'en', 'xxxxxxx');
|
||||||
|
INSERT INTO t1 VALUES (32, 'en', 'yyyyyyy');
|
||||||
|
SELECT * FROM t1 WHERE id=32;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
@ -790,6 +790,339 @@ drop table t1, t2;
|
|||||||
create table t1 (upgrade int);
|
create table t1 (upgrade int);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #26642: create index corrupts table definition in .frm
|
||||||
|
#
|
||||||
|
# Problem with creating keys with maximum key-parts and maximum name length
|
||||||
|
# This test is made for a mysql server supporting names up to 64 bytes
|
||||||
|
# and a maximum of 16 key segements per Key
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (
|
||||||
|
c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int, c8 int,
|
||||||
|
c9 int, c10 int, c11 int, c12 int, c13 int, c14 int, c15 int, c16 int,
|
||||||
|
|
||||||
|
key a001_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a002_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a003_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a004_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a005_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a006_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a007_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a008_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a009_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
key a010_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a011_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a012_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a013_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a014_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a015_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a016_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a017_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a018_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a019_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
key a020_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a021_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a022_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a023_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a024_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a025_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a026_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a027_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a028_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a029_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
key a030_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a031_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a032_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a033_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a034_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a035_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a036_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a037_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a038_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a039_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
key a040_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a041_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a042_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a043_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a044_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a045_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a046_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a047_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a048_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a049_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
key a050_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a051_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a052_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a053_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a054_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a055_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a056_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a057_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a058_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a059_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
key a060_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a061_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a062_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a063_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
key a064_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16)
|
||||||
|
);
|
||||||
|
|
||||||
|
# Check that the table is not corrupted
|
||||||
|
show create table t1;
|
||||||
|
flush tables;
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
# Repeat test using ALTER to add indexes
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int,
|
||||||
|
c8 int, c9 int, c10 int, c11 int, c12 int, c13 int, c14 int, c15 int, c16 int);
|
||||||
|
|
||||||
|
alter table t1
|
||||||
|
|
||||||
|
add key a001_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a002_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a003_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a004_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a005_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a006_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a007_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a008_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a009_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
add key a010_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a011_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a012_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a013_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a014_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a015_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a016_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a017_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a018_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a019_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
add key a020_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a021_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a022_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a023_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a024_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a025_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a026_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a027_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a028_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a029_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
add key a030_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a031_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a032_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a033_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a034_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a035_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a036_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a037_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a038_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a039_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
add key a040_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a041_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a042_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a043_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a044_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a045_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a046_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a047_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a048_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a049_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
add key a050_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a051_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a052_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a053_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a054_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a055_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a056_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a057_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a058_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a059_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
|
||||||
|
add key a060_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a061_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a062_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a063_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16),
|
||||||
|
add key a064_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16);
|
||||||
|
|
||||||
|
show create table t1;
|
||||||
|
flush tables;
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
# Test the server limits; if any of these pass, all above tests need
|
||||||
|
# to be rewritten to hit the limit
|
||||||
|
#
|
||||||
|
# Ensure limit is really 64 keys
|
||||||
|
--error 1069
|
||||||
|
alter table t1 add key
|
||||||
|
a065_long_123456789_123456789_123456789_123456789_123456789_1234 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16);
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# Ensure limit is really 16 key parts per key
|
||||||
|
|
||||||
|
create table t1 (c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int,
|
||||||
|
c8 int, c9 int, c10 int, c11 int, c12 int, c13 int, c14 int, c15 int,
|
||||||
|
c16 int, c17 int);
|
||||||
|
|
||||||
|
# Get error for max key parts
|
||||||
|
--error 1070
|
||||||
|
alter table t1 add key i1 (
|
||||||
|
c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16, c17);
|
||||||
|
|
||||||
|
# Get error for max key-name length
|
||||||
|
--error 1059
|
||||||
|
alter table t1 add key
|
||||||
|
a001_long_123456789_123456789_123456789_123456789_123456789_12345 (c1);
|
||||||
|
|
||||||
|
show create table t1;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -207,3 +207,14 @@ EXPLAIN SELECT * FROM t1 WHERE s2 LIKE 'a' COLLATE latin1_german1_ci;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#29261: Sort order of the collation wasn't used when comparing trailing
|
||||||
|
# spaces.
|
||||||
|
#
|
||||||
|
create table t1(f1 varchar(10) character set latin2 collate latin2_hungarian_ci, key(f1));
|
||||||
|
insert into t1 set f1=0x3F3F9DC73F;
|
||||||
|
insert into t1 set f1=0x3F3F1E563F;
|
||||||
|
insert into t1 set f1=0x3F3F;
|
||||||
|
check table t1 extended;
|
||||||
|
drop table t1;
|
||||||
|
@ -1339,3 +1339,28 @@ INSERT INTO t2 (colA, colB) VALUES (1, 'foo'),(2, 'foo bar');
|
|||||||
SELECT * FROM t1 JOIN t2 ON t1.colA=t2.colA AND t1.colB=t2.colB
|
SELECT * FROM t1 JOIN t2 ON t1.colA=t2.colA AND t1.colB=t2.colB
|
||||||
WHERE t1.colA < 3;
|
WHERE t1.colA < 3;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#29205: truncation of UTF8 values when the UNION statement
|
||||||
|
# forces collation to the binary charset
|
||||||
|
#
|
||||||
|
|
||||||
|
SELECT 'н1234567890' UNION SELECT _binary '1';
|
||||||
|
SELECT 'н1234567890' UNION SELECT 1;
|
||||||
|
|
||||||
|
SELECT '1' UNION SELECT 'н1234567890';
|
||||||
|
SELECT 1 UNION SELECT 'н1234567890';
|
||||||
|
|
||||||
|
CREATE TABLE t1 (c VARCHAR(11)) CHARACTER SET utf8;
|
||||||
|
CREATE TABLE t2 (b CHAR(1) CHARACTER SET binary, i INT);
|
||||||
|
|
||||||
|
INSERT INTO t1 (c) VALUES ('н1234567890');
|
||||||
|
INSERT INTO t2 (b, i) VALUES ('1', 1);
|
||||||
|
|
||||||
|
SELECT c FROM t1 UNION SELECT b FROM t2;
|
||||||
|
SELECT c FROM t1 UNION SELECT i FROM t2;
|
||||||
|
|
||||||
|
SELECT b FROM t2 UNION SELECT c FROM t1;
|
||||||
|
SELECT i FROM t2 UNION SELECT c FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -2945,6 +2945,48 @@ SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2;
|
|||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #27333: subquery grouped for aggregate of outer query / no aggregate
|
||||||
|
# of subquery
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INTEGER, b INTEGER);
|
||||||
|
CREATE TABLE t2 (x INTEGER);
|
||||||
|
INSERT INTO t1 VALUES (1,11), (2,22), (2,22);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
|
||||||
|
# wasn't failing, but should
|
||||||
|
--error ER_SUBQUERY_NO_1_ROW
|
||||||
|
SELECT a, COUNT(b), (SELECT COUNT(b) FROM t2) FROM t1 GROUP BY a;
|
||||||
|
|
||||||
|
# fails as it should
|
||||||
|
--error ER_SUBQUERY_NO_1_ROW
|
||||||
|
SELECT a, COUNT(b), (SELECT COUNT(b)+0 FROM t2) FROM t1 GROUP BY a;
|
||||||
|
|
||||||
|
SELECT (SELECT SUM(t1.a)/AVG(t2.x) FROM t2) FROM t1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
# second test case from 27333
|
||||||
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
|
INSERT INTO t1 VALUES (1, 2), (1,3), (1,4), (2,1), (2,2);
|
||||||
|
|
||||||
|
-- returns no rows, when it should
|
||||||
|
SELECT a1.a, COUNT(*) FROM t1 a1 WHERE a1.a = 1
|
||||||
|
AND EXISTS( SELECT a2.a FROM t1 a2 WHERE a2.a = a1.a)
|
||||||
|
GROUP BY a1.a;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#test cases from 29297
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
CREATE TABLE t2 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
INSERT INTO t2 VALUES (1),(2);
|
||||||
|
SELECT (SELECT SUM(t1.a) FROM t2 WHERE a=0) FROM t1;
|
||||||
|
--error ER_SUBQUERY_NO_1_ROW
|
||||||
|
SELECT (SELECT SUM(t1.a) FROM t2 WHERE a!=0) FROM t1;
|
||||||
|
SELECT (SELECT SUM(t1.a) FROM t2 WHERE a=1) FROM t1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -307,6 +307,15 @@ static void do_field_string(Copy_field *copy)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void do_field_enum(Copy_field *copy)
|
||||||
|
{
|
||||||
|
if (copy->from_field->val_int() == 0)
|
||||||
|
((Field_enum *) copy->to_field)->store_type((ulonglong) 0);
|
||||||
|
else
|
||||||
|
do_field_string(copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void do_field_varbinary_pre50(Copy_field *copy)
|
static void do_field_varbinary_pre50(Copy_field *copy)
|
||||||
{
|
{
|
||||||
char buff[MAX_FIELD_WIDTH];
|
char buff[MAX_FIELD_WIDTH];
|
||||||
@ -667,7 +676,13 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*)
|
|||||||
to->real_type() == MYSQL_TYPE_SET)
|
to->real_type() == MYSQL_TYPE_SET)
|
||||||
{
|
{
|
||||||
if (!to->eq_def(from))
|
if (!to->eq_def(from))
|
||||||
return do_field_string;
|
{
|
||||||
|
if (from->real_type() == MYSQL_TYPE_ENUM &&
|
||||||
|
to->real_type() == MYSQL_TYPE_ENUM)
|
||||||
|
return do_field_enum;
|
||||||
|
else
|
||||||
|
return do_field_string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (to->charset() != from->charset())
|
else if (to->charset() != from->charset())
|
||||||
return do_field_string;
|
return do_field_string;
|
||||||
|
12
sql/item.cc
12
sql/item.cc
@ -6687,9 +6687,15 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
|||||||
expansion of the size of the values because of character set
|
expansion of the size of the values because of character set
|
||||||
conversions.
|
conversions.
|
||||||
*/
|
*/
|
||||||
max_length= max(old_max_chars * collation.collation->mbmaxlen,
|
if (collation.collation != &my_charset_bin)
|
||||||
display_length(item) / item->collation.collation->mbmaxlen *
|
{
|
||||||
collation.collation->mbmaxlen);
|
max_length= max(old_max_chars * collation.collation->mbmaxlen,
|
||||||
|
display_length(item) /
|
||||||
|
item->collation.collation->mbmaxlen *
|
||||||
|
collation.collation->mbmaxlen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
set_if_bigger(max_length, display_length(item));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case REAL_RESULT:
|
case REAL_RESULT:
|
||||||
|
@ -985,7 +985,8 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
DBUG_RETURN(RES_ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
thd->lex->allow_sum_func= save_allow_sum_func;
|
thd->lex->allow_sum_func= save_allow_sum_func;
|
||||||
/* we added aggregate function => we have to change statistic */
|
/* we added aggregate function => we have to change statistic */
|
||||||
count_field_types(&join->tmp_table_param, join->all_fields, 0);
|
count_field_types(select_lex, &join->tmp_table_param, join->all_fields,
|
||||||
|
0);
|
||||||
|
|
||||||
subs= new Item_singlerow_subselect(select_lex);
|
subs= new Item_singlerow_subselect(select_lex);
|
||||||
}
|
}
|
||||||
|
@ -2480,7 +2480,7 @@ bool Item_sum_count_distinct::setup(THD *thd)
|
|||||||
}
|
}
|
||||||
if (always_null)
|
if (always_null)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
count_field_types(tmp_table_param,list,0);
|
count_field_types(select_lex, tmp_table_param, list, 0);
|
||||||
tmp_table_param->force_copy_fields= force_copy_fields;
|
tmp_table_param->force_copy_fields= force_copy_fields;
|
||||||
DBUG_ASSERT(table == 0);
|
DBUG_ASSERT(table == 0);
|
||||||
if (!(table= create_tmp_table(thd, tmp_table_param, list, (ORDER*) 0, 1,
|
if (!(table= create_tmp_table(thd, tmp_table_param, list, (ORDER*) 0, 1,
|
||||||
@ -3286,7 +3286,7 @@ bool Item_func_group_concat::setup(THD *thd)
|
|||||||
setup_order(thd, args, context->table_list, list, all_fields, *order))
|
setup_order(thd, args, context->table_list, list, all_fields, *order))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
count_field_types(tmp_table_param,all_fields,0);
|
count_field_types(select_lex, tmp_table_param, all_fields, 0);
|
||||||
tmp_table_param->force_copy_fields= force_copy_fields;
|
tmp_table_param->force_copy_fields= force_copy_fields;
|
||||||
DBUG_ASSERT(table == 0);
|
DBUG_ASSERT(table == 0);
|
||||||
/*
|
/*
|
||||||
|
@ -966,8 +966,15 @@ public:
|
|||||||
bool fix_fields(THD *thd, Item **ref)
|
bool fix_fields(THD *thd, Item **ref)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(fixed == 0);
|
DBUG_ASSERT(fixed == 0);
|
||||||
|
|
||||||
|
if (init_sum_func_check(thd))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
fixed= 1;
|
fixed= 1;
|
||||||
return udf.fix_fields(thd, this, this->arg_count, this->args);
|
if (udf.fix_fields(thd, this, this->arg_count, this->args))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return check_sum_func(thd, ref);
|
||||||
}
|
}
|
||||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||||
virtual bool have_field_update(void) const { return 0; }
|
virtual bool have_field_update(void) const { return 0; }
|
||||||
|
@ -3012,6 +3012,7 @@ end_with_restore_list:
|
|||||||
break;
|
break;
|
||||||
case SQLCOM_LOCK_TABLES:
|
case SQLCOM_LOCK_TABLES:
|
||||||
unlock_locked_tables(thd);
|
unlock_locked_tables(thd);
|
||||||
|
/* we must end the trasaction first, regardless of anything */
|
||||||
if (end_active_trans(thd))
|
if (end_active_trans(thd))
|
||||||
goto error;
|
goto error;
|
||||||
if (check_table_access(thd, LOCK_TABLES_ACL | SELECT_ACL, all_tables, 0))
|
if (check_table_access(thd, LOCK_TABLES_ACL | SELECT_ACL, all_tables, 0))
|
||||||
@ -3030,7 +3031,15 @@ end_with_restore_list:
|
|||||||
send_ok(thd);
|
send_ok(thd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Need to end the current transaction, so the storage engine (InnoDB)
|
||||||
|
can free its locks if LOCK TABLES locked some tables before finding
|
||||||
|
that it can't lock a table in its list
|
||||||
|
*/
|
||||||
|
end_active_trans(thd);
|
||||||
thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
|
thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
|
||||||
|
}
|
||||||
thd->in_lock_tables=0;
|
thd->in_lock_tables=0;
|
||||||
break;
|
break;
|
||||||
case SQLCOM_CREATE_DB:
|
case SQLCOM_CREATE_DB:
|
||||||
|
@ -606,7 +606,7 @@ JOIN::prepare(Item ***rref_pointer_array,
|
|||||||
goto err; /* purecov: inspected */
|
goto err; /* purecov: inspected */
|
||||||
|
|
||||||
/* Init join struct */
|
/* Init join struct */
|
||||||
count_field_types(&tmp_table_param, all_fields, 0);
|
count_field_types(select_lex, &tmp_table_param, all_fields, 0);
|
||||||
ref_pointer_array_size= all_fields.elements*sizeof(Item*);
|
ref_pointer_array_size= all_fields.elements*sizeof(Item*);
|
||||||
this->group= group_list != 0;
|
this->group= group_list != 0;
|
||||||
unit= unit_arg;
|
unit= unit_arg;
|
||||||
@ -1781,7 +1781,7 @@ JOIN::exec()
|
|||||||
if (make_simple_join(curr_join, curr_tmp_table))
|
if (make_simple_join(curr_join, curr_tmp_table))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
calc_group_buffer(curr_join, group_list);
|
calc_group_buffer(curr_join, group_list);
|
||||||
count_field_types(&curr_join->tmp_table_param,
|
count_field_types(select_lex, &curr_join->tmp_table_param,
|
||||||
curr_join->tmp_all_fields1,
|
curr_join->tmp_all_fields1,
|
||||||
curr_join->select_distinct && !curr_join->group_list);
|
curr_join->select_distinct && !curr_join->group_list);
|
||||||
curr_join->tmp_table_param.hidden_field_count=
|
curr_join->tmp_table_param.hidden_field_count=
|
||||||
@ -1904,11 +1904,13 @@ JOIN::exec()
|
|||||||
if (make_simple_join(curr_join, curr_tmp_table))
|
if (make_simple_join(curr_join, curr_tmp_table))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
calc_group_buffer(curr_join, curr_join->group_list);
|
calc_group_buffer(curr_join, curr_join->group_list);
|
||||||
count_field_types(&curr_join->tmp_table_param, *curr_all_fields, 0);
|
count_field_types(select_lex, &curr_join->tmp_table_param,
|
||||||
|
*curr_all_fields, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (procedure)
|
if (procedure)
|
||||||
count_field_types(&curr_join->tmp_table_param, *curr_all_fields, 0);
|
count_field_types(select_lex, &curr_join->tmp_table_param,
|
||||||
|
*curr_all_fields, 0);
|
||||||
|
|
||||||
if (curr_join->group || curr_join->tmp_table_param.sum_func_count ||
|
if (curr_join->group || curr_join->tmp_table_param.sum_func_count ||
|
||||||
(procedure && (procedure->flags & PROC_GROUP)))
|
(procedure && (procedure->flags & PROC_GROUP)))
|
||||||
@ -13976,8 +13978,8 @@ next_item:
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
void
|
void
|
||||||
count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
count_field_types(SELECT_LEX *select_lex, TMP_TABLE_PARAM *param,
|
||||||
bool reset_with_sum_func)
|
List<Item> &fields, bool reset_with_sum_func)
|
||||||
{
|
{
|
||||||
List_iterator<Item> li(fields);
|
List_iterator<Item> li(fields);
|
||||||
Item *field;
|
Item *field;
|
||||||
@ -13995,18 +13997,22 @@ count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
|||||||
if (! field->const_item())
|
if (! field->const_item())
|
||||||
{
|
{
|
||||||
Item_sum *sum_item=(Item_sum*) field->real_item();
|
Item_sum *sum_item=(Item_sum*) field->real_item();
|
||||||
if (!sum_item->quick_group)
|
if (!sum_item->depended_from() ||
|
||||||
param->quick_group=0; // UDF SUM function
|
sum_item->depended_from() == select_lex)
|
||||||
param->sum_func_count++;
|
{
|
||||||
param->func_count++;
|
if (!sum_item->quick_group)
|
||||||
|
param->quick_group=0; // UDF SUM function
|
||||||
|
param->sum_func_count++;
|
||||||
|
|
||||||
for (uint i=0 ; i < sum_item->arg_count ; i++)
|
for (uint i=0 ; i < sum_item->arg_count ; i++)
|
||||||
{
|
{
|
||||||
if (sum_item->args[0]->real_item()->type() == Item::FIELD_ITEM)
|
if (sum_item->args[0]->real_item()->type() == Item::FIELD_ITEM)
|
||||||
param->field_count++;
|
param->field_count++;
|
||||||
else
|
else
|
||||||
param->func_count++;
|
param->func_count++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
param->func_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -14467,7 +14473,9 @@ bool JOIN::make_sum_func_list(List<Item> &field_list, List<Item> &send_fields,
|
|||||||
func= sum_funcs;
|
func= sum_funcs;
|
||||||
while ((item=it++))
|
while ((item=it++))
|
||||||
{
|
{
|
||||||
if (item->type() == Item::SUM_FUNC_ITEM && !item->const_item())
|
if (item->type() == Item::SUM_FUNC_ITEM && !item->const_item() &&
|
||||||
|
(!((Item_sum*) item)->depended_from() ||
|
||||||
|
((Item_sum *)item)->depended_from() == select_lex))
|
||||||
*func++= (Item_sum*) item;
|
*func++= (Item_sum*) item;
|
||||||
}
|
}
|
||||||
if (before_group_by && rollup.state == ROLLUP::STATE_INITED)
|
if (before_group_by && rollup.state == ROLLUP::STATE_INITED)
|
||||||
@ -15049,7 +15057,10 @@ bool JOIN::rollup_make_fields(List<Item> &fields_arg, List<Item> &sel_fields,
|
|||||||
ref_array= ref_array_start;
|
ref_array= ref_array_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item->type() == Item::SUM_FUNC_ITEM && !item->const_item())
|
if (item->type() == Item::SUM_FUNC_ITEM && !item->const_item() &&
|
||||||
|
(!((Item_sum*) item)->depended_from() ||
|
||||||
|
((Item_sum *)item)->depended_from() == select_lex))
|
||||||
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
This is a top level summary function that must be replaced with
|
This is a top level summary function that must be replaced with
|
||||||
|
@ -509,8 +509,8 @@ TABLE *create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||||||
ulonglong select_options, ha_rows rows_limit,
|
ulonglong select_options, ha_rows rows_limit,
|
||||||
char* alias);
|
char* alias);
|
||||||
void free_tmp_table(THD *thd, TABLE *entry);
|
void free_tmp_table(THD *thd, TABLE *entry);
|
||||||
void count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
void count_field_types(SELECT_LEX *select_lex, TMP_TABLE_PARAM *param,
|
||||||
bool reset_with_sum_func);
|
List<Item> &fields, bool reset_with_sum_func);
|
||||||
bool setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
bool setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
||||||
Item **ref_pointer_array,
|
Item **ref_pointer_array,
|
||||||
List<Item> &new_list1, List<Item> &new_list2,
|
List<Item> &new_list1, List<Item> &new_list2,
|
||||||
|
14
sql/table.cc
14
sql/table.cc
@ -2221,7 +2221,19 @@ File create_frm(THD *thd, const char *name, const char *db,
|
|||||||
ha_checktype(thd,ha_legacy_type(create_info->db_type),0,0));
|
ha_checktype(thd,ha_legacy_type(create_info->db_type),0,0));
|
||||||
fileinfo[4]=1;
|
fileinfo[4]=1;
|
||||||
int2store(fileinfo+6,IO_SIZE); /* Next block starts here */
|
int2store(fileinfo+6,IO_SIZE); /* Next block starts here */
|
||||||
key_length=keys*(7+NAME_LEN+MAX_REF_PARTS*9)+16;
|
/*
|
||||||
|
Keep in sync with pack_keys() in unireg.cc
|
||||||
|
For each key:
|
||||||
|
8 bytes for the key header
|
||||||
|
9 bytes for each key-part (MAX_REF_PARTS)
|
||||||
|
NAME_LEN bytes for the name
|
||||||
|
1 byte for the NAMES_SEP_CHAR (before the name)
|
||||||
|
For all keys:
|
||||||
|
6 bytes for the header
|
||||||
|
1 byte for the NAMES_SEP_CHAR (after the last name)
|
||||||
|
9 extra bytes (padding for safety? alignment?)
|
||||||
|
*/
|
||||||
|
key_length= keys * (8 + MAX_REF_PARTS * 9 + NAME_LEN + 1) + 16;
|
||||||
length= next_io_size((ulong) (IO_SIZE+key_length+reclength+
|
length= next_io_size((ulong) (IO_SIZE+key_length+reclength+
|
||||||
create_info->extra_size));
|
create_info->extra_size));
|
||||||
int4store(fileinfo+10,length);
|
int4store(fileinfo+10,length);
|
||||||
|
@ -254,16 +254,16 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
|
|||||||
if (keyseg->flag & HA_SPACE_PACK)
|
if (keyseg->flag & HA_SPACE_PACK)
|
||||||
{
|
{
|
||||||
uchar *end=pos+length;
|
uchar *end=pos+length;
|
||||||
if (type != HA_KEYTYPE_NUM)
|
if (type == HA_KEYTYPE_NUM)
|
||||||
{
|
|
||||||
while (end > pos && end[-1] == ' ')
|
|
||||||
end--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
while (pos < end && pos[0] == ' ')
|
while (pos < end && pos[0] == ' ')
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
|
else if (type != HA_KEYTYPE_BINARY)
|
||||||
|
{
|
||||||
|
while (end > pos && end[-1] == ' ')
|
||||||
|
end--;
|
||||||
|
}
|
||||||
length=(uint) (end-pos);
|
length=(uint) (end-pos);
|
||||||
FIX_LENGTH(cs, pos, length, char_length);
|
FIX_LENGTH(cs, pos, length, char_length);
|
||||||
store_key_length_inc(key,char_length);
|
store_key_length_inc(key,char_length);
|
||||||
|
@ -236,7 +236,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||||||
|
|
||||||
key_parts+=fulltext_keys*FT_SEGS;
|
key_parts+=fulltext_keys*FT_SEGS;
|
||||||
if (share->base.max_key_length > MI_MAX_KEY_BUFF || keys > MI_MAX_KEY ||
|
if (share->base.max_key_length > MI_MAX_KEY_BUFF || keys > MI_MAX_KEY ||
|
||||||
key_parts >= MI_MAX_KEY * MI_MAX_KEY_SEG)
|
key_parts > MI_MAX_KEY * MI_MAX_KEY_SEG)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Wrong key info: Max_key_length: %d keys: %d key_parts: %d", share->base.max_key_length, keys, key_parts));
|
DBUG_PRINT("error",("Wrong key info: Max_key_length: %d keys: %d key_parts: %d", share->base.max_key_length, keys, key_parts));
|
||||||
my_errno=HA_ERR_UNSUPPORTED;
|
my_errno=HA_ERR_UNSUPPORTED;
|
||||||
|
@ -186,7 +186,7 @@ int my_strnncollsp_simple(CHARSET_INFO * cs, const uchar *a, size_t a_length,
|
|||||||
for (end= a + a_length-length; a < end ; a++)
|
for (end= a + a_length-length; a < end ; a++)
|
||||||
{
|
{
|
||||||
if (*a != ' ')
|
if (*a != ' ')
|
||||||
return (*a < ' ') ? -swap : swap;
|
return (map[*a] < ' ') ? -swap : swap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user