add unit test
This commit is contained in:
parent
56819eaf70
commit
aee50c8929
|
@ -65,6 +65,11 @@ int compareSmlColKv(const void* p1, const void* p2) {
|
|||
}
|
||||
|
||||
int32_t loadTableMeta(TAOS* taos, char* tableName, SSmlSTableSchema* schema) {
|
||||
schema->tags = taosArrayInit(8, sizeof(SSchema));
|
||||
schema->fields = taosArrayInit(64, sizeof(SSchema));
|
||||
schema->tagHash = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, false);
|
||||
schema->fieldHash = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, false);
|
||||
|
||||
int32_t code = 0;
|
||||
|
||||
STscObj *pObj = (STscObj *)taos;
|
||||
|
@ -203,7 +208,7 @@ int32_t addTaosFieldToHashAndArray(TAOS_SML_KV* smlKv, SHashObj* hash, SArray* a
|
|||
pField->bytes = MAX(pField->bytes, bytes);
|
||||
|
||||
} else {
|
||||
SSchema field;
|
||||
SSchema field = {0};
|
||||
size_t tagKeyLen = strlen(smlKv->key);
|
||||
strncpy(field.name, smlKv->key, tagKeyLen);
|
||||
field.name[tagKeyLen] = '\0';
|
||||
|
@ -371,7 +376,7 @@ int32_t getChildTableName(TAOS_SML_DATA_POINT* point, char* tableName, int* tabl
|
|||
MD5Update(&context, (uint8_t *)keyJoined, (uint32_t)len);
|
||||
MD5Final(&context);
|
||||
*tableNameLen = snprintf(tableName, *tableNameLen,
|
||||
"tbl%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", context.digest[0],
|
||||
"tbl_%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", context.digest[0],
|
||||
context.digest[1], context.digest[2], context.digest[3], context.digest[4], context.digest[5], context.digest[6],
|
||||
context.digest[7], context.digest[8], context.digest[9], context.digest[10], context.digest[11],
|
||||
context.digest[12], context.digest[13], context.digest[14], context.digest[15]);
|
||||
|
@ -418,14 +423,15 @@ int32_t creatChildTableIfNotExists(TAOS* taos, const char* cTableName, const cha
|
|||
printf("%s", taos_stmt_errstr(stmt));
|
||||
return code;
|
||||
}
|
||||
TAOS_RES* res = taos_stmt_use_result(stmt);
|
||||
return taos_errno(res);
|
||||
|
||||
taos_stmt_close(stmt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t insertBatch(TAOS* taos, char* cTableName, SArray* colsSchema, SArray* rowsBind) {
|
||||
size_t numCols = taosArrayGetSize(colsSchema);
|
||||
char sql[TSDB_MAX_BINARY_LEN];
|
||||
int32_t freeBytes = TSDB_MAX_BINARY_LEN;
|
||||
char sql[4096];
|
||||
int32_t freeBytes = 4096;
|
||||
sprintf(sql, "insert into ? (");
|
||||
|
||||
for (int i = 0; i < numCols; ++i) {
|
||||
|
@ -454,8 +460,8 @@ int32_t insertBatch(TAOS* taos, char* cTableName, SArray* colsSchema, SArray* r
|
|||
}
|
||||
size_t rows = taosArrayGetSize(rowsBind);
|
||||
for (int32_t i = 0; i < rows; ++i) {
|
||||
SArray* colBind = taosArrayGetP(rowsBind, i);
|
||||
code = taos_stmt_bind_param(stmt, TARRAY_GET_START(colBind));
|
||||
TAOS_BIND* colsBinds = taosArrayGetP(rowsBind, i);
|
||||
code = taos_stmt_bind_param(stmt, colsBinds);
|
||||
if (code != 0) {
|
||||
printf("%s", taos_stmt_errstr(stmt));
|
||||
return code;
|
||||
|
@ -472,8 +478,10 @@ int32_t insertBatch(TAOS* taos, char* cTableName, SArray* colsSchema, SArray* r
|
|||
printf("%s", taos_stmt_errstr(stmt));
|
||||
return code;
|
||||
}
|
||||
TAOS_RES* res = taos_stmt_use_result(stmt);
|
||||
return taos_errno(res);
|
||||
|
||||
|
||||
taos_stmt_close(stmt);
|
||||
return code;
|
||||
}
|
||||
|
||||
int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints) {
|
||||
|
@ -526,7 +534,6 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints)
|
|||
TAOS_SML_DATA_POINT * point = taosArrayGetP(cTablePoints, 0);
|
||||
int32_t numTags = taosArrayGetSize(point->schema->tags);
|
||||
int32_t numCols = taosArrayGetSize(point->schema->fields);
|
||||
char* ctableName = point->childTableName;
|
||||
|
||||
SArray* tagBinds = taosArrayInit(numTags, sizeof(TAOS_BIND));
|
||||
taosArraySetSize(tagBinds, numTags);
|
||||
|
@ -551,16 +558,15 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints)
|
|||
for (int i = 0; i < rows; ++i) {
|
||||
point = taosArrayGetP(cTablePoints, i);
|
||||
|
||||
SArray* colBinds = taosArrayInit(numCols, sizeof(TAOS_BIND));
|
||||
taosArraySetSize(colBinds, numCols);
|
||||
TAOS_BIND* colBinds = calloc(numCols, sizeof(TAOS_BIND));
|
||||
for (int j = 0; j < numCols; ++j) {
|
||||
TAOS_BIND* bind = taosArrayGet(colBinds, j);
|
||||
TAOS_BIND* bind = colBinds + j;
|
||||
bind->is_null = &isNullColBind;
|
||||
}
|
||||
for (int j = 0; j < point->fieldNum; ++j) {
|
||||
TAOS_SML_KV* kv = point->fields + j;
|
||||
int32_t idx = TARRAY_ELEM_IDX(point->schema->fields, kv->schema);
|
||||
TAOS_BIND* bind = taosArrayGet(colBinds, idx);
|
||||
TAOS_BIND* bind = colBinds + idx;
|
||||
bind->buffer_type = kv->type;
|
||||
bind->length = malloc(sizeof(uintptr_t*));
|
||||
*bind->length = kv->length;
|
||||
|
@ -571,7 +577,7 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints)
|
|||
}
|
||||
|
||||
creatChildTableIfNotExists(taos, point->childTableName, point->stableName, point->schema->tags, tagBinds);
|
||||
insertBatch(taos, ctableName, point->schema->fields, rowsBind);
|
||||
insertBatch(taos, point->childTableName, point->schema->fields, rowsBind);
|
||||
|
||||
pCTablePoints = taosHashIterate(cname2points, pCTablePoints);
|
||||
}
|
||||
|
@ -621,10 +627,6 @@ int taos_sml_insert(TAOS* taos, TAOS_SML_DATA_POINT* points, int numPoint) {
|
|||
for (int i = 0; i < numStable; ++i) {
|
||||
SSmlSTableSchema* pointSchema = taosArrayGet(stableArray, i);
|
||||
SSmlSTableSchema dbSchema = {0};
|
||||
dbSchema.tags = taosArrayInit(8, sizeof(SSchema));
|
||||
dbSchema.fields = taosArrayInit(64, sizeof(SSchema));
|
||||
dbSchema.tagHash = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, false);
|
||||
dbSchema.fieldHash = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, false);
|
||||
|
||||
code = loadTableMeta(taos, pointSchema->sTableName, &dbSchema);
|
||||
|
||||
|
@ -652,6 +654,8 @@ int taos_sml_insert(TAOS* taos, TAOS_SML_DATA_POINT* points, int numPoint) {
|
|||
generateSchemaAction(pointTag, dbTagHash, true, pointSchema->sTableName, &schemaAction, &actionNeeded);
|
||||
if (actionNeeded) {
|
||||
applySchemaAction(taos, &schemaAction);
|
||||
code = loadTableMeta(taos, pointSchema->sTableName, &dbSchema);
|
||||
pointSchema->precision = dbSchema.precision;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -666,6 +670,8 @@ int taos_sml_insert(TAOS* taos, TAOS_SML_DATA_POINT* points, int numPoint) {
|
|||
generateSchemaAction(pointCol, dbFieldHash, false, pointSchema->sTableName, &schemaAction, &actionNeeded);
|
||||
if (actionNeeded) {
|
||||
applySchemaAction(taos, &schemaAction);
|
||||
code = loadTableMeta(taos, pointSchema->sTableName, &dbSchema);
|
||||
pointSchema->precision = dbSchema.precision;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -965,12 +965,24 @@ int32_t verify_schema_less(TAOS* taos) {
|
|||
|
||||
char* lines[] = {
|
||||
"st,t1=3i,t2=4,t3=\"t3\" c1=3i,c3=L\"passit\",c2=false,c4=4 1626006833639000000",
|
||||
"st,t1=4i,t2=5,t3=\"t4\" c1=3i,c3=L\"passitagain\",c2=true,c4=5 1626006833640000000",
|
||||
"st,t1=4i,t3=\"t4\",t2=5,t4=5 c1=3i,c3=L\"passitagain\",c2=true,c4=5 1626006833640000000",
|
||||
"st,t1=4i,t2=5,t3=\"t4\" c1=3i,c3=L\"passitagain\",c2=true,c4=5 1626006833642000000",
|
||||
"ste,t2=5,t3=L\"ste\" c1=true,c2=4,c3=\"iam\" 1626056811823316532",
|
||||
"ste,t2=5,t3=L\"ste2\" c3=\"iamszhou\",c4=false 1626056811843316532"
|
||||
};
|
||||
int code = taos_insert_by_lines(taos, lines , 5);
|
||||
|
||||
// int code = taos_insert_by_lines(taos, lines , 5);
|
||||
int code = taos_insert_by_lines(taos, &(lines[0]), 1);
|
||||
|
||||
code = taos_insert_by_lines(taos, &(lines[1]), 1);
|
||||
|
||||
// code = taos_insert_by_lines(taos, &(lines[2]), 1);
|
||||
//
|
||||
// code = taos_insert_by_lines(taos, &(lines[3]), 1);
|
||||
//
|
||||
// code = taos_insert_by_lines(taos, &(lines[4]), 1);
|
||||
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -980,7 +992,7 @@ int main(int argc, char *argv[]) {
|
|||
const char* passwd = "taosdata";
|
||||
|
||||
taos_options(TSDB_OPTION_TIMEZONE, "GMT-8");
|
||||
|
||||
taos_options(TSDB_OPTION_CONFIGDIR, "/etc/taos");
|
||||
TAOS* taos = taos_connect(host, user, passwd, "", 0);
|
||||
if (taos == NULL) {
|
||||
printf("\033[31mfailed to connect to db, reason:%s\033[0m\n", taos_errstr(taos));
|
||||
|
|
|
@ -87,6 +87,8 @@ enum {
|
|||
SIM_CMD_RESTFUL,
|
||||
SIM_CMD_TEST,
|
||||
SIM_CMD_RETURN,
|
||||
SIM_CMD_LINE_INSERT,
|
||||
SIM_CMD_LINE_INSERT_ERROR,
|
||||
SIM_CMD_END
|
||||
};
|
||||
|
||||
|
@ -172,6 +174,8 @@ bool simExecuteSqlCmd(SScript *script, char *option);
|
|||
bool simExecuteSqlErrorCmd(SScript *script, char *rest);
|
||||
bool simExecuteSqlSlowCmd(SScript *script, char *option);
|
||||
bool simExecuteRestfulCmd(SScript *script, char *rest);
|
||||
bool simExecuteLineInsertCmd(SScript *script, char *option);
|
||||
bool simExecuteLineInsertErrorCmd(SScript *script, char *option);
|
||||
void simVisuallizeOption(SScript *script, char *src, char *dst);
|
||||
|
||||
#endif
|
|
@ -1067,3 +1067,49 @@ bool simExecuteSqlErrorCmd(SScript *script, char *rest) {
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool simExecuteLineInsertCmd(SScript *script, char *rest) {
|
||||
char buf[TSDB_MAX_BINARY_LEN];
|
||||
|
||||
simVisuallizeOption(script, rest, buf);
|
||||
rest = buf;
|
||||
|
||||
SCmdLine *line = &script->lines[script->linePos];
|
||||
|
||||
simInfo("script:%s, %s", script->fileName, rest);
|
||||
simLogSql(buf, true);
|
||||
char * lines[] = {rest};
|
||||
int32_t ret = taos_insert_by_lines(script->taos, lines, 1);
|
||||
if (ret == TSDB_CODE_SUCCESS) {
|
||||
simDebug("script:%s, taos:%p, %s executed. success.", script->fileName, script->taos, rest);
|
||||
script->linePos++;
|
||||
return true;
|
||||
} else {
|
||||
sprintf(script->error, "lineNum: %d. line: %s failed, ret:%d:%s", line->lineNum, rest,
|
||||
ret & 0XFFFF, tstrerror(ret));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool simExecuteLineInsertErrorCmd(SScript *script, char *rest) {
|
||||
char buf[TSDB_MAX_BINARY_LEN];
|
||||
|
||||
simVisuallizeOption(script, rest, buf);
|
||||
rest = buf;
|
||||
|
||||
SCmdLine *line = &script->lines[script->linePos];
|
||||
|
||||
simInfo("script:%s, %s", script->fileName, rest);
|
||||
simLogSql(buf, true);
|
||||
char * lines[] = {rest};
|
||||
int32_t ret = taos_insert_by_lines(script->taos, lines, 1);
|
||||
if (ret == TSDB_CODE_SUCCESS) {
|
||||
sprintf(script->error, "script:%s, taos:%p, %s executed. expect failed, but success.", script->fileName, script->taos, rest);
|
||||
script->linePos++;
|
||||
return false;
|
||||
} else {
|
||||
simDebug("lineNum: %d. line: %s failed, ret:%d:%s. Expect failed, so success", line->lineNum, rest,
|
||||
ret & 0XFFFF, tstrerror(ret));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -838,6 +838,38 @@ bool simParseRunBackCmd(char *rest, SCommand *pCmd, int32_t lineNum) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool simParseLineInsertCmd(char* rest, SCommand* pCmd, int32_t lineNum) {
|
||||
int32_t expLen;
|
||||
|
||||
rest++;
|
||||
cmdLine[numOfLines].cmdno = SIM_CMD_LINE_INSERT;
|
||||
cmdLine[numOfLines].lineNum = lineNum;
|
||||
cmdLine[numOfLines].optionOffset = optionOffset;
|
||||
expLen = (int32_t)strlen(rest);
|
||||
memcpy(optionBuffer + optionOffset, rest, expLen);
|
||||
optionOffset += expLen + 1;
|
||||
*(optionBuffer + optionOffset - 1) = 0;
|
||||
|
||||
numOfLines++;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool simParseLineInsertErrorCmd(char* rest, SCommand* pCmd, int32_t lineNum) {
|
||||
int32_t expLen;
|
||||
|
||||
rest++;
|
||||
cmdLine[numOfLines].cmdno = SIM_CMD_LINE_INSERT;
|
||||
cmdLine[numOfLines].lineNum = lineNum;
|
||||
cmdLine[numOfLines].optionOffset = optionOffset;
|
||||
expLen = (int32_t)strlen(rest);
|
||||
memcpy(optionBuffer + optionOffset, rest, expLen);
|
||||
optionOffset += expLen + 1;
|
||||
*(optionBuffer + optionOffset - 1) = 0;
|
||||
|
||||
numOfLines++;
|
||||
return true;
|
||||
}
|
||||
|
||||
void simInitsimCmdList() {
|
||||
int32_t cmdno;
|
||||
memset(simCmdList, 0, SIM_CMD_END * sizeof(SCommand));
|
||||
|
@ -1049,4 +1081,20 @@ void simInitsimCmdList() {
|
|||
simCmdList[cmdno].parseCmd = simParseReturnCmd;
|
||||
simCmdList[cmdno].executeCmd = simExecuteReturnCmd;
|
||||
simAddCmdIntoHash(&(simCmdList[cmdno]));
|
||||
|
||||
cmdno = SIM_CMD_LINE_INSERT;
|
||||
simCmdList[cmdno].cmdno = cmdno;
|
||||
strcpy(simCmdList[cmdno].name, "line_insert");
|
||||
simCmdList[cmdno].nlen = (int16_t)strlen(simCmdList[cmdno].name);
|
||||
simCmdList[cmdno].parseCmd = simParseLineInsertCmd;
|
||||
simCmdList[cmdno].executeCmd = simExecuteLineInsertCmd;
|
||||
simAddCmdIntoHash(&(simCmdList[cmdno]));
|
||||
|
||||
cmdno = SIM_CMD_LINE_INSERT_ERROR;
|
||||
simCmdList[cmdno].cmdno = cmdno;
|
||||
strcpy(simCmdList[cmdno].name, "line_insert_error");
|
||||
simCmdList[cmdno].nlen = (int16_t)strlen(simCmdList[cmdno].name);
|
||||
simCmdList[cmdno].parseCmd = simParseLineInsertErrorCmd;
|
||||
simCmdList[cmdno].executeCmd = simExecuteLineInsertErrorCmd;
|
||||
simAddCmdIntoHash(&(simCmdList[cmdno]));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue