diff options
Diffstat (limited to 'ndb/test/ndbapi/testBlobs.cpp')
-rw-r--r-- | ndb/test/ndbapi/testBlobs.cpp | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/ndb/test/ndbapi/testBlobs.cpp b/ndb/test/ndbapi/testBlobs.cpp new file mode 100644 index 00000000000..e2be1def71c --- /dev/null +++ b/ndb/test/ndbapi/testBlobs.cpp @@ -0,0 +1,194 @@ +/* Copyright (C) 2003 MySQL AB + + 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; either version 2 of the License, or + (at your option) any later version. + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + * testBlobs + */ + +#include <ndb_global.h> + +#include <NdbMain.h> +#include <NdbOut.hpp> +#include <NdbThread.h> +#include <NdbMutex.h> +#include <NdbCondition.h> +#include <NdbTest.hpp> +#include <NdbTick.h> + +struct Opt { + bool m_core; + const char* m_table; + Opt() : + m_core(false), + m_table("TB1") + { + } +}; + +static Opt opt; + +static void printusage() +{ + Opt d; + ndbout + << "usage: testBlobs [options]" << endl + << "-core dump core on error - default " << d.m_core << endl + ; +} + +static Ndb* myNdb = 0; +static NdbDictionary::Dictionary* myDic = 0; +static NdbConnection* myCon = 0; +static NdbOperation* myOp = 0; +static NdbBlob* myBlob = 0; + +static void +fatal(const char* fmt, ...) +{ + va_list ap; + char buf[200]; + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + ndbout << "fatal: " << buf << endl; + if (myNdb != 0 && myNdb->getNdbError().code != 0) + ndbout << "ndb - " << myNdb->getNdbError() << endl; + if (myDic != 0 && myDic->getNdbError().code != 0) + ndbout << "dic - " << myDic->getNdbError() << endl; + if (opt.m_core) + abort(); + NDBT_ProgramExit(NDBT_FAILED); + exit(1); +} + +static void +dropBlobsTable() +{ + NdbDictionary::Table tab(NDB_BLOB_TABLE_NAME); + if (myDic->dropTable(tab) == -1) + if (myDic->getNdbError().code != 709) + fatal("dropTable"); +} + +static void +createBlobsTable() +{ + NdbDictionary::Table tab(NDB_BLOB_TABLE_NAME); + // col 0 + NdbDictionary::Column col0("BLOBID"); + col0.setPrimaryKey(true); + col0.setType(NdbDictionary::Column::Bigunsigned); + tab.addColumn(col0); + // col 1 + NdbDictionary::Column col1("DATA"); + col1.setPrimaryKey(false); + col1.setType(NdbDictionary::Column::Binary); + col1.setLength(NDB_BLOB_PIECE_SIZE); + tab.addColumn(col1); + // create + if (myDic->createTable(tab) == -1) + fatal("createTable"); +} + +static void +dropTable() +{ + NdbDictionary::Table tab(opt.m_table); + if (myDic->dropTable(tab) == -1) + if (myDic->getNdbError().code != 709) + fatal("dropTable"); +} + +static void +createTable() +{ + NdbDictionary::Table tab(opt.m_table); + // col 0 + NdbDictionary::Column col0("A"); + col0.setPrimaryKey(true); + col0.setType(NdbDictionary::Column::Unsigned); + tab.addColumn(col0); + // col 1 + NdbDictionary::Column col1("B"); + col1.setPrimaryKey(false); + col1.setType(NdbDictionary::Column::Blob); + tab.addColumn(col1); + // create + if (myDic->createTable(tab) == -1) + fatal("createTable"); +} + +static void +insertData(Uint32 key) +{ +} + +static void +insertTuples() +{ + for (Uint32 key = 0; key <= 99; key++) { + if ((myCon = myNdb->startTransaction()) == 0) + fatal("startTransaction"); + if ((myOp = myCon->getNdbOperation(opt.m_table)) == 0) + fatal("getNdbOperation"); + if (myOp->insertTuple() == -1) + fatal("insertTuple"); + if (myOp->setValue((unsigned)0, key) == -1) + fatal("setValue %u", (unsigned)key); + if ((myBlob = myOp->setBlob(1)) == 0) + fatal("setBlob"); + if (myCon->execute(NoCommit) == -1) + fatal("execute NoCommit"); + insertData(key); + if (myCon->execute(Commit) == -1) + fatal("execute Commit"); + myNdb->closeTransaction(myCon); + myOp = 0; + myBlob = 0; + myCon = 0; + } +} + +static void +testMain() +{ + myNdb = new Ndb("TEST_DB"); + if (myNdb->init() != 0) + fatal("init"); + if (myNdb->waitUntilReady() < 0) + fatal("waitUntilReady"); + myDic = myNdb->getDictionary(); + dropBlobsTable(); + createBlobsTable(); // until moved to Ndbcntr + dropTable(); + createTable(); + insertTuples(); +} + +NDB_COMMAND(testOdbcDriver, "testBlobs", "testBlobs", "testBlobs", 65535) +{ + while (++argv, --argc > 0) { + const char* arg = argv[0]; + if (strcmp(arg, "-core") == 0) { + opt.m_core = true; + continue; + } + } + testMain(); + return NDBT_ProgramExit(NDBT_OK); +} + +// vim: set sw=4: |