refactor: add ut casese for schemaless
This commit is contained in:
parent
c25f0f64b4
commit
624d8e8ce2
|
@ -54,15 +54,13 @@ typedef enum {
|
||||||
} ESchemaAction;
|
} ESchemaAction;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *sTableName;
|
char sTableName[TSDB_TABLE_NAME_LEN];
|
||||||
int32_t sTableNameLen;
|
|
||||||
SArray *tags;
|
SArray *tags;
|
||||||
SArray *fields;
|
SArray *fields;
|
||||||
} SCreateSTableActionInfo;
|
} SCreateSTableActionInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *sTableName;
|
char sTableName[TSDB_TABLE_NAME_LEN];
|
||||||
int32_t sTableNameLen;
|
|
||||||
SSmlKv *field;
|
SSmlKv *field;
|
||||||
} SAlterSTableActionInfo;
|
} SAlterSTableActionInfo;
|
||||||
|
|
||||||
|
@ -182,6 +180,7 @@ static inline bool smlCheckDuplicateKey(const char *key, int32_t keyLen, SHashOb
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlBuildInvalidDataMsg(SSmlMsgBuf* pBuf, const char *msg1, const char *msg2) {
|
static int32_t smlBuildInvalidDataMsg(SSmlMsgBuf* pBuf, const char *msg1, const char *msg2) {
|
||||||
|
memset(pBuf->buf, 0 , pBuf->len);
|
||||||
if(msg1) strncat(pBuf->buf, msg1, pBuf->len);
|
if(msg1) strncat(pBuf->buf, msg1, pBuf->len);
|
||||||
int32_t left = pBuf->len - strlen(pBuf->buf);
|
int32_t left = pBuf->len - strlen(pBuf->buf);
|
||||||
if(left > 2 && msg2) {
|
if(left > 2 && msg2) {
|
||||||
|
@ -193,7 +192,7 @@ static int32_t smlBuildInvalidDataMsg(SSmlMsgBuf* pBuf, const char *msg1, const
|
||||||
|
|
||||||
static int32_t smlGenerateSchemaAction(SSchema* colField, SHashObj* colHash, SSmlKv* kv, bool isTag,
|
static int32_t smlGenerateSchemaAction(SSchema* colField, SHashObj* colHash, SSmlKv* kv, bool isTag,
|
||||||
SSchemaAction* action, bool* actionNeeded, SSmlHandle* info) {
|
SSchemaAction* action, bool* actionNeeded, SSmlHandle* info) {
|
||||||
uint16_t *index = taosHashGet(colHash, kv->key, kv->keyLen);
|
uint16_t *index = (uint16_t *)taosHashGet(colHash, kv->key, kv->keyLen);
|
||||||
if (index) {
|
if (index) {
|
||||||
if (colField[*index].type != kv->type) {
|
if (colField[*index].type != kv->type) {
|
||||||
uError("SML:0x%"PRIx64" point type and db type mismatch. key: %s. point type: %d, db type: %d", info->id, kv->key,
|
uError("SML:0x%"PRIx64" point type and db type mismatch. key: %s. point type: %d, db type: %d", info->id, kv->key,
|
||||||
|
@ -201,7 +200,8 @@ static int32_t smlGenerateSchemaAction(SSchema* colField, SHashObj* colHash, SSm
|
||||||
return TSDB_CODE_TSC_INVALID_VALUE;
|
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_VAR_DATA_TYPE(colField[*index].type) && (colField[*index].bytes > kv->length)) {
|
if ((colField[*index].type == TSDB_DATA_TYPE_VARCHAR && (colField[*index].bytes - VARSTR_HEADER_SIZE) < kv->length) ||
|
||||||
|
(colField[*index].type == TSDB_DATA_TYPE_NCHAR &&((colField[*index].bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE < kv->length))) {
|
||||||
if (isTag) {
|
if (isTag) {
|
||||||
action->action = SCHEMA_ACTION_CHANGE_TAG_SIZE;
|
action->action = SCHEMA_ACTION_CHANGE_TAG_SIZE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -252,7 +252,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
uDebug("SML:0x%"PRIx64" apply schema action. action: %d", info->id, action->action);
|
uDebug("SML:0x%"PRIx64" apply schema action. action: %d", info->id, action->action);
|
||||||
switch (action->action) {
|
switch (action->action) {
|
||||||
case SCHEMA_ACTION_ADD_COLUMN: {
|
case SCHEMA_ACTION_ADD_COLUMN: {
|
||||||
int n = snprintf(result, action->alterSTable.sTableNameLen + 1, "alter stable `%s` add column ", action->alterSTable.sTableName);
|
int n = sprintf(result, "alter stable `%s` add column ", action->alterSTable.sTableName);
|
||||||
smlBuildColumnDescription(action->alterSTable.field, result+n, capacity-n, &outBytes);
|
smlBuildColumnDescription(action->alterSTable.field, result+n, capacity-n, &outBytes);
|
||||||
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
||||||
code = taos_errno(res);
|
code = taos_errno(res);
|
||||||
|
@ -275,7 +275,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SCHEMA_ACTION_ADD_TAG: {
|
case SCHEMA_ACTION_ADD_TAG: {
|
||||||
int n = snprintf(result, action->alterSTable.sTableNameLen + 1, "alter stable `%s` add tag ", action->alterSTable.sTableName);
|
int n = sprintf(result, "alter stable `%s` add tag ", action->alterSTable.sTableName);
|
||||||
smlBuildColumnDescription(action->alterSTable.field,
|
smlBuildColumnDescription(action->alterSTable.field,
|
||||||
result+n, capacity-n, &outBytes);
|
result+n, capacity-n, &outBytes);
|
||||||
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
||||||
|
@ -299,7 +299,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SCHEMA_ACTION_CHANGE_COLUMN_SIZE: {
|
case SCHEMA_ACTION_CHANGE_COLUMN_SIZE: {
|
||||||
int n = snprintf(result, action->alterSTable.sTableNameLen + 1, "alter stable `%s` modify column ", action->alterSTable.sTableName);
|
int n = sprintf(result, "alter stable `%s` modify column ", action->alterSTable.sTableName);
|
||||||
smlBuildColumnDescription(action->alterSTable.field, result+n,
|
smlBuildColumnDescription(action->alterSTable.field, result+n,
|
||||||
capacity-n, &outBytes);
|
capacity-n, &outBytes);
|
||||||
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
||||||
|
@ -322,7 +322,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SCHEMA_ACTION_CHANGE_TAG_SIZE: {
|
case SCHEMA_ACTION_CHANGE_TAG_SIZE: {
|
||||||
int n = snprintf(result, action->alterSTable.sTableNameLen + 1, "alter stable `%s` modify tag ", action->alterSTable.sTableName);
|
int n = sprintf(result, "alter stable `%s` modify tag ", action->alterSTable.sTableName);
|
||||||
smlBuildColumnDescription(action->alterSTable.field, result+n,
|
smlBuildColumnDescription(action->alterSTable.field, result+n,
|
||||||
capacity-n, &outBytes);
|
capacity-n, &outBytes);
|
||||||
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
TAOS_RES* res = taos_query(info->taos, result); //TODO async doAsyncQuery
|
||||||
|
@ -345,7 +345,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SCHEMA_ACTION_CREATE_STABLE: {
|
case SCHEMA_ACTION_CREATE_STABLE: {
|
||||||
int n = snprintf(result, action->createSTable.sTableNameLen + 1, "create stable `%s` (", action->createSTable.sTableName);
|
int n = sprintf(result, "create stable `%s` (", action->createSTable.sTableName);
|
||||||
char* pos = result + n; int freeBytes = capacity - n;
|
char* pos = result + n; int freeBytes = capacity - n;
|
||||||
|
|
||||||
SArray *cols = action->createSTable.fields;
|
SArray *cols = action->createSTable.fields;
|
||||||
|
@ -404,7 +404,7 @@ static int32_t smlApplySchemaAction(SSmlHandle* info, SSchemaAction* action) {
|
||||||
static int32_t smlProcessSchemaAction(SSmlHandle* info, SSchema* schemaField, SHashObj* schemaHash, SArray *cols, SSchemaAction* action, bool isTag){
|
static int32_t smlProcessSchemaAction(SSmlHandle* info, SSchema* schemaField, SHashObj* schemaHash, SArray *cols, SSchemaAction* action, bool isTag){
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
for (int j = 0; j < taosArrayGetSize(cols); ++j) {
|
for (int j = 0; j < taosArrayGetSize(cols); ++j) {
|
||||||
SSmlKv* kv = taosArrayGet(cols, j);
|
SSmlKv* kv = (SSmlKv*)taosArrayGetP(cols, j);
|
||||||
bool actionNeeded = false;
|
bool actionNeeded = false;
|
||||||
code = smlGenerateSchemaAction(schemaField, schemaHash, kv, isTag, action, &actionNeeded, info);
|
code = smlGenerateSchemaAction(schemaField, schemaHash, kv, isTag, action, &actionNeeded, info);
|
||||||
if(code != TSDB_CODE_SUCCESS){
|
if(code != TSDB_CODE_SUCCESS){
|
||||||
|
@ -439,9 +439,8 @@ static int32_t smlModifyDBSchemas(SSmlHandle* info) {
|
||||||
code = catalogGetSTableMeta(info->pCatalog, info->taos->pAppInfo->pTransporter, &ep, &pName, &pTableMeta);
|
code = catalogGetSTableMeta(info->pCatalog, info->taos->pAppInfo->pTransporter, &ep, &pName, &pTableMeta);
|
||||||
|
|
||||||
if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST || code == TSDB_CODE_MND_INVALID_STB) {
|
if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST || code == TSDB_CODE_MND_INVALID_STB) {
|
||||||
SSchemaAction schemaAction = { SCHEMA_ACTION_CREATE_STABLE, {0}};
|
SSchemaAction schemaAction = { .action = SCHEMA_ACTION_CREATE_STABLE, .createSTable = {0}};
|
||||||
schemaAction.createSTable.sTableName = superTable;
|
memcpy(schemaAction.createSTable.sTableName, superTable, superTableLen);
|
||||||
schemaAction.createSTable.sTableNameLen = superTableLen;
|
|
||||||
schemaAction.createSTable.tags = sTableData->tags;
|
schemaAction.createSTable.tags = sTableData->tags;
|
||||||
schemaAction.createSTable.fields = sTableData->cols;
|
schemaAction.createSTable.fields = sTableData->cols;
|
||||||
code = smlApplySchemaAction(info, &schemaAction);
|
code = smlApplySchemaAction(info, &schemaAction);
|
||||||
|
@ -451,14 +450,13 @@ static int32_t smlModifyDBSchemas(SSmlHandle* info) {
|
||||||
}
|
}
|
||||||
info->cost.numOfCreateSTables++;
|
info->cost.numOfCreateSTables++;
|
||||||
}else if (code == TSDB_CODE_SUCCESS) {
|
}else if (code == TSDB_CODE_SUCCESS) {
|
||||||
SHashObj *hashTmp = taosHashInit(pTableMeta->tableInfo.numOfTags, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, false);
|
SHashObj *hashTmp = taosHashInit(pTableMeta->tableInfo.numOfTags, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
for(uint16_t i = pTableMeta->tableInfo.numOfColumns; i < pTableMeta->tableInfo.numOfColumns + pTableMeta->tableInfo.numOfTags; i++){
|
for(uint16_t i = pTableMeta->tableInfo.numOfColumns; i < pTableMeta->tableInfo.numOfColumns + pTableMeta->tableInfo.numOfTags; i++){
|
||||||
taosHashPut(hashTmp, pTableMeta->schema[i].name, strlen(pTableMeta->schema[i].name), &i, SHORT_BYTES);
|
taosHashPut(hashTmp, pTableMeta->schema[i].name, strlen(pTableMeta->schema[i].name), &i, SHORT_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchemaAction schemaAction = {0};
|
SSchemaAction schemaAction = {.alterSTable = {0}};
|
||||||
schemaAction.alterSTable.sTableName = superTable;
|
memcpy(schemaAction.createSTable.sTableName, superTable, superTableLen);
|
||||||
schemaAction.alterSTable.sTableNameLen = superTableLen;
|
|
||||||
code = smlProcessSchemaAction(info, pTableMeta->schema, hashTmp, sTableData->tags, &schemaAction, true);
|
code = smlProcessSchemaAction(info, pTableMeta->schema, hashTmp, sTableData->tags, &schemaAction, true);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
taosHashCleanup(hashTmp);
|
taosHashCleanup(hashTmp);
|
||||||
|
@ -727,7 +725,7 @@ static int8_t smlGetTsTypeByLen(int32_t len) {
|
||||||
if (len == TSDB_TIME_PRECISION_SEC_DIGITS) {
|
if (len == TSDB_TIME_PRECISION_SEC_DIGITS) {
|
||||||
return TSDB_TIME_PRECISION_SECONDS;
|
return TSDB_TIME_PRECISION_SECONDS;
|
||||||
} else if (len == TSDB_TIME_PRECISION_MILLI_DIGITS) {
|
} else if (len == TSDB_TIME_PRECISION_MILLI_DIGITS) {
|
||||||
return TSDB_TIME_PRECISION_MILLI_DIGITS;
|
return TSDB_TIME_PRECISION_MILLI;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -793,9 +791,12 @@ static int32_t smlParseTS(SSmlHandle* info, const char* data, int32_t len, SArra
|
||||||
int64_t ts = 0;
|
int64_t ts = 0;
|
||||||
if(info->protocol == TSDB_SML_LINE_PROTOCOL){
|
if(info->protocol == TSDB_SML_LINE_PROTOCOL){
|
||||||
ts = smlParseInfluxTime(info, data, len);
|
ts = smlParseInfluxTime(info, data, len);
|
||||||
}else{
|
}else if(info->protocol == TSDB_SML_TELNET_PROTOCOL){
|
||||||
ts = smlParseOpenTsdbTime(info, data, len);
|
ts = smlParseOpenTsdbTime(info, data, len);
|
||||||
|
}else{
|
||||||
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ts == -1) return TSDB_CODE_TSC_INVALID_TIME_STAMP;
|
if(ts == -1) return TSDB_CODE_TSC_INVALID_TIME_STAMP;
|
||||||
|
|
||||||
// add ts to
|
// add ts to
|
||||||
|
@ -989,7 +990,7 @@ static int32_t smlParseTelnetTags(const char* data, int32_t len, SArray *cols, S
|
||||||
kv->keyLen = keyLen;
|
kv->keyLen = keyLen;
|
||||||
kv->value = value;
|
kv->value = value;
|
||||||
kv->length = valueLen;
|
kv->length = valueLen;
|
||||||
kv->type = TSDB_DATA_TYPE_NCHAR;
|
kv->type = TSDB_DATA_TYPE_NCHAR; //todo
|
||||||
|
|
||||||
if(cols) taosArrayPush(cols, &kv);
|
if(cols) taosArrayPush(cols, &kv);
|
||||||
}
|
}
|
||||||
|
@ -1774,7 +1775,7 @@ static int32_t smlParseValueFromJSON(cJSON *root, SSmlKv *kv) {
|
||||||
* user configured parameter tsDefaultJSONStrType
|
* user configured parameter tsDefaultJSONStrType
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *tsDefaultJSONStrType = "binary"; //todo
|
char *tsDefaultJSONStrType = "nchar"; //todo
|
||||||
smlConvertJSONString(kv, tsDefaultJSONStrType, root);
|
smlConvertJSONString(kv, tsDefaultJSONStrType, root);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2050,9 +2051,9 @@ static int32_t smlParseTelnetLine(SSmlHandle* info, void *data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(info->protocol == TSDB_SML_TELNET_PROTOCOL){
|
if(info->protocol == TSDB_SML_TELNET_PROTOCOL){
|
||||||
smlParseTelnetString(info, (const char*)data, tinfo, cols);
|
ret = smlParseTelnetString(info, (const char*)data, tinfo, cols);
|
||||||
}else if(info->protocol == TSDB_SML_JSON_PROTOCOL){
|
}else if(info->protocol == TSDB_SML_JSON_PROTOCOL){
|
||||||
smlParseJSONString(info, (cJSON *)data, tinfo, cols);
|
ret = smlParseJSONString(info, (cJSON *)data, tinfo, cols);
|
||||||
}else{
|
}else{
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -499,7 +499,7 @@ TEST(testCase, smlProcess_influx_Test) {
|
||||||
TAOS_RES *res = taos_query(taos, "select * from t_6885c584b98481584ee13dac399e173d");
|
TAOS_RES *res = taos_query(taos, "select * from t_6885c584b98481584ee13dac399e173d");
|
||||||
ASSERT_NE(res, nullptr);
|
ASSERT_NE(res, nullptr);
|
||||||
int fieldNum = taos_field_count(res);
|
int fieldNum = taos_field_count(res);
|
||||||
ASSERT_EQ(fieldNum, 11);
|
ASSERT_EQ(fieldNum, 5);
|
||||||
int rowNum = taos_affected_rows(res);
|
int rowNum = taos_affected_rows(res);
|
||||||
ASSERT_EQ(rowNum, 2);
|
ASSERT_EQ(rowNum, 2);
|
||||||
for (int i = 0; i < rowNum; ++i) {
|
for (int i = 0; i < rowNum; ++i) {
|
||||||
|
@ -575,11 +575,12 @@ TEST(testCase, smlProcess_telnet_Test) {
|
||||||
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
ASSERT_NE(info, nullptr);
|
ASSERT_NE(info, nullptr);
|
||||||
|
|
||||||
const char *sql[4] = {
|
const char *sql[5] = {
|
||||||
"sys.if.bytes.out 1479496100 1.3E0 host=web01 interface=eth0",
|
"sys.if.bytes.out 1479496100 1.3E0 host=web01 interface=eth0",
|
||||||
"sys.if.bytes.out 1479496101 1.3E1 interface=eth0 host=web01 ",
|
"sys.if.bytes.out 1479496101 1.3E1 interface=eth0 host=web01",
|
||||||
"sys.if.bytes.out 1479496102 1.3E3 network=tcp",
|
"sys.if.bytes.out 1479496102 1.3E3 network=tcp",
|
||||||
"sys.procs.running 1479496100 42 host=web01"
|
"sys.procs.running 1479496100 42 host=web01 ",
|
||||||
|
" sys.procs.running 1479496200 42 host=web01=4"
|
||||||
};
|
};
|
||||||
int ret = smlProcess(info, (char**)sql, sizeof(sql)/sizeof(sql[0]));
|
int ret = smlProcess(info, (char**)sql, sizeof(sql)/sizeof(sql[0]));
|
||||||
ASSERT_EQ(ret, 0);
|
ASSERT_EQ(ret, 0);
|
||||||
|
@ -678,7 +679,7 @@ TEST(testCase, smlProcess_json2_Test) {
|
||||||
ASSERT_NE(info, nullptr);
|
ASSERT_NE(info, nullptr);
|
||||||
const char *sql =
|
const char *sql =
|
||||||
"{\n"
|
"{\n"
|
||||||
" \"metric\": \"meter_current\",\n"
|
" \"metric\": \"meter_current0\",\n"
|
||||||
" \"timestamp\": {\n"
|
" \"timestamp\": {\n"
|
||||||
" \"value\" : 1346846400,\n"
|
" \"value\" : 1346846400,\n"
|
||||||
" \"type\" : \"s\"\n"
|
" \"type\" : \"s\"\n"
|
||||||
|
@ -722,7 +723,7 @@ TEST(testCase, smlProcess_json3_Test) {
|
||||||
ASSERT_NE(info, nullptr);
|
ASSERT_NE(info, nullptr);
|
||||||
const char *sql =
|
const char *sql =
|
||||||
"{\n"
|
"{\n"
|
||||||
" \"metric\": \"meter_current\",\n"
|
" \"metric\": \"meter_current1\",\n"
|
||||||
" \"timestamp\": {\n"
|
" \"timestamp\": {\n"
|
||||||
" \"value\" : 1346846400,\n"
|
" \"value\" : 1346846400,\n"
|
||||||
" \"type\" : \"s\"\n"
|
" \"type\" : \"s\"\n"
|
||||||
|
@ -793,9 +794,9 @@ TEST(testCase, smlProcess_json4_Test) {
|
||||||
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_JSON_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_JSON_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
ASSERT_NE(info, nullptr);
|
ASSERT_NE(info, nullptr);
|
||||||
const char *sql = "{\n"
|
const char *sql = "{\n"
|
||||||
" \"metric\": \"meter_current\",\n"
|
" \"metric\": \"meter_current2\",\n"
|
||||||
" \"timestamp\": {\n"
|
" \"timestamp\": {\n"
|
||||||
" \"value\" : 1346846400000,\n"
|
" \"value\" : 1346846500000,\n"
|
||||||
" \"type\" : \"ms\"\n"
|
" \"type\" : \"ms\"\n"
|
||||||
" },\n"
|
" },\n"
|
||||||
" \"value\": \"ni\",\n"
|
" \"value\": \"ni\",\n"
|
||||||
|
@ -838,3 +839,235 @@ TEST(testCase, smlProcess_json4_Test) {
|
||||||
taos_free_result(pRes);
|
taos_free_result(pRes);
|
||||||
smlDestroyInfo(info);
|
smlDestroyInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(testCase, smlParseTelnetLine_error_Test) {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_NE(taos, nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* pRes = taos_query(taos, "create database if not exists sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest((STscObj*)taos, NULL, NULL, TSDB_SQL_INSERT);
|
||||||
|
ASSERT_NE(request, nullptr);
|
||||||
|
|
||||||
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
|
ASSERT_NE(info, nullptr);
|
||||||
|
|
||||||
|
int32_t ret = 0;
|
||||||
|
const char *sql[19] = {
|
||||||
|
"sys.procs.running 14794961040 42 host=web01",
|
||||||
|
"sys.procs.running 14791040 42 host=web01",
|
||||||
|
"sys.procs.running erere 42 host=web01",
|
||||||
|
"sys.procs.running 1.6e10 42 host=web01",
|
||||||
|
"sys.procs.running 1.47949610 42 host=web01",
|
||||||
|
"sys.procs.running 147949610i 42 host=web01",
|
||||||
|
"sys.procs.running -147949610 42 host=web01",
|
||||||
|
"",
|
||||||
|
" ",
|
||||||
|
"sys ",
|
||||||
|
"sys.procs.running 1479496100 42 ",
|
||||||
|
"sys.procs.running 1479496100 42 host= ",
|
||||||
|
"sys.procs.running 1479496100 42or host=web01",
|
||||||
|
"sys.procs.running 1479496100 true host=web01",
|
||||||
|
"sys.procs.running 1479496100 \"binary\" host=web01",
|
||||||
|
"sys.procs.running 1479496100 L\"rfr\" host=web01",
|
||||||
|
"sys.procs.running 1479496100 42 host=web01 cpu= ",
|
||||||
|
"sys.procs.running 1479496100 42 host=web01 host=w2",
|
||||||
|
"sys.procs.running 1479496100 42 host=web01 host",
|
||||||
|
};
|
||||||
|
for(int i = 0; i < sizeof(sql)/sizeof(sql[0]); i++){
|
||||||
|
ret = smlParseTelnetLine(info, (void*)sql[i]);
|
||||||
|
ASSERT_NE(ret, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
destroyRequest(request);
|
||||||
|
smlDestroyInfo(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(testCase, smlParseTelnetLine_diff_type_Test) {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_NE(taos, nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* pRes = taos_query(taos, "create database if not exists sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest((STscObj*)taos, NULL, NULL, TSDB_SQL_INSERT);
|
||||||
|
ASSERT_NE(request, nullptr);
|
||||||
|
|
||||||
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
|
ASSERT_NE(info, nullptr);
|
||||||
|
|
||||||
|
const char *sql[2] = {
|
||||||
|
"sys.procs.running 1479496104000 42 host=web01",
|
||||||
|
"sys.procs.running 1479496104000 42u8 host=web01"
|
||||||
|
};
|
||||||
|
int32_t ret = smlProcess(info, (char**)sql, sizeof(sql)/sizeof(sql[0]));
|
||||||
|
ASSERT_NE(ret, 0);
|
||||||
|
|
||||||
|
destroyRequest(request);
|
||||||
|
smlDestroyInfo(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(testCase, smlParseTelnetLine_json_error_Test) {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_NE(taos, nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* pRes = taos_query(taos, "create database if not exists sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest((STscObj*)taos, NULL, NULL, TSDB_SQL_INSERT);
|
||||||
|
ASSERT_NE(request, nullptr);
|
||||||
|
|
||||||
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
|
ASSERT_NE(info, nullptr);
|
||||||
|
|
||||||
|
int32_t ret = 0;
|
||||||
|
const char *sql[] = {
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 13468464009999333322222223,\n"
|
||||||
|
" \"value\": 18,\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"host\": \"web01\",\n"
|
||||||
|
" \"dc\": \"lga\"\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 1346846400i,\n"
|
||||||
|
" \"value\": 18,\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"host\": \"web01\",\n"
|
||||||
|
" \"dc\": \"lga\"\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 1346846400,\n"
|
||||||
|
" \"value\": 18,\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"groupid\": { \n"
|
||||||
|
" \"value\" : 2,\n"
|
||||||
|
" \"type\" : \"nchar\"\n"
|
||||||
|
" },\n"
|
||||||
|
" \"location\": { \n"
|
||||||
|
" \"value\" : \"北京\",\n"
|
||||||
|
" \"type\" : \"binary\"\n"
|
||||||
|
" },\n"
|
||||||
|
" \"id\": \"d1001\"\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
};
|
||||||
|
for(int i = 0; i < sizeof(sql)/sizeof(sql[0]); i++){
|
||||||
|
ret = smlParseTelnetLine(info, (void*)sql[i]);
|
||||||
|
ASSERT_NE(ret, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
destroyRequest(request);
|
||||||
|
smlDestroyInfo(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(testCase, smlParseTelnetLine_diff_json_type1_Test) {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_NE(taos, nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* pRes = taos_query(taos, "create database if not exists sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest((STscObj*)taos, NULL, NULL, TSDB_SQL_INSERT);
|
||||||
|
ASSERT_NE(request, nullptr);
|
||||||
|
|
||||||
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
|
ASSERT_NE(info, nullptr);
|
||||||
|
|
||||||
|
const char *sql[2] = {
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 1346846400,\n"
|
||||||
|
" \"value\": 18,\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"host\": \"lga\"\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 1346846400,\n"
|
||||||
|
" \"value\": 18,\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"host\": 8\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
};
|
||||||
|
int32_t ret = smlProcess(info, (char**)sql, sizeof(sql)/sizeof(sql[0]));
|
||||||
|
ASSERT_NE(ret, 0);
|
||||||
|
|
||||||
|
destroyRequest(request);
|
||||||
|
smlDestroyInfo(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(testCase, smlParseTelnetLine_diff_json_type2_Test) {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_NE(taos, nullptr);
|
||||||
|
|
||||||
|
TAOS_RES* pRes = taos_query(taos, "create database if not exists sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
pRes = taos_query(taos, "use sml_db");
|
||||||
|
taos_free_result(pRes);
|
||||||
|
|
||||||
|
SRequestObj *request = (SRequestObj *)createRequest((STscObj*)taos, NULL, NULL, TSDB_SQL_INSERT);
|
||||||
|
ASSERT_NE(request, nullptr);
|
||||||
|
|
||||||
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_TELNET_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
|
ASSERT_NE(info, nullptr);
|
||||||
|
|
||||||
|
const char *sql[2] = {
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 1346846400,\n"
|
||||||
|
" \"value\": 18,\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"host\": \"lga\"\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
"[\n"
|
||||||
|
" {\n"
|
||||||
|
" \"metric\": \"sys.cpu.nice\",\n"
|
||||||
|
" \"timestamp\": 1346846400,\n"
|
||||||
|
" \"value\": \"18\",\n"
|
||||||
|
" \"tags\": {\n"
|
||||||
|
" \"host\": \"fff\"\n"
|
||||||
|
" }\n"
|
||||||
|
" },\n"
|
||||||
|
"]",
|
||||||
|
};
|
||||||
|
int32_t ret = smlProcess(info, (char**)sql, sizeof(sql)/sizeof(sql[0]));
|
||||||
|
ASSERT_NE(ret, 0);
|
||||||
|
|
||||||
|
destroyRequest(request);
|
||||||
|
smlDestroyInfo(info);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue