4495 jonas oreland 2011-09-01
ndb - prevent tables with more than 8k in fixed columns
modified:
mysql-test/suite/ndb/r/ndb_basic.result
mysql-test/suite/ndb/t/ndb_basic.test
storage/ndb/src/kernel/blocks/dbtup/AttributeOffset.hpp
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
storage/ndb/src/ndbapi/ndberror.c
4494 jonas oreland 2011-09-01
ndb - broken testcase
modified:
storage/ndb/tools/ndb_config.cpp
=== modified file 'mysql-test/suite/ndb/r/ndb_basic.result'
--- a/mysql-test/suite/ndb/r/ndb_basic.result 2011-07-07 14:48:06 +0000
+++ b/mysql-test/suite/ndb/r/ndb_basic.result 2011-09-01 18:42:31 +0000
@@ -563,6 +563,12 @@ length(b)
13000
13000
drop table t1;
+create table t1 ( c50 char(255), c49 char(255), c48 char(255), c47 char(255), c46 char(255), c45 char(255), c44 char(255), c43 char(255), c42 char(255), c41 char(255), c40 char(255), c39 char(255), c38 char(255), c37 char(255), c36 char(255), c35 char(255), c34 char(255), c33 char(255), c32 char(255), c31 char(255), c30 char(255), c29 char(255), c28 char(255), c27 char(255), c26 char(255), c25 char(255), c24 char(255), c23 char(255), c22 char(255), c21 char(255), c20 char(255), c19 char(255), c18 char(255), c17 char(255), c16 char(255), c15 char(255), c14 char(255), c13 char(255), c12 char(255), c11 char(255), c10 char(255), c9 char(255), c8 char(255), c7 char(255), c6 char(255), c5 char(255), c4 char(255), c3 char(255), c2 char(255), c1 char(255), primary key using hash(c1)) engine=ndb;
+ERROR HY000: Can't create table 'test.t1' (errno: 851)
+show warnings;
+Level Code Message
+Error 1296 Got error 851 'Maximum 8052 bytes of FIXED column supported' from NDB
+Error 1005 Can't create table 'test.t1' (errno: 851)
create table `t1` (`a` int, b int, primary key (a,b)) engine=ndb partition by key(`a`,`b`,`a`);
ERROR HY000: Field in list of fields for partition function not found in table
create table t1 (
=== modified file 'mysql-test/suite/ndb/t/ndb_basic.test'
--- a/mysql-test/suite/ndb/t/ndb_basic.test 2011-07-06 06:33:09 +0000
+++ b/mysql-test/suite/ndb/t/ndb_basic.test 2011-09-01 18:42:31 +0000
@@ -438,6 +438,21 @@ insert into t1 values (1,@v13000), (2,@v
select length(b) from t1 order by 1;
drop table t1;
+let $i=50;
+let $separator=;
+let $sql=create table t1 (;
+while ($i)
+{
+ let $sql=$sql$separator c$i char(255);
+ let $separator=,;
+ dec $i;
+}
+let $sql=$sql, primary key using hash(c1)) engine=ndb;
+
+--error 1005
+eval $sql; # eval the sql and create the table
+show warnings;
+
#
# test bug#53354 - crash when creating partitioned table with multiple columns in the partition key
#
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/AttributeOffset.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/AttributeOffset.hpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/AttributeOffset.hpp 2011-09-01 18:42:31 +0000
@@ -34,7 +34,9 @@ public:
static Uint32 getNullFlagOffset(const Uint32 &);
static Uint32 getNullFlagByteOffset(const Uint32 & desc);
static Uint32 getNullFlagBitOffset(const Uint32 &);
-
+
+ static Uint32 getMaxOffset();
+
Uint32 m_data;
friend class NdbOut& operator<<(class NdbOut&, const AttributeOffset&);
@@ -143,6 +145,13 @@ AttributeOffset::getNullFlagBitOffset(co
return (getNullFlagPos(desc) & AO_NULL_FLAG_WORD_MASK);
}
+inline
+Uint32
+AttributeOffset::getMaxOffset()
+{
+ return AO_ATTRIBUTE_OFFSET_MASK;
+}
+
class NdbOut&
operator<<(class NdbOut&, const AttributeOffset&);
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp 2011-06-29 07:56:14 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp 2011-09-01 18:42:31 +0000
@@ -2537,7 +2537,7 @@ private:
void handleCharsetPos(Uint32 csNumber, CHARSET_INFO** charsetArray,
Uint32 noOfCharsets,
Uint32 & charsetIndex, Uint32 & attrDes2);
- void computeTableMetaData(Tablerec *regTabPtr);
+ Uint32 computeTableMetaData(Tablerec *regTabPtr);
//------------------------------------------------------------------
//------------------------------------------------------------------
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp 2011-09-01 18:42:31 +0000
@@ -434,7 +434,12 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal*
}
/* Compute table aggregate metadata. */
- computeTableMetaData(regTabPtr.p);
+ terrorCode = computeTableMetaData(regTabPtr.p);
+ if (terrorCode)
+ {
+ jam();
+ goto error;
+ }
#if 0
ndbout << *regTabPtr.p << endl;
@@ -1453,7 +1458,7 @@ Dbtup::handleCharsetPos(Uint32 csNumber,
This function (re-)computes aggregated metadata. It is called for
both ALTER TABLE and CREATE TABLE.
*/
-void
+Uint32
Dbtup::computeTableMetaData(Tablerec *regTabPtr)
{
Uint32 dyn_null_words[2];
@@ -1610,6 +1615,10 @@ Dbtup::computeTableMetaData(Tablerec *re
BitmaskImpl::set(dyn_null_words[ind], regTabPtr->dynVarSizeMask[ind], null_pos);
}
}
+ if (off > AttributeOffset::getMaxOffset())
+ {
+ return ZTOO_LARGE_TUPLE_ERROR;
+ }
AttributeOffset::setOffset(attrDes2, off);
*tabDesc++= attrDes2;
}
@@ -1681,6 +1690,7 @@ Dbtup::computeTableMetaData(Tablerec *re
setUpQueryRoutines(regTabPtr);
setUpKeyArray(regTabPtr);
+ return 0;
}
void
=== modified file 'storage/ndb/src/ndbapi/ndberror.c'
--- a/storage/ndb/src/ndbapi/ndberror.c 2011-07-04 13:37:56 +0000
+++ b/storage/ndb/src/ndbapi/ndberror.c 2011-09-01 18:42:31 +0000
@@ -324,6 +324,8 @@ ErrorBundle ErrorCodes[] = {
{ 829, DMEC, AE, "Corrupt data received for insert/update" },
{ 831, DMEC, AE, "Too many nullable/bitfields in table definition" },
{ 850, DMEC, AE, "Too long or too short default value"},
+ { 851, DMEC, AE, "Maximum 8052 bytes of FIXED columns supported"
+ ", use varchar or COLUMN_FORMAT DYNMIC instead" },
{ 876, DMEC, AE, "876" },
{ 877, DMEC, AE, "877" },
{ 878, DMEC, AE, "878" },
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-7.0 branch (jonas.oreland:4494 to 4495) | jonas oreland | 2 Sep |