enhance: tbname token optimization
This commit is contained in:
parent
1686c70a60
commit
c8767f7614
|
@ -70,7 +70,7 @@ void TestInsert(TAOS *taos, char *qstr) {
|
|||
for (int batchIdx = 0; batchIdx < 10000; ++batchIdx) {
|
||||
len = batchStart;
|
||||
len += sprintf(qstr+len, " values");
|
||||
if (batchIdx % 1000 == 0)
|
||||
if (batchIdx % 5000 == 1)
|
||||
printf("%s %d\n", qstr, batchIdx);
|
||||
|
||||
for (int rowIdx = 0; rowIdx < 100; ++ rowIdx) {
|
||||
|
@ -112,8 +112,8 @@ void TestInsertStb(TAOS *taos, char *qstr) {
|
|||
for (int batchIdx = 0; batchIdx < 10000; ++batchIdx) {
|
||||
len = batchStart;
|
||||
len += sprintf(qstr+len, " values");
|
||||
if (batchIdx % 1000 == 0)
|
||||
printf("%s %d\n", qstr, batchIdx);
|
||||
if (batchIdx % 5000 == 1)
|
||||
printf("%s %d table %d\n", qstr, batchIdx, tblIdx);
|
||||
|
||||
for (int rowIdx = 0; rowIdx < 100; ++rowIdx) {
|
||||
int i = rowIdx + batchIdx * 100 + tblIdx*10000*100;
|
||||
|
@ -153,7 +153,7 @@ int main(int argc, char *argv[]) {
|
|||
exit(1);
|
||||
}
|
||||
char* qstr = malloc(1024*1024);
|
||||
//TestInsert(taos, qstr);
|
||||
TestInsert(taos, qstr);
|
||||
TestInsertStb(taos, qstr);
|
||||
free(qstr);
|
||||
taos_close(taos);
|
||||
|
|
|
@ -1574,6 +1574,32 @@ typedef union SRowsDataContext{
|
|||
SStbRowsDataContext* pStbRowsCxt;
|
||||
} SRowsDataContext;
|
||||
|
||||
static int32_t parseTbnameToken(SInsertParseContext* pCxt, SStbRowsDataContext* pStbRowsCxt, SToken* pToken,
|
||||
char* ctbName, bool* pFoundCtbName) {
|
||||
*pFoundCtbName = false;
|
||||
int32_t code = checkAndTrimValue(pToken, pCxt->tmpTokenBuf, &pCxt->msg);
|
||||
if (code == TSDB_CODE_SUCCESS){
|
||||
if (isNullValue(TSDB_DATA_TYPE_BINARY, pToken)) {
|
||||
return buildInvalidOperationMsg(&pCxt->msg, "tbname can not be null value");
|
||||
}
|
||||
|
||||
if (pToken->n > 0) {
|
||||
if (pToken->n <= TSDB_TABLE_NAME_LEN - 1) {
|
||||
memcpy(ctbName, pToken->z, pToken->n);
|
||||
ctbName[pToken->n] = '\0';
|
||||
*pFoundCtbName = true;
|
||||
tNameSetDbName(&pStbRowsCxt->ctbName, pStbRowsCxt->stbName.acctId, pStbRowsCxt->stbName.dbname, strlen(pStbRowsCxt->stbName.dbname));
|
||||
tNameAddTbName(&pStbRowsCxt->ctbName, ctbName, pToken->n);
|
||||
} else {
|
||||
return buildInvalidOperationMsg(&pCxt->msg, "tbname is too long");
|
||||
}
|
||||
} else {
|
||||
return buildInvalidOperationMsg(&pCxt->msg, "tbname can not be empty");
|
||||
}
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
static int32_t getStbRowValues(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, const char** ppSql,
|
||||
SStbRowsDataContext* pStbRowsCxt, bool* pGotRow,
|
||||
SToken* pToken, bool *pCtbFirst) {
|
||||
|
@ -1627,19 +1653,8 @@ static int32_t getStbRowValues(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pS
|
|||
}
|
||||
}
|
||||
else if (pCols->pColIndex[i] == getTbnameSchemaIndex(pStbRowsCxt->pStbMeta)) {
|
||||
SColVal tbnameVal = COL_VAL_NONE(-1, TSDB_DATA_TYPE_BINARY);
|
||||
tbnameVal.value.val = 0;
|
||||
code = parseValueToken(pCxt, ppSql, pToken, (SSchema*)tGetTbnameColumnSchema(),
|
||||
getTableInfo(pStbRowsCxt->pStbMeta).precision, &tbnameVal);
|
||||
if (code == TSDB_CODE_SUCCESS && COL_VAL_IS_VALUE(&tbnameVal) && tbnameVal.value.nData>0) {
|
||||
tNameSetDbName(&pStbRowsCxt->ctbName, pStbRowsCxt->stbName.acctId, pStbRowsCxt->stbName.dbname, strlen(pStbRowsCxt->stbName.dbname));
|
||||
char ctbName[TSDB_TABLE_NAME_LEN];
|
||||
memcpy(ctbName, tbnameVal.value.pData, tbnameVal.value.nData);
|
||||
ctbName[tbnameVal.value.nData] = '\0';
|
||||
tNameAddTbName(&pStbRowsCxt->ctbName, ctbName, tbnameVal.value.nData);
|
||||
bFoundTbName = true;
|
||||
}
|
||||
taosMemoryFreeClear(tbnameVal.value.pData);
|
||||
code = parseTbnameToken(pCxt, pStbRowsCxt, pToken, ctbName, &bFoundTbName);
|
||||
}
|
||||
|
||||
if (code == TSDB_CODE_SUCCESS && i < pCols->numOfBound - 1) {
|
||||
|
|
Loading…
Reference in New Issue