Manually merged
This commit is contained in:
commit
6ea27b1013
@ -66,7 +66,9 @@ select * from t2;
|
|||||||
# check that no error is reported
|
# check that no error is reported
|
||||||
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 #
|
||||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||||
|
--vertical_results
|
||||||
show slave status;
|
show slave status;
|
||||||
|
--horizontal_results
|
||||||
|
|
||||||
# 2) Test lock wait timeout
|
# 2) Test lock wait timeout
|
||||||
|
|
||||||
@ -81,9 +83,11 @@ sync_with_master;
|
|||||||
select * from t1; # check that slave succeeded finally
|
select * from t1; # check that slave succeeded finally
|
||||||
select * from t2;
|
select * from t2;
|
||||||
# check that no error is reported
|
# check that no error is reported
|
||||||
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 11 # 16 # 22 # 23 # 33 #
|
||||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||||
|
--vertical_results
|
||||||
show slave status;
|
show slave status;
|
||||||
|
--horizontal_results
|
||||||
|
|
||||||
# Now we repeat 2), but with BEGIN in the same relay log as
|
# Now we repeat 2), but with BEGIN in the same relay log as
|
||||||
# COMMIT (to see if seeking into hot log is ok).
|
# COMMIT (to see if seeking into hot log is ok).
|
||||||
@ -103,7 +107,9 @@ select * from t1;
|
|||||||
select * from t2;
|
select * from t2;
|
||||||
--replace_column 1 # 7 # 8 # 9 # 11 # 16 # 22 # 23 # 33 #
|
--replace_column 1 # 7 # 8 # 9 # 11 # 16 # 22 # 23 # 33 #
|
||||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||||
|
--vertical_results
|
||||||
show slave status;
|
show slave status;
|
||||||
|
--horizontal_results
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
@ -669,7 +669,9 @@ fi
|
|||||||
[ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp
|
[ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp
|
||||||
[ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run
|
[ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run
|
||||||
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
|
[ -d $MYSQL_TEST_DIR/var/log ] || mkdir $MYSQL_TEST_DIR/var/log
|
||||||
if ! test -L $MYSQL_TEST_DIR/var/std_data_ln ; then
|
|
||||||
|
# Use 'test', not '[' as the shell builtin might not have '-L
|
||||||
|
if test ! -L "$MYSQL_TEST_DIR/var/std_data_ln" ; then
|
||||||
ln -s $MYSQL_TEST_DIR/std_data/ $MYSQL_TEST_DIR/var/std_data_ln
|
ln -s $MYSQL_TEST_DIR/std_data/ $MYSQL_TEST_DIR/var/std_data_ln
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -611,6 +611,16 @@ count(distinct (f1+1))
|
|||||||
1
|
1
|
||||||
3
|
3
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (f1 int unsigned, f2 varchar(255));
|
||||||
|
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
|
||||||
|
select f2,group_concat(f1) from t1 group by f2;
|
||||||
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||||
|
def test t1 t1 f2 f2 253 255 255 Y 0 0 8
|
||||||
|
def group_concat(f1) 253 400 1 Y 128 0 63
|
||||||
|
f2 group_concat(f1)
|
||||||
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1
|
||||||
|
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 2
|
||||||
|
drop table t1;
|
||||||
set names latin1;
|
set names latin1;
|
||||||
create table t1 (a char, b char);
|
create table t1 (a char, b char);
|
||||||
insert into t1 values ('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b');
|
insert into t1 values ('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b');
|
||||||
|
@ -289,6 +289,48 @@ check table t1;
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 check status OK
|
test.t1 check status OK
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
||||||
|
SET GLOBAL key_cache_block_size=1536;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
SELECT @@key_cache_block_size;
|
||||||
|
@@key_cache_block_size
|
||||||
|
1536
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
|
||||||
|
CREATE TABLE t2(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
|
||||||
|
SET GLOBAL key_cache_block_size=1536;
|
||||||
|
INSERT INTO t1 VALUES (1,0);
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
4181
|
||||||
|
SELECT @@key_cache_block_size;
|
||||||
|
@@key_cache_block_size
|
||||||
|
1536
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
DROP TABLE t1,t2;
|
||||||
set @@global.key_buffer_size=0;
|
set @@global.key_buffer_size=0;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1438 Cannot drop default keycache
|
Warning 1438 Cannot drop default keycache
|
||||||
|
@ -820,3 +820,35 @@ a
|
|||||||
2
|
2
|
||||||
2
|
2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a int, b int);
|
||||||
|
INSERT INTO t1 VALUES (1,30), (2,20), (1,10), (2,30), (1,20), (2,10);
|
||||||
|
(SELECT b,a FROM t1 ORDER BY a,b) ORDER BY b,a;
|
||||||
|
b a
|
||||||
|
10 1
|
||||||
|
10 2
|
||||||
|
20 1
|
||||||
|
20 2
|
||||||
|
30 1
|
||||||
|
30 2
|
||||||
|
(SELECT b FROM t1 ORDER BY b DESC) ORDER BY b ASC;
|
||||||
|
b
|
||||||
|
10
|
||||||
|
10
|
||||||
|
20
|
||||||
|
20
|
||||||
|
30
|
||||||
|
30
|
||||||
|
(SELECT b,a FROM t1 ORDER BY b,a) ORDER BY a,b;
|
||||||
|
b a
|
||||||
|
10 1
|
||||||
|
20 1
|
||||||
|
30 1
|
||||||
|
10 2
|
||||||
|
20 2
|
||||||
|
30 2
|
||||||
|
(SELECT b,a FROM t1 ORDER by b,a LIMIT 3) ORDER by a,b;
|
||||||
|
b a
|
||||||
|
10 1
|
||||||
|
20 1
|
||||||
|
10 2
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -44,8 +44,39 @@ select * from t2;
|
|||||||
a
|
a
|
||||||
22
|
22
|
||||||
show slave status;
|
show slave status;
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
Slave_IO_State #
|
||||||
# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 Yes Yes # 0 0 # # None 0 No #
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_MYPORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos 18911
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running Yes
|
||||||
|
Slave_SQL_Running Yes
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos 18911
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
stop slave;
|
stop slave;
|
||||||
change master to master_log_pos=536;
|
change master to master_log_pos=536;
|
||||||
begin;
|
begin;
|
||||||
@ -62,8 +93,39 @@ select * from t2;
|
|||||||
a
|
a
|
||||||
22
|
22
|
||||||
show slave status;
|
show slave status;
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
Slave_IO_State #
|
||||||
# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 Yes Yes # 0 0 # # None 0 No #
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_MYPORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos 18911
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running #
|
||||||
|
Slave_SQL_Running Yes
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos 18911
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
set global max_relay_log_size=0;
|
set global max_relay_log_size=0;
|
||||||
stop slave;
|
stop slave;
|
||||||
change master to master_log_pos=536;
|
change master to master_log_pos=536;
|
||||||
@ -82,6 +144,37 @@ select * from t2;
|
|||||||
a
|
a
|
||||||
22
|
22
|
||||||
show slave status;
|
show slave status;
|
||||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
Slave_IO_State #
|
||||||
# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 # Yes # 0 0 # # None 0 No #
|
Master_Host 127.0.0.1
|
||||||
|
Master_User root
|
||||||
|
Master_Port MASTER_MYPORT
|
||||||
|
Connect_Retry 1
|
||||||
|
Master_Log_File master-bin.000001
|
||||||
|
Read_Master_Log_Pos 18911
|
||||||
|
Relay_Log_File #
|
||||||
|
Relay_Log_Pos #
|
||||||
|
Relay_Master_Log_File master-bin.000001
|
||||||
|
Slave_IO_Running #
|
||||||
|
Slave_SQL_Running Yes
|
||||||
|
Replicate_Do_DB
|
||||||
|
Replicate_Ignore_DB
|
||||||
|
Replicate_Do_Table
|
||||||
|
Replicate_Ignore_Table
|
||||||
|
Replicate_Wild_Do_Table
|
||||||
|
Replicate_Wild_Ignore_Table
|
||||||
|
Last_Errno 0
|
||||||
|
Last_Error
|
||||||
|
Skip_Counter 0
|
||||||
|
Exec_Master_Log_Pos 18911
|
||||||
|
Relay_Log_Space #
|
||||||
|
Until_Condition None
|
||||||
|
Until_Log_File
|
||||||
|
Until_Log_Pos 0
|
||||||
|
Master_SSL_Allowed No
|
||||||
|
Master_SSL_CA_File
|
||||||
|
Master_SSL_CA_Path
|
||||||
|
Master_SSL_Cert
|
||||||
|
Master_SSL_Cipher
|
||||||
|
Master_SSL_Key
|
||||||
|
Seconds_Behind_Master #
|
||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
|
@ -397,6 +397,17 @@ insert into t1 values(1),(2),(3);
|
|||||||
select f1, group_concat(f1+1) from t1 group by f1 with rollup;
|
select f1, group_concat(f1+1) from t1 group by f1 with rollup;
|
||||||
select count(distinct (f1+1)) from t1 group by f1 with rollup;
|
select count(distinct (f1+1)) from t1 group by f1 with rollup;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#14169 type of group_concat() result changed to blob if tmp_table was used
|
||||||
|
#
|
||||||
|
create table t1 (f1 int unsigned, f2 varchar(255));
|
||||||
|
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
|
||||||
|
--enable_metadata
|
||||||
|
select f2,group_concat(f1) from t1 group by f2;
|
||||||
|
--disable_metadata
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -149,6 +149,7 @@ show status like 'key_blocks_used';
|
|||||||
--replace_result 1812 KEY_BLOCKS_UNUSED 1793 KEY_BLOCKS_UNUSED 1674 KEY_BLOCKS_UNUSED 1818 KEY_BLOCKS_UNUSED 1824 KEY_BLOCKS_UNUSED
|
--replace_result 1812 KEY_BLOCKS_UNUSED 1793 KEY_BLOCKS_UNUSED 1674 KEY_BLOCKS_UNUSED 1818 KEY_BLOCKS_UNUSED 1824 KEY_BLOCKS_UNUSED
|
||||||
show status like 'key_blocks_unused';
|
show status like 'key_blocks_unused';
|
||||||
|
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
# We don't reset keycache2 as we want to ensure that mysqld will reset it
|
# We don't reset keycache2 as we want to ensure that mysqld will reset it
|
||||||
set global keycache2.key_buffer_size=0;
|
set global keycache2.key_buffer_size=0;
|
||||||
@ -157,7 +158,7 @@ set global keycache2.key_buffer_size=0;
|
|||||||
set global keycache3.key_buffer_size=100;
|
set global keycache3.key_buffer_size=100;
|
||||||
set global keycache3.key_buffer_size=0;
|
set global keycache3.key_buffer_size=0;
|
||||||
|
|
||||||
# Test case for buf 6447
|
# Test case for bug 6447
|
||||||
|
|
||||||
create table t1 (mytext text, FULLTEXT (mytext));
|
create table t1 (mytext text, FULLTEXT (mytext));
|
||||||
insert t1 values ('aaabbb');
|
insert t1 values ('aaabbb');
|
||||||
@ -168,6 +169,44 @@ check table t1;
|
|||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #19079: corrupted index when key_cache_block_size is not multiple of
|
||||||
|
# myisam_block_size
|
||||||
|
|
||||||
|
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
||||||
|
SET GLOBAL key_cache_block_size=1536;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
SELECT @@key_cache_block_size;
|
||||||
|
CHECK TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
|
||||||
|
CREATE TABLE t2(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
|
||||||
|
SET GLOBAL key_cache_block_size=1536;
|
||||||
|
INSERT INTO t1 VALUES (1,0);
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
INSERT INTO t2(b) SELECT b FROM t1;
|
||||||
|
INSERT INTO t1(b) SELECT b FROM t2;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
SELECT @@key_cache_block_size;
|
||||||
|
CHECK TABLE t1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO
|
# Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO
|
||||||
# (One cannot drop the default key cache.)
|
# (One cannot drop the default key cache.)
|
||||||
|
@ -563,4 +563,18 @@ SELECT a FROM t1 ORDER BY a;
|
|||||||
(SELECT a FROM t1) ORDER BY a;
|
(SELECT a FROM t1) ORDER BY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #18767: global ORDER BY applied to a SELECT with ORDER BY either was
|
||||||
|
# ignored or 'concatened' to the latter.
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int, b int);
|
||||||
|
INSERT INTO t1 VALUES (1,30), (2,20), (1,10), (2,30), (1,20), (2,10);
|
||||||
|
|
||||||
|
(SELECT b,a FROM t1 ORDER BY a,b) ORDER BY b,a;
|
||||||
|
(SELECT b FROM t1 ORDER BY b DESC) ORDER BY b ASC;
|
||||||
|
(SELECT b,a FROM t1 ORDER BY b,a) ORDER BY a,b;
|
||||||
|
(SELECT b,a FROM t1 ORDER by b,a LIMIT 3) ORDER by a,b;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -1805,6 +1805,7 @@ byte *key_cache_read(KEY_CACHE *keycache,
|
|||||||
uint status;
|
uint status;
|
||||||
int page_st;
|
int page_st;
|
||||||
|
|
||||||
|
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
||||||
/* Read data in key_cache_block_size increments */
|
/* Read data in key_cache_block_size increments */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -1814,7 +1815,6 @@ byte *key_cache_read(KEY_CACHE *keycache,
|
|||||||
keycache_pthread_mutex_unlock(&keycache->cache_lock);
|
keycache_pthread_mutex_unlock(&keycache->cache_lock);
|
||||||
goto no_key_cache;
|
goto no_key_cache;
|
||||||
}
|
}
|
||||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
|
||||||
filepos-= offset;
|
filepos-= offset;
|
||||||
read_length= length;
|
read_length= length;
|
||||||
set_if_smaller(read_length, keycache->key_cache_block_size-offset);
|
set_if_smaller(read_length, keycache->key_cache_block_size-offset);
|
||||||
@ -1890,6 +1890,7 @@ byte *key_cache_read(KEY_CACHE *keycache,
|
|||||||
#endif
|
#endif
|
||||||
buff+= read_length;
|
buff+= read_length;
|
||||||
filepos+= read_length+offset;
|
filepos+= read_length+offset;
|
||||||
|
offset= 0;
|
||||||
|
|
||||||
} while ((length-= read_length));
|
} while ((length-= read_length));
|
||||||
DBUG_RETURN(start);
|
DBUG_RETURN(start);
|
||||||
@ -1941,17 +1942,17 @@ int key_cache_insert(KEY_CACHE *keycache,
|
|||||||
uint read_length;
|
uint read_length;
|
||||||
int page_st;
|
int page_st;
|
||||||
int error;
|
int error;
|
||||||
|
uint offset;
|
||||||
|
|
||||||
|
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
uint offset;
|
|
||||||
keycache_pthread_mutex_lock(&keycache->cache_lock);
|
keycache_pthread_mutex_lock(&keycache->cache_lock);
|
||||||
if (!keycache->can_be_used)
|
if (!keycache->can_be_used)
|
||||||
{
|
{
|
||||||
keycache_pthread_mutex_unlock(&keycache->cache_lock);
|
keycache_pthread_mutex_unlock(&keycache->cache_lock);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
|
||||||
/* Read data into key cache from buff in key_cache_block_size incr. */
|
/* Read data into key cache from buff in key_cache_block_size incr. */
|
||||||
filepos-= offset;
|
filepos-= offset;
|
||||||
read_length= length;
|
read_length= length;
|
||||||
@ -2009,6 +2010,7 @@ int key_cache_insert(KEY_CACHE *keycache,
|
|||||||
|
|
||||||
buff+= read_length;
|
buff+= read_length;
|
||||||
filepos+= read_length+offset;
|
filepos+= read_length+offset;
|
||||||
|
offset= 0;
|
||||||
|
|
||||||
} while ((length-= read_length));
|
} while ((length-= read_length));
|
||||||
}
|
}
|
||||||
@ -2075,17 +2077,17 @@ int key_cache_write(KEY_CACHE *keycache,
|
|||||||
/* Key cache is used */
|
/* Key cache is used */
|
||||||
uint read_length;
|
uint read_length;
|
||||||
int page_st;
|
int page_st;
|
||||||
|
uint offset;
|
||||||
|
|
||||||
|
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
uint offset;
|
|
||||||
keycache_pthread_mutex_lock(&keycache->cache_lock);
|
keycache_pthread_mutex_lock(&keycache->cache_lock);
|
||||||
if (!keycache->can_be_used)
|
if (!keycache->can_be_used)
|
||||||
{
|
{
|
||||||
keycache_pthread_mutex_unlock(&keycache->cache_lock);
|
keycache_pthread_mutex_unlock(&keycache->cache_lock);
|
||||||
goto no_key_cache;
|
goto no_key_cache;
|
||||||
}
|
}
|
||||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
|
||||||
/* Write data in key_cache_block_size increments */
|
/* Write data in key_cache_block_size increments */
|
||||||
filepos-= offset;
|
filepos-= offset;
|
||||||
read_length= length;
|
read_length= length;
|
||||||
|
@ -380,7 +380,7 @@ Field *Item_sum::create_tmp_field(bool group, TABLE *table,
|
|||||||
field= new Field_longlong(max_length, maybe_null, name, unsigned_flag);
|
field= new Field_longlong(max_length, maybe_null, name, unsigned_flag);
|
||||||
break;
|
break;
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
if (max_length <= 255 || !convert_blob_length)
|
if (max_length/collation.collation->mbmaxlen <= 255 || !convert_blob_length)
|
||||||
return make_string_field(table);
|
return make_string_field(table);
|
||||||
field= new Field_varstring(convert_blob_length, maybe_null,
|
field= new Field_varstring(convert_blob_length, maybe_null,
|
||||||
name, table->s, collation.collation);
|
name, table->s, collation.collation);
|
||||||
|
@ -1121,7 +1121,7 @@ public:
|
|||||||
virtual Item_result result_type () const { return STRING_RESULT; }
|
virtual Item_result result_type () const { return STRING_RESULT; }
|
||||||
enum_field_types field_type() const
|
enum_field_types field_type() const
|
||||||
{
|
{
|
||||||
if (max_length/collation.collation->mbmaxlen > CONVERT_IF_BIGGER_TO_BLOB)
|
if (max_length/collation.collation->mbmaxlen > CONVERT_IF_BIGGER_TO_BLOB )
|
||||||
return FIELD_TYPE_BLOB;
|
return FIELD_TYPE_BLOB;
|
||||||
else
|
else
|
||||||
return MYSQL_TYPE_VARCHAR;
|
return MYSQL_TYPE_VARCHAR;
|
||||||
|
56
sql/lock.cc
56
sql/lock.cc
@ -78,6 +78,7 @@ extern HASH open_cache;
|
|||||||
|
|
||||||
static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table,uint count,
|
static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table,uint count,
|
||||||
uint flags, TABLE **write_locked);
|
uint flags, TABLE **write_locked);
|
||||||
|
static void reset_lock_data(MYSQL_LOCK *sql_lock);
|
||||||
static int lock_external(THD *thd, TABLE **table,uint count);
|
static int lock_external(THD *thd, TABLE **table,uint count);
|
||||||
static int unlock_external(THD *thd, TABLE **table,uint count);
|
static int unlock_external(THD *thd, TABLE **table,uint count);
|
||||||
static void print_lock_error(int error, const char *);
|
static void print_lock_error(int error, const char *);
|
||||||
@ -135,12 +136,16 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
|
|||||||
*/
|
*/
|
||||||
if (wait_if_global_read_lock(thd, 1, 1))
|
if (wait_if_global_read_lock(thd, 1, 1))
|
||||||
{
|
{
|
||||||
|
/* Clear the lock type of all lock data to avoid reusage. */
|
||||||
|
reset_lock_data(sql_lock);
|
||||||
my_free((gptr) sql_lock,MYF(0));
|
my_free((gptr) sql_lock,MYF(0));
|
||||||
sql_lock=0;
|
sql_lock=0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (thd->version != refresh_version)
|
if (thd->version != refresh_version)
|
||||||
{
|
{
|
||||||
|
/* Clear the lock type of all lock data to avoid reusage. */
|
||||||
|
reset_lock_data(sql_lock);
|
||||||
my_free((gptr) sql_lock,MYF(0));
|
my_free((gptr) sql_lock,MYF(0));
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
@ -150,6 +155,8 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
|
|||||||
DBUG_PRINT("info", ("thd->proc_info %s", thd->proc_info));
|
DBUG_PRINT("info", ("thd->proc_info %s", thd->proc_info));
|
||||||
if (lock_external(thd, tables, count))
|
if (lock_external(thd, tables, count))
|
||||||
{
|
{
|
||||||
|
/* Clear the lock type of all lock data to avoid reusage. */
|
||||||
|
reset_lock_data(sql_lock);
|
||||||
my_free((gptr) sql_lock,MYF(0));
|
my_free((gptr) sql_lock,MYF(0));
|
||||||
sql_lock=0;
|
sql_lock=0;
|
||||||
break;
|
break;
|
||||||
@ -720,7 +727,10 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
|
|||||||
*write_lock_used=table;
|
*write_lock_used=table;
|
||||||
if (table->db_stat & HA_READ_ONLY)
|
if (table->db_stat & HA_READ_ONLY)
|
||||||
{
|
{
|
||||||
my_error(ER_OPEN_AS_READONLY, MYF(0), table->alias);
|
my_error(ER_OPEN_AS_READONLY,MYF(0),table->alias);
|
||||||
|
/* Clear the lock type of the lock data that are stored already. */
|
||||||
|
sql_lock->lock_count= locks - sql_lock->locks;
|
||||||
|
reset_lock_data(sql_lock);
|
||||||
my_free((gptr) sql_lock,MYF(0));
|
my_free((gptr) sql_lock,MYF(0));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
@ -745,6 +755,48 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Reset lock type in lock data.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
reset_lock_data()
|
||||||
|
sql_lock The MySQL lock.
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
After a locking error we want to quit the locking of the table(s).
|
||||||
|
The test case in the bug report for Bug #18544 has the following
|
||||||
|
cases: 1. Locking error in lock_external() due to InnoDB timeout.
|
||||||
|
2. Locking error in get_lock_data() due to missing write permission.
|
||||||
|
3. Locking error in wait_if_global_read_lock() due to lock conflict.
|
||||||
|
|
||||||
|
In all these cases we have already set the lock type into the lock
|
||||||
|
data of the open table(s). If the table(s) are in the open table
|
||||||
|
cache, they could be reused with the non-zero lock type set. This
|
||||||
|
could lead to ignoring a different lock type with the next lock.
|
||||||
|
|
||||||
|
Clear the lock type of all lock data. This ensures that the next
|
||||||
|
lock request will set its lock type properly.
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
void
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void reset_lock_data(MYSQL_LOCK *sql_lock)
|
||||||
|
{
|
||||||
|
THR_LOCK_DATA **ldata;
|
||||||
|
THR_LOCK_DATA **ldata_end;
|
||||||
|
|
||||||
|
for (ldata= sql_lock->locks, ldata_end= ldata + sql_lock->lock_count;
|
||||||
|
ldata < ldata_end;
|
||||||
|
ldata++)
|
||||||
|
{
|
||||||
|
/* Reset lock type. */
|
||||||
|
(*ldata)->type= TL_UNLOCK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
Lock table based on the name.
|
Lock table based on the name.
|
||||||
This is used when we need total access to a closed, not open table
|
This is used when we need total access to a closed, not open table
|
||||||
|
@ -479,6 +479,7 @@ public:
|
|||||||
|
|
||||||
void print(String *str);
|
void print(String *str);
|
||||||
|
|
||||||
|
bool add_fake_select_lex(THD *thd);
|
||||||
void init_prepare_fake_select_lex(THD *thd);
|
void init_prepare_fake_select_lex(THD *thd);
|
||||||
inline bool is_prepared() { return prepared; }
|
inline bool is_prepared() { return prepared; }
|
||||||
bool change_result(select_subselect *result, select_subselect *old_result);
|
bool change_result(select_subselect *result, select_subselect *old_result);
|
||||||
|
103
sql/sql_parse.cc
103
sql/sql_parse.cc
@ -5723,48 +5723,17 @@ mysql_new_select(LEX *lex, bool move_down)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Name_resolution_context *outer_context;
|
|
||||||
if (lex->current_select->order_list.first && !lex->current_select->braces)
|
if (lex->current_select->order_list.first && !lex->current_select->braces)
|
||||||
{
|
{
|
||||||
my_error(ER_WRONG_USAGE, MYF(0), "UNION", "ORDER BY");
|
my_error(ER_WRONG_USAGE, MYF(0), "UNION", "ORDER BY");
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
select_lex->include_neighbour(lex->current_select);
|
select_lex->include_neighbour(lex->current_select);
|
||||||
/*
|
SELECT_LEX_UNIT *unit= select_lex->master_unit();
|
||||||
we are not sure that we have one level of SELECTs above, so we take
|
if (!unit->fake_select_lex && unit->add_fake_select_lex(lex->thd))
|
||||||
outer_context address from first select of unit
|
DBUG_RETURN(1);
|
||||||
*/
|
select_lex->context.outer_context=
|
||||||
outer_context=
|
unit->first_select()->context.outer_context;
|
||||||
select_lex->master_unit()->first_select()->context.outer_context;
|
|
||||||
SELECT_LEX_UNIT *unit= select_lex->master_unit();
|
|
||||||
SELECT_LEX *fake= unit->fake_select_lex;
|
|
||||||
if (!fake)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
as far as we included SELECT_LEX for UNION unit should have
|
|
||||||
fake SELECT_LEX for UNION processing
|
|
||||||
*/
|
|
||||||
if (!(fake= unit->fake_select_lex= new (thd->mem_root) SELECT_LEX()))
|
|
||||||
DBUG_RETURN(1);
|
|
||||||
fake->include_standalone(unit,
|
|
||||||
(SELECT_LEX_NODE**)&unit->fake_select_lex);
|
|
||||||
fake->select_number= INT_MAX;
|
|
||||||
fake->parent_lex= lex; /* Used in init_query. */
|
|
||||||
fake->make_empty_select();
|
|
||||||
fake->linkage= GLOBAL_OPTIONS_TYPE;
|
|
||||||
fake->select_limit= 0;
|
|
||||||
|
|
||||||
fake->context.outer_context= outer_context;
|
|
||||||
/* allow item list resolving in fake select for ORDER BY */
|
|
||||||
fake->context.resolve_in_select_list= TRUE;
|
|
||||||
fake->context.select_lex= fake;
|
|
||||||
/*
|
|
||||||
Remove the name resolution context of the fake select from the
|
|
||||||
context stack.
|
|
||||||
*/
|
|
||||||
lex->pop_context();
|
|
||||||
}
|
|
||||||
select_lex->context.outer_context= outer_context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
select_lex->master_unit()->global_parameters= select_lex;
|
select_lex->master_unit()->global_parameters= select_lex;
|
||||||
@ -6548,6 +6517,68 @@ void st_select_lex::set_lock_for_tables(thr_lock_type lock_type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Create a fake SELECT_LEX for a unit
|
||||||
|
|
||||||
|
SYNOPSIS:
|
||||||
|
add_fake_select_lex()
|
||||||
|
thd thread handle
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
The method create a fake SELECT_LEX object for a unit.
|
||||||
|
This object is created for any union construct containing a union
|
||||||
|
operation and also for any single select union construct of the form
|
||||||
|
(SELECT ... ORDER BY order_list [LIMIT n]) ORDER BY ...
|
||||||
|
or of the form
|
||||||
|
(SELECT ... ORDER BY LIMIT n) ORDER BY ...
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
The object is used to retrieve rows from the temporary table
|
||||||
|
where the result on the union is obtained.
|
||||||
|
|
||||||
|
RETURN VALUES
|
||||||
|
1 on failure to create the object
|
||||||
|
0 on success
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool st_select_lex_unit::add_fake_select_lex(THD *thd)
|
||||||
|
{
|
||||||
|
SELECT_LEX *first_sl= first_select();
|
||||||
|
DBUG_ENTER("add_fake_select_lex");
|
||||||
|
DBUG_ASSERT(!fake_select_lex);
|
||||||
|
|
||||||
|
if (!(fake_select_lex= new (thd->mem_root) SELECT_LEX()))
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
fake_select_lex->include_standalone(this,
|
||||||
|
(SELECT_LEX_NODE**)&fake_select_lex);
|
||||||
|
fake_select_lex->select_number= INT_MAX;
|
||||||
|
fake_select_lex->parent_lex= thd->lex; /* Used in init_query. */
|
||||||
|
fake_select_lex->make_empty_select();
|
||||||
|
fake_select_lex->linkage= GLOBAL_OPTIONS_TYPE;
|
||||||
|
fake_select_lex->select_limit= 0;
|
||||||
|
|
||||||
|
fake_select_lex->context.outer_context=first_sl->context.outer_context;
|
||||||
|
/* allow item list resolving in fake select for ORDER BY */
|
||||||
|
fake_select_lex->context.resolve_in_select_list= TRUE;
|
||||||
|
fake_select_lex->context.select_lex= fake_select_lex;
|
||||||
|
|
||||||
|
if (!first_sl->next_select())
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
This works only for
|
||||||
|
(SELECT ... ORDER BY list [LIMIT n]) ORDER BY order_list [LIMIT m],
|
||||||
|
(SELECT ... LIMIT n) ORDER BY order_list [LIMIT m]
|
||||||
|
just before the parser starts processing order_list
|
||||||
|
*/
|
||||||
|
global_parameters= fake_select_lex;
|
||||||
|
fake_select_lex->no_table_names_allowed= 1;
|
||||||
|
thd->lex->current_select= fake_select_lex;
|
||||||
|
}
|
||||||
|
thd->lex->pop_context();
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Push a new name resolution context for a JOIN ... ON clause to the
|
Push a new name resolution context for a JOIN ... ON clause to the
|
||||||
context stack of a query block.
|
context stack of a query block.
|
||||||
|
@ -224,7 +224,7 @@ bool handle_select(THD *thd, LEX *lex, select_result *result,
|
|||||||
register SELECT_LEX *select_lex = &lex->select_lex;
|
register SELECT_LEX *select_lex = &lex->select_lex;
|
||||||
DBUG_ENTER("handle_select");
|
DBUG_ENTER("handle_select");
|
||||||
|
|
||||||
if (select_lex->next_select())
|
if (select_lex->next_select() || select_lex->master_unit()->fake_select_lex)
|
||||||
res= mysql_union(thd, lex, result, &lex->unit, setup_tables_done_option);
|
res= mysql_union(thd, lex, result, &lex->unit, setup_tables_done_option);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -202,7 +202,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||||||
|
|
||||||
thd_arg->lex->current_select= sl= first_sl;
|
thd_arg->lex->current_select= sl= first_sl;
|
||||||
found_rows_for_union= first_sl->options & OPTION_FOUND_ROWS;
|
found_rows_for_union= first_sl->options & OPTION_FOUND_ROWS;
|
||||||
is_union= test(first_sl->next_select());
|
is_union= first_sl->next_select() || fake_select_lex;
|
||||||
|
|
||||||
/* Global option */
|
/* Global option */
|
||||||
|
|
||||||
|
@ -7363,14 +7363,32 @@ order_clause:
|
|||||||
ORDER_SYM BY
|
ORDER_SYM BY
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
|
SELECT_LEX *sel= lex->current_select;
|
||||||
lex->current_select->olap !=
|
SELECT_LEX_UNIT *unit= sel-> master_unit();
|
||||||
UNSPECIFIED_OLAP_TYPE)
|
if (sel->linkage != GLOBAL_OPTIONS_TYPE &&
|
||||||
|
sel->olap != UNSPECIFIED_OLAP_TYPE)
|
||||||
{
|
{
|
||||||
my_error(ER_WRONG_USAGE, MYF(0),
|
my_error(ER_WRONG_USAGE, MYF(0),
|
||||||
"CUBE/ROLLUP", "ORDER BY");
|
"CUBE/ROLLUP", "ORDER BY");
|
||||||
YYABORT;
|
YYABORT;
|
||||||
}
|
}
|
||||||
|
if (lex->sql_command != SQLCOM_ALTER_TABLE && !unit->fake_select_lex)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
A query of the of the form (SELECT ...) ORDER BY order_list is
|
||||||
|
executed in the same way as the query
|
||||||
|
SELECT ... ORDER BY order_list
|
||||||
|
unless the SELECT construct contains ORDER BY or LIMIT clauses.
|
||||||
|
Otherwise we create a fake SELECT_LEX if it has not been created
|
||||||
|
yet.
|
||||||
|
*/
|
||||||
|
SELECT_LEX *first_sl= unit->first_select();
|
||||||
|
if (!first_sl->next_select() &&
|
||||||
|
(first_sl->order_list.elements ||
|
||||||
|
first_sl->select_limit) &&
|
||||||
|
unit->add_fake_select_lex(lex->thd))
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
} order_list;
|
} order_list;
|
||||||
|
|
||||||
order_list:
|
order_list:
|
||||||
|
@ -120,8 +120,12 @@ SimBlockList::unload(){
|
|||||||
if(theList != 0){
|
if(theList != 0){
|
||||||
for(int i = 0; i<noOfBlocks; i++){
|
for(int i = 0; i<noOfBlocks; i++){
|
||||||
if(theList[i] != 0){
|
if(theList[i] != 0){
|
||||||
|
#ifdef VM_TRACE
|
||||||
theList[i]->~SimulatedBlock();
|
theList[i]->~SimulatedBlock();
|
||||||
free(theList[i]);
|
free(theList[i]);
|
||||||
|
#else
|
||||||
|
delete(theList[i]);
|
||||||
|
#endif
|
||||||
theList[i] = 0;
|
theList[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,10 @@
|
|||||||
|
|
||||||
void Ndbcntr::initData()
|
void Ndbcntr::initData()
|
||||||
{
|
{
|
||||||
|
c_start.reset();
|
||||||
|
cmasterNodeId = 0;
|
||||||
|
cnoStartNodes = 0;
|
||||||
|
cnoWaitrep = 0;
|
||||||
// Records with constant sizes
|
// Records with constant sizes
|
||||||
ndbBlocksRec = new NdbBlocksRec[ZSIZE_NDB_BLOCKS_REC];
|
ndbBlocksRec = new NdbBlocksRec[ZSIZE_NDB_BLOCKS_REC];
|
||||||
}//Ndbcntr::initData()
|
}//Ndbcntr::initData()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user