⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdatabuffers.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    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 + -