mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 03:21:53 +01:00
Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.1
into mysql.com:/windows/Linux_space/MySQL/mysql-5.1
This commit is contained in:
commit
6db1610c21
4 changed files with 79 additions and 36 deletions
|
@ -17,6 +17,14 @@ pk1 b c
|
|||
0 0 0
|
||||
2 2 2
|
||||
4 1 1
|
||||
UPDATE t1 set pk1 = 4 where pk1 = 2;
|
||||
ERROR 23000: Duplicate entry '4' for key 1
|
||||
UPDATE IGNORE t1 set pk1 = 4 where pk1 = 2;
|
||||
select * from t1 order by pk1;
|
||||
pk1 b c
|
||||
0 0 0
|
||||
2 2 2
|
||||
4 1 1
|
||||
UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4;
|
||||
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
|
||||
select * from t1 order by pk1;
|
||||
|
|
|
@ -91,7 +91,6 @@ select * from t2 order by a;
|
|||
|
||||
drop table t2;
|
||||
|
||||
-- error 1121
|
||||
CREATE TABLE t2 (
|
||||
a int unsigned NOT NULL PRIMARY KEY,
|
||||
b int unsigned not null,
|
||||
|
@ -99,6 +98,20 @@ CREATE TABLE t2 (
|
|||
UNIQUE (b, c) USING HASH
|
||||
) engine=ndbcluster;
|
||||
|
||||
|
||||
insert t2 values(1,1,NULL),(2,2,2),(3,3,NULL),(4,4,4),(5,5,NULL),(6,6,6),(7,7,NULL),(8,3,NULL),(9,3,NULL);
|
||||
|
||||
select * from t2 where c IS NULL order by a;
|
||||
select * from t2 where b = 3 AND c IS NULL order by a;
|
||||
select * from t2 where (b = 3 OR b = 5) AND c IS NULL order by a;
|
||||
set @old_ecpd = @@session.engine_condition_pushdown;
|
||||
set engine_condition_pushdown = true;
|
||||
explain select * from t2 where (b = 3 OR b = 5) AND c IS NULL AND a < 9 order by a;
|
||||
select * from t2 where (b = 3 OR b = 5) AND c IS NULL AND a < 9 order by a;
|
||||
set engine_condition_pushdown = @old_ecpd;
|
||||
|
||||
drop table t2;
|
||||
|
||||
#
|
||||
# Show use of PRIMARY KEY USING HASH indexes
|
||||
#
|
||||
|
|
|
@ -23,6 +23,10 @@ UPDATE t1 set b = c;
|
|||
select * from t1 order by pk1;
|
||||
UPDATE t1 set pk1 = 4 where pk1 = 1;
|
||||
select * from t1 order by pk1;
|
||||
--error 1062
|
||||
UPDATE t1 set pk1 = 4 where pk1 = 2;
|
||||
UPDATE IGNORE t1 set pk1 = 4 where pk1 = 2;
|
||||
select * from t1 order by pk1;
|
||||
-- error 1062
|
||||
UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4;
|
||||
select * from t1 order by pk1;
|
||||
|
|
|
@ -53,10 +53,6 @@ readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis,
|
|||
if(buflen <= 1)
|
||||
return 0;
|
||||
|
||||
int sock_flags= fcntl(socket, F_GETFL);
|
||||
if(fcntl(socket, F_SETFL, sock_flags | O_NONBLOCK) == -1)
|
||||
return -1;
|
||||
|
||||
fd_set readset;
|
||||
FD_ZERO(&readset);
|
||||
FD_SET(socket, &readset);
|
||||
|
@ -76,43 +72,65 @@ readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis,
|
|||
}
|
||||
|
||||
if(selectRes == -1){
|
||||
fcntl(socket, F_SETFL, sock_flags);
|
||||
return -1;
|
||||
}
|
||||
|
||||
const int t = recv(socket, buf, buflen, MSG_PEEK);
|
||||
|
||||
if(t < 1)
|
||||
char* ptr = buf;
|
||||
int len = buflen;
|
||||
do
|
||||
{
|
||||
fcntl(socket, F_SETFL, sock_flags);
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(int i=0; i< t;i++)
|
||||
{
|
||||
if(buf[i] == '\n'){
|
||||
int r= recv(socket, buf, i+1, 0);
|
||||
buf[i+1]= 0;
|
||||
if(r < 1) {
|
||||
fcntl(socket, F_SETFL, sock_flags);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(i > 0 && buf[i-1] == '\r'){
|
||||
buf[i-1] = '\n';
|
||||
buf[i]= '\0';
|
||||
}
|
||||
|
||||
fcntl(socket, F_SETFL, sock_flags);
|
||||
return r;
|
||||
int t;
|
||||
while((t = recv(socket, ptr, len, MSG_PEEK)) == -1 && errno == EINTR);
|
||||
|
||||
if(t < 1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int r= recv(socket, buf, t, 0);
|
||||
if(r>=0)
|
||||
buf[r] = 0;
|
||||
fcntl(socket, F_SETFL, sock_flags);
|
||||
return r;
|
||||
|
||||
for(int i = 0; i<t; i++)
|
||||
{
|
||||
if(ptr[i] == '\n')
|
||||
{
|
||||
/**
|
||||
* Now consume
|
||||
*/
|
||||
for (len = 1 + i; len; )
|
||||
{
|
||||
while ((t = recv(socket, ptr, len, 0)) == -1 && errno == EINTR);
|
||||
if (t < 1)
|
||||
return -1;
|
||||
ptr += t;
|
||||
len -= t;
|
||||
}
|
||||
ptr[0]= 0;
|
||||
return ptr - buf;
|
||||
}
|
||||
}
|
||||
|
||||
for (int tmp = t; tmp; )
|
||||
{
|
||||
while ((t = recv(socket, ptr, tmp, 0)) == -1 && errno == EINTR);
|
||||
if (t < 1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
ptr += t;
|
||||
len -= t;
|
||||
tmp -= t;
|
||||
}
|
||||
|
||||
FD_ZERO(&readset);
|
||||
FD_SET(socket, &readset);
|
||||
timeout.tv_sec = (timeout_millis / 1000);
|
||||
timeout.tv_usec = (timeout_millis % 1000) * 1000;
|
||||
const int selectRes = select(socket + 1, &readset, 0, 0, &timeout);
|
||||
if(selectRes != 1){
|
||||
return -1;
|
||||
}
|
||||
} while (len > 0);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
|
|
Loading…
Add table
Reference in a new issue