From: Jonas Oreland Date: March 14 2012 8:28am Subject: bzr push into mysql-5.1-telco-7.0 branch (jonas.oreland:4884 to 4885) Bug#13824773 List-Archive: http://lists.mysql.com/commits/143187 X-Bug: 13824773 Message-Id: <20120314082821.1972255C8EA@perch.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4885 Jonas Oreland 2012-03-14 ndb - bug#13824773 - fix restart with ndbmtd and tabledefinition being larger than 32k modified: storage/ndb/src/kernel/blocks/restore.cpp storage/ndb/src/kernel/blocks/restore.hpp storage/ndb/test/src/NDBT_Tables.cpp 4884 magnus.blaudd@stripped 2012-03-14 [merge] Merge modified: storage/ndb/test/ndbapi/bench/asyncGenerator.cpp storage/ndb/test/ndbapi/bench/dbPopulate.cpp storage/ndb/test/ndbapi/bench/mainAsyncGenerator.cpp storage/ndb/test/ndbapi/bench/mainPopulate.cpp storage/ndb/test/ndbapi/bench/userInterface.cpp storage/ndb/test/ndbapi/testNdbApi.cpp === modified file 'storage/ndb/src/kernel/blocks/restore.cpp' --- a/storage/ndb/src/kernel/blocks/restore.cpp 2011-06-30 15:59:25 +0000 +++ b/storage/ndb/src/kernel/blocks/restore.cpp 2012-03-14 08:27:54 +0000 @@ -436,6 +436,7 @@ Restore::restore_next(Signal* signal, Fi Uint32 left= file_ptr.p->m_bytes_left; if(left < 8) { + jam(); /** * Not enought bytes to read header */ @@ -448,18 +449,22 @@ Restore::restore_next(Signal* signal, Fi Uint32 pos= file_ptr.p->m_current_page_pos; if(status & File::READING_RECORDS) { + jam(); /** * We are reading records */ len= ntohl(* (page_ptr.p->data + pos)) + 1; + ndbrequire(len < GLOBAL_PAGE_SIZE_WORDS); } else { + jam(); /** * Section length is in 2 word */ if(pos + 1 == GLOBAL_PAGE_SIZE_WORDS) { + jam(); /** * But that's stored on next page... * and since we have atleast 8 bytes left in buffer @@ -473,18 +478,22 @@ Restore::restore_next(Signal* signal, Fi } else { + jam(); len= ntohl(* (page_ptr.p->data + pos + 1)); } } if(file_ptr.p->m_status & File::FIRST_READ) { + jam(); len= 3; file_ptr.p->m_status &= ~(Uint32)File::FIRST_READ; } if(4 * len > left) { + jam(); + /** * Not enought bytes to read "record" */ @@ -505,6 +514,7 @@ Restore::restore_next(Signal* signal, Fi if(pos + len >= GLOBAL_PAGE_SIZE_WORDS) { + jam(); /** * But it's split over pages */ @@ -519,13 +529,73 @@ Restore::restore_next(Signal* signal, Fi file_ptr.p->m_current_page_pos = (pos + len) - GLOBAL_PAGE_SIZE_WORDS; file_ptr.p->m_current_page_index = (file_ptr.p->m_current_page_index + 1) % page_count; - - Uint32 first = (GLOBAL_PAGE_SIZE_WORDS - pos); - // wl4391_todo removing valgrind overlap warning for now - memmove(page_ptr.p, page_ptr.p->data+pos, 4 * first); - memcpy(page_ptr.p->data+first, next_page_ptr.p, 4 * (len - first)); - data= page_ptr.p->data; - } + + if (len <= GLOBAL_PAGE_SIZE_WORDS) + { + jam(); + Uint32 first = (GLOBAL_PAGE_SIZE_WORDS - pos); + // wl4391_todo removing valgrind overlap warning for now + memmove(page_ptr.p, page_ptr.p->data+pos, 4 * first); + memcpy(page_ptr.p->data+first, next_page_ptr.p, 4 * (len - first)); + data= page_ptr.p->data; + } + else + { + jam(); + /** + * A table definition can be larger than one page... + * when that happens copy it out to side buffer + * + * First copy part belonging to page_ptr + * Then copy full middle pages (moving forward in page-list) + * Last copy last part + */ + Uint32 save = len; + assert(len <= NDB_ARRAY_SIZE(m_table_buf)); + Uint32 * dst = m_table_buf; + + /** + * First + */ + Uint32 first = (GLOBAL_PAGE_SIZE_WORDS - pos); + memcpy(dst, page_ptr.p->data+pos, 4 * first); + len -= first; + dst += first; + + /** + * Middle + */ + while (len > GLOBAL_PAGE_SIZE_WORDS) + { + jam(); + memcpy(dst, next_page_ptr.p, 4 * GLOBAL_PAGE_SIZE_WORDS); + len -= GLOBAL_PAGE_SIZE_WORDS; + dst += GLOBAL_PAGE_SIZE_WORDS; + + { + LocalDataBuffer<15> pages(m_databuffer_pool, file_ptr.p->m_pages); + Uint32 next_page = (file_ptr.p->m_current_page_index + 1) % page_count; + pages.position(it, next_page % page_count); + m_global_page_pool.getPtr(next_page_ptr, * it.data); + + file_ptr.p->m_current_page_ptr_i = next_page_ptr.i; + file_ptr.p->m_current_page_index = next_page; + } + } + + /** + * last + */ + memcpy(dst, next_page_ptr.p, 4 * len); + file_ptr.p->m_current_page_pos = len; + + /** + * Set pointer and len + */ + len = save; + data = m_table_buf; + } + } else { file_ptr.p->m_current_page_pos = pos + len; === modified file 'storage/ndb/src/kernel/blocks/restore.hpp' --- a/storage/ndb/src/kernel/blocks/restore.hpp 2011-06-30 15:59:25 +0000 +++ b/storage/ndb/src/kernel/blocks/restore.hpp 2012-03-14 08:27:54 +0000 @@ -159,6 +159,7 @@ private: ArrayPool m_file_pool; List::DataBufferPool m_databuffer_pool; + Uint32 m_table_buf[MAX_WORDS_META_FILE]; }; NdbOut& operator << (NdbOut&, const Restore::Column&); === modified file 'storage/ndb/test/src/NDBT_Tables.cpp' --- a/storage/ndb/test/src/NDBT_Tables.cpp 2011-06-30 15:59:25 +0000 +++ b/storage/ndb/test/src/NDBT_Tables.cpp 2012-03-14 08:27:54 +0000 @@ -174,7 +174,307 @@ NDBT_Attribute T6Attribs[] = { NDBT_Attribute("ATTR19", NdbDictionary::Column::Unsigned), NDBT_Attribute("ATTR20", NdbDictionary::Column::Unsigned), NDBT_Attribute("ATTR21", NdbDictionary::Column::Char, 4, false, true, 0, MM, true), - NDBT_Attribute("ATTR22", NdbDictionary::Column::Varbinary, 255, false, false, 0, MM, true) + NDBT_Attribute("ATTR22", NdbDictionary::Column::Varbinary, 255, false, false, 0, MM, true), + NDBT_Attribute("BIT000", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT001", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT002", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT003", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT004", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT005", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT006", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT007", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT008", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT009", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT010", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT011", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT012", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT013", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT014", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT015", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT016", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT017", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT018", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT019", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT020", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT021", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT022", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT023", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT024", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT025", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT026", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT027", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT028", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT029", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT030", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT031", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT032", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT033", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT034", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT035", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT036", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT037", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT038", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT039", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT040", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT041", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT042", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT043", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT044", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT045", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT046", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT047", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT048", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT049", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT050", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT051", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT052", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT053", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT054", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT055", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT056", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT057", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT058", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT059", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT060", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT061", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT062", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT063", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT064", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT065", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT066", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT067", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT068", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT069", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT070", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT071", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT072", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT073", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT074", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT075", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT076", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT077", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT078", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT079", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT080", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT081", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT082", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT083", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT084", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT085", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT086", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT087", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT088", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT089", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT090", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT091", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT092", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT093", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT094", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT095", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT096", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT097", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT098", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT099", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT100", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT101", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT102", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT103", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT104", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT105", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT106", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT107", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT108", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT109", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT110", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT111", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT112", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT113", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT114", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT115", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT116", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT117", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT118", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT119", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT120", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT121", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT122", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT123", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT124", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT125", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT126", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT127", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT128", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT129", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT130", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT131", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT132", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT133", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT134", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT135", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT136", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT137", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT138", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT139", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT140", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT141", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT142", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT143", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT144", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT145", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT146", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT147", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT148", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT149", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT150", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT151", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT152", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT153", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT154", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT155", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT156", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT157", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT158", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT159", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT160", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT161", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT162", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT163", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT164", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT165", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT166", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT167", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT168", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT169", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT170", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT171", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT172", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT173", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT174", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT175", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT176", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT177", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT178", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT179", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT180", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT181", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT182", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT183", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT184", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT185", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT186", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT187", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT188", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT189", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT190", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT191", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT192", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT193", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT194", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT195", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT196", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT197", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT198", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT199", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT200", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT201", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT202", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT203", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT204", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT205", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT206", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT207", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT208", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT209", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT210", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT211", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT212", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT213", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT214", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT215", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT216", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT217", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT218", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT219", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT220", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT221", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT222", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT223", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT224", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT225", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT226", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT227", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT228", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT229", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT230", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT231", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT232", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT233", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT234", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT235", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT236", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT237", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT238", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT239", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT240", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT241", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT242", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT243", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT244", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT245", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT246", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT247", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT248", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT249", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT250", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT251", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT252", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT253", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT254", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT255", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT256", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT257", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT258", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT259", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT260", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT261", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT262", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT263", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT264", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT265", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT266", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT267", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT268", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT269", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT270", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT271", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT272", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT273", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT274", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT275", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT276", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT277", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT278", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT279", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT280", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT281", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT282", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT283", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT284", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT285", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT286", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT287", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT288", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT289", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT290", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT291", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT292", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT293", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT294", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT295", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT296", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT297", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true), + NDBT_Attribute("BIT298", NdbDictionary::Column::Bit, 1, false, true, 0, MM, true), + NDBT_Attribute("BIT299", NdbDictionary::Column::Bit, 1, false, false, 0, MM, true) }; static No bundle (reason: useless for push emails).