mysql.data 源码_testdatabuffers.cpp 源代码在线查看 - mysql-5.0.33源码包 资源下载 虫虫电子下载站...

/* 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 *//* * testDataBuffers * * Test getValue() of byte arrays: * - using application buffers of different alignments and sizes * - using NdbApi allocated small (=32) buffers * * Verifies fixes to tickets 189 and 206. * * Options: see printusage() below. * * Creates tables TB00 to TB15 */#include #include #include #include #include #include // limitsstatic int const MaxAttr = 64;static int const MaxOper = 1000;static int const MaxSize = 10000;static int const MaxOff = 64;// max offset to add to data bufferstatic int const MaxData = MaxSize + MaxOff + 100;// optionsstatic int attrcnt = 25;static int existok = 0;static bool kontinue = false;static int loopcnt = 1;static int opercnt = 100;// also does this many scansstatic int randomizer = 171317;static int sizelim = 500;static int xverbose = 0;static void printusage() { ndbout;}static Ndb* ndb = 0;static NdbSchemaCon* tcon = 0;static NdbSchemaOp* top = 0;static NdbConnection* con = 0;static NdbOperation* op = 0;static NdbScanOperation* sop = 0;static NdbResultSet* rs = 0;static intndberror(char const* fmt, ...){ va_list ap; char buf[200]; va_start(ap, fmt); BaseString::vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); ndbout if (ndb) ndbout if (tcon)ndbout if (top)ndbout if (con)ndbout if (op)ndbout return -1;}static intchkerror(char const* fmt, ...){ va_list ap; char buf[200]; va_start(ap, fmt); BaseString::vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); ndbout return -1;}// alignment of addresses and data sizesstatic bool isAligned(UintPtr x){ return ((x & 3) == 0);}static bool isAligned(char* p){ return isAligned(UintPtr(p));}static unsigned toAligned(UintPtr x){ while (! isAligned(x))x++; return x;}static char* toAligned(char* p){ while (! isAligned(p))p++; return p;}// byte value for key k column i byte jstatic int byteVal(int k, int i, int j){ return '0' + (k + i + j) % 10;}// tablesstatic char tab[20] = "";static struct col { char aAttrName[20]; AttrType aAttrType; int aAttrSize; int aArraySize; KeyType aTupleKey; bool nullable; NdbRecAttr* aRa; char* buf; int bufsiz; char data[MaxData];} ccol[MaxAttr];static int key = 0;// independent test bitsstatic bool alignAddr;// align our buffer addresses to 4xstatic bool alignSize;// align data sizes to 4xstatic bool useBuf;// use our buffers for outputstatic bool noRandom;// do not randomize sizes and offsetsstatic int testbits = 4;static intmakeSize(int i){ int n; if (noRandom)n = i; elsen = i * randomizer; n %= sizelim; if (n n = 1; if (alignSize)n = toAligned(n); return n;}static intmakeOff(int k){ int n; if (alignAddr)n = 0; else if (noRandom)n = k; elsen = k * randomizer; n %= MaxOff; if (n < 0)n = -n; return n;}static inttestcase(Ndb_cluster_connection&cc, int flag){ ndbout sprintf(tab, "TB%02d", flag); alignAddr = ! (flag & 1); ndbout alignSize = ! (flag & 2); ndbout useBuf = ! (flag & 4); ndbout noRandom = ! (flag & 8); ndbout int smax = 0, stot = 0, i; if (xverbose) ndbout for (i = 0; i < attrcnt; i++) {col& c = ccol[i];memset(&c, 0, sizeof(c));sprintf(c.aAttrName, "C%d", i);if (i == 0) { c.aAttrType = UnSigned; c.aAttrSize = 32; c.aArraySize = 1; c.aTupleKey = TupleKey; c.nullable = false;} else { c.aAttrType = String; c.aAttrSize = 8; c.aArraySize = makeSize(i); if (smax < c.aArraySize)smax = c.aArraySize; stot += c.aArraySize; c.aTupleKey = NoKey; c.nullable = true; if (xverbose) ndbout }c.buf = toAligned(c.data);c.bufsiz = sizeof(c.data) - (c.buf - c.data); } ndbout if ((tcon = NdbSchemaCon::startSchemaTrans(ndb)) == 0)return ndberror("startSchemaTransaction"); if ((top = tcon->getNdbSchemaOp()) == 0)return ndberror("getNdbSchemaOp"); if (top->createTable(tab) < 0)return ndberror("createTable"); for (i = 0; i < attrcnt; i++) {col& c = ccol[i];if (top->createAttribute( c.aAttrName, c.aTupleKey, c.aAttrSize, c.aArraySize, c.aAttrType, MMBased, c.nullable) < 0) return ndberror("createAttribute col=%d", i); } if (tcon->execute() < 0) {if (! (tcon->getNdbError().code == 721 && existok)) return ndberror("execute");ndbout } else {ndbout } top = 0; tcon = 0; if (xverbose) ndbout int delcnt = 0; for (key = 0; key < opercnt; key++) {if ((con = ndb->startTransaction()) == 0) return ndberror("startTransaction key=%d", key);if ((op = con->getNdbOperation(tab)) == 0) return ndberror("getNdbOperation key=%d", key);if (op->deleteTuple() < 0) return ndberror("deleteTuple key=%d", key);for (i = 0; i < attrcnt; i++) { col& c = ccol[i]; if (i == 0) {if (op->equal(c.aAttrName, (char*)&key, sizeof(key)) < 0) return ndberror("equal key=%d", key); } else { }}if (con->execute(Commit) < 0) { if (con->getNdbError().code != 626) return ndberror("execute key=%d", key);} else { delcnt++;}ndb->closeTransaction(con); } con = 0; op = 0; ndbout if (xverbose) ndbout for (key = 0; key < opercnt; key++) {int off = makeOff(key);if ((con = ndb->startTransaction()) == 0) return ndberror("startTransaction key=%d", key);if ((op = con->getNdbOperation(tab)) == 0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值