refactor:modify schemaless function to speed
This commit is contained in:
parent
ca3b779a72
commit
65c77f572a
|
@ -190,17 +190,21 @@ TEST(testCase, smlParseCols_Error_Test) {
|
||||||
"c=-3.402823466e+39u64",
|
"c=-3.402823466e+39u64",
|
||||||
"c=-339u64",
|
"c=-339u64",
|
||||||
"c=18446744073709551616u64",
|
"c=18446744073709551616u64",
|
||||||
|
"c=1,c=2"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SHashObj *dumplicateKey = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
|
||||||
for(int i = 0; i < sizeof(data)/sizeof(data[0]); i++){
|
for(int i = 0; i < sizeof(data)/sizeof(data[0]); i++){
|
||||||
char msg[256] = {0};
|
char msg[256] = {0};
|
||||||
SSmlMsgBuf msgBuf;
|
SSmlMsgBuf msgBuf;
|
||||||
msgBuf.buf = msg;
|
msgBuf.buf = msg;
|
||||||
msgBuf.len = 256;
|
msgBuf.len = 256;
|
||||||
int32_t len = strlen(data[i]);
|
int32_t len = strlen(data[i]);
|
||||||
int32_t ret = smlParseCols(data[i], len, NULL, false, &msgBuf);
|
int32_t ret = smlParseCols(data[i], len, NULL, false, dumplicateKey, &msgBuf);
|
||||||
ASSERT_NE(ret, TSDB_CODE_SUCCESS);
|
ASSERT_NE(ret, TSDB_CODE_SUCCESS);
|
||||||
|
taosHashClear(dumplicateKey);
|
||||||
}
|
}
|
||||||
|
taosHashCleanup(dumplicateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(testCase, smlParseCols_tag_Test) {
|
TEST(testCase, smlParseCols_tag_Test) {
|
||||||
|
@ -211,11 +215,12 @@ TEST(testCase, smlParseCols_tag_Test) {
|
||||||
|
|
||||||
SArray *cols = taosArrayInit(16, POINTER_BYTES);
|
SArray *cols = taosArrayInit(16, POINTER_BYTES);
|
||||||
ASSERT_NE(cols, NULL);
|
ASSERT_NE(cols, NULL);
|
||||||
|
SHashObj *dumplicateKey = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
|
||||||
|
|
||||||
const char *data =
|
const char *data =
|
||||||
"cbin=\"passit hello,c=2\",cnch=L\"iisdfsf\",cbool=false,cf64=4.31f64,cf32_=8.32,cf32=8.23f32,ci8=-34i8,cu8=89u8,ci16=233i16,cu16=898u16,ci32=98289i32,cu32=12323u32,ci64=-89238i64,ci=989i,cu64=8989323u64,cbooltrue=true,cboolt=t,cboolf=f,cnch_=l\"iuwq\"";
|
"cbin=\"passit hello,c=2\",cnch=L\"iisdfsf\",cbool=false,cf64=4.31f64,cf32_=8.32,cf32=8.23f32,ci8=-34i8,cu8=89u8,ci16=233i16,cu16=898u16,ci32=98289i32,cu32=12323u32,ci64=-89238i64,ci=989i,cu64=8989323u64,cbooltrue=true,cboolt=t,cboolf=f,cnch_=l\"iuwq\"";
|
||||||
int32_t len = strlen(data);
|
int32_t len = strlen(data);
|
||||||
int32_t ret = smlParseCols(data, len, cols, true, &msgBuf);
|
int32_t ret = smlParseCols(data, len, cols, true, dumplicateKey, &msgBuf);
|
||||||
ASSERT_EQ(ret, TSDB_CODE_SUCCESS);
|
ASSERT_EQ(ret, TSDB_CODE_SUCCESS);
|
||||||
int32_t size = taosArrayGetSize(cols);
|
int32_t size = taosArrayGetSize(cols);
|
||||||
ASSERT_EQ(size, 19);
|
ASSERT_EQ(size, 19);
|
||||||
|
@ -239,10 +244,14 @@ TEST(testCase, smlParseCols_tag_Test) {
|
||||||
taosMemoryFree(kv);
|
taosMemoryFree(kv);
|
||||||
|
|
||||||
taosArrayClear(cols);
|
taosArrayClear(cols);
|
||||||
|
|
||||||
|
|
||||||
|
// test tag is null
|
||||||
data = "t=3e";
|
data = "t=3e";
|
||||||
len = 0;
|
len = 0;
|
||||||
memset(msgBuf.buf, 0, msgBuf.len);
|
memset(msgBuf.buf, 0, msgBuf.len);
|
||||||
ret = smlParseCols(data, len, cols, true, &msgBuf);
|
taosHashClear(dumplicateKey);
|
||||||
|
ret = smlParseCols(data, len, cols, true, dumplicateKey, &msgBuf);
|
||||||
ASSERT_EQ(ret, TSDB_CODE_SUCCESS);
|
ASSERT_EQ(ret, TSDB_CODE_SUCCESS);
|
||||||
size = taosArrayGetSize(cols);
|
size = taosArrayGetSize(cols);
|
||||||
ASSERT_EQ(size, 1);
|
ASSERT_EQ(size, 1);
|
||||||
|
@ -255,6 +264,9 @@ TEST(testCase, smlParseCols_tag_Test) {
|
||||||
ASSERT_EQ(kv->valueLen, strlen(TAG));
|
ASSERT_EQ(kv->valueLen, strlen(TAG));
|
||||||
ASSERT_EQ(strncasecmp(kv->value, TAG, strlen(TAG)), 0);
|
ASSERT_EQ(strncasecmp(kv->value, TAG, strlen(TAG)), 0);
|
||||||
taosMemoryFree(kv);
|
taosMemoryFree(kv);
|
||||||
|
|
||||||
|
taosArrayDestroy(cols);
|
||||||
|
taosHashCleanup(dumplicateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(testCase, smlParseCols_Test) {
|
TEST(testCase, smlParseCols_Test) {
|
||||||
|
@ -266,9 +278,11 @@ TEST(testCase, smlParseCols_Test) {
|
||||||
SArray *cols = taosArrayInit(16, POINTER_BYTES);
|
SArray *cols = taosArrayInit(16, POINTER_BYTES);
|
||||||
ASSERT_NE(cols, NULL);
|
ASSERT_NE(cols, NULL);
|
||||||
|
|
||||||
|
SHashObj *dumplicateKey = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
|
||||||
|
|
||||||
const char *data = "cbin=\"passit hello,c=2\",cnch=L\"iisdfsf\",cbool=false,cf64=4.31f64,cf32_=8.32,cf32=8.23f32,ci8=-34i8,cu8=89u8,ci16=233i16,cu16=898u16,ci32=98289i32,cu32=12323u32,ci64=-89238i64,ci=989i,cu64=8989323u64,cbooltrue=true,cboolt=t,cboolf=f,cnch_=l\"iuwq\"";
|
const char *data = "cbin=\"passit hello,c=2\",cnch=L\"iisdfsf\",cbool=false,cf64=4.31f64,cf32_=8.32,cf32=8.23f32,ci8=-34i8,cu8=89u8,ci16=233i16,cu16=898u16,ci32=98289i32,cu32=12323u32,ci64=-89238i64,ci=989i,cu64=8989323u64,cbooltrue=true,cboolt=t,cboolf=f,cnch_=l\"iuwq\"";
|
||||||
int32_t len = strlen(data);
|
int32_t len = strlen(data);
|
||||||
int32_t ret = smlParseCols(data, len, cols, false, &msgBuf);
|
int32_t ret = smlParseCols(data, len, cols, false, dumplicateKey, &msgBuf);
|
||||||
ASSERT_EQ(ret, TSDB_CODE_SUCCESS);
|
ASSERT_EQ(ret, TSDB_CODE_SUCCESS);
|
||||||
int32_t size = taosArrayGetSize(cols);
|
int32_t size = taosArrayGetSize(cols);
|
||||||
ASSERT_EQ(size, 19);
|
ASSERT_EQ(size, 19);
|
||||||
|
@ -450,6 +464,7 @@ TEST(testCase, smlParseCols_Test) {
|
||||||
taosMemoryFree(kv);
|
taosMemoryFree(kv);
|
||||||
|
|
||||||
taosArrayDestroy(cols);
|
taosArrayDestroy(cols);
|
||||||
|
taosHashCleanup(dumplicateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(testCase, smlParseLine_Test) {
|
TEST(testCase, smlParseLine_Test) {
|
||||||
|
@ -485,6 +500,30 @@ TEST(testCase, smlParseLine_Test) {
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(testCase, smlParseLine_error_Test) {
|
||||||
|
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||||
|
ASSERT_NE(taos, NULL);
|
||||||
|
|
||||||
|
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 = createRequest(taos, NULL, NULL, TSDB_SQL_INSERT);
|
||||||
|
ASSERT_NE(request, NULL);
|
||||||
|
|
||||||
|
SSmlHandle *info = smlBuildSmlInfo(taos, request, TSDB_SML_LINE_PROTOCOL, TSDB_SML_TIMESTAMP_NANO_SECONDS, true);
|
||||||
|
ASSERT_NE(info, NULL);
|
||||||
|
|
||||||
|
const char *sql[2] = {
|
||||||
|
"measure,t1=3 c1=8",
|
||||||
|
"measure,t2=3 c1=8u8"
|
||||||
|
};
|
||||||
|
int ret = smlInsertLines(info, sql, 2);
|
||||||
|
ASSERT_NE(ret, 0);
|
||||||
|
}
|
||||||
|
|
||||||
// TEST(testCase, smlParseTS_Test) {
|
// TEST(testCase, smlParseTS_Test) {
|
||||||
// char msg[256] = {0};
|
// char msg[256] = {0};
|
||||||
// SSmlMsgBuf msgBuf;
|
// SSmlMsgBuf msgBuf;
|
||||||
|
|
|
@ -1549,7 +1549,7 @@ typedef struct SmlExecHandle {
|
||||||
SQuery* pQuery;
|
SQuery* pQuery;
|
||||||
} SSmlExecHandle;
|
} SSmlExecHandle;
|
||||||
|
|
||||||
static int32_t smlBoundColumns(SArray *cols, SParsedDataColInfo* pColList, SSchema* pSchema) {
|
static int32_t smlBoundColumnData(SArray *cols, SParsedDataColInfo* pColList, SSchema* pSchema) {
|
||||||
col_id_t nCols = pColList->numOfCols;
|
col_id_t nCols = pColList->numOfCols;
|
||||||
|
|
||||||
pColList->numOfBound = 0;
|
pColList->numOfBound = 0;
|
||||||
|
@ -1620,7 +1620,7 @@ static int32_t smlBoundColumns(SArray *cols, SParsedDataColInfo* pColList, SSche
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smlBoundTags(SArray *cols, SKVRowBuilder *tagsBuilder, SParsedDataColInfo* tags, SSchema* pSchema, SKVRow *row, SMsgBuf *msg) {
|
static int32_t smlBuildTagRow(SArray *cols, SKVRowBuilder *tagsBuilder, SParsedDataColInfo* tags, SSchema* pSchema, SKVRow *row, SMsgBuf *msg) {
|
||||||
if (tdInitKVRowBuilder(tagsBuilder) < 0) {
|
if (tdInitKVRowBuilder(tagsBuilder) < 0) {
|
||||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
@ -1649,13 +1649,13 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
|
||||||
SSmlExecHandle *smlHandle = (SSmlExecHandle *)handle;
|
SSmlExecHandle *smlHandle = (SSmlExecHandle *)handle;
|
||||||
SSchema* pTagsSchema = getTableTagSchema(pTableMeta);
|
SSchema* pTagsSchema = getTableTagSchema(pTableMeta);
|
||||||
setBoundColumnInfo(&smlHandle->tags, pTagsSchema, getNumOfTags(pTableMeta));
|
setBoundColumnInfo(&smlHandle->tags, pTagsSchema, getNumOfTags(pTableMeta));
|
||||||
int ret = smlBoundColumns(tags, &smlHandle->tags, pTagsSchema);
|
int ret = smlBoundColumnData(tags, &smlHandle->tags, pTagsSchema);
|
||||||
if(ret != TSDB_CODE_SUCCESS){
|
if(ret != TSDB_CODE_SUCCESS){
|
||||||
buildInvalidOperationMsg(&pBuf, "bound tags error");
|
buildInvalidOperationMsg(&pBuf, "bound tags error");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
SKVRow row = NULL;
|
SKVRow row = NULL;
|
||||||
ret = smlBoundTags(tags, &smlHandle->tagsBuilder, &smlHandle->tags, pTagsSchema, &row, &pBuf);
|
ret = smlBuildTagRow(tags, &smlHandle->tagsBuilder, &smlHandle->tags, pTagsSchema, &row, &pBuf);
|
||||||
if(ret != TSDB_CODE_SUCCESS){
|
if(ret != TSDB_CODE_SUCCESS){
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1673,7 +1673,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
|
||||||
|
|
||||||
SSchema* pSchema = getTableColumnSchema(pTableMeta);
|
SSchema* pSchema = getTableColumnSchema(pTableMeta);
|
||||||
|
|
||||||
ret = smlBoundColumns(colsSchema, &pDataBlock->boundColumnInfo, pSchema);
|
ret = smlBoundColumnData(colsSchema, &pDataBlock->boundColumnInfo, pSchema);
|
||||||
if(ret != TSDB_CODE_SUCCESS){
|
if(ret != TSDB_CODE_SUCCESS){
|
||||||
buildInvalidOperationMsg(&pBuf, "bound cols error");
|
buildInvalidOperationMsg(&pBuf, "bound cols error");
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1698,10 +1698,10 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
|
||||||
STSRow* row = (STSRow*)(pDataBlock->pData + pDataBlock->size); // skip the SSubmitBlk header
|
STSRow* row = (STSRow*)(pDataBlock->pData + pDataBlock->size); // skip the SSubmitBlk header
|
||||||
tdSRowResetBuf(pBuilder, row);
|
tdSRowResetBuf(pBuilder, row);
|
||||||
void *rowData = NULL;
|
void *rowData = NULL;
|
||||||
bool eleEqual = false;
|
size_t rowDataSize = 0;
|
||||||
if(format){
|
if(format){
|
||||||
rowData = taosArrayGetP(colsFormat, r);
|
rowData = taosArrayGetP(colsFormat, r);
|
||||||
eleEqual = (taosArrayGetSize(rowData) == spd->numOfBound);
|
rowDataSize = taosArrayGetSize(rowData);
|
||||||
}else{
|
}else{
|
||||||
rowData = taosArrayGetP(cols, r);
|
rowData = taosArrayGetP(cols, r);
|
||||||
}
|
}
|
||||||
|
@ -1715,9 +1715,12 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols
|
||||||
|
|
||||||
SSmlKv *kv = NULL;
|
SSmlKv *kv = NULL;
|
||||||
if(format){
|
if(format){
|
||||||
kv = taosArrayGetP(rowData, c);
|
|
||||||
do{
|
do{
|
||||||
if (!eleEqual && kv && (kv->keyLen != strlen(pColSchema->name) || strncmp(kv->key, pColSchema->name, kv->keyLen) != 0)){
|
if(rowDataSize >= c){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
kv = taosArrayGetP(rowData, c);
|
||||||
|
if (rowDataSize != spd->numOfBound && kv && (kv->keyLen != strlen(pColSchema->name) || strncmp(kv->key, pColSchema->name, kv->keyLen) != 0)){
|
||||||
MemRowAppend(&pBuf, NULL, 0, ¶m);
|
MemRowAppend(&pBuf, NULL, 0, ¶m);
|
||||||
c++;
|
c++;
|
||||||
if(c >= spd->numOfBound) break;
|
if(c >= spd->numOfBound) break;
|
||||||
|
|
Loading…
Reference in New Issue