diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index 11dd67d5de0..6b3708f475f 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -172,6 +172,7 @@ max_configs="$SSL_LIBRARY --with-plugins=max --with-embedded-server" alpha_cflags="$check_cpu_cflags -Wa,-m$cpu_flag" amd64_cflags="$check_cpu_cflags" amd64_cxxflags="" # If dropping '--with-big-tables', add here "-DBIG_TABLES" +pentium_cflags="$check_cpu_cflags" pentium64_cflags="$check_cpu_cflags -m64" ppc_cflags="$check_cpu_cflags" sparc_cflags="" diff --git a/Docs/Makefile.am b/Docs/Makefile.am index 05757618a8b..e57a1abcb0c 100644 --- a/Docs/Makefile.am +++ b/Docs/Makefile.am @@ -17,7 +17,7 @@ noinst_SCRIPTS = generate-text-files.pl EXTRA_DIST = $(noinst_SCRIPTS) manual.chm mysql.info INSTALL-BINARY -TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \ +TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE \ INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt all-local: $(TXT_FILES) @@ -55,9 +55,6 @@ GT = $(srcdir)/generate-text-files.pl INSTALL-BINARY: $(srcdir)/mysql.info $(GT) perl -w $(GT) $(srcdir)/mysql.info "installing-binary" "installing-source" > $@ -../EXCEPTIONS-CLIENT: $(srcdir)/mysql.info $(GT) - perl -w $(GT) $(srcdir)/mysql.info "mysql-floss-license-exception" "function-index" > $@ - ../support-files/MacOSX/ReadMe.txt: $(srcdir)/mysql.info $(GT) perl -w $(GT) $(srcdir)/mysql.info "mac-os-x-installation" "netware-installation" > $@ diff --git a/EXCEPTIONS-CLIENT b/EXCEPTIONS-CLIENT new file mode 100644 index 00000000000..19b86cab32b --- /dev/null +++ b/EXCEPTIONS-CLIENT @@ -0,0 +1,117 @@ +MySQL FLOSS License Exception + +The MySQL AB Exception for Free/Libre and Open Source +Software-only Applications Using MySQL Client Libraries (the +"FLOSS Exception"). + +Version 0.5, 30 August 2006 + +Exception Intent + +We want specified Free/Libre and Open Source Software (``FLOSS'') +applications to be able to use specified GPL-licensed MySQL client +libraries (the ``Program'') despite the fact that not all FLOSS +licenses are compatible with version 2 of the GNU General Public +License (the ``GPL''). + +Legal Terms and Conditions + +As a special exception to the terms and conditions of version 2.0 +of the GPL: + + 1. You are free to distribute a Derivative Work that is formed + entirely from the Program and one or more works (each, a + "FLOSS Work") licensed under one or more of the licenses + listed below in section 1, as long as: + a. You obey the GPL in all respects for the Program and the + Derivative Work, except for identifiable sections of the + Derivative Work which are not derived from the Program, + and which can reasonably be considered independent and + separate works in themselves, + b. all identifiable sections of the Derivative Work which + are not derived from the Program, and which can + reasonably be considered independent and separate works + in themselves, + i. are distributed subject to one of the FLOSS licenses + listed below, and + ii. the object code or executable form of those sections + are accompanied by the complete corresponding + machine-readable source code for those sections on + the same medium and under the same FLOSS license as + the corresponding object code or executable forms of + those sections, and + c. any works which are aggregated with the Program or with a + Derivative Work on a volume of a storage or distribution + medium in accordance with the GPL, can reasonably be + considered independent and separate works in themselves + which are not derivatives of either the Program, a + Derivative Work or a FLOSS Work. + If the above conditions are not met, then the Program may only + be copied, modified, distributed or used under the terms and + conditions of the GPL or another valid licensing option from + MySQL AB. + + 2. FLOSS License List + +License name Version(s)/Copyright Date +Academic Free License 2.0 +Apache Software License 1.0/1.1/2.0 +Apple Public Source License 2.0 +Artistic license From Perl 5.8.0 +BSD license "July 22 1999" +Common Public License 1.0 +GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1 +Jabber Open Source License 1.0 +MIT license --- +Mozilla Public License (MPL) 1.0/1.1 +Open Software License 2.0 +OpenSSL license (with original SSLeay license) "2003" ("1998") +PHP License 3.0 +Python license (CNRI Python License) --- +Python Software Foundation License 2.1.1 +Sleepycat License "1999" +University of Illinois/NCSA Open Source License --- +W3C License "2001" +X11 License "2001" +Zlib/libpng License --- +Zope Public License 2.0 + + Due to the many variants of some of the above licenses, we + require that any version follow the 2003 version of the Free + Software Foundation's Free Software Definition + (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of + the Open Source Definition by the Open Source Initiative + (http://www.opensource.org/docs/definition.php). + + 3. Definitions + + a. Terms used, but not defined, herein shall have the + meaning provided in the GPL. + b. Derivative Work means a derivative work under copyright + law. + + 4. Applicability: This FLOSS Exception applies to all Programs + that contain a notice placed by MySQL AB saying that the + Program may be distributed under the terms of this FLOSS + Exception. If you create or distribute a work which is a + Derivative Work of both the Program and any other work + licensed under the GPL, then this FLOSS Exception is not + available for that work; thus, you must remove the FLOSS + Exception notice from that work and comply with the GPL in all + respects, including by retaining all GPL notices. You may + choose to redistribute a copy of the Program exclusively under + the terms of the GPL by removing the FLOSS Exception notice + from that copy of the Program, provided that the copy has + never been modified by you or any third party. + +Appendix A. Qualified Libraries and Packages + +The following is a non-exhaustive list of libraries and packages +which are covered by the FLOSS License Exception. Please note that +this appendix is provided merely as an additional service to +specific FLOSS projects wishing to simplify licensing information +for their users. Compliance with one of the licenses noted under +the "FLOSS license list" section remains a prerequisite. + +Package Name Qualifying License and Version +Apache Portable Runtime (APR) Apache Software License 2.0 diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c index 830332fe0c1..5db5bc561d1 100644 --- a/storage/myisam/mi_open.c +++ b/storage/myisam/mi_open.c @@ -506,6 +506,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) share->data_file_type = DYNAMIC_RECORD; my_afree((gptr) disk_cache); mi_setup_functions(share); +#ifdef HAVE_MMAP if (open_flags & HA_OPEN_MMAP) { info.s= share; @@ -522,6 +523,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) share->file_write= mi_mmap_pwrite; } } +#endif /* HAVE_MMAP */ share->is_log_table= FALSE; #ifdef THREAD thr_lock_init(&share->lock); diff --git a/storage/ndb/src/common/debugger/EventLogger.cpp b/storage/ndb/src/common/debugger/EventLogger.cpp index 4e9ba906645..17694fa6718 100644 --- a/storage/ndb/src/common/debugger/EventLogger.cpp +++ b/storage/ndb/src/common/debugger/EventLogger.cpp @@ -963,7 +963,7 @@ const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = { ROW(NDBStopCompleted, LogLevel::llStartUp, 1, Logger::LL_INFO ), ROW(NDBStopForced, LogLevel::llStartUp, 1, Logger::LL_ALERT ), ROW(NDBStopAborted, LogLevel::llStartUp, 1, Logger::LL_INFO ), - ROW(StartREDOLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), + ROW(StartREDOLog, LogLevel::llStartUp, 4, Logger::LL_INFO ), ROW(StartLog, LogLevel::llStartUp, 10, Logger::LL_INFO ), ROW(UNDORecordsExecuted, LogLevel::llStartUp, 15, Logger::LL_INFO ), ROW(StartReport, LogLevel::llStartUp, 4, Logger::LL_INFO ), diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp index db28daea336..b8882d72913 100644 --- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp +++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp @@ -441,6 +441,7 @@ void Dblqh::execCONTINUEB(Signal* signal) else { jam(); + cstartRecReq = 2; ndbrequire(c_redo_complete_fragments.isEmpty()); StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend(); conf->startingNodeId = getOwnNodeId(); @@ -11936,7 +11937,7 @@ void Dblqh::execGCP_SAVEREQ(Signal* signal) return; } - if (getNodeState().getNodeRestartInProgress() && cstartRecReq == ZFALSE) + if (getNodeState().getNodeRestartInProgress() && cstartRecReq < 2) { GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0]; saveRef->dihPtr = dihPtr; @@ -12248,6 +12249,10 @@ void Dblqh::execFSCLOSECONF(Signal* signal) // Set the prev file to check if we shall close it. logFilePtr.i = logFilePtr.p->prevLogFile; ptrCheckGuard(logFilePtr, clogFileFileSize, logFileRecord); + + logPartPtr.i = logFilePtr.p->logPartRec; + ptrCheckGuard(logPartPtr, clogPartFileSize, logPartRecord); + exitFromInvalidate(signal); return; case LogFileRecord::CLOSING_INIT: @@ -14017,7 +14022,7 @@ void Dblqh::execRESTORE_LCP_CONF(Signal* signal) return; } - if (c_lcp_restoring_fragments.isEmpty() && cstartRecReq == ZTRUE) + if (c_lcp_restoring_fragments.isEmpty() && cstartRecReq == 1) { jam(); /* ---------------------------------------------------------------- @@ -14058,7 +14063,7 @@ void Dblqh::execSTART_RECREQ(Signal* signal) ndbrequire(req->receivingNodeId == cownNodeid); cnewestCompletedGci = cnewestGci; - cstartRecReq = ZTRUE; + cstartRecReq = 1; for (logPartPtr.i = 0; logPartPtr.i < 4; logPartPtr.i++) { ptrAss(logPartPtr, logPartRecord); logPartPtr.p->logPartNewestCompletedGCI = cnewestCompletedGci; @@ -14072,6 +14077,7 @@ void Dblqh::execSTART_RECREQ(Signal* signal) *------------------------------------------------------------------------ */ if(cstartType == NodeState::ST_INITIAL_NODE_RESTART){ jam(); + cstartRecReq = 2; StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend(); conf->startingNodeId = getOwnNodeId(); sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal, @@ -15893,6 +15899,7 @@ void Dblqh::srFourthComp(Signal* signal) return; } } + cstartRecReq = 2; StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend(); conf->startingNodeId = getOwnNodeId(); sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal, @@ -16761,7 +16768,7 @@ void Dblqh::initialiseRecordsLab(Signal* signal, Uint32 data, cnoActiveCopy = 0; ccurrentGcprec = RNIL; caddNodeState = ZFALSE; - cstartRecReq = ZFALSE; + cstartRecReq = 0; cnewestGci = 0; cnewestCompletedGci = 0; crestartOldestGci = 0; diff --git a/storage/ndb/src/kernel/blocks/tsman.cpp b/storage/ndb/src/kernel/blocks/tsman.cpp index daf7750a7e6..99fbc683cee 100644 --- a/storage/ndb/src/kernel/blocks/tsman.cpp +++ b/storage/ndb/src/kernel/blocks/tsman.cpp @@ -1840,6 +1840,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) ndbrequire(m_file_hash.find(file_ptr, file_key)); struct req val = lookup_extent(req.key.m_page_no, file_ptr.p); + Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val); Page_cache_client::Request preq; preq.m_page.m_page_no = val.m_extent_page_no; @@ -1865,7 +1866,6 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) ndbrequire(header->m_table == req.request.table_id); - Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val); Uint32 word = header->get_free_word_offset(page_no_in_extent); Uint32 shift = SZ * (page_no_in_extent & 7); @@ -1925,8 +1925,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) found: header->update_free_bits(page_no, src_bits | UNCOMMITTED_MASK); rep->bits= (src_bits & UNCOMMITTED_MASK) >> UNCOMMITTED_SHIFT; - rep->key.m_page_no= - val.m_extent_pages + val.m_extent_no * val.m_extent_size + page_no; + rep->key.m_page_no = req.key.m_page_no + page_no - page_no_in_extent; rep->reply.errorCode= 0; return; } diff --git a/storage/ndb/src/kernel/vm/RWPool.cpp b/storage/ndb/src/kernel/vm/RWPool.cpp index 040e6ddac45..192a8f87402 100644 --- a/storage/ndb/src/kernel/vm/RWPool.cpp +++ b/storage/ndb/src/kernel/vm/RWPool.cpp @@ -22,7 +22,7 @@ RWPool::RWPool() { bzero(this, sizeof(* this)); - m_current_pos = GLOBAL_PAGE_SIZE_WORDS; + m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = REC_NIL; m_first_free_page = RNIL; } @@ -57,7 +57,7 @@ seize_free: m_current_first_free = pageP->m_data[pos+m_record_info.m_offset_next_pool]; return true; } - else if (pos + size < GLOBAL_PAGE_SIZE_WORDS) + else if (pos + size < RWPage::RWPAGE_WORDS) { seize_first: ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos; @@ -81,11 +81,14 @@ seize_first: { pageP = m_current_page = m_memroot + m_first_free_page; m_current_page_no = m_first_free_page; - m_current_pos = GLOBAL_PAGE_SIZE_WORDS; + m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = m_current_page->m_first_free; m_first_free_page = m_current_page->m_next_page; m_current_ref_count = m_current_page->m_ref_count; - (m_memroot + m_first_free_page)->m_prev_page = RNIL; + if (m_first_free_page != RNIL) + { + (m_memroot + m_first_free_page)->m_prev_page = RNIL; + } goto seize_free; } @@ -105,7 +108,7 @@ seize_first: m_current_page = 0; m_current_page_no = RNIL; - m_current_pos = GLOBAL_PAGE_SIZE_WORDS; + m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = REC_NIL; return false; @@ -154,6 +157,7 @@ RWPool::release(Ptr ptr) } page->m_next_page = ffp; page->m_prev_page = RNIL; + m_first_free_page = ptr_page; return; } else if(ref_cnt == 1) diff --git a/storage/ndb/src/kernel/vm/RWPool.hpp b/storage/ndb/src/kernel/vm/RWPool.hpp index 1da27c56799..13001b4d9dc 100644 --- a/storage/ndb/src/kernel/vm/RWPool.hpp +++ b/storage/ndb/src/kernel/vm/RWPool.hpp @@ -20,12 +20,14 @@ struct RWPage { + STATIC_CONST( RWPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 4 ); + Uint32 m_type_id; Uint16 m_first_free; Uint16 m_ref_count; Uint32 m_next_page; Uint32 m_prev_page; - Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 4]; + Uint32 m_data[RWPAGE_WORDS]; }; /** diff --git a/storage/ndb/src/kernel/vm/WOPool.cpp b/storage/ndb/src/kernel/vm/WOPool.cpp index 634d8b03ea7..e318001da30 100644 --- a/storage/ndb/src/kernel/vm/WOPool.cpp +++ b/storage/ndb/src/kernel/vm/WOPool.cpp @@ -20,7 +20,7 @@ WOPool::WOPool() { bzero(this, sizeof(* this)); - m_current_pos = GLOBAL_PAGE_SIZE_WORDS; + m_current_pos = WOPage::WOPAGE_WORDS; } void diff --git a/storage/ndb/src/kernel/vm/WOPool.hpp b/storage/ndb/src/kernel/vm/WOPool.hpp index 6e852b580df..f38716b98f3 100644 --- a/storage/ndb/src/kernel/vm/WOPool.hpp +++ b/storage/ndb/src/kernel/vm/WOPool.hpp @@ -20,9 +20,11 @@ struct WOPage { + STATIC_CONST( WOPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 2 ); + Uint32 m_type_id; Uint32 m_ref_count; - Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 2]; + Uint32 m_data[WOPAGE_WORDS]; }; /** @@ -61,7 +63,7 @@ WOPool::seize(Ptr& ptr) Uint32 pos = m_current_pos; Uint32 size = m_record_info.m_size; WOPage *pageP = m_current_page; - if (likely(pos + size < GLOBAL_PAGE_SIZE_WORDS)) + if (likely(pos + size < WOPage::WOPAGE_WORDS)) { ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos; ptr.p = (pageP->m_data + pos); diff --git a/storage/ndb/src/ndbapi/NdbRecAttr.cpp b/storage/ndb/src/ndbapi/NdbRecAttr.cpp index b633b14465c..188e718d968 100644 --- a/storage/ndb/src/ndbapi/NdbRecAttr.cpp +++ b/storage/ndb/src/ndbapi/NdbRecAttr.cpp @@ -343,24 +343,24 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) } break; case NdbDictionary::Column::Blob: - { - const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef(); - out << h->length << ":"; - const unsigned char* p = (const unsigned char*)(h + 1); - unsigned n = r.get_size_in_bytes() - sizeof(*h); - for (unsigned k = 0; k < n && k < h->length; k++) - out.print("%02X", (int)p[k]); - j = length; - } - break; case NdbDictionary::Column::Text: { - const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef(); - out << h->length << ":"; - const unsigned char* p = (const unsigned char*)(h + 1); - unsigned n = r.get_size_in_bytes() - sizeof(*h); - for (unsigned k = 0; k < n && k < h->length; k++) - out.print("%c", (int)p[k]); + // user defined aRef() may not be aligned to Uint64 + NdbBlob::Head head; + memcpy(&head, r.aRef(), sizeof(head)); + out << head.length << ":"; + const unsigned char* p = (const unsigned char*)r.aRef() + sizeof(head); + if (r.get_size_in_bytes() < sizeof(head)) + out << "***error***"; // really cannot happen + else { + unsigned n = r.get_size_in_bytes() - sizeof(head); + for (unsigned k = 0; k < n && k < head.length; k++) { + if (r.getType() == NdbDictionary::Column::Blob) + out.print("%02X", (int)p[k]); + else + out.print("%c", (int)p[k]); + } + } j = length; } break; diff --git a/storage/ndb/test/ndbapi/testNodeRestart.cpp b/storage/ndb/test/ndbapi/testNodeRestart.cpp index 34cb356236c..b4ae95567eb 100644 --- a/storage/ndb/test/ndbapi/testNodeRestart.cpp +++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp @@ -1353,6 +1353,68 @@ runBug26481(NDBT_Context* ctx, NDBT_Step* step) return NDBT_OK; } +int +runBug26450(NDBT_Context* ctx, NDBT_Step* step) +{ + Uint32 i; + int result = NDBT_OK; + int loops = ctx->getNumLoops(); + int records = ctx->getNumRecords(); + NdbRestarter res; + Ndb* pNdb = GETNDB(step); + + int node = res.getRandomNotMasterNodeId(rand()); + Vector nodes; + for (unsigned i = 0; i 0)) + return NDBT_FAILED; + + if (res.waitClusterNoStart()) + return NDBT_FAILED; + + if (res.startNodes(nodes.getBase(), nodes.size())) + return NDBT_FAILED; + + if (res.waitNodesStarted(nodes.getBase(), nodes.size())) + return NDBT_FAILED; + } + + if (res.startNodes(&node, 1)) + return NDBT_FAILED; + + if (res.waitNodesStarted(&node, 1)) + return NDBT_FAILED; + + HugoTransactions trans (* ctx->getTab()); + if (trans.selectCount(pNdb) != 0) + return NDBT_FAILED; + + return NDBT_OK; +} + NDBT_TESTSUITE(testNodeRestart); TESTCASE("NoLoad", "Test that one node at a time can be stopped and then restarted "\ @@ -1697,6 +1759,10 @@ TESTCASE("Bug26457", ""){ TESTCASE("Bug26481", ""){ INITIALIZER(runBug26481); } +TESTCASE("Bug26450", ""){ + INITIALIZER(runLoadTable); + INITIALIZER(runBug26450); +} NDBT_TESTSUITE_END(testNodeRestart); int main(int argc, const char** argv){ diff --git a/storage/ndb/tools/restore/Restore.cpp b/storage/ndb/tools/restore/Restore.cpp index e95531fec06..3d466384782 100644 --- a/storage/ndb/tools/restore/Restore.cpp +++ b/storage/ndb/tools/restore/Restore.cpp @@ -59,7 +59,12 @@ BackupFile::Twiddle(const AttributeDesc* attr_desc, AttributeData* attr_data, Ui return true; case 64: for(i = 0; iu_int64_value[i] = Twiddle64(attr_data->u_int64_value[i]); + // allow unaligned + char* p = (char*)&attr_data->u_int64_value[i]; + Uint64 x; + memcpy(&x, p, sizeof(Uint64)); + x = Twiddle64(x); + memcpy(p, &x, sizeof(Uint64)); } return true; default: diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index a6a0247d11a..0671bd8a58c 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -562,6 +562,7 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* %doc %attr(644, root, man) %{_mandir}/man8/mysqlmanager.8* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* %doc %attr(644, root, man) %{_mandir}/man1/perror.1* @@ -648,28 +649,42 @@ fi %files ndb-tools %defattr(-,root,root,0755) -%attr(755, root, root) %{_bindir}/ndb_mgm -%attr(755, root, root) %{_bindir}/ndb_restore -%attr(755, root, root) %{_bindir}/ndb_waiter -%attr(755, root, root) %{_bindir}/ndb_select_all -%attr(755, root, root) %{_bindir}/ndb_select_count -%attr(755, root, root) %{_bindir}/ndb_desc -%attr(755, root, root) %{_bindir}/ndb_show_tables -%attr(755, root, root) %{_bindir}/ndb_test_platform %attr(755, root, root) %{_bindir}/ndb_config +%attr(755, root, root) %{_bindir}/ndb_desc %attr(755, root, root) %{_bindir}/ndb_error_reporter -%attr(755, root, root) %{_bindir}/ndb_size.pl +%attr(755, root, root) %{_bindir}/ndb_mgm %attr(755, root, root) %{_bindir}/ndb_print_backup_file %attr(755, root, root) %{_bindir}/ndb_print_schema_file %attr(755, root, root) %{_bindir}/ndb_print_sys_file +%attr(755, root, root) %{_bindir}/ndb_restore +%attr(755, root, root) %{_bindir}/ndb_select_all +%attr(755, root, root) %{_bindir}/ndb_select_count +%attr(755, root, root) %{_bindir}/ndb_show_tables +%attr(755, root, root) %{_bindir}/ndb_size.pl +%attr(755, root, root) %{_bindir}/ndb_test_platform +%attr(755, root, root) %{_bindir}/ndb_waiter %attr(-, root, root) %{_datadir}/mysql/ndb_size.tmpl +%doc %attr(644, root, man) %{_mandir}/man1/ndb_config.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_desc.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_error_reporter.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_print_backup_file.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_print_schema_file.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_print_sys_file.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_select_all.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_select_count.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_show_tables.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_size.pl.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_waiter.1* %files ndb-extra %defattr(-,root,root,0755) +%attr(755, root, root) %{_sbindir}/ndb_cpcd +%attr(755, root, root) %{_bindir}/ndb_delete_all %attr(755, root, root) %{_bindir}/ndb_drop_index %attr(755, root, root) %{_bindir}/ndb_drop_table -%attr(755, root, root) %{_bindir}/ndb_delete_all -%attr(755, root, root) %{_sbindir}/ndb_cpcd +%doc %attr(644, root, man) %{_mandir}/man1/ndb_delete_all.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_drop_index.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_drop_table.1* %files devel %defattr(-, root, root, 0755) @@ -710,6 +725,11 @@ fi %attr(755, root, root) %{_bindir}/mysql_client_test %attr(755, root, root) %{_bindir}/mysql_client_test_embedded %attr(755, root, root) %{_bindir}/mysqltest_embedded +%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* %files embedded %defattr(-, root, root, 0755) @@ -719,6 +739,10 @@ fi # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Fri Mar 02 2007 Joerg Bruehe + +- Add several man pages for NDB which are now created. + * Fri Jan 05 2007 Kent Boortz - Put back "libmygcc.a", found no real reason it was removed. diff --git a/unittest/mysys/base64-t.c b/unittest/mysys/base64-t.c index adef7d97aae..7e4afbb3128 100644 --- a/unittest/mysys/base64-t.c +++ b/unittest/mysys/base64-t.c @@ -18,13 +18,18 @@ #include #include +#define BASE64_LOOP_COUNT 500 +#define BASE64_ROWS 4 /* Number of ok(..) */ + int main(void) { int i, cmp; size_t j, k, l, dst_len, needed_length; - for (i= 0; i < 500; i++) + plan(BASE64_LOOP_COUNT * BASE64_ROWS); + + for (i= 0; i < BASE64_LOOP_COUNT; i++) { /* Create source data */ const size_t src_len= rand() % 1000 + 1;