Commit 210f576c authored by unknown's avatar unknown
Browse files

Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/svoj/devel/mysql/yassl-mysql-5.0

parents fca6c2fe fa02ee1a
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -672,3 +672,17 @@ select default(t30.s1) from t30;
end|
drop procedure bug10969|
drop table t1|
prepare stmt from "select 1";
create procedure p() deallocate prepare stmt;
ERROR 0A000: DEALLOCATE is not allowed in stored procedures
create function f() returns int begin deallocate prepare stmt;
ERROR 0A000: DEALLOCATE is not allowed in stored procedures
create procedure p() prepare stmt from "select 1";
ERROR 0A000: PREPARE is not allowed in stored procedures
create function f() returns int begin prepare stmt from "select 1";
ERROR 0A000: PREPARE is not allowed in stored procedures
create procedure p() execute stmt;
ERROR 0A000: EXECUTE is not allowed in stored procedures
create function f() returns int begin execute stmt;
ERROR 0A000: EXECUTE is not allowed in stored procedures
deallocate prepare stmt;
+15 −0
Original line number Diff line number Diff line
@@ -40,3 +40,18 @@ Id User Host db Command Time State Info
unlock tables;
drop procedure bug9486;
drop table t1, t2;
drop procedure if exists bug11158;
create procedure bug11158() delete t1 from t1, t2 where t1.id = t2.id;
create table t1 (id int, j int);
insert into t1 values (1, 1), (2, 2);
create table t2 (id int);
insert into t2 values (1);
call bug11158();
select * from t1;
id	j
2	2
lock tables t2 read;
call bug11158();
unlock tables;
drop procedure bug11158;
drop table t1, t2;
+21 −0
Original line number Diff line number Diff line
@@ -965,3 +965,24 @@ drop procedure bug10969|
drop table t1|

delimiter ;|

#
# Bug#10975, #10605, #7115: Dynamic SQL by means of
# PREPARE/EXECUTE/DEALLOCATE is not supported yet.
# Check that an error message is returned.
#
prepare stmt from "select 1";
--error ER_SP_BADSTATEMENT
create procedure p() deallocate prepare stmt; 
--error ER_SP_BADSTATEMENT
create function f() returns int begin deallocate prepare stmt;
--error ER_SP_BADSTATEMENT
create procedure p() prepare stmt from "select 1";
--error ER_SP_BADSTATEMENT
create function f() returns int begin prepare stmt from "select 1";
--error ER_SP_BADSTATEMENT
create procedure p() execute stmt; 
--error ER_SP_BADSTATEMENT
create function f() returns int begin execute stmt;
deallocate prepare stmt;
+26 −0
Original line number Diff line number Diff line
@@ -84,6 +84,32 @@ reap;
drop procedure bug9486;
drop table t1, t2;

#
# BUG#11158: Can't perform multi-delete in stored procedure
#
--disable_warnings
drop procedure if exists bug11158;
--enable_warnings
create procedure bug11158() delete t1 from t1, t2 where t1.id = t2.id;
create table t1 (id int, j int);
insert into t1 values (1, 1), (2, 2);
create table t2 (id int);
insert into t2 values (1);
# Procedure should work and cause proper effect (delete only first row)
call bug11158();
select * from t1;
# Also let us test that we obtain only read (and thus non exclusive) lock
# for table from which we are not going to delete rows.
connection con2root;
lock tables t2 read;
connection con1root;
call bug11158();
connection con2root;
unlock tables;
connection con1root;
# Clean-up
drop procedure bug11158;
drop table t1, t2;

#
# BUG#NNNN: New bug synopsis
+9 −9
Original line number Diff line number Diff line
@@ -247,10 +247,10 @@ Ndbfs::readWriteRequest(int action, Signal * signal)
  AsyncFile* openFile = theOpenFiles.find(filePointer);

  const NewVARIABLE *myBaseAddrRef = &getBat(blockNumber)[fsRWReq->varIndex];
  unsigned int tPageSize;
  unsigned int tClusterSize;
  unsigned int tNRR;
  unsigned int tPageOffset;
  UintPtr tPageSize;
  UintPtr tClusterSize;
  UintPtr tNRR;
  UintPtr tPageOffset;
  char*        tWA;
  FsRef::NdbfsErrorCodeType errorCode;

@@ -294,8 +294,8 @@ Ndbfs::readWriteRequest(int action, Signal * signal)
    jam();
    for (unsigned int i = 0; i < fsRWReq->numberOfPages; i++) {
      jam();
      const Uint32 varIndex = fsRWReq->data.listOfPair[i].varIndex;
      const Uint32 fileOffset = fsRWReq->data.listOfPair[i].fileOffset;
      const UintPtr varIndex = fsRWReq->data.listOfPair[i].varIndex;
      const UintPtr fileOffset = fsRWReq->data.listOfPair[i].fileOffset;
      if (varIndex >= tNRR) {
        jam();
        errorCode = FsRef::fsErrInvalidParameters;
@@ -316,8 +316,8 @@ Ndbfs::readWriteRequest(int action, Signal * signal)
      errorCode = FsRef::fsErrInvalidParameters;
      goto error;
    }//if
    const Uint32 varIndex = fsRWReq->data.arrayOfPages.varIndex;
    const Uint32 fileOffset = fsRWReq->data.arrayOfPages.fileOffset;
    const UintPtr varIndex = fsRWReq->data.arrayOfPages.varIndex;
    const UintPtr fileOffset = fsRWReq->data.arrayOfPages.fileOffset;
    
    request->par.readWrite.pages[0].offset = fileOffset * tPageSize;
    request->par.readWrite.pages[0].size = tPageSize * fsRWReq->numberOfPages;
@@ -334,7 +334,7 @@ Ndbfs::readWriteRequest(int action, Signal * signal)
    
    for (unsigned int i = 0; i < fsRWReq->numberOfPages; i++) {
      jam();
      Uint32 varIndex = fsRWReq->data.listOfMemPages.varIndex[i];
      UintPtr varIndex = fsRWReq->data.listOfMemPages.varIndex[i];

      if (varIndex >= tNRR) {
        jam();
Loading