List:Commits« Previous MessageNext Message »
From:Martin Zaun Date:February 18 2011 6:11pm
Subject:bzr push into mysql-5.1-telco-6.3 branch (martin.zaun:3387 to 3388)
View as plain text  
 3388 Martin Zaun	2011-02-18 [merge]
      merge to temp feature branch for CluB testing

    added:
      storage/ndb/include/util/NdbTypesUtil.hpp
    modified:
      storage/ndb/include/util/NdbSqlUtil.hpp
      storage/ndb/tools/restore/consumer_restore.cpp
      storage/ndb/tools/restore/consumer_restore.hpp
 3387 Magnus Blåudd	2011-02-03 [merge]
      Merge

    modified:
      storage/ndb/Makefile.am
      storage/ndb/bin/check-regression.sh
      storage/ndb/bin/makeTestPrograms_html.sh
      storage/ndb/config/common.mk.am
      storage/ndb/config/type_kernel.mk.am
      storage/ndb/config/type_mgmapiclient.mk.am
      storage/ndb/config/type_ndbapi.mk.am
      storage/ndb/config/type_ndbapiclient.mk.am
      storage/ndb/config/type_ndbapitest.mk.am
      storage/ndb/config/type_ndbapitools.mk.am
      storage/ndb/config/type_util.mk.am
      storage/ndb/config/win-lib.am
      storage/ndb/config/win-prg.am
      storage/ndb/docs/Makefile.am
      storage/ndb/docs/doxygen/Doxyfile.test
      storage/ndb/docs/doxygen/predoxy.pl
      storage/ndb/include/Makefile.am
      storage/ndb/include/debugger/DebuggerNames.hpp
      storage/ndb/include/debugger/EventLogger.hpp
      storage/ndb/include/debugger/GrepError.hpp
      storage/ndb/include/debugger/SignalLoggerManager.hpp
      storage/ndb/include/editline/editline.h
      storage/ndb/include/kernel/AttributeDescriptor.hpp
      storage/ndb/include/kernel/AttributeHeader.hpp
      storage/ndb/include/kernel/AttributeList.hpp
      storage/ndb/include/kernel/BlockNumbers.h
      storage/ndb/include/kernel/GlobalSignalNumbers.h
      storage/ndb/include/kernel/GrepEvent.hpp
      storage/ndb/include/kernel/Interpreter.hpp
      storage/ndb/include/kernel/LogLevel.hpp
      storage/ndb/include/kernel/NodeBitmask.hpp
      storage/ndb/include/kernel/NodeInfo.hpp
      storage/ndb/include/kernel/NodeState.hpp
      storage/ndb/include/kernel/RefConvert.hpp
      storage/ndb/include/kernel/kernel_config_parameters.h
      storage/ndb/include/kernel/kernel_types.h
      storage/ndb/include/kernel/ndb_limits.h
      storage/ndb/include/kernel/signaldata/AbortAll.hpp
      storage/ndb/include/kernel/signaldata/AccFrag.hpp
      storage/ndb/include/kernel/signaldata/AccLock.hpp
      storage/ndb/include/kernel/signaldata/AccScan.hpp
      storage/ndb/include/kernel/signaldata/AccSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/AllocMem.hpp
      storage/ndb/include/kernel/signaldata/AllocNodeId.hpp
      storage/ndb/include/kernel/signaldata/AlterIndx.hpp
      storage/ndb/include/kernel/signaldata/AlterTab.hpp
      storage/ndb/include/kernel/signaldata/AlterTable.hpp
      storage/ndb/include/kernel/signaldata/AlterTrig.hpp
      storage/ndb/include/kernel/signaldata/ApiBroadcast.hpp
      storage/ndb/include/kernel/signaldata/ApiRegSignalData.hpp
      storage/ndb/include/kernel/signaldata/ApiVersion.hpp
      storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp
      storage/ndb/include/kernel/signaldata/AttrInfo.hpp
      storage/ndb/include/kernel/signaldata/BackupContinueB.hpp
      storage/ndb/include/kernel/signaldata/BackupImpl.hpp
      storage/ndb/include/kernel/signaldata/BackupSignalData.hpp
      storage/ndb/include/kernel/signaldata/BlockCommitOrd.hpp
      storage/ndb/include/kernel/signaldata/BuildIndx.hpp
      storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp
      storage/ndb/include/kernel/signaldata/CloseComReqConf.hpp
      storage/ndb/include/kernel/signaldata/CmInit.hpp
      storage/ndb/include/kernel/signaldata/CmRegSignalData.hpp
      storage/ndb/include/kernel/signaldata/CmvmiCfgConf.hpp
      storage/ndb/include/kernel/signaldata/CntrMasterConf.hpp
      storage/ndb/include/kernel/signaldata/CntrMasterReq.hpp
      storage/ndb/include/kernel/signaldata/CntrStart.hpp
      storage/ndb/include/kernel/signaldata/ConfigParamId.hpp
      storage/ndb/include/kernel/signaldata/ContinueFragmented.hpp
      storage/ndb/include/kernel/signaldata/CopyActive.hpp
      storage/ndb/include/kernel/signaldata/CopyFrag.hpp
      storage/ndb/include/kernel/signaldata/CopyGCIReq.hpp
      storage/ndb/include/kernel/signaldata/CreateEvnt.hpp
      storage/ndb/include/kernel/signaldata/CreateFilegroup.hpp
      storage/ndb/include/kernel/signaldata/CreateFilegroupImpl.hpp
      storage/ndb/include/kernel/signaldata/CreateFragmentation.hpp
      storage/ndb/include/kernel/signaldata/CreateIndx.hpp
      storage/ndb/include/kernel/signaldata/CreateObj.hpp
      storage/ndb/include/kernel/signaldata/CreateTab.hpp
      storage/ndb/include/kernel/signaldata/CreateTable.hpp
      storage/ndb/include/kernel/signaldata/CreateTrig.hpp
      storage/ndb/include/kernel/signaldata/DiAddTab.hpp
      storage/ndb/include/kernel/signaldata/DiGetNodes.hpp
      storage/ndb/include/kernel/signaldata/DictLock.hpp
      storage/ndb/include/kernel/signaldata/DictObjOp.hpp
      storage/ndb/include/kernel/signaldata/DictSchemaInfo.hpp
      storage/ndb/include/kernel/signaldata/DictSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/DictStart.hpp
      storage/ndb/include/kernel/signaldata/DictTabInfo.hpp
      storage/ndb/include/kernel/signaldata/DihAddFrag.hpp
      storage/ndb/include/kernel/signaldata/DihContinueB.hpp
      storage/ndb/include/kernel/signaldata/DihFragCount.hpp
      storage/ndb/include/kernel/signaldata/DihSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/DihStartTab.hpp
      storage/ndb/include/kernel/signaldata/DihSwitchReplica.hpp
      storage/ndb/include/kernel/signaldata/DisconnectRep.hpp
      storage/ndb/include/kernel/signaldata/DropFilegroup.hpp
      storage/ndb/include/kernel/signaldata/DropFilegroupImpl.hpp
      storage/ndb/include/kernel/signaldata/DropIndx.hpp
      storage/ndb/include/kernel/signaldata/DropObj.hpp
      storage/ndb/include/kernel/signaldata/DropTab.hpp
      storage/ndb/include/kernel/signaldata/DropTabFile.hpp
      storage/ndb/include/kernel/signaldata/DropTable.hpp
      storage/ndb/include/kernel/signaldata/DropTrig.hpp
      storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp
      storage/ndb/include/kernel/signaldata/EmptyLcp.hpp
      storage/ndb/include/kernel/signaldata/EventReport.hpp
      storage/ndb/include/kernel/signaldata/EventSubscribeReq.hpp
      storage/ndb/include/kernel/signaldata/ExecFragReq.hpp
      storage/ndb/include/kernel/signaldata/Extent.hpp
      storage/ndb/include/kernel/signaldata/FailRep.hpp
      storage/ndb/include/kernel/signaldata/FireTrigOrd.hpp
      storage/ndb/include/kernel/signaldata/FsAppendReq.hpp
      storage/ndb/include/kernel/signaldata/FsCloseReq.hpp
      storage/ndb/include/kernel/signaldata/FsConf.hpp
      storage/ndb/include/kernel/signaldata/FsOpenReq.hpp
      storage/ndb/include/kernel/signaldata/FsReadWriteReq.hpp
      storage/ndb/include/kernel/signaldata/FsRef.hpp
      storage/ndb/include/kernel/signaldata/FsRemoveReq.hpp
      storage/ndb/include/kernel/signaldata/GCP.hpp
      storage/ndb/include/kernel/signaldata/GetTabInfo.hpp
      storage/ndb/include/kernel/signaldata/GetTableId.hpp
      storage/ndb/include/kernel/signaldata/GrepImpl.hpp
      storage/ndb/include/kernel/signaldata/HotSpareRep.hpp
      storage/ndb/include/kernel/signaldata/IndxAttrInfo.hpp
      storage/ndb/include/kernel/signaldata/IndxKeyInfo.hpp
      storage/ndb/include/kernel/signaldata/InvalidateNodeLCPConf.hpp
      storage/ndb/include/kernel/signaldata/InvalidateNodeLCPReq.hpp
      storage/ndb/include/kernel/signaldata/KeyInfo.hpp
      storage/ndb/include/kernel/signaldata/LCP.hpp
      storage/ndb/include/kernel/signaldata/LgmanContinueB.hpp
      storage/ndb/include/kernel/signaldata/ListTables.hpp
      storage/ndb/include/kernel/signaldata/LocalRouteOrd.hpp
      storage/ndb/include/kernel/signaldata/LqhFrag.hpp
      storage/ndb/include/kernel/signaldata/LqhKey.hpp
      storage/ndb/include/kernel/signaldata/LqhSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/LqhTransConf.hpp
      storage/ndb/include/kernel/signaldata/ManagementServer.hpp
      storage/ndb/include/kernel/signaldata/MasterGCP.hpp
      storage/ndb/include/kernel/signaldata/MasterLCP.hpp
      storage/ndb/include/kernel/signaldata/NFCompleteRep.hpp
      storage/ndb/include/kernel/signaldata/NdbSttor.hpp
      storage/ndb/include/kernel/signaldata/NdbfsContinueB.hpp
      storage/ndb/include/kernel/signaldata/NextScan.hpp
      storage/ndb/include/kernel/signaldata/NodeFailRep.hpp
      storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp
      storage/ndb/include/kernel/signaldata/PackedSignal.hpp
      storage/ndb/include/kernel/signaldata/PgmanContinueB.hpp
      storage/ndb/include/kernel/signaldata/PrepDropTab.hpp
      storage/ndb/include/kernel/signaldata/PrepFailReqRef.hpp
      storage/ndb/include/kernel/signaldata/ReadConfig.hpp
      storage/ndb/include/kernel/signaldata/ReadNodesConf.hpp
      storage/ndb/include/kernel/signaldata/RelTabMem.hpp
      storage/ndb/include/kernel/signaldata/RepImpl.hpp
      storage/ndb/include/kernel/signaldata/RestoreContinueB.hpp
      storage/ndb/include/kernel/signaldata/RestoreImpl.hpp
      storage/ndb/include/kernel/signaldata/ResumeReq.hpp
      storage/ndb/include/kernel/signaldata/RouteOrd.hpp
      storage/ndb/include/kernel/signaldata/ScanFrag.hpp
      storage/ndb/include/kernel/signaldata/ScanTab.hpp
      storage/ndb/include/kernel/signaldata/SetLogLevelOrd.hpp
      storage/ndb/include/kernel/signaldata/SetVarReq.hpp
      storage/ndb/include/kernel/signaldata/SignalData.hpp
      storage/ndb/include/kernel/signaldata/SignalDataPrint.hpp
      storage/ndb/include/kernel/signaldata/SignalDroppedRep.hpp
      storage/ndb/include/kernel/signaldata/SrFragidConf.hpp
      storage/ndb/include/kernel/signaldata/StartFragReq.hpp
      storage/ndb/include/kernel/signaldata/StartInfo.hpp
      storage/ndb/include/kernel/signaldata/StartMe.hpp
      storage/ndb/include/kernel/signaldata/StartOrd.hpp
      storage/ndb/include/kernel/signaldata/StartPerm.hpp
      storage/ndb/include/kernel/signaldata/StartRec.hpp
      storage/ndb/include/kernel/signaldata/StopMe.hpp
      storage/ndb/include/kernel/signaldata/StopPerm.hpp
      storage/ndb/include/kernel/signaldata/StopReq.hpp
      storage/ndb/include/kernel/signaldata/SumaImpl.hpp
      storage/ndb/include/kernel/signaldata/SystemError.hpp
      storage/ndb/include/kernel/signaldata/TakeOver.hpp
      storage/ndb/include/kernel/signaldata/TamperOrd.hpp
      storage/ndb/include/kernel/signaldata/TcCommit.hpp
      storage/ndb/include/kernel/signaldata/TcContinueB.hpp
      storage/ndb/include/kernel/signaldata/TcHbRep.hpp
      storage/ndb/include/kernel/signaldata/TcIndx.hpp
      storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
      storage/ndb/include/kernel/signaldata/TcKeyFailConf.hpp
      storage/ndb/include/kernel/signaldata/TcKeyRef.hpp
      storage/ndb/include/kernel/signaldata/TcKeyReq.hpp
      storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp
      storage/ndb/include/kernel/signaldata/TcSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/TestOrd.hpp
      storage/ndb/include/kernel/signaldata/TransIdAI.hpp
      storage/ndb/include/kernel/signaldata/TrigAttrInfo.hpp
      storage/ndb/include/kernel/signaldata/TsmanContinueB.hpp
      storage/ndb/include/kernel/signaldata/TupCommit.hpp
      storage/ndb/include/kernel/signaldata/TupFrag.hpp
      storage/ndb/include/kernel/signaldata/TupKey.hpp
      storage/ndb/include/kernel/signaldata/TupSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/TuxBound.hpp
      storage/ndb/include/kernel/signaldata/TuxContinueB.hpp
      storage/ndb/include/kernel/signaldata/TuxMaint.hpp
      storage/ndb/include/kernel/signaldata/TuxSizeAltReq.hpp
      storage/ndb/include/kernel/signaldata/Upgrade.hpp
      storage/ndb/include/kernel/signaldata/UpgradeStartup.hpp
      storage/ndb/include/kernel/signaldata/UtilDelete.hpp
      storage/ndb/include/kernel/signaldata/UtilExecute.hpp
      storage/ndb/include/kernel/signaldata/UtilLock.hpp
      storage/ndb/include/kernel/signaldata/UtilPrepare.hpp
      storage/ndb/include/kernel/signaldata/UtilRelease.hpp
      storage/ndb/include/kernel/signaldata/UtilSequence.hpp
      storage/ndb/include/kernel/signaldata/WaitGCP.hpp
      storage/ndb/include/kernel/trigger_definitions.h
      storage/ndb/include/logger/ConsoleLogHandler.hpp
      storage/ndb/include/logger/FileLogHandler.hpp
      storage/ndb/include/logger/LogHandler.hpp
      storage/ndb/include/logger/Logger.hpp
      storage/ndb/include/logger/SysLogHandler.hpp
      storage/ndb/include/mgmapi/mgmapi.h
      storage/ndb/include/mgmapi/mgmapi_config_parameters.h
      storage/ndb/include/mgmapi/mgmapi_config_parameters_debug.h
      storage/ndb/include/mgmapi/mgmapi_debug.h
      storage/ndb/include/mgmapi/mgmapi_error.h
      storage/ndb/include/mgmapi/ndb_logevent.h
      storage/ndb/include/mgmapi/ndbd_exit_codes.h
      storage/ndb/include/mgmcommon/ConfigRetriever.hpp
      storage/ndb/include/mgmcommon/IPCConfig.hpp
      storage/ndb/include/mgmcommon/MgmtErrorReporter.hpp
      storage/ndb/include/ndb_constants.h
      storage/ndb/include/ndb_global.h.in
      storage/ndb/include/ndb_init.h
      storage/ndb/include/ndb_net.h
      storage/ndb/include/ndb_types.h.in
      storage/ndb/include/ndb_version.h.in
      storage/ndb/include/ndbapi/Ndb.hpp
      storage/ndb/include/ndbapi/NdbApi.hpp
      storage/ndb/include/ndbapi/NdbBlob.hpp
      storage/ndb/include/ndbapi/NdbDictionary.hpp
      storage/ndb/include/ndbapi/NdbError.hpp
      storage/ndb/include/ndbapi/NdbEventOperation.hpp
      storage/ndb/include/ndbapi/NdbIndexOperation.hpp
      storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp
      storage/ndb/include/ndbapi/NdbIndexStat.hpp
      storage/ndb/include/ndbapi/NdbInterpretedCode.hpp
      storage/ndb/include/ndbapi/NdbOperation.hpp
      storage/ndb/include/ndbapi/NdbPool.hpp
      storage/ndb/include/ndbapi/NdbRecAttr.hpp
      storage/ndb/include/ndbapi/NdbReceiver.hpp
      storage/ndb/include/ndbapi/NdbScanFilter.hpp
      storage/ndb/include/ndbapi/NdbScanOperation.hpp
      storage/ndb/include/ndbapi/NdbTransaction.hpp
      storage/ndb/include/ndbapi/ndb_cluster_connection.hpp
      storage/ndb/include/ndbapi/ndb_opt_defaults.h
      storage/ndb/include/ndbapi/ndbapi_limits.h
      storage/ndb/include/ndbapi/ndberror.h
      storage/ndb/include/newtonapi/dba.h
      storage/ndb/include/newtonapi/defs/pcn_types.h
      storage/ndb/include/portlib/NdbCondition.h
      storage/ndb/include/portlib/NdbConfig.h
      storage/ndb/include/portlib/NdbDaemon.h
      storage/ndb/include/portlib/NdbEnv.h
      storage/ndb/include/portlib/NdbHost.h
      storage/ndb/include/portlib/NdbMain.h
      storage/ndb/include/portlib/NdbMem.h
      storage/ndb/include/portlib/NdbMutex.h
      storage/ndb/include/portlib/NdbSleep.h
      storage/ndb/include/portlib/NdbTCP.h
      storage/ndb/include/portlib/NdbThread.h
      storage/ndb/include/portlib/NdbTick.h
      storage/ndb/include/portlib/PortDefs.h
      storage/ndb/include/portlib/prefetch.h
      storage/ndb/include/transporter/TransporterCallback.hpp
      storage/ndb/include/transporter/TransporterDefinitions.hpp
      storage/ndb/include/transporter/TransporterRegistry.hpp
      storage/ndb/include/util/BaseString.hpp
      storage/ndb/include/util/Bitmask.hpp
      storage/ndb/include/util/ConfigValues.hpp
      storage/ndb/include/util/File.hpp
      storage/ndb/include/util/InputStream.hpp
      storage/ndb/include/util/NdbAutoPtr.hpp
      storage/ndb/include/util/NdbOut.hpp
      storage/ndb/include/util/NdbSqlUtil.hpp
      storage/ndb/include/util/NdbTap.hpp
      storage/ndb/include/util/OutputStream.hpp
      storage/ndb/include/util/Parser.hpp
      storage/ndb/include/util/Properties.hpp
      storage/ndb/include/util/SimpleProperties.hpp
      storage/ndb/include/util/SocketAuthenticator.hpp
      storage/ndb/include/util/SocketClient.hpp
      storage/ndb/include/util/SocketServer.hpp
      storage/ndb/include/util/UtilBuffer.hpp
      storage/ndb/include/util/Vector.hpp
      storage/ndb/include/util/azlib.h
      storage/ndb/include/util/basestring_vsnprintf.h
      storage/ndb/include/util/md5_hash.hpp
      storage/ndb/include/util/ndb_opts.h
      storage/ndb/include/util/ndb_rand.h
      storage/ndb/include/util/random.h
      storage/ndb/include/util/socket_io.h
      storage/ndb/include/util/uucode.h
      storage/ndb/include/util/version.h
      storage/ndb/ndbapi-examples/Makefile
      storage/ndb/ndbapi-examples/mgmapi_logevent/Makefile
      storage/ndb/ndbapi-examples/mgmapi_logevent/main.cpp
      storage/ndb/ndbapi-examples/mgmapi_logevent2/Makefile
      storage/ndb/ndbapi-examples/mgmapi_logevent2/main.cpp
      storage/ndb/ndbapi-examples/ndbapi_async/Makefile
      storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async.cpp
      storage/ndb/ndbapi-examples/ndbapi_async1/Makefile
      storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1.cpp
      storage/ndb/ndbapi-examples/ndbapi_blob/Makefile
      storage/ndb/ndbapi-examples/ndbapi_blob/ndbapi_blob.cpp
      storage/ndb/ndbapi-examples/ndbapi_blob_ndbrecord/Makefile
      storage/ndb/ndbapi-examples/ndbapi_blob_ndbrecord/main.cpp
      storage/ndb/ndbapi-examples/ndbapi_event/Makefile
      storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event.cpp
      storage/ndb/ndbapi-examples/ndbapi_recattr_vs_record/Makefile
      storage/ndb/ndbapi-examples/ndbapi_recattr_vs_record/main.cpp
      storage/ndb/ndbapi-examples/ndbapi_retries/Makefile
      storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries.cpp
      storage/ndb/ndbapi-examples/ndbapi_s_i_ndbrecord/Makefile
      storage/ndb/ndbapi-examples/ndbapi_s_i_ndbrecord/main.cpp
      storage/ndb/ndbapi-examples/ndbapi_scan/Makefile
      storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan.cpp
      storage/ndb/ndbapi-examples/ndbapi_simple/Makefile
      storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple.cpp
      storage/ndb/ndbapi-examples/ndbapi_simple_dual/Makefile
      storage/ndb/ndbapi-examples/ndbapi_simple_dual/main.cpp
      storage/ndb/ndbapi-examples/ndbapi_simple_index/Makefile
      storage/ndb/ndbapi-examples/ndbapi_simple_index/main.cpp
      storage/ndb/ndbjtie/Makefile
      storage/ndb/ndbjtie/Makefile.defaults
      storage/ndb/ndbjtie/env.properties
      storage/ndb/ndbjtie/src/demo/Makefile
      storage/ndb/ndbjtie/src/demoj/Makefile
      storage/ndb/ndbjtie/src/jtie/Makefile
      storage/ndb/ndbjtie/src/myapi/Makefile
      storage/ndb/ndbjtie/src/myjapi/Makefile
      storage/ndb/ndbjtie/src/ndbjtie/Makefile
      storage/ndb/src/Makefile.am
      storage/ndb/src/common/Makefile.am
      storage/ndb/src/common/debugger/BlockNames.cpp
      storage/ndb/src/common/debugger/DebuggerNames.cpp
      storage/ndb/src/common/debugger/EventLogger.cpp
      storage/ndb/src/common/debugger/GrepError.cpp
      storage/ndb/src/common/debugger/Makefile.am
      storage/ndb/src/common/debugger/signaldata/AccLock.cpp
      storage/ndb/src/common/debugger/signaldata/AlterIndx.cpp
      storage/ndb/src/common/debugger/signaldata/AlterTab.cpp
      storage/ndb/src/common/debugger/signaldata/AlterTable.cpp
      storage/ndb/src/common/debugger/signaldata/AlterTrig.cpp
      storage/ndb/src/common/debugger/signaldata/BackupImpl.cpp
      storage/ndb/src/common/debugger/signaldata/BackupSignalData.cpp
      storage/ndb/src/common/debugger/signaldata/CloseComReqConf.cpp
      storage/ndb/src/common/debugger/signaldata/CntrStart.cpp
      storage/ndb/src/common/debugger/signaldata/ContinueB.cpp
      storage/ndb/src/common/debugger/signaldata/CopyGCI.cpp
      storage/ndb/src/common/debugger/signaldata/CreateEvnt.cpp
      storage/ndb/src/common/debugger/signaldata/CreateFragmentation.cpp
      storage/ndb/src/common/debugger/signaldata/CreateIndx.cpp
      storage/ndb/src/common/debugger/signaldata/CreateTrig.cpp
      storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp
      storage/ndb/src/common/debugger/signaldata/DihContinueB.cpp
      storage/ndb/src/common/debugger/signaldata/DihSwitchReplicaReq.cpp
      storage/ndb/src/common/debugger/signaldata/DisconnectRep.cpp
      storage/ndb/src/common/debugger/signaldata/DropIndx.cpp
      storage/ndb/src/common/debugger/signaldata/DropTab.cpp
      storage/ndb/src/common/debugger/signaldata/DropTrig.cpp
      storage/ndb/src/common/debugger/signaldata/FailRep.cpp
      storage/ndb/src/common/debugger/signaldata/FireTrigOrd.cpp
      storage/ndb/src/common/debugger/signaldata/FsAppendReq.cpp
      storage/ndb/src/common/debugger/signaldata/FsCloseReq.cpp
      storage/ndb/src/common/debugger/signaldata/FsConf.cpp
      storage/ndb/src/common/debugger/signaldata/FsOpenReq.cpp
      storage/ndb/src/common/debugger/signaldata/FsReadWriteReq.cpp
      storage/ndb/src/common/debugger/signaldata/FsRef.cpp
      storage/ndb/src/common/debugger/signaldata/GCP.cpp
      storage/ndb/src/common/debugger/signaldata/IndxAttrInfo.cpp
      storage/ndb/src/common/debugger/signaldata/IndxKeyInfo.cpp
      storage/ndb/src/common/debugger/signaldata/LCP.cpp
      storage/ndb/src/common/debugger/signaldata/LocalRouteOrd.cpp
      storage/ndb/src/common/debugger/signaldata/LqhFrag.cpp
      storage/ndb/src/common/debugger/signaldata/LqhKey.cpp
      storage/ndb/src/common/debugger/signaldata/LqhTrans.cpp
      storage/ndb/src/common/debugger/signaldata/Makefile.am
      storage/ndb/src/common/debugger/signaldata/MasterLCP.cpp
      storage/ndb/src/common/debugger/signaldata/NFCompleteRep.cpp
      storage/ndb/src/common/debugger/signaldata/NdbSttor.cpp
      storage/ndb/src/common/debugger/signaldata/NdbfsContinueB.cpp
      storage/ndb/src/common/debugger/signaldata/PackedSignal.cpp
      storage/ndb/src/common/debugger/signaldata/PrepDropTab.cpp
      storage/ndb/src/common/debugger/signaldata/PrepFailReqRef.cpp
      storage/ndb/src/common/debugger/signaldata/ReadNodesConf.cpp
      storage/ndb/src/common/debugger/signaldata/ScanFrag.cpp
      storage/ndb/src/common/debugger/signaldata/ScanTab.cpp
      storage/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp
      storage/ndb/src/common/debugger/signaldata/SignalDroppedRep.cpp
      storage/ndb/src/common/debugger/signaldata/SignalNames.cpp
      storage/ndb/src/common/debugger/signaldata/StartRec.cpp
      storage/ndb/src/common/debugger/signaldata/SumaImpl.cpp
      storage/ndb/src/common/debugger/signaldata/SystemError.cpp
      storage/ndb/src/common/debugger/signaldata/TcIndx.cpp
      storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
      storage/ndb/src/common/debugger/signaldata/TcKeyRef.cpp
      storage/ndb/src/common/debugger/signaldata/TcKeyReq.cpp
      storage/ndb/src/common/debugger/signaldata/TcRollbackRep.cpp
      storage/ndb/src/common/debugger/signaldata/TrigAttrInfo.cpp
      storage/ndb/src/common/debugger/signaldata/TupCommit.cpp
      storage/ndb/src/common/debugger/signaldata/TupKey.cpp
      storage/ndb/src/common/debugger/signaldata/TuxMaint.cpp
      storage/ndb/src/common/debugger/signaldata/UtilDelete.cpp
      storage/ndb/src/common/debugger/signaldata/UtilExecute.cpp
      storage/ndb/src/common/debugger/signaldata/UtilLock.cpp
      storage/ndb/src/common/debugger/signaldata/UtilPrepare.cpp
      storage/ndb/src/common/debugger/signaldata/UtilSequence.cpp
      storage/ndb/src/common/debugger/signaldata/print.awk
      storage/ndb/src/common/logger/ConsoleLogHandler.cpp
      storage/ndb/src/common/logger/FileLogHandler.cpp
      storage/ndb/src/common/logger/LogHandler.cpp
      storage/ndb/src/common/logger/LogHandlerList.cpp
      storage/ndb/src/common/logger/LogHandlerList.hpp
      storage/ndb/src/common/logger/Logger.cpp
      storage/ndb/src/common/logger/Makefile.am
      storage/ndb/src/common/logger/SysLogHandler.cpp
      storage/ndb/src/common/logger/listtest/LogHandlerListUnitTest.cpp
      storage/ndb/src/common/logger/listtest/LogHandlerListUnitTest.hpp
      storage/ndb/src/common/logger/listtest/Makefile
      storage/ndb/src/common/logger/loggertest/LoggerUnitTest.cpp
      storage/ndb/src/common/logger/loggertest/LoggerUnitTest.hpp
      storage/ndb/src/common/logger/loggertest/Makefile
      storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp
      storage/ndb/src/common/mgmcommon/IPCConfig.cpp
      storage/ndb/src/common/mgmcommon/Makefile.am
      storage/ndb/src/common/mgmcommon/printConfig/Makefile
      storage/ndb/src/common/mgmcommon/printConfig/printConfig.cpp
      storage/ndb/src/common/portlib/Makefile.am
      storage/ndb/src/common/portlib/NdbCondition.c
      storage/ndb/src/common/portlib/NdbConfig.c
      storage/ndb/src/common/portlib/NdbDaemon.c
      storage/ndb/src/common/portlib/NdbEnv.c
      storage/ndb/src/common/portlib/NdbHost.c
      storage/ndb/src/common/portlib/NdbMem.c
      storage/ndb/src/common/portlib/NdbMutex.c
      storage/ndb/src/common/portlib/NdbPortLibTest.cpp
      storage/ndb/src/common/portlib/NdbSleep.c
      storage/ndb/src/common/portlib/NdbTCP.cpp
      storage/ndb/src/common/portlib/NdbThread.c
      storage/ndb/src/common/portlib/NdbTick.c
      storage/ndb/src/common/portlib/memtest.c
      storage/ndb/src/common/portlib/mmstest.cpp
      storage/ndb/src/common/portlib/munmaptest.cpp
      storage/ndb/src/common/portlib/win32/NdbCondition.c
      storage/ndb/src/common/portlib/win32/NdbDaemon.c
      storage/ndb/src/common/portlib/win32/NdbEnv.c
      storage/ndb/src/common/portlib/win32/NdbHost.c
      storage/ndb/src/common/portlib/win32/NdbMem.c
      storage/ndb/src/common/portlib/win32/NdbMutex.c
      storage/ndb/src/common/portlib/win32/NdbSleep.c
      storage/ndb/src/common/portlib/win32/NdbTCP.c
      storage/ndb/src/common/portlib/win32/NdbThread.c
      storage/ndb/src/common/portlib/win32/NdbTick.c
      storage/ndb/src/common/transporter/Makefile.am
      storage/ndb/src/common/transporter/Packer.cpp
      storage/ndb/src/common/transporter/Packer.hpp
      storage/ndb/src/common/transporter/SCI_Transporter.cpp
      storage/ndb/src/common/transporter/SCI_Transporter.hpp
      storage/ndb/src/common/transporter/SHM_Buffer.hpp
      storage/ndb/src/common/transporter/SHM_Transporter.cpp
      storage/ndb/src/common/transporter/SHM_Transporter.hpp
      storage/ndb/src/common/transporter/SHM_Transporter.unix.cpp
      storage/ndb/src/common/transporter/SHM_Transporter.win32.cpp
      storage/ndb/src/common/transporter/SendBuffer.cpp
      storage/ndb/src/common/transporter/SendBuffer.hpp
      storage/ndb/src/common/transporter/TCP_Transporter.cpp
      storage/ndb/src/common/transporter/TCP_Transporter.hpp
      storage/ndb/src/common/transporter/Transporter.cpp
      storage/ndb/src/common/transporter/Transporter.hpp
      storage/ndb/src/common/transporter/TransporterInternalDefinitions.hpp
      storage/ndb/src/common/transporter/TransporterRegistry.cpp
      storage/ndb/src/common/transporter/basictest/Makefile
      storage/ndb/src/common/transporter/basictest/basicTransporterTest.cpp
      storage/ndb/src/common/transporter/buddy.cpp
      storage/ndb/src/common/transporter/buddy.hpp
      storage/ndb/src/common/transporter/failoverSCI/Makefile
      storage/ndb/src/common/transporter/failoverSCI/failoverSCI.cpp
      storage/ndb/src/common/transporter/perftest/Makefile
      storage/ndb/src/common/transporter/perftest/perfTransporterTest.cpp
      storage/ndb/src/common/transporter/priotest/Makefile
      storage/ndb/src/common/transporter/priotest/prioSCI/Makefile
      storage/ndb/src/common/transporter/priotest/prioSCI/prioSCI.cpp
      storage/ndb/src/common/transporter/priotest/prioSHM/Makefile
      storage/ndb/src/common/transporter/priotest/prioSHM/prioSHM.cpp
      storage/ndb/src/common/transporter/priotest/prioTCP/Makefile
      storage/ndb/src/common/transporter/priotest/prioTCP/prioTCP.cpp
      storage/ndb/src/common/transporter/priotest/prioTransporterTest.cpp
      storage/ndb/src/common/transporter/priotest/prioTransporterTest.hpp
      storage/ndb/src/common/util/BaseString.cpp
      storage/ndb/src/common/util/Bitmask.cpp
      storage/ndb/src/common/util/ConfigValues.cpp
      storage/ndb/src/common/util/File.cpp
      storage/ndb/src/common/util/InputStream.cpp
      storage/ndb/src/common/util/Makefile.am
      storage/ndb/src/common/util/NdbOut.cpp
      storage/ndb/src/common/util/NdbSqlUtil.cpp
      storage/ndb/src/common/util/OutputStream.cpp
      storage/ndb/src/common/util/Parser.cpp
      storage/ndb/src/common/util/Properties.cpp
      storage/ndb/src/common/util/SimpleProperties.cpp
      storage/ndb/src/common/util/SocketAuthenticator.cpp
      storage/ndb/src/common/util/SocketClient.cpp
      storage/ndb/src/common/util/SocketServer.cpp
      storage/ndb/src/common/util/azio.c
      storage/ndb/src/common/util/basestring_vsnprintf.c
      storage/ndb/src/common/util/filetest/FileUnitTest.cpp
      storage/ndb/src/common/util/filetest/FileUnitTest.hpp
      storage/ndb/src/common/util/filetest/Makefile
      storage/ndb/src/common/util/md5_hash.cpp
      storage/ndb/src/common/util/ndb_init.cpp
      storage/ndb/src/common/util/ndb_rand.c
      storage/ndb/src/common/util/ndb_show_compat.cpp
      storage/ndb/src/common/util/new.cpp
      storage/ndb/src/common/util/random.c
      storage/ndb/src/common/util/socket_io.cpp
      storage/ndb/src/common/util/strdup.c
      storage/ndb/src/common/util/testConfigValues/Makefile
      storage/ndb/src/common/util/testConfigValues/testConfigValues.cpp
      storage/ndb/src/common/util/testProperties/Makefile
      storage/ndb/src/common/util/testProperties/testProperties.cpp
      storage/ndb/src/common/util/testSimpleProperties/Makefile
      storage/ndb/src/common/util/testSimpleProperties/sp_test.cpp
      storage/ndb/src/common/util/uucode.c
      storage/ndb/src/common/util/version.c
      storage/ndb/src/cw/Makefile.am
      storage/ndb/src/cw/cpcd/APIService.cpp
      storage/ndb/src/cw/cpcd/APIService.hpp
      storage/ndb/src/cw/cpcd/CPCD.cpp
      storage/ndb/src/cw/cpcd/CPCD.hpp
      storage/ndb/src/cw/cpcd/Makefile.am
      storage/ndb/src/cw/cpcd/Monitor.cpp
      storage/ndb/src/cw/cpcd/Process.cpp
      storage/ndb/src/cw/cpcd/common.cpp
      storage/ndb/src/cw/cpcd/common.hpp
      storage/ndb/src/cw/cpcd/main.cpp
      storage/ndb/src/cw/util/ClientInterface.cpp
      storage/ndb/src/cw/util/ClientInterface.hpp
      storage/ndb/src/cw/util/Makefile
      storage/ndb/src/cw/util/SocketRegistry.cpp
      storage/ndb/src/cw/util/SocketRegistry.hpp
      storage/ndb/src/cw/util/SocketService.cpp
      storage/ndb/src/cw/util/SocketService.hpp
      storage/ndb/src/kernel/Makefile.am
      storage/ndb/src/kernel/SimBlockList.cpp
      storage/ndb/src/kernel/blocks/Makefile.am
      storage/ndb/src/kernel/blocks/backup/Backup.cpp
      storage/ndb/src/kernel/blocks/backup/Backup.hpp
      storage/ndb/src/kernel/blocks/backup/BackupFormat.hpp
      storage/ndb/src/kernel/blocks/backup/BackupInit.cpp
      storage/ndb/src/kernel/blocks/backup/FsBuffer.hpp
      storage/ndb/src/kernel/blocks/backup/Makefile.am
      storage/ndb/src/kernel/blocks/backup/read.cpp
      storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
      storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.hpp
      storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp
      storage/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp
      storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
      storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
      storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
      storage/ndb/src/kernel/blocks/dbdict/Makefile.am
      storage/ndb/src/kernel/blocks/dbdict/Master_AddTable.sfl
      storage/ndb/src/kernel/blocks/dbdict/SchemaFile.hpp
      storage/ndb/src/kernel/blocks/dbdict/Slave_AddTable.sfl
      storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp
      storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
      storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp
      storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
      storage/ndb/src/kernel/blocks/dbdih/Makefile.am
      storage/ndb/src/kernel/blocks/dbdih/Sysfile.hpp
      storage/ndb/src/kernel/blocks/dbdih/printSysfile.cpp
      storage/ndb/src/kernel/blocks/dbdih/printSysfile/Makefile
      storage/ndb/src/kernel/blocks/dbdih/printSysfile/printSysfile.cpp
      storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
      storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
      storage/ndb/src/kernel/blocks/dblqh/Makefile.am
      storage/ndb/src/kernel/blocks/dblqh/redoLogReader/reader.cpp
      storage/ndb/src/kernel/blocks/dblqh/redoLogReader/records.cpp
      storage/ndb/src/kernel/blocks/dblqh/redoLogReader/records.hpp
      storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
      storage/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp
      storage/ndb/src/kernel/blocks/dbtup/AttributeOffset.hpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp
      storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
      storage/ndb/src/kernel/blocks/dbtup/Makefile.am
      storage/ndb/src/kernel/blocks/dbtup/Undo_buffer.cpp
      storage/ndb/src/kernel/blocks/dbtup/Undo_buffer.hpp
      storage/ndb/src/kernel/blocks/dbtup/test_varpage.cpp
      storage/ndb/src/kernel/blocks/dbtup/tuppage.cpp
      storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp
      storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxStat.cpp
      storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
      storage/ndb/src/kernel/blocks/dbtux/tuxstatus.html
      storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp
      storage/ndb/src/kernel/blocks/dbutil/DbUtil.hpp
      storage/ndb/src/kernel/blocks/diskpage.cpp
      storage/ndb/src/kernel/blocks/diskpage.hpp
      storage/ndb/src/kernel/blocks/lgman.hpp
      storage/ndb/src/kernel/blocks/mutexes.hpp
      storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp
      storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp
      storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
      storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp
      storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
      storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp
      storage/ndb/src/kernel/blocks/ndbfs/AsyncFileTest/AsyncFileTest.cpp
      storage/ndb/src/kernel/blocks/ndbfs/AsyncFileTest/Makefile
      storage/ndb/src/kernel/blocks/ndbfs/CircularIndex.cpp
      storage/ndb/src/kernel/blocks/ndbfs/CircularIndex.hpp
      storage/ndb/src/kernel/blocks/ndbfs/Filename.cpp
      storage/ndb/src/kernel/blocks/ndbfs/Filename.hpp
      storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.cpp
      storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp
      storage/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/Makefile
      storage/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/MemoryChannelTest.cpp
      storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp
      storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp
      storage/ndb/src/kernel/blocks/ndbfs/OpenFiles.hpp
      storage/ndb/src/kernel/blocks/ndbfs/Pool.hpp
      storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.cpp
      storage/ndb/src/kernel/blocks/ndbfs/PosixAsyncFile.hpp
      storage/ndb/src/kernel/blocks/ndbfs/VoidFs.cpp
      storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.cpp
      storage/ndb/src/kernel/blocks/ndbfs/Win32AsyncFile.hpp
      storage/ndb/src/kernel/blocks/pgman.cpp
      storage/ndb/src/kernel/blocks/pgman.hpp
      storage/ndb/src/kernel/blocks/print_file.cpp
      storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
      storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp
      storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
      storage/ndb/src/kernel/blocks/qmgr/timer.hpp
      storage/ndb/src/kernel/blocks/record_types.hpp
      storage/ndb/src/kernel/blocks/restore.cpp
      storage/ndb/src/kernel/blocks/restore.hpp
      storage/ndb/src/kernel/blocks/suma/Suma.cpp
      storage/ndb/src/kernel/blocks/suma/Suma.hpp
      storage/ndb/src/kernel/blocks/suma/SumaInit.cpp
      storage/ndb/src/kernel/blocks/trix/Trix.cpp
      storage/ndb/src/kernel/blocks/trix/Trix.hpp
      storage/ndb/src/kernel/error/ErrorHandlingMacros.hpp
      storage/ndb/src/kernel/error/ErrorReporter.cpp
      storage/ndb/src/kernel/error/ErrorReporter.hpp
      storage/ndb/src/kernel/error/Makefile.am
      storage/ndb/src/kernel/error/TimeModule.cpp
      storage/ndb/src/kernel/error/TimeModule.hpp
      storage/ndb/src/kernel/error/ndbd_exit_codes.c
      storage/ndb/src/kernel/main.cpp
      storage/ndb/src/kernel/vm/Array.hpp
      storage/ndb/src/kernel/vm/ArrayPool.hpp
      storage/ndb/src/kernel/vm/CArray.hpp
      storage/ndb/src/kernel/vm/Callback.hpp
      storage/ndb/src/kernel/vm/ClusterConfiguration.cpp
      storage/ndb/src/kernel/vm/ClusterConfiguration.hpp
      storage/ndb/src/kernel/vm/Configuration.cpp
      storage/ndb/src/kernel/vm/Configuration.hpp
      storage/ndb/src/kernel/vm/DLCFifoList.hpp
      storage/ndb/src/kernel/vm/DLCHashTable.hpp
      storage/ndb/src/kernel/vm/DLFifoList.hpp
      storage/ndb/src/kernel/vm/DLHashTable.hpp
      storage/ndb/src/kernel/vm/DLHashTable2.hpp
      storage/ndb/src/kernel/vm/DLList.hpp
      storage/ndb/src/kernel/vm/DataBuffer.hpp
      storage/ndb/src/kernel/vm/DynArr256.cpp
      storage/ndb/src/kernel/vm/DynArr256.hpp
      storage/ndb/src/kernel/vm/Emulator.cpp
      storage/ndb/src/kernel/vm/Emulator.hpp
      storage/ndb/src/kernel/vm/FastScheduler.cpp
      storage/ndb/src/kernel/vm/FastScheduler.hpp
      storage/ndb/src/kernel/vm/GlobalData.hpp
      storage/ndb/src/kernel/vm/KeyDescriptor.hpp
      storage/ndb/src/kernel/vm/KeyTable.hpp
      storage/ndb/src/kernel/vm/KeyTable2.hpp
      storage/ndb/src/kernel/vm/KeyTable2Ref.hpp
      storage/ndb/src/kernel/vm/LinearPool.hpp
      storage/ndb/src/kernel/vm/LockQueue.cpp
      storage/ndb/src/kernel/vm/LockQueue.hpp
      storage/ndb/src/kernel/vm/LongSignal.hpp
      storage/ndb/src/kernel/vm/Makefile.am
      storage/ndb/src/kernel/vm/Mutex.cpp
      storage/ndb/src/kernel/vm/Mutex.hpp
      storage/ndb/src/kernel/vm/NdbdSuperPool.cpp
      storage/ndb/src/kernel/vm/NdbdSuperPool.hpp
      storage/ndb/src/kernel/vm/Pool.cpp
      storage/ndb/src/kernel/vm/Pool.hpp
      storage/ndb/src/kernel/vm/Prio.hpp
      storage/ndb/src/kernel/vm/RWPool.cpp
      storage/ndb/src/kernel/vm/RWPool.hpp
      storage/ndb/src/kernel/vm/RequestTracker.hpp
      storage/ndb/src/kernel/vm/Rope.cpp
      storage/ndb/src/kernel/vm/Rope.hpp
      storage/ndb/src/kernel/vm/SLFifoList.hpp
      storage/ndb/src/kernel/vm/SLList.hpp
      storage/ndb/src/kernel/vm/SafeCounter.cpp
      storage/ndb/src/kernel/vm/SafeCounter.hpp
      storage/ndb/src/kernel/vm/SectionReader.cpp
      storage/ndb/src/kernel/vm/SectionReader.hpp
      storage/ndb/src/kernel/vm/SignalCounter.hpp
      storage/ndb/src/kernel/vm/SimBlockList.hpp
      storage/ndb/src/kernel/vm/SimplePropertiesSection.cpp
      storage/ndb/src/kernel/vm/SimulatedBlock.cpp
      storage/ndb/src/kernel/vm/SuperPool.cpp
      storage/ndb/src/kernel/vm/SuperPool.hpp
      storage/ndb/src/kernel/vm/ThreadConfig.cpp
      storage/ndb/src/kernel/vm/ThreadConfig.hpp
      storage/ndb/src/kernel/vm/TimeQueue.cpp
      storage/ndb/src/kernel/vm/TimeQueue.hpp
      storage/ndb/src/kernel/vm/TransporterCallback.cpp
      storage/ndb/src/kernel/vm/VMSignal.cpp
      storage/ndb/src/kernel/vm/VMSignal.hpp
      storage/ndb/src/kernel/vm/WOPool.cpp
      storage/ndb/src/kernel/vm/WOPool.hpp
      storage/ndb/src/kernel/vm/WaitQueue.hpp
      storage/ndb/src/kernel/vm/WatchDog.cpp
      storage/ndb/src/kernel/vm/WatchDog.hpp
      storage/ndb/src/kernel/vm/al_test/Makefile
      storage/ndb/src/kernel/vm/al_test/arrayListTest.cpp
      storage/ndb/src/kernel/vm/al_test/arrayPoolTest.cpp
      storage/ndb/src/kernel/vm/al_test/main.cpp
      storage/ndb/src/kernel/vm/bench_pool.cpp
      storage/ndb/src/kernel/vm/ndbd_malloc.cpp
      storage/ndb/src/kernel/vm/ndbd_malloc.hpp
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
      storage/ndb/src/kernel/vm/ndbd_malloc_impl.hpp
      storage/ndb/src/kernel/vm/pc.hpp
      storage/ndb/src/kernel/vm/testCopy/Makefile
      storage/ndb/src/kernel/vm/testCopy/rr.cpp
      storage/ndb/src/kernel/vm/testCopy/testCopy.cpp
      storage/ndb/src/kernel/vm/testDataBuffer/Makefile
      storage/ndb/src/kernel/vm/testDataBuffer/testDataBuffer.cpp
      storage/ndb/src/kernel/vm/testLongSig/Makefile
      storage/ndb/src/kernel/vm/testLongSig/testLongSig.cpp
      storage/ndb/src/kernel/vm/testSimplePropertiesSection/Makefile
      storage/ndb/src/kernel/vm/testSimplePropertiesSection/test.cpp
      storage/ndb/src/kernel/vm/testSuperPool.cpp
      storage/ndb/src/mgmapi/LocalConfig.cpp
      storage/ndb/src/mgmapi/LocalConfig.hpp
      storage/ndb/src/mgmapi/Makefile.am
      storage/ndb/src/mgmapi/mgmapi.cpp
      storage/ndb/src/mgmapi/mgmapi_configuration.cpp
      storage/ndb/src/mgmapi/mgmapi_configuration.hpp
      storage/ndb/src/mgmapi/mgmapi_error.c
      storage/ndb/src/mgmapi/mgmapi_internal.h
      storage/ndb/src/mgmapi/ndb_logevent.cpp
      storage/ndb/src/mgmapi/ndb_logevent.hpp
      storage/ndb/src/mgmclient/CommandInterpreter.cpp
      storage/ndb/src/mgmclient/Makefile.am
      storage/ndb/src/mgmclient/main.cpp
      storage/ndb/src/mgmclient/ndb_mgmclient.hpp
      storage/ndb/src/mgmclient/test_cpcd/Makefile
      storage/ndb/src/mgmclient/test_cpcd/test_cpcd.cpp
      storage/ndb/src/mgmsrv/Config.cpp
      storage/ndb/src/mgmsrv/Config.hpp
      storage/ndb/src/mgmsrv/ConfigInfo.cpp
      storage/ndb/src/mgmsrv/ConfigInfo.hpp
      storage/ndb/src/mgmsrv/InitConfigFileParser.cpp
      storage/ndb/src/mgmsrv/InitConfigFileParser.hpp
      storage/ndb/src/mgmsrv/Makefile.am
      storage/ndb/src/mgmsrv/MgmtSrvr.cpp
      storage/ndb/src/mgmsrv/MgmtSrvr.hpp
      storage/ndb/src/mgmsrv/MgmtSrvrConfig.cpp
      storage/ndb/src/mgmsrv/MgmtSrvrGeneralSignalHandling.cpp
      storage/ndb/src/mgmsrv/Services.cpp
      storage/ndb/src/mgmsrv/Services.hpp
      storage/ndb/src/mgmsrv/SignalQueue.cpp
      storage/ndb/src/mgmsrv/SignalQueue.hpp
      storage/ndb/src/mgmsrv/convertStrToInt.cpp
      storage/ndb/src/mgmsrv/convertStrToInt.hpp
      storage/ndb/src/mgmsrv/main.cpp
      storage/ndb/src/mgmsrv/mkconfig/Makefile
      storage/ndb/src/mgmsrv/mkconfig/mkconfig.cpp
      storage/ndb/src/mgmsrv/ndb_mgmd_error.h
      storage/ndb/src/ndbapi/API.hpp
      storage/ndb/src/ndbapi/ClusterMgr.cpp
      storage/ndb/src/ndbapi/ClusterMgr.hpp
      storage/ndb/src/ndbapi/DictCache.cpp
      storage/ndb/src/ndbapi/DictCache.hpp
      storage/ndb/src/ndbapi/Makefile.am
      storage/ndb/src/ndbapi/Ndb.cpp
      storage/ndb/src/ndbapi/NdbApiSignal.cpp
      storage/ndb/src/ndbapi/NdbApiSignal.hpp
      storage/ndb/src/ndbapi/NdbBlob.cpp
      storage/ndb/src/ndbapi/NdbBlobImpl.hpp
      storage/ndb/src/ndbapi/NdbDictionary.cpp
      storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
      storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp
      storage/ndb/src/ndbapi/NdbErrorOut.cpp
      storage/ndb/src/ndbapi/NdbEventOperation.cpp
      storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
      storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp
      storage/ndb/src/ndbapi/NdbImpl.hpp
      storage/ndb/src/ndbapi/NdbIndexOperation.cpp
      storage/ndb/src/ndbapi/NdbIndexStat.cpp
      storage/ndb/src/ndbapi/NdbInterpretedCode.cpp
      storage/ndb/src/ndbapi/NdbLinHash.hpp
      storage/ndb/src/ndbapi/NdbOperation.cpp
      storage/ndb/src/ndbapi/NdbOperationDefine.cpp
      storage/ndb/src/ndbapi/NdbOperationExec.cpp
      storage/ndb/src/ndbapi/NdbOperationInt.cpp
      storage/ndb/src/ndbapi/NdbOperationScan.cpp
      storage/ndb/src/ndbapi/NdbOperationSearch.cpp
      storage/ndb/src/ndbapi/NdbPool.cpp
      storage/ndb/src/ndbapi/NdbPoolImpl.cpp
      storage/ndb/src/ndbapi/NdbPoolImpl.hpp
      storage/ndb/src/ndbapi/NdbRecAttr.cpp
      storage/ndb/src/ndbapi/NdbReceiver.cpp
      storage/ndb/src/ndbapi/NdbRecord.hpp
      storage/ndb/src/ndbapi/NdbScanFilter.cpp
      storage/ndb/src/ndbapi/NdbTransaction.cpp
      storage/ndb/src/ndbapi/NdbTransactionScan.cpp
      storage/ndb/src/ndbapi/NdbUtil.cpp
      storage/ndb/src/ndbapi/NdbUtil.hpp
      storage/ndb/src/ndbapi/NdbWaiter.hpp
      storage/ndb/src/ndbapi/Ndberr.cpp
      storage/ndb/src/ndbapi/Ndbif.cpp
      storage/ndb/src/ndbapi/Ndbinit.cpp
      storage/ndb/src/ndbapi/Ndblist.cpp
      storage/ndb/src/ndbapi/ObjectMap.cpp
      storage/ndb/src/ndbapi/ObjectMap.hpp
      storage/ndb/src/ndbapi/SignalSender.cpp
      storage/ndb/src/ndbapi/SignalSender.hpp
      storage/ndb/src/ndbapi/TransporterFacade.cpp
      storage/ndb/src/ndbapi/TransporterFacade.hpp
      storage/ndb/src/ndbapi/ndb_cluster_connection.cpp
      storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp
      storage/ndb/src/ndbapi/ndb_internal.hpp
      storage/ndb/src/ndbapi/ndberror.c
      storage/ndb/src/ndbapi/ndberror_check.cpp
      storage/ndb/test/run-test/atrt-gather-result.sh
      storage/ndb/test/run-test/autotest-boot.sh
      storage/ndb/test/run-test/autotest-run.sh
      storage/ndb/test/run-test/check-tests.sh
      storage/ndb/tools/Makefile.am
      storage/ndb/tools/delete_all.cpp
      storage/ndb/tools/desc.cpp
      storage/ndb/tools/drop_index.cpp
      storage/ndb/tools/drop_tab.cpp
      storage/ndb/tools/listTables.cpp
      storage/ndb/tools/ndb_config.cpp
      storage/ndb/tools/ndb_error_reporter
      storage/ndb/tools/ndb_size.pl
      storage/ndb/tools/ndb_test_platform.cpp
      storage/ndb/tools/ndbsql.cpp
      storage/ndb/tools/restore/Restore.cpp
      storage/ndb/tools/restore/Restore.hpp
      storage/ndb/tools/restore/consumer.cpp
      storage/ndb/tools/restore/consumer.hpp
      storage/ndb/tools/restore/consumer_printer.cpp
      storage/ndb/tools/restore/consumer_printer.hpp
      storage/ndb/tools/restore/consumer_restore.cpp
      storage/ndb/tools/restore/consumer_restore.hpp
      storage/ndb/tools/restore/consumer_restorem.cpp
      storage/ndb/tools/restore/ndb_nodegroup_map.h
      storage/ndb/tools/restore/restore_main.cpp
      storage/ndb/tools/select_all.cpp
      storage/ndb/tools/select_count.cpp
      storage/ndb/tools/waiter.cpp
=== modified file 'storage/ndb/include/util/NdbSqlUtil.hpp'
--- a/storage/ndb/include/util/NdbSqlUtil.hpp	2011-02-01 21:05:11 +0000
+++ b/storage/ndb/include/util/NdbSqlUtil.hpp	2011-02-18 18:07:44 +0000
@@ -1,19 +1,18 @@
 /*
-   Copyright (C) 2003-2006 MySQL AB, 2008, 2009 Sun Microsystems, Inc.
-    All rights reserved. Use is subject to license terms.
+  Copyright (c) 2003,2011, Oracle and/or its affiliates. All rights reserved.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; version 2 of the License.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; version 2 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 */
 
 #ifndef NDB_SQL_UTIL_HPP
@@ -25,6 +24,16 @@
 struct charset_info_st;
 typedef struct charset_info_st CHARSET_INFO;
 
+/**
+ * Helper class with comparison functions on NDB (column) data types.
+ *
+ * Notes: this Helper class
+ * - is used by kernel code
+ * - provides non-elementary functions
+ * - is not generic, template-based code
+ * - has link/library dependencies upon MySQL code
+ * (in contrast to other type utility classes, like ./NdbTypesUtil).
+ */
 class NdbSqlUtil {
 public:
   /**

=== added file 'storage/ndb/include/util/NdbTypesUtil.hpp'
--- a/storage/ndb/include/util/NdbTypesUtil.hpp	1970-01-01 00:00:00 +0000
+++ b/storage/ndb/include/util/NdbTypesUtil.hpp	2011-02-18 18:07:44 +0000
@@ -0,0 +1,449 @@
+/*
+  Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; version 2 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+#ifndef NDB_TYPES_UTIL_HPP
+#define NDB_TYPES_UTIL_HPP
+
+#include <assert.h>
+#include <string.h>
+
+#include "my_global.h"
+
+#include "ndb_constants.h"
+#include "ndb_types.h"
+
+/*
+ * Traits and Helper classes for NDB data types.
+ */
+
+// ---------------------------------------------------------------------------
+// Traits classes providing information on NDB (column) data types
+// ---------------------------------------------------------------------------
+
+/*
+ * These Traits classes support code genericity by parametrizing over
+ * NDB (column) data types.  They provide compile-time information on
+ * - array types:               [long][var](binary|char)
+ * - numeric types:             [U]Int8..[U]Int64|float|double
+ *
+ * For instance, Traits functions
+ * - isFixedSized()             for array types
+ * - lowest(), highest()        for numeric types
+ * allow for the generic handling of arrays or numeric limits.
+ *
+ * Notes: the Traits classes
+ * - provide uniform access to type meta-data
+ * - are used as a type argument to a class or function template
+ * - have pure compile-time scope, lack instantiation at runtime
+ * - have _no_ link or library dependencies upon C++ stdlib code
+ *   (compare to the bounds definitions in std::numeric_limits)
+ * - are defined below as inline template specializations.
+ */
+
+/**
+ * Common Traits of NDB array types.
+ */
+template< int TID > // the NDB type id as defined in ndb_constants.h
+struct ArrayTypeTraits {
+  // whether this array type is a binary or character type
+  static bool isBinary();
+
+  // whether this array type is fixed-or variable-sized
+  static bool isFixedSized();
+
+  // the size of the length prefix in bytes, or zero if a fixed-sized array
+  static size_t lengthPrefixSize();
+};
+
+// aliases for array type traits
+typedef ArrayTypeTraits< NDB_TYPE_CHAR > Tchar;
+typedef ArrayTypeTraits< NDB_TYPE_BINARY > Tbinary;
+typedef ArrayTypeTraits< NDB_TYPE_VARCHAR > Tvarchar;
+typedef ArrayTypeTraits< NDB_TYPE_VARBINARY > Tvarbinary;
+typedef ArrayTypeTraits< NDB_TYPE_LONGVARCHAR > Tlongvarchar;
+typedef ArrayTypeTraits< NDB_TYPE_LONGVARBINARY > Tlongvarbinary;
+
+// internal helper class
+template< typename T >
+struct NumTypeMap {};
+
+/**
+ * Common Traits of NDB numeric types.
+ *
+ * Notes: the C++ stdlib offers limits as part of std::numeric_limits;
+ * its bounds definitions result in a non-uniform usage over different
+ * data types, with min() referring to the smallest positive value for
+ * float and double, but lowest negative value for integral types.
+ * In contrast, this Traits class's functions lowest() and smallest()
+ * support a uniform usage.
+ */
+template< typename T >
+struct NumTypeTraits {
+  // the domain type T
+  typedef typename NumTypeMap< T >::DomainT DomainT;
+
+  // if T is integral, the signed type of same width; otherwise T
+  typedef typename NumTypeMap< T >::SignedT SignedT;
+
+  // if T is integral, the unsigned type of same width; otherwise T
+  typedef typename NumTypeMap< T >::UnsignedT UnsignedT;
+
+  // whether the domain type is an integer type
+  static bool isIntegral() { return NumTypeMap< T >::isIntegral(); };
+
+  // whether the domain type is signed or unsigned
+  static bool isSigned() { return NumTypeMap< T >::isSigned(); };
+
+  // the width of the type in bytes
+  static size_t size();
+
+  // the minimum finite value
+  static T lowest();
+
+  // the maximum finite value
+  static T highest();
+
+  // the minimum positive normalized value, or 0 for integral types
+  static T smallest();
+};
+
+// aliases for standard numeric type traits
+typedef NumTypeTraits< Int8 > Tint8;
+typedef NumTypeTraits< Int16 > Tint16;
+typedef NumTypeTraits< Int32 > Tint32;
+typedef NumTypeTraits< Int64 > Tint64;
+typedef NumTypeTraits< Uint8 > Tuint8;
+typedef NumTypeTraits< Uint16 > Tuint16;
+typedef NumTypeTraits< Uint32 > Tuint32;
+typedef NumTypeTraits< Uint64 > Tuint64;
+// not implemented yet: float, double
+// ansi C type 'long double' is not a supported numeric NDB type
+
+/**
+ * Common Traits of non-standard NDB numeric types.
+ *
+ * Unless distinct [U]Int24 value types are defined to represent these
+ * proper subsets of [U]Int32 numbers, the correspoding Traits classes
+ * need to be defined as separate types (not just mere specializations).
+ * Using a derived class does that and allows to partially override.
+ */
+template< typename T >
+struct NonStdNumTypeTraits : NumTypeTraits< T > {
+  // the minimum finite value
+  static T lowest();
+
+  // the maximum finite value
+  static T highest();
+};
+
+// aliases for standard numeric type traits
+typedef NonStdNumTypeTraits< Int32 > Tint24;
+typedef NonStdNumTypeTraits< Uint32 > Tuint24;
+
+// ---------------------------------------------------------------------------
+// Helper classes providing common functions on NDB (column) data
+// ---------------------------------------------------------------------------
+
+/*
+ * These Helper classes provide basic utility functions on NDB types.
+ *
+ * For example, Helper functions
+ * - read/writeLengthPrefix()   for array types
+ * - load(), store()            for numeric types
+ * allow to abstract from the details of writing an array's length prefix
+ * or from reading/writing a numeric value from/to an unaligned buffer.
+ *
+ * Notes: the Helper classes
+ * - extend Traits classes for convenience
+ * - only add basic utility functions that
+ * - have _no_ link or library dependencies upon MySQL code
+ *   (in contrast to other SQL utility code like ./NdbSqlUtil)
+ * - are defined below as inline template specializations.
+ */
+
+/**
+ * Basic Helper functions for NDB array types.
+ */
+template< int ID >
+struct ArrayTypeHelper : ArrayTypeTraits< ID > {
+  // read the length prefix (not available if a fixed-sized array)
+  static Uint32 readLengthPrefix(const void * a);
+
+  // write the length prefix (not available if a fixed-sized array)
+  // the upper (non-length-prefix) bytes of 'l' must be zero
+  static void writeLengthPrefix(void * a, Uint32 l);
+};
+
+// aliases for array type helpers
+typedef ArrayTypeHelper< NDB_TYPE_CHAR > Hchar;
+typedef ArrayTypeHelper< NDB_TYPE_BINARY > Hbinary;
+typedef ArrayTypeHelper< NDB_TYPE_VARCHAR > Hvarchar;
+typedef ArrayTypeHelper< NDB_TYPE_VARBINARY > Hvarbinary;
+typedef ArrayTypeHelper< NDB_TYPE_LONGVARCHAR > Hlongvarchar;
+typedef ArrayTypeHelper< NDB_TYPE_LONGVARBINARY > Hlongvarbinary;
+
+/**
+ * Basic Helper functions for numeric NDB types.
+ *
+ * As another design option, these helper functions could be defined as
+ * individual function templates, which'd allow for implicit function
+ * resolution based on the parameter type but, on the other hand, required
+ * distinct value types for all data (i.e., an Int24 value type).
+ */
+template< typename T >
+struct NumTypeHelper : NumTypeTraits< T > {
+  // convenience aliases
+  typedef typename NumTypeTraits< T >::SignedT SignedT;
+  typedef typename NumTypeTraits< T >::UnsignedT UnsignedT;
+
+  // casts a value to the signed numerical type of same width
+  static SignedT asSigned(T t) { return static_cast< SignedT >(t); }
+
+  // casts a value to the unsigned numerical type of same width
+  static UnsignedT asUnsigned(T t) { return static_cast< UnsignedT >(t); }
+
+  // read a single value from an unaligned buffer; s, t must not overlap
+  static void load(T * t, const char * s);
+
+  // write a single value to an unaligned buffer; s, t must not overlap
+  static void store(char * t, const T * s);
+};
+
+// aliases for numeric type helpers
+typedef NumTypeHelper< Int8 > Hint8;
+typedef NumTypeHelper< Int16 > Hint16;
+typedef NumTypeHelper< Int32 > Hint32;
+typedef NumTypeHelper< Int64 > Hint64;
+typedef NumTypeHelper< Uint8 > Huint8;
+typedef NumTypeHelper< Uint16 > Huint16;
+typedef NumTypeHelper< Uint32 > Huint32;
+typedef NumTypeHelper< Uint64 > Huint64;
+// not implemented yet: float, double
+// ansi C type 'long double' is not a supported numeric NDB type
+
+/**
+ * Basic Helper functions of non-standard NDB numeric types.
+ *
+ * Unless distinct [U]Int24 value types are defined to represent these
+ * proper subsets of [U]Int32 numbers, the correspoding Helper classes
+ * need to be defined as separate types (not just mere specializations).
+ * This class only derives from the Traits class to avoid member access
+ * ambiguities resulting from multiple inheritance.
+ */
+template< typename T >
+struct NonStdNumTypeHelper : NonStdNumTypeTraits< T > {
+  // convenience alias
+  typedef typename NonStdNumTypeTraits< T >::SignedT SignedT;
+  typedef typename NonStdNumTypeTraits< T >::UnsignedT UnsignedT;
+
+  // casts a value to the signed numerical type of same width
+  static SignedT asSigned(T t) { return static_cast< SignedT >(t); }
+
+  // casts a value to the unsigned numerical type of same width
+  static UnsignedT asUnsigned(T t) { return static_cast< UnsignedT >(t); }
+
+  // read a single value from an unaligned buffer; s, t must not overlap
+  static void load(T * t, const char * s);
+
+  // write a single value to an unaligned buffer; s, t must not overlap
+  static void store(char * t, const T * s);
+};
+
+// aliases for non-standard numeric type helpers
+typedef NonStdNumTypeHelper< Int32 > Hint24;
+typedef NonStdNumTypeHelper< Uint32 > Huint24;
+
+// ---------------------------------------------------------------------------
+// Definitions/Specializations of Traits classes
+// ---------------------------------------------------------------------------
+
+// specialize the Traits template members for array types
+#define NDB_SPECIALIZE_ARRAY_TYPE_TRAITS( TR, B, FS, LPS )              \
+  template<> inline bool TR::isBinary() { return B; }                   \
+  template<> inline bool TR::isFixedSized() { return FS; }              \
+  template<> inline size_t TR::lengthPrefixSize() { return LPS; }
+
+// coincidentally, we could use ndb constants
+//   NDB_ARRAYTYPE_FIXED, NDB_ARRAYTYPE_SHORT_VAR, NDB_ARRAYTYPE_MEDIUM_VAR
+// instead of literals, but let's not confuse ordinal/cardinal numbers
+NDB_SPECIALIZE_ARRAY_TYPE_TRAITS(Tchar, false, true, 0)
+NDB_SPECIALIZE_ARRAY_TYPE_TRAITS(Tbinary, true, true, 0)
+NDB_SPECIALIZE_ARRAY_TYPE_TRAITS(Tvarchar, false, false, 1)
+NDB_SPECIALIZE_ARRAY_TYPE_TRAITS(Tvarbinary, true, false, 1)
+NDB_SPECIALIZE_ARRAY_TYPE_TRAITS(Tlongvarchar, false, false, 2)
+NDB_SPECIALIZE_ARRAY_TYPE_TRAITS(Tlongvarbinary, true, false, 2)
+#undef NDB_SPECIALIZE_ARRAY_TYPE_TRAITS
+
+// specialize the TypeMap template for numeric types
+#define NDB_SPECIALIZE_NUM_TYPE_MAP( DT, ST, UT, I, S )                 \
+  template<> struct NumTypeMap< DT > {                                  \
+    typedef DT DomainT;                                                 \
+    typedef ST SignedT;                                                 \
+    typedef UT UnsignedT;                                               \
+    static bool isIntegral() { return S; };                             \
+    static bool isSigned() { return S; };                               \
+  };
+
+NDB_SPECIALIZE_NUM_TYPE_MAP(Int8, Int8, Uint8, true, true)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Uint8, Int8, Uint8, true, false)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Int16, Int16, Uint16, true, true)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Uint16, Int16, Uint16, true, false)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Int32, Int32, Uint32, true, true)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Uint32, Int32, Uint32, true, false)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Int64, Int64, Uint64, true, true)
+NDB_SPECIALIZE_NUM_TYPE_MAP(Uint64, Int64, Uint64, true, false)
+
+NDB_SPECIALIZE_NUM_TYPE_MAP(float, float, float, false, true)
+NDB_SPECIALIZE_NUM_TYPE_MAP(double, double, double, false, true)
+#undef NDB_SPECIALIZE_NUM_TYPE_MAP
+
+// specialize the Traits template members for numeric types
+#define NDB_SPECIALIZE_NUM_TYPE_TRAITS( TR, T, SZ, LO, HI, SM )         \
+  template<> inline size_t TR::size() { return SZ; }                    \
+  template<> inline T TR::lowest() { return LO; }                       \
+  template<> inline T TR::highest() { return HI; }                      \
+  template<> inline T TR::smallest() { return SM; }
+
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tint8, Int8, 1, INT_MIN8, INT_MAX8, 0)
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tint16, Int16, 2, INT_MIN16, INT_MAX16, 0)
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tint32, Int32, 4, INT_MIN32, INT_MAX32, 0)
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tint64, Int64, 8, INT_MIN64, INT_MAX64, 0)
+
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tuint8, Uint8, 1, 0, UINT_MAX8, 0)
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tuint16, Uint16, 2, 0, UINT_MAX16, 0)
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tuint32, Uint32, 4, 0, UINT_MAX32, 0)
+NDB_SPECIALIZE_NUM_TYPE_TRAITS(Tuint64, Uint64, 8, 0, UINT_MAX64, 0)
+// not implemented yet: float, double
+#undef NDB_SPECIALIZE_NUM_TYPE_TRAITS
+
+// specialize the Traits template members for non-standard numeric types
+#define NDB_SPECIALIZE_NON_STD_NUM_TYPE_TRAITS( TR, T, LO, HI )         \
+  template<> inline T TR::lowest() { return LO; }                       \
+  template<> inline T TR::highest() { return HI; }
+
+NDB_SPECIALIZE_NON_STD_NUM_TYPE_TRAITS(Tint24, Int32, INT_MIN24, INT_MAX24)
+NDB_SPECIALIZE_NON_STD_NUM_TYPE_TRAITS(Tuint24, Uint32, 0, UINT_MAX24)
+#undef NDB_SPECIALIZE_NON_STD_NUM_TYPE_TRAITS
+
+// ---------------------------------------------------------------------------
+// Definitions/Specializations of Helper classes
+// ---------------------------------------------------------------------------
+
+// specialize the Helper template members for fixed-sized arrays
+#define NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS0( H )                      \
+  template<> inline Uint32 H::readLengthPrefix(const void * a) {        \
+    assert(false);                                                      \
+    return 0;                                                           \
+  };                                                                    \
+  template<> inline void H::writeLengthPrefix(void * a, Uint32 l) {     \
+    assert(false);                                                      \
+  }
+
+NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS0(Hchar)
+NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS0(Hbinary)
+#undef NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS0
+
+// specialize the Helper template members for short-var arrays
+#define NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS1( H )                      \
+  template<> inline Uint32 H::readLengthPrefix(const void * a) {        \
+    assert(a);                                                          \
+    const unsigned char * s = static_cast<const unsigned char *>(a);    \
+    return s[0];                                                        \
+  };                                                                    \
+  template<> inline void H::writeLengthPrefix(void * a, Uint32 l) {     \
+    assert(a);                                                          \
+    assert(l >> (lengthPrefixSize() * 8) == 0);                         \
+    unsigned char * t = static_cast<unsigned char *>(a);                \
+    t[0] = l & 0x000000FF;                                              \
+  }
+
+NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS1(Hvarchar)
+NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS1(Hvarbinary)
+#undef NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS1
+
+// specialize the Helper template members for medium-var arrays
+#define NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS2( H )                      \
+  template<> inline Uint32 H::readLengthPrefix(const void * a) {        \
+    assert(a);                                                          \
+    const unsigned char * s = static_cast<const unsigned char *>(a);    \
+    return s[0] + (s[1] << 8);                                          \
+  };                                                                    \
+  template<> inline void H::writeLengthPrefix(void * a, Uint32 l) {     \
+    assert(a);                                                          \
+    assert(l >> (lengthPrefixSize() * 8) == 0);                         \
+    unsigned char * t = static_cast<unsigned char *>(a);                \
+    t[0] = l & 0x000000FF;                                              \
+    t[1] = (l & 0x0000FF00) >> 8;                                       \
+  }
+
+NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS2(Hlongvarchar)
+NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS2(Hlongvarbinary)
+#undef NDB_SPECIALIZE_ARRAY_TYPE_HELPER_LPS2
+
+// specialize the Helper template members for single-byte types
+#define NDB_SPECIALIZE_NUM_TYPE_HELPER_BYTE( H, T )                     \
+  template<> inline void H::load(T * t, const char * s) {               \
+    assert(t); assert(s); assert(t != (const T *)s);                    \
+    *t = *s;                                                            \
+  }                                                                     \
+  template<> inline void H::store(char * t, const T * s) {              \
+    H::load((T *)t, (const char *)s);                                   \
+  }
+
+NDB_SPECIALIZE_NUM_TYPE_HELPER_BYTE(Hint8, Int8);
+NDB_SPECIALIZE_NUM_TYPE_HELPER_BYTE(Huint8, Uint8);
+#undef NDB_SPECIALIZE_NUM_TYPE_HELPER_BYTE
+
+// specialize the Helper template members for numeric types
+#define NDB_SPECIALIZE_NUM_TYPE_HELPER( H, T )                          \
+  template<> inline void H::load(T * t, const char * s) {               \
+    assert(t); assert(s);                                               \
+    assert(t != (const T *)s);                                          \
+    memcpy(t, s, H::size());                                            \
+  }                                                                     \
+  template<> inline void H::store(char * t, const T * s) {              \
+    H::load((T *)t, (const char *)s);                                   \
+  }
+
+NDB_SPECIALIZE_NUM_TYPE_HELPER(Hint16, Int16);
+NDB_SPECIALIZE_NUM_TYPE_HELPER(Hint32, Int32);
+NDB_SPECIALIZE_NUM_TYPE_HELPER(Hint64, Int64);
+
+NDB_SPECIALIZE_NUM_TYPE_HELPER(Huint16, Uint16);
+NDB_SPECIALIZE_NUM_TYPE_HELPER(Huint32, Uint32);
+NDB_SPECIALIZE_NUM_TYPE_HELPER(Huint64, Uint64);
+// not implemented yet: float, double
+#undef NDB_SPECIALIZE_NUM_TYPE_HELPER
+
+// specialize the Helper template members for non-standard numeric types
+#define NDB_SPECIALIZE_NON_STD_NUM_TYPE_HELPER( H, T, INT3KORR )        \
+  template<> inline void H::load(T * t, const char * s) {               \
+    assert(t); assert(s);                                               \
+    assert(t > (const T *)s);                                           \
+    *t = (INT3KORR(s));                                                 \
+  }                                                                     \
+  template<> inline void H::store(char * t, const T * s) {              \
+    assert(t); assert(s);                                               \
+    assert(((T *)t > s) || ((T *)t < s));                               \
+    int3store(t, (*s));                                                 \
+  }
+
+NDB_SPECIALIZE_NON_STD_NUM_TYPE_HELPER(Hint24, Int32, sint3korr)
+NDB_SPECIALIZE_NON_STD_NUM_TYPE_HELPER(Huint24, Uint32, uint3korr)
+#undef NDB_SPECIALIZE_NON_STD_NUM_TYPE_HELPER
+
+#endif /* !NDB_TYPES_UTIL_HPP */

=== modified file 'storage/ndb/tools/restore/consumer_restore.cpp'
--- a/storage/ndb/tools/restore/consumer_restore.cpp	2011-02-03 14:14:57 +0000
+++ b/storage/ndb/tools/restore/consumer_restore.cpp	2011-02-18 18:07:44 +0000
@@ -1,5 +1,5 @@
 /*
-   Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+   Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -24,6 +24,8 @@
 #include <ndb_internal.hpp>
 #include <ndb_logevent.h>
 
+#include <NdbTypesUtil.hpp>
+
 #define NDB_ANYVALUE_FOR_NOLOGGING 0xFFFFFFFF
 
 extern my_bool opt_core;
@@ -45,132 +47,418 @@ extern Properties g_rewrite_databases;
 
 bool BackupRestore::m_preserve_trailing_spaces = false;
 
+// ----------------------------------------------------------------------
+// conversion handlers
+// ----------------------------------------------------------------------
+
+void *
+BackupRestore::convert_bitset(const void *source,
+                              void *target,
+                              bool &truncated)
+{
+  if (!source || !target)
+    return NULL;
+
+  // shortcuts
+  const unsigned char * const s = (const unsigned char *)source;
+  char_n_padding_struct * const t = (char_n_padding_struct *)target;
+
+  // write data
+  if (t->n_new >= t->n_old)
+  {
+    // clear all bits
+    memset(t->new_row, 0, t->n_new);
+
+    memcpy(t->new_row, s, t->n_old);
+    truncated = false;
+  } else {
+    // set all bits, for parity with replication's demotion semantics
+    memset(t->new_row, 0xFF, t->n_new);
+    truncated = true;
+  }
+
+  return t->new_row;
+}
+
+template< typename S, typename T >
+void *
+BackupRestore::convert_array(const void * source,
+                             void * target,
+                             bool & truncated)
+{
+  if (!source || !target)
+    return NULL;
+
+  // shortcuts (note that all S::... and T::... are compile-time expr)
+  const unsigned char * const s = (const unsigned char *)source;
+  char_n_padding_struct * const t = (char_n_padding_struct *)target;
+  const Uint32 s_prefix_length = S::lengthPrefixSize();
+  const Uint32 t_prefix_length = T::lengthPrefixSize();
+
+  // read and adjust length
+  Uint32 length = (S::isFixedSized() ? t->n_old : S::readLengthPrefix(s));
+  const Uint32 max_length = t->n_new - t_prefix_length;
+  if (S::isFixedSized() && !m_preserve_trailing_spaces) {
+    const char s_padding_char = (S::isBinary() ? 0x00 : ' ');
+    // ignore padding chars for data copying or truncation reporting
+    while (length > 0 && s[length - 1] == s_padding_char) {
+      length--;
+    }
+  }
+  if (length <= max_length) {
+    truncated = false;
+  } else {
+    length = max_length;
+    truncated = true;
+  }
+
+  // write length prefix
+  if (!T::isFixedSized()) {
+    T::writeLengthPrefix(t->new_row, length);
+  }
+
+  // write data
+  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
+
+  // write padding
+  if (T::isFixedSized()) {
+    const char t_padding_char = (T::isBinary() ? 0x00 : ' ');
+    const Uint32 l = max_length - length;
+    memset(t->new_row + t_prefix_length + length, t_padding_char, l);
+  }
+
+  return t->new_row;
+}
+
+template< typename S, typename T >
+void *
+BackupRestore::convert_integral(const void * source,
+                                void * target,
+                                bool & truncated)
+{
+  if (!source || !target)
+    return NULL;
+
+  // read the source value
+  typename S::DomainT s;
+  S::load(&s, (char *)source);
+
+  // Note: important to correctly handle mixed signedness comparisons.
+  //
+  // The problem: A straight-forward approach to convert value 's' into
+  // type 'T' might be to check into which of these subranges 's' falls
+  //    ... < T's lower bound <= ... <= T's upper bound < ...
+  // However, this approach is _incorrect_ when applied to generic code
+  //    if (s < T::lowest()) ... else if (s > T::highest()) ... else ...
+  // since 'S' and 'T' may be types of different signedness.
+  //
+  // Under ansi (and even more K&R) C promotion rules, if 'T' is unsigned
+  // and if there's no larger signed type available, the value 's' gets
+  // promoted to unsigned; then, a negative value of 's' becomes (large)
+  // positive -- with a wrong comparison outcome. Furthermore, no "mixed
+  // signedness comparison" compiler warnings should be triggered for any
+  // specialization of integral types 'S' and 'T'.
+  //
+  // The correct approach: do lower bound comparisons on signed types and
+  // upper bound comparisons on unsigned types only; this requires casts.
+  // For the casts to be safe, compare the value against the zero literal
+  //    if (s < 0) { check as signed } else if (s > 0) { check as unsigned }
+  // which is always a valid test, for signed and unsigned types.
+  //
+  // This implies that correct, generic conversion code must test into
+  // which of these _four_ subranges value 's' falls
+  //    ... < T's lower bound <= ... <= 0 <= ... <= T's upper bound < ...
+  // while handling 's' as signed/unsigned where less/greater zero.
+  //
+  // Obviously, simplifications are possible if 'S' is unsigned or known
+  // to be a subset of 'T'.  This can be accomplished by a few additional
+  // compile-time expression tests, which allow code optimization to
+  // issue fewer checks for certain specializations of types 'S' and 'T'.
+
+  // write the target value
+  typename T::DomainT t;
+  if (s == 0) {               // fast track case
+
+    t = 0;
+    truncated = false;
+
+  } else if (s < 0) {         // compile-time expr if S is unsigned
+
+    // check value against lower bound as _signed_, safe since all <= 0
+    assert(S::lowest() <= 0 && T::lowest() <= 0 && s <= 0);
+    const typename S::SignedT s_l_s = S::asSigned(S::lowest());
+    const typename T::SignedT t_l_s = T::asSigned(T::lowest());
+    const typename S::SignedT s_s = S::asSigned(s);
+    if ((s_l_s < t_l_s)      // compile-time expr
+        && (s_s < t_l_s)) {  // lower bound check
+      t = T::lowest();
+      truncated = true;
+    } else {                 // within both bounds
+      t = static_cast< typename T::DomainT >(s);
+      truncated = false;
+    }
+
+  } else { // (s > 0)
+
+    // check value against upper bound as _unsigned_, safe since all >= 0
+    assert(S::highest() >= 0 && T::highest() >= 0 && s >= 0);
+    const typename S::UnsignedT s_h_u = S::asUnsigned(S::highest());
+    const typename T::UnsignedT t_h_u = T::asUnsigned(T::highest());
+    const typename S::UnsignedT s_u = S::asUnsigned(s);
+    if ((s_h_u > t_h_u)      // compile-time expr
+        && (s_u > t_h_u)) {  // upper bound check
+      t = T::highest();
+      truncated = true;
+    } else {                 // within both bounds
+      t = static_cast< typename T::DomainT >(s);
+      truncated = false;
+    }
+
+  }
+  T::store((char *)target, &t);
+
+  return target;
+}
+
+// ----------------------------------------------------------------------
+// conversion rules
+// ----------------------------------------------------------------------
+
 const PromotionRules 
 BackupRestore::m_allowed_promotion_attrs[] = {
-  // char promotions/demotions
-  {NDBCOL::Char,           NDBCOL::Char,           check_compat_sizes,     convert_char_char},
-  {NDBCOL::Char,           NDBCOL::Varchar,        check_compat_sizes,     convert_char_varchar},
-  {NDBCOL::Char,           NDBCOL::Longvarchar,    check_compat_sizes,     convert_char_longvarchar},
-  {NDBCOL::Varchar,        NDBCOL::Char,           check_compat_sizes,     convert_varchar_char},
-  {NDBCOL::Varchar,        NDBCOL::Varchar,        check_compat_sizes,     convert_var_var},
-  {NDBCOL::Varchar,        NDBCOL::Longvarchar,    check_compat_sizes,     convert_var_longvar},
-  {NDBCOL::Longvarchar,    NDBCOL::Char,           check_compat_sizes,     convert_longvarchar_char},
-  {NDBCOL::Longvarchar,    NDBCOL::Varchar,        check_compat_sizes,     convert_longvar_var},
-  {NDBCOL::Longvarchar,    NDBCOL::Longvarchar,    check_compat_sizes,     convert_longvar_longvar},
-
-  // binary promotions/demotions
-  {NDBCOL::Binary,         NDBCOL::Binary,         check_compat_sizes,     convert_binary_binary},
-  {NDBCOL::Binary,         NDBCOL::Varbinary,      check_compat_sizes,     convert_binary_varbinary},
-  {NDBCOL::Binary,         NDBCOL::Longvarbinary,  check_compat_sizes,     convert_binary_longvarbinary},
-  {NDBCOL::Varbinary,      NDBCOL::Binary,         check_compat_sizes,     convert_varbinary_binary},
-  {NDBCOL::Varbinary,      NDBCOL::Varbinary,      check_compat_sizes,     convert_var_var},
-  {NDBCOL::Varbinary,      NDBCOL::Longvarbinary,  check_compat_sizes,     convert_var_longvar},
-  {NDBCOL::Longvarbinary,  NDBCOL::Binary,         check_compat_sizes,     convert_longvarbinary_binary},
-  {NDBCOL::Longvarbinary,  NDBCOL::Varbinary,      check_compat_sizes,     convert_longvar_var},
-  {NDBCOL::Longvarbinary,  NDBCOL::Longvarbinary,  check_compat_sizes,     convert_longvar_longvar},
-
   // bitset promotions/demotions
-  {NDBCOL::Bit,            NDBCOL::Bit,            check_compat_sizes,     convert_bit_bit},
+  {NDBCOL::Bit,            NDBCOL::Bit,            check_compat_sizes,
+   convert_bitset},
+
+  // char array promotions/demotions
+  {NDBCOL::Char,           NDBCOL::Char,           check_compat_sizes,
+   convert_array< Hchar, Hchar >},
+  {NDBCOL::Char,           NDBCOL::Varchar,        check_compat_sizes,
+   convert_array< Hchar, Hvarchar >},
+  {NDBCOL::Char,           NDBCOL::Longvarchar,    check_compat_sizes,
+   convert_array< Hchar, Hlongvarchar >},
+  {NDBCOL::Varchar,        NDBCOL::Char,           check_compat_sizes,
+   convert_array< Hvarchar, Hchar >},
+  {NDBCOL::Varchar,        NDBCOL::Varchar,        check_compat_sizes,
+   convert_array< Hvarchar, Hvarchar >},
+  {NDBCOL::Varchar,        NDBCOL::Longvarchar,    check_compat_sizes,
+   convert_array< Hvarchar, Hlongvarchar >},
+  {NDBCOL::Longvarchar,    NDBCOL::Char,           check_compat_sizes,
+   convert_array< Hlongvarchar, Hchar >},
+  {NDBCOL::Longvarchar,    NDBCOL::Varchar,        check_compat_sizes,
+   convert_array< Hlongvarchar, Hvarchar >},
+  {NDBCOL::Longvarchar,    NDBCOL::Longvarchar,    check_compat_sizes,
+   convert_array< Hlongvarchar, Hlongvarchar >},
+
+  // binary array promotions/demotions
+  {NDBCOL::Binary,         NDBCOL::Binary,         check_compat_sizes,
+   convert_array< Hbinary, Hbinary >},
+  {NDBCOL::Binary,         NDBCOL::Varbinary,      check_compat_sizes,
+   convert_array< Hbinary, Hvarbinary >},
+  {NDBCOL::Binary,         NDBCOL::Longvarbinary,  check_compat_sizes,
+   convert_array< Hbinary, Hlongvarbinary >},
+  {NDBCOL::Varbinary,      NDBCOL::Binary,         check_compat_sizes,
+   convert_array< Hvarbinary, Hbinary >},
+  {NDBCOL::Varbinary,      NDBCOL::Varbinary,      check_compat_sizes,
+   convert_array< Hvarbinary, Hvarbinary >},
+  {NDBCOL::Varbinary,      NDBCOL::Longvarbinary,  check_compat_sizes,
+   convert_array< Hvarbinary, Hlongvarbinary >},
+  {NDBCOL::Longvarbinary,  NDBCOL::Binary,         check_compat_sizes,
+   convert_array< Hlongvarbinary, Hbinary >},
+  {NDBCOL::Longvarbinary,  NDBCOL::Varbinary,      check_compat_sizes,
+   convert_array< Hlongvarbinary, Hvarbinary >},
+  {NDBCOL::Longvarbinary,  NDBCOL::Longvarbinary,  check_compat_sizes,
+   convert_array< Hlongvarbinary, Hlongvarbinary >},
 
   // integral promotions
-  {NDBCOL::Tinyint,        NDBCOL::Smallint,       check_compat_promotion, convert_int8_int16},
-  {NDBCOL::Tinyint,        NDBCOL::Mediumint,      check_compat_promotion, convert_int8_int24},
-  {NDBCOL::Tinyint,        NDBCOL::Int,            check_compat_promotion, convert_int8_int32},
-  {NDBCOL::Tinyint,        NDBCOL::Bigint,         check_compat_promotion, convert_int8_int64},
-  {NDBCOL::Smallint,       NDBCOL::Mediumint,      check_compat_promotion, convert_int16_int24},
-  {NDBCOL::Smallint,       NDBCOL::Int,            check_compat_promotion, convert_int16_int32},
-  {NDBCOL::Smallint,       NDBCOL::Bigint,         check_compat_promotion, convert_int16_int64},
-  {NDBCOL::Mediumint,      NDBCOL::Int,            check_compat_promotion, convert_int24_int32},
-  {NDBCOL::Mediumint,      NDBCOL::Bigint,         check_compat_promotion, convert_int24_int64},
-  {NDBCOL::Int,            NDBCOL::Bigint,         check_compat_promotion, convert_int32_int64},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Smallunsigned,  check_compat_promotion, convert_uint8_uint16},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Mediumunsigned, check_compat_promotion, convert_uint8_uint24},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Unsigned,       check_compat_promotion, convert_uint8_uint32},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Bigunsigned,    check_compat_promotion, convert_uint8_uint64},
-  {NDBCOL::Smallunsigned,  NDBCOL::Mediumunsigned, check_compat_promotion, convert_uint16_uint24},
-  {NDBCOL::Smallunsigned,  NDBCOL::Unsigned,       check_compat_promotion, convert_uint16_uint32},
-  {NDBCOL::Smallunsigned,  NDBCOL::Bigunsigned,    check_compat_promotion, convert_uint16_uint64},
-  {NDBCOL::Mediumunsigned, NDBCOL::Unsigned,       check_compat_promotion, convert_uint24_uint32},
-  {NDBCOL::Mediumunsigned, NDBCOL::Bigunsigned,    check_compat_promotion, convert_uint24_uint64},
-  {NDBCOL::Unsigned,       NDBCOL::Bigunsigned,    check_compat_promotion, convert_uint32_uint64},
+  {NDBCOL::Tinyint,        NDBCOL::Smallint,       check_compat_promotion,
+   convert_integral< Hint8, Hint16>},
+  {NDBCOL::Tinyint,        NDBCOL::Mediumint,      check_compat_promotion,
+   convert_integral< Hint8, Hint24>},
+  {NDBCOL::Tinyint,        NDBCOL::Int,            check_compat_promotion,
+   convert_integral< Hint8, Hint32>},
+  {NDBCOL::Tinyint,        NDBCOL::Bigint,         check_compat_promotion,
+   convert_integral< Hint8, Hint64>},
+  {NDBCOL::Smallint,       NDBCOL::Mediumint,      check_compat_promotion,
+   convert_integral< Hint16, Hint24>},
+  {NDBCOL::Smallint,       NDBCOL::Int,            check_compat_promotion,
+   convert_integral< Hint16, Hint32>},
+  {NDBCOL::Smallint,       NDBCOL::Bigint,         check_compat_promotion,
+   convert_integral< Hint16, Hint64>},
+  {NDBCOL::Mediumint,      NDBCOL::Int,            check_compat_promotion,
+   convert_integral< Hint24, Hint32>},
+  {NDBCOL::Mediumint,      NDBCOL::Bigint,         check_compat_promotion,
+   convert_integral< Hint24, Hint64>},
+  {NDBCOL::Int,            NDBCOL::Bigint,         check_compat_promotion,
+   convert_integral< Hint32, Hint64>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Smallunsigned,  check_compat_promotion,
+   convert_integral< Huint8, Huint16>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Mediumunsigned, check_compat_promotion,
+   convert_integral< Huint8, Huint24>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Unsigned,       check_compat_promotion,
+   convert_integral< Huint8, Huint32>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Bigunsigned,    check_compat_promotion,
+   convert_integral< Huint8, Huint64>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Mediumunsigned, check_compat_promotion,
+   convert_integral< Huint16, Huint24>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Unsigned,       check_compat_promotion,
+   convert_integral< Huint16, Huint32>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Bigunsigned,    check_compat_promotion,
+   convert_integral< Huint16, Huint64>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Unsigned,       check_compat_promotion,
+   convert_integral< Huint24, Huint32>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Bigunsigned,    check_compat_promotion,
+   convert_integral< Huint24, Huint64>},
+  {NDBCOL::Unsigned,       NDBCOL::Bigunsigned,    check_compat_promotion,
+   convert_integral< Huint32, Huint64>},
 
   // integral demotions
-  {NDBCOL::Smallint,       NDBCOL::Tinyint,        check_compat_lossy, convert_int16_int8},
-  {NDBCOL::Mediumint,      NDBCOL::Tinyint,        check_compat_lossy, convert_int24_int8},
-  {NDBCOL::Mediumint,      NDBCOL::Smallint,       check_compat_lossy, convert_int24_int16},
-  {NDBCOL::Int,            NDBCOL::Tinyint,        check_compat_lossy, convert_int32_int8},
-  {NDBCOL::Int,            NDBCOL::Smallint,       check_compat_lossy, convert_int32_int16},
-  {NDBCOL::Int,            NDBCOL::Mediumint,      check_compat_lossy, convert_int32_int24},
-  {NDBCOL::Bigint,         NDBCOL::Tinyint,        check_compat_lossy, convert_int64_int8},
-  {NDBCOL::Bigint,         NDBCOL::Smallint,       check_compat_lossy, convert_int64_int16},
-  {NDBCOL::Bigint,         NDBCOL::Mediumint,      check_compat_lossy, convert_int64_int24},
-  {NDBCOL::Bigint,         NDBCOL::Int,            check_compat_lossy, convert_int64_int32},
-  {NDBCOL::Smallunsigned,  NDBCOL::Tinyunsigned,   check_compat_lossy, convert_uint16_uint8},
-  {NDBCOL::Mediumunsigned, NDBCOL::Tinyunsigned,   check_compat_lossy, convert_uint24_uint8},
-  {NDBCOL::Mediumunsigned, NDBCOL::Smallunsigned,  check_compat_lossy, convert_uint24_uint16},
-  {NDBCOL::Unsigned,       NDBCOL::Tinyunsigned,   check_compat_lossy, convert_uint32_uint8},
-  {NDBCOL::Unsigned,       NDBCOL::Smallunsigned,  check_compat_lossy, convert_uint32_uint16},
-  {NDBCOL::Unsigned,       NDBCOL::Mediumunsigned, check_compat_lossy, convert_uint32_uint24},
-  {NDBCOL::Bigunsigned,    NDBCOL::Tinyunsigned,   check_compat_lossy, convert_uint64_uint8},
-  {NDBCOL::Bigunsigned,    NDBCOL::Smallunsigned,  check_compat_lossy, convert_uint64_uint16},
-  {NDBCOL::Bigunsigned,    NDBCOL::Mediumunsigned, check_compat_lossy, convert_uint64_uint24},
-  {NDBCOL::Bigunsigned,    NDBCOL::Unsigned,       check_compat_lossy, convert_uint64_uint32},
+  {NDBCOL::Smallint,       NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Hint16, Hint8>},
+  {NDBCOL::Mediumint,      NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Hint24, Hint8>},
+  {NDBCOL::Mediumint,      NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Hint24, Hint16>},
+  {NDBCOL::Int,            NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Hint32, Hint8>},
+  {NDBCOL::Int,            NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Hint32, Hint16>},
+  {NDBCOL::Int,            NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Hint32, Hint24>},
+  {NDBCOL::Bigint,         NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Hint64, Hint8>},
+  {NDBCOL::Bigint,         NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Hint64, Hint16>},
+  {NDBCOL::Bigint,         NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Hint64, Hint24>},
+  {NDBCOL::Bigint,         NDBCOL::Int,            check_compat_lossy,
+   convert_integral< Hint64, Hint32>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Huint16, Huint8>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Huint24, Huint8>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Huint24, Huint16>},
+  {NDBCOL::Unsigned,       NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Huint32, Huint8>},
+  {NDBCOL::Unsigned,       NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Huint32, Huint16>},
+  {NDBCOL::Unsigned,       NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Huint32, Huint24>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Huint64, Huint8>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Huint64, Huint16>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Huint64, Huint24>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Unsigned,       check_compat_lossy,
+   convert_integral< Huint64, Huint32>},
 
   // integral signedness conversions
-  {NDBCOL::Tinyint,        NDBCOL::Tinyunsigned,   check_compat_lossy, convert_int8_uint8},
-  {NDBCOL::Smallint,       NDBCOL::Smallunsigned,  check_compat_lossy, convert_int16_uint16},
-  {NDBCOL::Mediumint,      NDBCOL::Mediumunsigned, check_compat_lossy, convert_int24_uint24},
-  {NDBCOL::Int,            NDBCOL::Unsigned,       check_compat_lossy, convert_int32_uint32},
-  {NDBCOL::Bigint,         NDBCOL::Bigunsigned,    check_compat_lossy, convert_int64_uint64},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Tinyint,        check_compat_lossy, convert_uint8_int8},
-  {NDBCOL::Smallunsigned,  NDBCOL::Smallint,       check_compat_lossy, convert_uint16_int16},
-  {NDBCOL::Mediumunsigned, NDBCOL::Mediumint,      check_compat_lossy, convert_uint24_int24},
-  {NDBCOL::Unsigned,       NDBCOL::Int,            check_compat_lossy, convert_uint32_int32},
-  {NDBCOL::Bigunsigned,    NDBCOL::Bigint,         check_compat_lossy, convert_uint64_int64},
+  {NDBCOL::Tinyint,        NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Hint8, Huint8>},
+  {NDBCOL::Smallint,       NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Hint16, Huint16>},
+  {NDBCOL::Mediumint,      NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Hint24, Huint24>},
+  {NDBCOL::Int,            NDBCOL::Unsigned,       check_compat_lossy,
+   convert_integral< Hint32, Huint32>},
+  {NDBCOL::Bigint,         NDBCOL::Bigunsigned,    check_compat_lossy,
+   convert_integral< Hint64, Huint64>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Huint8, Hint8>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Huint16, Hint16>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Huint24, Hint24>},
+  {NDBCOL::Unsigned,       NDBCOL::Int,            check_compat_lossy,
+   convert_integral< Huint32, Hint32>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Bigint,         check_compat_lossy,
+   convert_integral< Huint64, Hint64>},
 
   // integral signedness+promotion conversions
-  {NDBCOL::Tinyint,        NDBCOL::Smallunsigned,  check_compat_lossy, convert_int8_uint16},
-  {NDBCOL::Tinyint,        NDBCOL::Mediumunsigned, check_compat_lossy, convert_int8_uint24},
-  {NDBCOL::Tinyint,        NDBCOL::Unsigned,       check_compat_lossy, convert_int8_uint32},
-  {NDBCOL::Tinyint,        NDBCOL::Bigunsigned,    check_compat_lossy, convert_int8_uint64},
-  {NDBCOL::Smallint,       NDBCOL::Mediumunsigned, check_compat_lossy, convert_int16_uint24},
-  {NDBCOL::Smallint,       NDBCOL::Unsigned,       check_compat_lossy, convert_int16_uint32},
-  {NDBCOL::Smallint,       NDBCOL::Bigunsigned,    check_compat_lossy, convert_int16_uint64},
-  {NDBCOL::Mediumint,      NDBCOL::Unsigned,       check_compat_lossy, convert_int24_uint32},
-  {NDBCOL::Mediumint,      NDBCOL::Bigunsigned,    check_compat_lossy, convert_int24_uint64},
-  {NDBCOL::Int,            NDBCOL::Bigunsigned,    check_compat_lossy, convert_int32_uint64},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Smallint,       check_compat_lossy, convert_uint8_int16},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Mediumint,      check_compat_lossy, convert_uint8_int24},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Int,            check_compat_lossy, convert_uint8_int32},
-  {NDBCOL::Tinyunsigned,   NDBCOL::Bigint,         check_compat_lossy, convert_uint8_int64},
-  {NDBCOL::Smallunsigned,  NDBCOL::Mediumint,      check_compat_lossy, convert_uint16_int24},
-  {NDBCOL::Smallunsigned,  NDBCOL::Int,            check_compat_lossy, convert_uint16_int32},
-  {NDBCOL::Smallunsigned,  NDBCOL::Bigint,         check_compat_lossy, convert_uint16_int64},
-  {NDBCOL::Mediumunsigned, NDBCOL::Int,            check_compat_lossy, convert_uint24_int32},
-  {NDBCOL::Mediumunsigned, NDBCOL::Bigint,         check_compat_lossy, convert_uint24_int64},
-  {NDBCOL::Unsigned,       NDBCOL::Bigint,         check_compat_lossy, convert_uint32_int64},
+  {NDBCOL::Tinyint,        NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Hint8, Huint16>},
+  {NDBCOL::Tinyint,        NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Hint8, Huint24>},
+  {NDBCOL::Tinyint,        NDBCOL::Unsigned,       check_compat_lossy,
+   convert_integral< Hint8, Huint32>},
+  {NDBCOL::Tinyint,        NDBCOL::Bigunsigned,    check_compat_lossy,
+   convert_integral< Hint8, Huint64>},
+  {NDBCOL::Smallint,       NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Hint16, Huint24>},
+  {NDBCOL::Smallint,       NDBCOL::Unsigned,       check_compat_lossy,
+   convert_integral< Hint16, Huint32>},
+  {NDBCOL::Smallint,       NDBCOL::Bigunsigned,    check_compat_lossy,
+   convert_integral< Hint16, Huint64>},
+  {NDBCOL::Mediumint,      NDBCOL::Unsigned,       check_compat_lossy,
+   convert_integral< Hint24, Huint32>},
+  {NDBCOL::Mediumint,      NDBCOL::Bigunsigned,    check_compat_lossy,
+   convert_integral< Hint24, Huint64>},
+  {NDBCOL::Int,            NDBCOL::Bigunsigned,    check_compat_lossy,
+   convert_integral< Hint32, Huint64>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Huint8, Hint16>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Huint8, Hint24>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Int,            check_compat_lossy,
+   convert_integral< Huint8, Hint32>},
+  {NDBCOL::Tinyunsigned,   NDBCOL::Bigint,         check_compat_lossy,
+   convert_integral< Huint8, Hint64>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Huint16, Hint24>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Int,            check_compat_lossy,
+   convert_integral< Huint16, Hint32>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Bigint,         check_compat_lossy,
+   convert_integral< Huint16, Hint64>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Int,            check_compat_lossy,
+   convert_integral< Huint24, Hint32>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Bigint,         check_compat_lossy,
+   convert_integral< Huint24, Hint64>},
+  {NDBCOL::Unsigned,       NDBCOL::Bigint,         check_compat_lossy,
+   convert_integral< Huint32, Hint64>},
 
   // integral signedness+demotion conversions
-  {NDBCOL::Smallint,       NDBCOL::Tinyunsigned,   check_compat_lossy, convert_int16_uint8},
-  {NDBCOL::Mediumint,      NDBCOL::Tinyunsigned,   check_compat_lossy, convert_int24_uint8},
-  {NDBCOL::Mediumint,      NDBCOL::Smallunsigned,  check_compat_lossy, convert_int24_uint16},
-  {NDBCOL::Int,            NDBCOL::Tinyunsigned,   check_compat_lossy, convert_int32_uint8},
-  {NDBCOL::Int,            NDBCOL::Smallunsigned,  check_compat_lossy, convert_int32_uint16},
-  {NDBCOL::Int,            NDBCOL::Mediumunsigned, check_compat_lossy, convert_int32_uint24},
-  {NDBCOL::Bigint,         NDBCOL::Tinyunsigned,   check_compat_lossy, convert_int64_uint8},
-  {NDBCOL::Bigint,         NDBCOL::Smallunsigned,  check_compat_lossy, convert_int64_uint16},
-  {NDBCOL::Bigint,         NDBCOL::Mediumunsigned, check_compat_lossy, convert_int64_uint24},
-  {NDBCOL::Bigint,         NDBCOL::Unsigned,       check_compat_lossy, convert_int64_uint32},
-  {NDBCOL::Smallunsigned,  NDBCOL::Tinyint,        check_compat_lossy, convert_uint16_int8},
-  {NDBCOL::Mediumunsigned, NDBCOL::Tinyint,        check_compat_lossy, convert_uint24_int8},
-  {NDBCOL::Mediumunsigned, NDBCOL::Smallint,       check_compat_lossy, convert_uint24_int16},
-  {NDBCOL::Unsigned,       NDBCOL::Tinyint,        check_compat_lossy, convert_uint32_int8},
-  {NDBCOL::Unsigned,       NDBCOL::Smallint,       check_compat_lossy, convert_uint32_int16},
-  {NDBCOL::Unsigned,       NDBCOL::Mediumint,      check_compat_lossy, convert_uint32_int24},
-  {NDBCOL::Bigunsigned,    NDBCOL::Tinyint,        check_compat_lossy, convert_uint64_int8},
-  {NDBCOL::Bigunsigned,    NDBCOL::Smallint,       check_compat_lossy, convert_uint64_int16},
-  {NDBCOL::Bigunsigned,    NDBCOL::Mediumint,      check_compat_lossy, convert_uint64_int24},
-  {NDBCOL::Bigunsigned,    NDBCOL::Int,            check_compat_lossy, convert_uint64_int32},
+  {NDBCOL::Smallint,       NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Hint16, Huint8>},
+  {NDBCOL::Mediumint,      NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Hint24, Huint8>},
+  {NDBCOL::Mediumint,      NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Hint24, Huint16>},
+  {NDBCOL::Int,            NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Hint32, Huint8>},
+  {NDBCOL::Int,            NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Hint32, Huint16>},
+  {NDBCOL::Int,            NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Hint32, Huint24>},
+  {NDBCOL::Bigint,         NDBCOL::Tinyunsigned,   check_compat_lossy,
+   convert_integral< Hint64, Huint8>},
+  {NDBCOL::Bigint,         NDBCOL::Smallunsigned,  check_compat_lossy,
+   convert_integral< Hint64, Huint16>},
+  {NDBCOL::Bigint,         NDBCOL::Mediumunsigned, check_compat_lossy,
+   convert_integral< Hint64, Huint24>},
+  {NDBCOL::Bigint,         NDBCOL::Unsigned,       check_compat_lossy,
+   convert_integral< Hint64, Huint32>},
+  {NDBCOL::Smallunsigned,  NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Huint16, Hint8>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Huint24, Hint8>},
+  {NDBCOL::Mediumunsigned, NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Huint24, Hint16>},
+  {NDBCOL::Unsigned,       NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Huint32, Hint8>},
+  {NDBCOL::Unsigned,       NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Huint32, Hint16>},
+  {NDBCOL::Unsigned,       NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Huint32, Hint24>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Tinyint,        check_compat_lossy,
+   convert_integral< Huint64, Hint8>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Smallint,       check_compat_lossy,
+   convert_integral< Huint64, Hint16>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Mediumint,      check_compat_lossy,
+   convert_integral< Huint64, Hint24>},
+  {NDBCOL::Bigunsigned,    NDBCOL::Int,            check_compat_lossy,
+   convert_integral< Huint64, Hint32>},
 
   {NDBCOL::Undefined,      NDBCOL::Undefined,      NULL,                  NULL}
 };
@@ -2412,2203 +2700,134 @@ BackupRestore::check_compat_sizes(const 
 }
 
 // ----------------------------------------------------------------------
-// integral attribute promotion conversions
-// ----------------------------------------------------------------------
-
-void *
-BackupRestore::convert_int8_int16(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int16 new_data16 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int8_int24(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int32 new_data24 = old_data8;
-  truncated = false;
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int8_int32(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int32 new_data32 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int8_int64(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int64 new_data64 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_int24(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int32 new_data24 = old_data16;
-  truncated = false;
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_int32(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int32 new_data32 = old_data16;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_int64(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int64 new_data64 = old_data16;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_int32(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Int32 new_data32 = old_data24;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_int64(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Int64 new_data64 = old_data24;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_int64(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int64 new_data64 = old_data32;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_uint16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint16 new_data16 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_uint24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint32 new_data24 = old_data8;
-  truncated = false;
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_uint32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint32 new_data32 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_uint64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint64 new_data64 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_uint24(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint32 new_data24 = old_data16;
-  truncated = false;
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_uint32(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint32 new_data32 = old_data16;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_uint64(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint64 new_data64 = old_data16;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_uint32(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Uint32 new_data32 = old_data24;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_uint64(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Uint64 new_data64 = old_data24;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_uint64(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint64 new_data64 = old_data32;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-// ----------------------------------------------------------------------
-// integral attribute demotion conversions
-// (follows MySQL replication semantics truncating to nearest legal value)
+// explicit template instantiations
 // ----------------------------------------------------------------------
 
-void *
-BackupRestore::convert_int16_int8(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int8 new_data8;
-  if (old_data16 < INT_MIN8) {
-    new_data8 = (Int8)(INT_MIN8);
-    truncated = true;
-  } else if (old_data16 > INT_MAX8) {
-    new_data8 = (Int8)(INT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Int8)(old_data16);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_int8(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Int8 new_data8;
-  if (old_data24 < INT_MIN8) {
-    new_data8 = (Int8)(INT_MIN8);
-    truncated = true;
-  } else if (old_data24 > INT_MAX8) {
-    new_data8 = (Int8)(INT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Int8)(old_data24);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_int16(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Int16 new_data16;
-  if (old_data24 < INT_MIN16) {
-    new_data16 = (Int16)(INT_MIN16);
-    truncated = true;
-  } else if (old_data24 > INT_MAX16) {
-    new_data16 = (Int16)(INT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Int16)(old_data24);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_int8(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int8 new_data8;
-  if (old_data32 < INT_MIN8) {
-    new_data8 = (Int8)(INT_MIN8);
-    truncated = true;
-  } else if (old_data32 > INT_MAX8) {
-    new_data8 = (Int8)(INT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Int8)(old_data32);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_int16(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int16 new_data16;
-  if (old_data32 < INT_MIN16) {
-    new_data16 = (Int16)(INT_MIN16);
-    truncated = true;
-  } else if (old_data32 > INT_MAX16) {
-    new_data16 = (Int16)(INT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Int16)(old_data32);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_int24(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int32 new_data24;
-  if (old_data32 < INT_MIN24) {
-    new_data24 = (Int32)(INT_MIN24);
-    truncated = true;
-  } else if (old_data32 > INT_MAX24) {
-    new_data24 = (Int32)(INT_MAX24);
-    truncated = true;
-  } else {
-    new_data24 = (Int32)(old_data32);
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_int8(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int8 new_data8;
-  if (old_data64 < INT_MIN8) {
-    new_data8 = (Int8)(INT_MIN8);
-    truncated = true;
-  } else if (old_data64 > INT_MAX8) {
-    new_data8 = (Int8)(INT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Int8)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_int16(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int16 new_data16;
-  if (old_data64 < INT_MIN16) {
-    new_data16 = (Int16)(INT_MIN16);
-    truncated = true;
-  } else if (old_data64 > INT_MAX16) {
-    new_data16 = (Int16)(INT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Int16)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_int24(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int32 new_data24;
-  if (old_data64 < INT_MIN24) {
-    new_data24 = (Int32)(INT_MIN24);
-    truncated = true;
-  } else if (old_data64 > INT_MAX24) {
-    new_data24 = (Int32)(INT_MAX24);
-    truncated = true;
-  } else {
-    new_data24 = (Int32)(old_data64);
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_int32(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int32 new_data32;
-  if (old_data64 < INT_MIN32) {
-    new_data32 = (Int32)(INT_MIN32);
-    truncated = true;
-  } else if (old_data64 > INT_MAX32) {
-    new_data32 = (Int32)(INT_MAX32);
-    truncated = true;
-  } else {
-    new_data32 = (Int32)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_uint8(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint8 new_data8;
-  if (old_data16 > UINT_MAX8) {
-    new_data8 = (Uint8)(UINT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)(old_data16);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
+template class Vector<NdbDictionary::Table*>;
+template class Vector<const NdbDictionary::Table*>;
+template class Vector<NdbDictionary::Tablespace*>;
+template class Vector<NdbDictionary::LogfileGroup*>;
+template class Vector<NdbDictionary::Index*>;
+template class Vector<Vector<NdbDictionary::Index*> >;
 
-void *
-BackupRestore::convert_uint24_uint8(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Uint8 new_data8;
-  if (old_data24 > UINT_MAX8) {
-    new_data8 = (Uint8)(UINT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)(old_data24);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_uint16(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Uint16 new_data16;
-  if (old_data24 > UINT_MAX16) {
-    new_data16 = (Uint16)(UINT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)(old_data24);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_uint8(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint8 new_data8;
-  if (old_data32 > UINT_MAX8) {
-    new_data8 = (Uint8)(UINT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)(old_data32);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_uint16(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint16 new_data16;
-  if (old_data32 > UINT_MAX16) {
-    new_data16 = (Uint16)(UINT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)(old_data32);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_uint24(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint32 new_data24;
-  if (old_data32 > UINT_MAX24) {
-    new_data24 = (Uint32)(UINT_MAX24);
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)(old_data32);
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_uint8(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint8 new_data8;
-  if (old_data64 > UINT_MAX8) {
-    new_data8 = (Uint8)(UINT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_uint16(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint16 new_data16;
-  if (old_data64 > UINT_MAX16) {
-    new_data16 = (Uint16)(UINT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_uint24(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint32 new_data24;
-  if (old_data64 > UINT_MAX24) {
-    new_data24 = (Uint32)(UINT_MAX24);
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)(old_data64);
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_uint32(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint32 new_data32;
-  if (old_data64 > UINT_MAX32) {
-    new_data32 = (Uint32)(UINT_MAX32);
-    truncated = true;
-  } else {
-    new_data32 = (Uint32)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-// ----------------------------------------------------------------------
-// integral attribute signedness conversions
-// (follows MySQL replication semantics truncating to nearest legal value)
-// ----------------------------------------------------------------------
-
-void *
-BackupRestore::convert_int8_uint8(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint8 new_data8;
-  if (old_data8 < 0) {
-    new_data8 = (Uint8)0;
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)(old_data8);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_uint16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint16 new_data16;
-  if (old_data16 < 0) {
-    new_data16 = (Uint16)0;
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)(old_data16);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_uint24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Uint32 new_data24;
-  if (old_data24 < 0) {
-    new_data24 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)(old_data24);
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_uint32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint32 new_data32;
-  if (old_data32 < 0) {
-    new_data32 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data32 = (Uint32)(old_data32);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_uint64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint64 new_data64;
-  if (old_data64 < 0) {
-    new_data64 = (Uint64)0;
-    truncated = true;
-  } else {
-    new_data64 = (Uint64)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_int8(const void *old_data,
-                                  void *parameter,
-                                  bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int8 new_data8;
-  if (old_data8 > INT_MAX8) {
-    new_data8 = (Int8)(INT_MAX8);
-    truncated = true;
-  } else {
-    new_data8 = (Int8)(old_data8);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_int16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int16 new_data16;
-  if (old_data16 > INT_MAX16) {
-    new_data16 = (Int16)(INT_MAX16);
-    truncated = true;
-  } else {
-    new_data16 = (Int16)(old_data16);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_int24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Int32 new_data24 = (Int32)((old_data24 > INT_MAX24) ? INT_MAX24
-                             : old_data24);
-  if (old_data24 > INT_MAX24) {
-    new_data24 = (Int32)(INT_MAX24);
-    truncated = true;
-  } else {
-    new_data24 = (Int32)(old_data24);
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_int32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int32 new_data32;
-  if (old_data32 > INT_MAX32) {
-    new_data32 = (Int32)(INT_MAX32);
-    truncated = true;
-  } else {
-    new_data32 = (Int32)(old_data32);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_int64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int64 new_data64;
-  if (old_data64 > INT_MAX64) {
-    new_data64 = (Int64)(INT_MAX64);
-    truncated = true;
-  } else {
-    new_data64 = (Int64)(old_data64);
-    truncated = false;
-  }
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-// ----------------------------------------------------------------------
-// integral attribute signedness+promotion conversions
-// (follows MySQL replication semantics truncating to nearest legal value)
-// ----------------------------------------------------------------------
-
-void *
-BackupRestore::convert_int8_uint16(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint16 new_data16;
-  if (old_data8 < 0) {
-    new_data16 = (Uint16)0;
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)old_data8;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int8_uint24(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint32 new_data24;
-  if (old_data8 < 0) {
-    new_data24 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)old_data8;
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int8_uint32(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint32 new_data32;
-  if (old_data8 < 0) {
-    new_data32 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data32 = (Uint32)old_data8;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int8_uint64(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Uint64 new_data64;
-  if (old_data8 < 0) {
-    new_data64 = (Uint64)0;
-    truncated = true;
-  } else {
-    new_data64 = (Uint64)old_data8;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_uint24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint32 new_data24;
-  if (old_data16 < 0) {
-    new_data24 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)old_data16;
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_uint32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint32 new_data32;
-  if (old_data16 < 0) {
-    new_data32 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data32 = (Uint32)old_data16;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int16_uint64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint64 new_data64;
-  if (old_data16 < 0) {
-    new_data64 = (Uint64)0;
-    truncated = true;
-  } else {
-    new_data64 = (Uint64)old_data16;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_uint32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Uint32 new_data32;
-  if (old_data24 < 0) {
-    new_data32 = (Uint32)0;
-    truncated = true;
-  } else {
-    new_data32 = (Uint32)old_data24;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_uint64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Uint64 new_data64;
-  if (old_data24 < 0) {
-    new_data64 = (Uint64)0;
-    truncated = true;
-  } else {
-    new_data64 = (Uint64)old_data24;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_uint64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint64 new_data64;
-  if (old_data32 < 0) {
-    new_data64 = (Uint64)0;
-    truncated = true;
-  } else {
-    new_data64 = (Uint64)old_data32;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_int16(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int16 new_data16 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_int24(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int32 new_data24 = old_data8;
-  truncated = false;
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_int32(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int32 new_data32 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint8_int64(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint8 old_data8;
-  memcpy(&old_data8, old_data, 1);
-  Int64 new_data64 = old_data8;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_int24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int32 new_data24 = old_data16;
-  truncated = false;
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_int32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int32 new_data32 = old_data16;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_int64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int64 new_data64 = old_data16;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_int32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Int32 new_data32 = old_data24;
-  truncated = false;
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_int64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Int64 new_data64 = old_data24;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_int64(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int64 new_data64 = old_data32;
-  truncated = false;
-  memcpy(parameter, &new_data64, 8);
-
-  return parameter;
-}
-
-// ----------------------------------------------------------------------
-// integral attribute signedness+demotion conversions
-// (follows MySQL replication semantics truncating to nearest legal value)
-// ----------------------------------------------------------------------
-
-void *
-BackupRestore::convert_int16_uint8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Uint8 new_data8;
-  if (old_data16 < 0) {
-    new_data8 = (Uint8)0;
-    truncated = true;
-  } else if (old_data16 > UINT_MAX8) {
-    new_data8 = (Uint8)UINT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)old_data16;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_uint8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Uint8 new_data8;
-  if (old_data24 < 0) {
-    new_data8 = (Uint8)0;
-    truncated = true;
-  } else if (old_data24 > UINT_MAX8) {
-    new_data8 = (Uint8)UINT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)old_data24;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int24_uint16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data24 = sint3korr((char*)old_data);
-  Uint16 new_data16;
-  if (old_data24 < 0) {
-    new_data16 = (Uint16)0;
-    truncated = true;
-  } else if (old_data24 > UINT_MAX16) {
-    new_data16 = (Uint16)UINT_MAX16;
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)old_data24;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_uint8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint8 new_data8;
-  if (old_data32 < 0) {
-    new_data8 = (Uint8)0;
-    truncated = true;
-  } else if (old_data32 > UINT_MAX8) {
-    new_data8 = (Uint8)UINT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)old_data32;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_uint16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint16 new_data16;
-  if (old_data32 < 0) {
-    new_data16 = (Uint16)0;
-    truncated = true;
-  } else if (old_data32 > UINT_MAX16) {
-    new_data16 = (Uint16)UINT_MAX16;
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)old_data32;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int32_uint24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Uint32 new_data24;
-  if (old_data32 < 0) {
-    new_data24 = (Uint32)0;
-    truncated = true;
-  } else if (old_data32 > UINT_MAX24) {
-    new_data24 = (Uint32)UINT_MAX24;
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)old_data32;
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_uint8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint8 new_data8;
-  if (old_data64 < 0) {
-    new_data8 = (Uint8)0;
-    truncated = true;
-  } else if (old_data64 > UINT_MAX8) {
-    new_data8 = (Uint8)UINT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Uint8)old_data64;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_uint16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint16 new_data16;
-  if (old_data64 < 0) {
-    new_data16 = (Uint16)0;
-    truncated = true;
-  } else if (old_data64 > UINT_MAX16) {
-    new_data16 = (Uint16)UINT_MAX16;
-    truncated = true;
-  } else {
-    new_data16 = (Uint16)old_data64;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_uint24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint32 new_data24;
-  if (old_data64 < 0) {
-    new_data24 = (Uint32)0;
-    truncated = true;
-  } else if (old_data64 > UINT_MAX24) {
-    new_data24 = (Uint32)UINT_MAX24;
-    truncated = true;
-  } else {
-    new_data24 = (Uint32)old_data64;
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_int64_uint32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Int64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Uint32 new_data32;
-  if (old_data64 < 0) {
-    new_data32 = (Uint32)0;
-    truncated = true;
-  } else if (old_data64 > UINT_MAX32) {
-    new_data32 = (Uint32)UINT_MAX32;
-    truncated = true;
-  } else {
-    new_data32 = (Uint32)old_data64;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint16_int8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint16 old_data16;
-  memcpy(&old_data16, old_data, 2);
-  Int8 new_data8;
-  if (old_data16 > INT_MAX8) {
-    new_data8 = (Int8)INT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Int8)old_data16;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_int8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Int8 new_data8;
-  if (old_data24 > INT_MAX8) {
-    new_data8 = (Int8)INT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Int8)old_data24;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint24_int16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data24 = uint3korr((char*)old_data);
-  Int16 new_data16;
-  if (old_data24 > INT_MAX16) {
-    new_data16 = (Int16)INT_MAX16;
-    truncated = true;
-  } else {
-    new_data16 = (Int16)old_data24;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_int8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int8 new_data8;
-  if (old_data32 > INT_MAX8) {
-    new_data8 = (Int8)INT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Int8)old_data32;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_int16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int16 new_data16;
-  if (old_data32 > INT_MAX16) {
-    new_data16 = (Int16)INT_MAX16;
-    truncated = true;
-  } else {
-    new_data16 = (Int16)old_data32;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint32_int24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint32 old_data32;
-  memcpy(&old_data32, old_data, 4);
-  Int32 new_data24;
-  if (old_data32 > INT_MAX24) {
-    new_data24 = (Int32)INT_MAX24;
-    truncated = true;
-  } else {
-    new_data24 = (Int32)old_data32;
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_int8(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int8 new_data8;
-  if (old_data64 > INT_MAX8) {
-    new_data8 = (Int8)INT_MAX8;
-    truncated = true;
-  } else {
-    new_data8 = (Int8)old_data64;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data8, 1);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_int16(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int16 new_data16;
-  if (old_data64 > INT_MAX16) {
-    new_data16 = (Int16)INT_MAX16;
-    truncated = true;
-  } else {
-    new_data16 = (Int16)old_data64;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data16, 2);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_int24(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int32 new_data24;
-  if (old_data64 > INT_MAX24) {
-    new_data24 = (Int32)INT_MAX24;
-    truncated = true;
-  } else {
-    new_data24 = (Int32)old_data64;
-    truncated = false;
-  }
-  int3store((char*)parameter, new_data24);
-
-  return parameter;
-}
-
-void *
-BackupRestore::convert_uint64_int32(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  Uint64 old_data64;
-  memcpy(&old_data64, old_data, 8);
-  Int32 new_data32;
-  if (old_data64 > INT_MAX32) {
-    new_data32 = (Int32)INT_MAX32;
-    truncated = true;
-  } else {
-    new_data32 = (Int32)old_data64;
-    truncated = false;
-  }
-  memcpy(parameter, &new_data32, 4);
-
-  return parameter;
-}
-
-// ----------------------------------------------------------------------
-// attribute promotion/demotion conversions
-// ----------------------------------------------------------------------
-
-void *
-BackupRestore::convert_bit_bit(const void *old_data,
-                               void *parameter,
-                               bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-
-  // write data
-  if (t->n_new >= t->n_old)
-  {
-    // clear all bits
-    memset(t->new_row, 0, t->n_new);
-
-    memcpy(t->new_row, s, t->n_old);
-    truncated = false;
-  } else {
-    // set all bits, for parity with replication's demotion semantics
-    memset(t->new_row, 0xFF, t->n_new);
-    truncated = true;
-  }
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_char_char(const void *old_data,
-                                 void *parameter,
-                                 bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const char * const s = (const char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 0;
-  const Uint32 t_prefix_length = 0;
-
-  // read and adjust length
-  Uint32 length = t->n_old;
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (!m_preserve_trailing_spaces) {
-    // ignore padding chars for data copying or truncation reporting
-    while (length > 0 && s[length - 1] == ' ')
-      length--;
-  }
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write data and padding
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-  const Uint32 l = max_length - length;
-  memset(t->new_row + t_prefix_length + length, ' ', l);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_binary_binary(const void *old_data,
-                                     void *parameter,
-                                     bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const char * const s = (const char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 0;
-  const Uint32 t_prefix_length = 0;
-
-  // read and adjust length
-  Uint32 length = t->n_old;
-  if (!m_preserve_trailing_spaces) {
-    // ignore padding chars for data copying or truncation reporting
-    while (length > 0 && s[length - 1] == 0x00)
-      length--;
-  }
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write data and padding
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-  const Uint32 l = max_length - length;
-  memset(t->new_row + t_prefix_length + length, 0x00, l);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_char_varchar(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const char * const s = (const char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 0;
-  const Uint32 t_prefix_length = 1;
-
-  // read and adjust length
-  Uint32 length = t->n_old;
-  if (!m_preserve_trailing_spaces) {
-    // ignore padding chars for data copying or truncation reporting
-    while (length > 0 && s[length - 1] == ' ')
-      length--;
-  }
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_varchar_char(const void *old_data,
-                                    void *parameter,
-                                    bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 1;
-  const Uint32 t_prefix_length = 0;
-
-  // read and adjust length
-  Uint32 length = s[0];
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write data and padding
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-  const Uint32 l = max_length - length;
-  memset(t->new_row + t_prefix_length + length, ' ', l);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_char_longvarchar(const void *old_data,
-                                        void *parameter,
-                                        bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const char * const s = (const char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 0;
-  const Uint32 t_prefix_length = 2;
-
-  // read and adjust length
-  Uint32 length = t->n_old;
-  if (!m_preserve_trailing_spaces) {
-    // ignore padding chars for data copying or truncation reporting
-    while (length > 0 && s[length - 1] == ' ')
-      length--;
-  }
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  t->new_row[1] = (length & 0x0000FF00) >> 8;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_longvarchar_char(const void *old_data,
-                                        void *parameter,
-                                        bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 2;
-  const Uint32 t_prefix_length = 0;
-
-  // read and adjust length
-  Uint32 length = s[0] + (s[1] << 8);
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write data and padding
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-  const Uint32 l = max_length - length;
-  memset(t->new_row + t_prefix_length + length, ' ', l);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_binary_varbinary(const void *old_data,
-                                        void *parameter,
-                                        bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const char * const s = (const char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 0;
-  const Uint32 t_prefix_length = 1;
-
-  // read and adjust length
-  Uint32 length = t->n_old;
-  if (!m_preserve_trailing_spaces) {
-    // ignore padding chars for data copying or truncation reporting
-    while (length > 0 && s[length - 1] == 0x00)
-      length--;
-  }
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_varbinary_binary(const void *old_data,
-                                        void *parameter,
-                                        bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 1;
-  const Uint32 t_prefix_length = 0;
-
-  // read and adjust length
-  Uint32 length = s[0];
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write data and padding
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-  const Uint32 l = max_length - length;
-  memset(t->new_row + t_prefix_length + length, 0x00, l);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_binary_longvarbinary(const void *old_data,
-                                            void *parameter,
-                                            bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const char * const s = (const char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 0;
-  const Uint32 t_prefix_length = 2;
-
-  // read and adjust length
-  Uint32 length = t->n_old;
-  if (!m_preserve_trailing_spaces) {
-    // ignore padding chars for data copying or truncation reporting
-    while (length > 0 && s[length - 1] == 0x00)
-      length--;
-  }
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  t->new_row[1] = (length & 0x0000FF00) >> 8;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_longvarbinary_binary(const void *old_data,
-                                            void *parameter,
-                                            bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 2;
-  const Uint32 t_prefix_length = 0;
-
-  // read and adjust length
-  Uint32 length = s[0] + (s[1] << 8);
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write data and padding
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-  const Uint32 l = max_length - length;
-  memset(t->new_row + t_prefix_length + length, 0x00, l);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_var_var(const void *old_data,
-                               void *parameter,
-                               bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 1;
-  const Uint32 t_prefix_length = 1;
-
-  // read and adjust length
-  Uint32 length = s[0];
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_var_longvar(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 1;
-  const Uint32 t_prefix_length = 2;
-
-  // read and adjust length
-  Uint32 length = s[0];
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  t->new_row[1] = (length & 0x0000FF00) >> 8;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_longvar_var(const void *old_data,
-                                   void *parameter,
-                                   bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 2;
-  const Uint32 t_prefix_length = 1;
-
-  // read and adjust length
-  Uint32 length = s[0] + (s[1] << 8);
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-void *
-BackupRestore::convert_longvar_longvar(const void *old_data,
-                                       void *parameter,
-                                       bool &truncated)
-{
-  if (!old_data || !parameter)
-    return NULL;
-
-  // shortcuts
-  const unsigned char * const s = (const unsigned char *)old_data;
-  char_n_padding_struct * const t = (char_n_padding_struct *)parameter;
-  const Uint32 s_prefix_length = 2;
-  const Uint32 t_prefix_length = 2;
-
-  // read and adjust length
-  Uint32 length = s[0] + (s[1] << 8);
-  const Uint32 max_length = t->n_new - t_prefix_length;
-  if (length <= max_length) {
-    truncated = false;
-  } else {
-    length = max_length;
-    truncated = true;
-  }
-
-  // write length prefix and data
-  t->new_row[0] = length & 0x000000FF;
-  t->new_row[1] = (length & 0x0000FF00) >> 8;
-  memcpy(t->new_row + t_prefix_length, s + s_prefix_length, length);
-
-  return t->new_row;
-}
-
-template class Vector<NdbDictionary::Table*>;
-template class Vector<const NdbDictionary::Table*>;
-template class Vector<NdbDictionary::Tablespace*>;
-template class Vector<NdbDictionary::LogfileGroup*>;
-template class Vector<NdbDictionary::Index*>;
-template class Vector<Vector<NdbDictionary::Index*> >;
+// char array promotions/demotions
+template void * BackupRestore::convert_array< Hchar, Hchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hchar, Hvarchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hchar, Hlongvarchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hvarchar, Hchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hvarchar, Hvarchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hvarchar, Hlongvarchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hlongvarchar, Hchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hlongvarchar, Hvarchar >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hlongvarchar, Hlongvarchar >(const void *, void *, bool &);
+
+// binary array promotions/demotions
+template void * BackupRestore::convert_array< Hbinary, Hbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hbinary, Hvarbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hbinary, Hlongvarbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hvarbinary, Hbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hvarbinary, Hvarbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hvarbinary, Hlongvarbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hlongvarbinary, Hbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hlongvarbinary, Hvarbinary >(const void *, void *, bool &);
+template void * BackupRestore::convert_array< Hlongvarbinary, Hlongvarbinary >(const void *, void *, bool &);
+
+// integral promotions
+template void * BackupRestore::convert_integral<Hint8, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint8, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint8, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint8, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Huint64>(const void *, void *, bool &);
+
+// integral demotions
+template void * BackupRestore::convert_integral<Hint16, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Huint32>(const void *, void *, bool &);
+
+// integral signedness BackupRestore::conversions
+template void * BackupRestore::convert_integral<Hint8, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Hint64>(const void *, void *, bool &);
+
+// integral signedness+promotion BackupRestore::conversions
+template void * BackupRestore::convert_integral<Hint8, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint8, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint8, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint8, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint16, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Huint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint8, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Hint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Hint64>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Hint64>(const void *, void *, bool &);
+
+// integral signedness+demotion BackupRestore::conversions
+template void * BackupRestore::convert_integral<Hint16, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint24, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint32, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Huint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Huint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Huint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Hint64, Huint32>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint16, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint24, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint32, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Hint8>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Hint16>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Hint24>(const void *, void *, bool &);
+template void * BackupRestore::convert_integral<Huint64, Hint32>(const void *, void *, bool &);

=== modified file 'storage/ndb/tools/restore/consumer_restore.hpp'
--- a/storage/ndb/tools/restore/consumer_restore.hpp	2011-02-01 21:05:11 +0000
+++ b/storage/ndb/tools/restore/consumer_restore.hpp	2011-02-18 18:07:44 +0000
@@ -1,5 +1,5 @@
 /*
-   Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+   Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -134,227 +134,20 @@ public:
   static AttrConvType check_compat_lossy(const NDBCOL &old_col,
                                          const NDBCOL &new_col);
 
-  // integral attribute promotion conversions
-  static void* convert_int8_int16(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int8_int24(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int8_int32(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int8_int64(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int16_int24(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int16_int32(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int16_int64(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int24_int32(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int24_int64(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int32_int64(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint8_uint16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint8_uint24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint8_uint32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint8_uint64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint16_uint24(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint16_uint32(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint16_uint64(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint24_uint32(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint24_uint64(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint32_uint64(const void *old_data,
-                                     void *parameter, bool &truncated);
-
-  // integral attribute demotion conversions
-  static void* convert_int16_int8(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int24_int8(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int24_int16(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int32_int8(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int32_int16(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int32_int24(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int64_int8(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int64_int16(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int64_int24(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int64_int32(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint16_uint8(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint24_uint8(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint24_uint16(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint32_uint8(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint32_uint16(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint32_uint24(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint64_uint8(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint64_uint16(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint64_uint24(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_uint64_uint32(const void *old_data,
-                                     void *parameter, bool &truncated);
-
-  // integral attribute signedness conversions
-  static void* convert_int8_uint8(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_int16_uint16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int24_uint24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int32_uint32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int64_uint64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint8_int8(const void *old_data,
-                                  void *parameter, bool &truncated);
-  static void* convert_uint16_int16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint24_int24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint32_int32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint64_int64(const void *old_data,
-                                    void *parameter, bool &truncated);
-
-  // integral attribute signedness+promotion conversions
-  static void* convert_int8_uint16(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int8_uint24(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int8_uint32(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int8_uint64(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int16_uint24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int16_uint32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int16_uint64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int24_uint32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int24_uint64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int32_uint64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint8_int16(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint8_int24(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint8_int32(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint8_int64(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint16_int24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint16_int32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint16_int64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint24_int32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint24_int64(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint32_int64(const void *old_data,
-                                    void *parameter, bool &truncated);
-
-  // integral attribute signedness+demotion conversions
-  static void* convert_int16_uint8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int24_uint8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int24_uint16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int32_uint8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int32_uint16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int32_uint24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int64_uint8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_int64_uint16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int64_uint24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_int64_uint32(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint16_int8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint24_int8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint24_int16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint32_int8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint32_int16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint32_int24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint64_int8(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_uint64_int16(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint64_int24(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_uint64_int32(const void *old_data,
-                                    void *parameter, bool &truncated);
-
-  // char/binary promotion/demotion conversions
-  static void* convert_bit_bit(const void *old_data,
-                               void *parameter, bool &truncated);
-  static void* convert_char_char(const void *old_data,
-                                 void *parameter, bool &truncated);
-  static void* convert_binary_binary(const void *old_data,
-                                     void *parameter, bool &truncated);
-  static void* convert_char_varchar(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_varchar_char(const void *old_data,
-                                    void *parameter, bool &truncated);
-  static void* convert_char_longvarchar(const void *old_data,
-                                        void *parameter, bool &truncated);
-  static void* convert_longvarchar_char(const void *old_data,
-                                        void *parameter, bool &truncated);
-  static void* convert_binary_varbinary(const void *old_data,
-                                        void *parameter, bool &truncated);
-  static void* convert_varbinary_binary(const void *old_data,
-                                        void *parameter, bool &truncated);
-  static void* convert_binary_longvarbinary(const void *old_data,
-                                            void *parameter, bool &truncated);
-  static void* convert_longvarbinary_binary(const void *old_data,
-                                            void *parameter, bool &truncated);
-  static void* convert_var_var(const void *old_data,
-                               void *parameter, bool &truncated);
-  static void* convert_var_longvar(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_longvar_var(const void *old_data,
-                                   void *parameter, bool &truncated);
-  static void* convert_longvar_longvar(const void *old_data,
-                                       void *parameter, bool &truncated);
+  // bitset conversion handler
+  static void*
+  convert_bitset(const void * source, void * target, bool &truncated);
+
+  // char/binary array conversion handler
+  template< typename S, typename T >
+  static void *
+  convert_array(const void * source, void * target, bool & truncated);
+
+  // integral type conversion handler
+  // (follows MySQL replication semantics truncating to nearest legal value)
+  template< typename T, typename S >
+  static void *
+  convert_integral(const void * source, void * target, bool & truncated);
 
   // returns the handler function checking type conversion compatibility
   AttrCheckCompatFunc 

Attachment: [text/bzr-bundle] bzr/martin.zaun@oracle.com-20110218181024-popdknr9t3fk0401.bundle
Thread
bzr push into mysql-5.1-telco-6.3 branch (martin.zaun:3387 to 3388) Martin Zaun18 Feb