📄 testdatabuffers.cpp
字号:
return ndberror("getNdbOperation key=%d", key); if (op->insertTuple() < 0) return ndberror("insertTuple 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 { memset(c.buf, 'A', c.bufsiz); for (int j = 0; j < c.aArraySize; j++) c.buf[j + off] = byteVal(key, i, j); if (op->setValue(c.aAttrName, c.buf + off, c.aArraySize) < 0) return ndberror("setValue key=%d col=%d", key, i); } } if (con->execute(Commit) < 0) return ndberror("execute key=%d", key); ndb->closeTransaction(con); } con = 0; op = 0; ndbout << "inserted " << key << endl; if (xverbose) ndbout << "- select" << endl; for (key = 0; key < opercnt; key++) { int off = makeOff(key); if (xverbose) ndbout << "-- key " << key << " off=" << off << endl; 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->readTuple() < 0) return ndberror("readTuple 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 (xverbose) { char tmp[20]; if (useBuf) sprintf(tmp, "0x%p", c.buf + off); else strcpy(tmp, "ndbapi"); ndbout << "--- column " << i << " addr=" << tmp << endl; } memset(c.buf, 'B', c.bufsiz); if (useBuf) { if (op->getValue(c.aAttrName, c.buf + off) < 0) return ndberror("getValue key=%d col=%d", key, i); } else { if ((c.aRa = op->getValue(c.aAttrName)) == 0) return ndberror("getValue key=%d col=%d", key, i); } } } if (con->execute(Commit) != 0) return ndberror("execute key=%d", key); for (i = 0; i < attrcnt; i++) { col& c = ccol[i]; if (i == 0) { } else if (useBuf) { int j; for (j = 0; j < off; j++) { if (c.buf[j] != 'B') { return chkerror("mismatch before key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, 'B', c.buf[j]); } } for (j = 0; j < c.aArraySize; j++) { if (c.buf[j + off] != byteVal(key, i, j)) { return chkerror("mismatch key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, byteVal(key, i, j), c.buf[j]); } } for (j = c.aArraySize + off; j < c.bufsiz; j++) { if (c.buf[j] != 'B') { return chkerror("mismatch after key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, 'B', c.buf[j]); } } } else { char* buf = c.aRa->aRef(); if (buf == 0) return ndberror("null aRef key=%d col%d", key, i); for (int j = 0; j < c.aArraySize; j++) { if (buf[j] != byteVal(key, i, j)) { return chkerror("mismatch key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, byteVal(key, i, j), buf[j]); } } } } ndb->closeTransaction(con); } con = 0; op = 0; ndbout << "selected " << key << endl; if (xverbose) ndbout << "- scan" << endl; char found[MaxOper]; int k; for (k = 0; k < opercnt; k++) found[k] = 0; for (key = 0; key < opercnt; key++) { int off = makeOff(key); if (xverbose) ndbout << "-- key " << key << " off=" << off << endl; int newkey = 0; if ((con = ndb->startTransaction()) == 0) return ndberror("startTransaction key=%d", key); if ((op = sop = con->getNdbScanOperation(tab)) == 0) return ndberror("getNdbOperation key=%d", key); if (sop->readTuples(1)) return ndberror("openScanRead key=%d", key); { col& c = ccol[0]; if (op->load_const_u32(1, key) < 0) return ndberror("load_const_u32"); if (op->read_attr(c.aAttrName, 2) < 0) return ndberror("read_attr"); if (op->branch_eq(1, 2, 0) < 0) return ndberror("branch_eq"); if (op->interpret_exit_nok() < 0) return ndberror("interpret_exit_nok"); if (op->def_label(0) < 0) return ndberror("def_label"); if (op->interpret_exit_ok() < 0) return ndberror("interpret_exit_ok"); } for (i = 0; i < attrcnt; i++) { col& c = ccol[i]; if (i == 0) { if (op->getValue(c.aAttrName, (char*)&newkey) < 0) return ndberror("getValue key=%d col=%d", key, i); } else { if (xverbose) { char tmp[20]; if (useBuf) sprintf(tmp, "0x%p", c.buf + off); else strcpy(tmp, "ndbapi"); ndbout << "--- column " << i << " addr=" << tmp << endl; } memset(c.buf, 'C', c.bufsiz); if (useBuf) { if (op->getValue(c.aAttrName, c.buf + off) < 0) return ndberror("getValue key=%d col=%d", key, i); } else { if ((c.aRa = op->getValue(c.aAttrName)) == 0) return ndberror("getValue key=%d col=%d", key, i); } } } if (con->execute(NoCommit) < 0) return ndberror("executeScan key=%d", key); int ret, cnt = 0; while ((ret = sop->nextResult()) == 0) { if (key != newkey) return ndberror("unexpected key=%d newkey=%d", key, newkey); for (i = 1; i < attrcnt; i++) { col& c = ccol[i]; if (useBuf) { int j; for (j = 0; j < off; j++) { if (c.buf[j] != 'C') { return chkerror("mismatch before key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, 'C', c.buf[j]); } } for (j = 0; j < c.aArraySize; j++) { if (c.buf[j + off] != byteVal(key, i, j)) { return chkerror("mismatch key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, byteVal(key, i, j), c.buf[j]); } } for (j = c.aArraySize + off; j < c.bufsiz; j++) { if (c.buf[j] != 'C') { return chkerror("mismatch after key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, 'C', c.buf[j]); } } } else { char* buf = c.aRa->aRef(); if (buf == 0) return ndberror("null aRef key=%d col%d", key, i); for (int j = 0; j < c.aArraySize; j++) { if (buf[j] != byteVal(key, i, j)) { return chkerror("mismatch key=%d col=%d pos=%d ok=%02x bad=%02x", key, i, j, byteVal(key, i, j), buf[j]); } } } } cnt++; } if (ret < 0) return ndberror("nextScanResult key=%d", key); if (cnt != 1) return ndberror("scan key=%d found %d", key, cnt); found[key] = 1; ndb->closeTransaction(con); } con = 0; op = 0; for (k = 0; k < opercnt; k++) if (! found[k]) return ndberror("key %d not found", k); ndbout << "scanned " << key << endl; ndbout << "done" << endl; return 0;}NDB_COMMAND(testDataBuffers, "testDataBuffers", "testDataBuffers", "testDataBuffers", 65535){ int i; ndb_init(); while (++argv, --argc > 0) { char const* p = argv[0]; if (*p++ != '-' || strlen(p) != 1) goto wrongargs; switch (*p) { case 'a': if (++argv, --argc > 0) { attrcnt = atoi(argv[0]); if (1 <= attrcnt && attrcnt <= MaxAttr) break; } goto wrongargs; case 'e': existok = 1; break; case 'k': kontinue = true; break; case 'l': if (++argv, --argc > 0) { loopcnt = atoi(argv[0]); if (0 <= loopcnt) break; } goto wrongargs; case 'o': if (++argv, --argc > 0) { opercnt = atoi(argv[0]); if (0 <= opercnt && opercnt <= MaxOper) break; } goto wrongargs; case 'r': if (++argv, --argc > 0) { randomizer = atoi(argv[0]); if (1 <= randomizer) break; } goto wrongargs; case 's': if (++argv, --argc > 0) { sizelim = atoi(argv[0]); if (1 <= sizelim && sizelim <= MaxSize) break; } goto wrongargs; case 'x': xverbose = 1; break; default: wrongargs: printusage(); return NDBT_ProgramExit(NDBT_WRONGARGS); } } unsigned ok = true; Ndb_cluster_connection con; if(con.connect(12, 5, 1)) { return NDBT_ProgramExit(NDBT_FAILED); } ndb = new Ndb(&con, "TEST_DB"); if (ndb->init() != 0) { ndberror("init"); ok = false; goto out; } if (ndb->waitUntilReady(30) < 0) { ndberror("waitUntilReady"); ok = false; goto out; } for (i = 1; 0 == loopcnt || i <= loopcnt; i++) { ndbout << "=== loop " << i << " ===" << endl; for (int flag = 0; flag < (1<<testbits); flag++) { if (testcase(con, flag) < 0) { ok = false; if (! kontinue) goto out; } NdbDictionary::Dictionary * dict = ndb->getDictionary(); dict->dropTable(tab); } } out: delete ndb; return NDBT_ProgramExit(ok ? NDBT_OK : NDBT_FAILED);}// vim: set sw=4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -