summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/ctype_utf8.result9
-rw-r--r--mysql-test/r/show_check.result7
-rw-r--r--mysql-test/t/ctype_utf8.test9
-rw-r--r--mysql-test/t/show_check.test13
-rw-r--r--ndb/include/kernel/signaldata/DumpStateOrd.hpp2
-rw-r--r--ndb/src/kernel/blocks/dbtc/DbtcMain.cpp30
6 files changed, 69 insertions, 1 deletions
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 405eff25746..7878fc50b38 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -1148,3 +1148,12 @@ set @a:=null;
execute my_stmt using @a;
a b
drop table if exists t1;
+create table t1 (a int);
+insert into t1 values (48),(49),(50);
+set names utf8;
+select distinct char(a) from t1;
+char(a)
+0
+1
+2
+drop table t1;
diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result
index c143c7f0f29..20f695d9ac0 100644
--- a/mysql-test/r/show_check.result
+++ b/mysql-test/r/show_check.result
@@ -557,3 +557,10 @@ DROP TABLE tyt2;
DROP TABLE urkunde;
SHOW TABLES FROM non_existing_database;
ERROR 42000: Unknown database 'non_existing_database'
+flush tables;
+SHOW TABLE STATUS like 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm'
+show create table t1;
+ERROR HY000: Incorrect information in file: './test/t1.frm'
+drop table t1;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index fb6f2f58e35..5670e9efbf9 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -859,6 +859,15 @@ create table t1 (a varchar(255)) default charset=utf8;
select * from t1 where find_in_set('-1', a);
drop table t1;
+#
+# Bug#13233: select distinct char(column) fails with utf8
+#
+create table t1 (a int);
+insert into t1 values (48),(49),(50);
+set names utf8;
+select distinct char(a) from t1;
+drop table t1;
+
# End of 4.1 tests
#
diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test
index b9fc991dc80..89d281a2c58 100644
--- a/mysql-test/t/show_check.test
+++ b/mysql-test/t/show_check.test
@@ -386,6 +386,19 @@ create table t1 (
SHOW CREATE TABLE t1;
DROP TABLE t1;
+# Test for BUG#93: 4.1 protocl crash on corupted frm and SHOW TABLE STATUS
+
+flush tables;
+
+# Create a junk frm file on disk
+system echo "this is a junk file for test" >> var/master-data/test/t1.frm ;
+--replace_column 6 # 7 # 8 # 9 #
+SHOW TABLE STATUS like 't1';
+--error 1033
+show create table t1;
+drop table t1;
+
+
# End of 4.1 tests
#
# BUG 12183 - SHOW OPEN TABLES behavior doesn't match grammar
diff --git a/ndb/include/kernel/signaldata/DumpStateOrd.hpp b/ndb/include/kernel/signaldata/DumpStateOrd.hpp
index 7368a0ec40d..bde690e056d 100644
--- a/ndb/include/kernel/signaldata/DumpStateOrd.hpp
+++ b/ndb/include/kernel/signaldata/DumpStateOrd.hpp
@@ -98,6 +98,8 @@ public:
StartTcTimer = 2509,
StopTcTimer = 2510,
StartPeriodicTcTimer = 2511,
+ TcStartDumpIndexOpCount = 2512,
+ TcDumpIndexOpCount = 2513,
CmvmiDumpConnections = 2600,
CmvmiDumpLongSignalMemory = 2601,
CmvmiSetRestartOnErrorInsert = 2602,
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index 6e7affaf838..f2646fd4176 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -4660,6 +4660,7 @@ void Dbtc::copyApi(Signal* signal)
regTmpApiPtr->commitAckMarker = RNIL;
regTmpApiPtr->firstTcConnect = RNIL;
regTmpApiPtr->lastTcConnect = RNIL;
+ releaseAllSeizedIndexOperations(regTmpApiPtr);
}//Dbtc::copyApi()
void Dbtc::unlinkApiConnect(Signal* signal)
@@ -10241,7 +10242,7 @@ void Dbtc::releaseAbortResources(Signal* signal)
// apiConnectptr.p->apiConnectstate = CS_CONNECTED;
apiConnectptr.p->apiConnectstate = CS_ABORTING;
apiConnectptr.p->abortState = AS_IDLE;
-
+ releaseAllSeizedIndexOperations(apiConnectptr.p);
if(apiConnectptr.p->m_exec_flag || apiConnectptr.p->apiFailState == ZTRUE){
jam();
bool ok = false;
@@ -10814,6 +10815,33 @@ Dbtc::execDUMP_STATE_ORD(Signal* signal)
signal->theData[0] = TcContinueB::ZTRANS_EVENT_REP;
sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 5000, 1);
}
+
+ if (dumpState->args[0] == DumpStateOrd::TcStartDumpIndexOpCount)
+ {
+ static int frequency = 1;
+ if (signal->getLength() > 1)
+ frequency = signal->theData[1];
+ else
+ if (refToBlock(signal->getSendersBlockRef()) != DBTC)
+ frequency = 1;
+
+ if (frequency)
+ {
+ dumpState->args[0] = DumpStateOrd::TcDumpIndexOpCount;
+ execDUMP_STATE_ORD(signal);
+ dumpState->args[0] = DumpStateOrd::TcStartDumpIndexOpCount;
+
+ Uint32 delay = 1000 * (frequency > 25 ? 25 : frequency);
+ sendSignalWithDelay(cownref, GSN_DUMP_STATE_ORD, signal, delay, 1);
+ }
+ }
+
+ if (dumpState->args[0] == DumpStateOrd::TcDumpIndexOpCount)
+ {
+ infoEvent("IndexOpCount: pool: %d free: %d",
+ c_theIndexOperationPool.getSize(),
+ c_theIndexOperationPool.getNoOfFree());
+ }
}//Dbtc::execDUMP_STATE_ORD()
void Dbtc::execSET_VAR_REQ(Signal* signal)