[TD-225] refactor codes.
This commit is contained in:
parent
d597ad5c54
commit
93c666bbb9
|
@ -107,9 +107,6 @@ SSchema tscGetTbnameColumnSchema();
|
||||||
*/
|
*/
|
||||||
STableMeta* tscCreateTableMetaFromMsg(STableMetaMsg* pTableMetaMsg, size_t* size);
|
STableMeta* tscCreateTableMetaFromMsg(STableMetaMsg* pTableMetaMsg, size_t* size);
|
||||||
|
|
||||||
//todo tags value as well as the table id structure needs refactor
|
|
||||||
char *tsGetTagsValue(STableMeta *pMeta);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -431,14 +431,6 @@ void tscResetSqlCmdObj(SSqlCmd *pCmd, bool removeFromCache);
|
||||||
*/
|
*/
|
||||||
void tscFreeSqlResult(SSqlObj *pSql);
|
void tscFreeSqlResult(SSqlObj *pSql);
|
||||||
|
|
||||||
/**
|
|
||||||
* only free part of resources allocated during query.
|
|
||||||
* TODO remove it later
|
|
||||||
* Note: this function is multi-thread safe.
|
|
||||||
* @param pObj
|
|
||||||
*/
|
|
||||||
void tscPartiallyFreeSqlObj(SSqlObj *pSql);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* free sql object, release allocated resource
|
* free sql object, release allocated resource
|
||||||
* @param pObj
|
* @param pObj
|
||||||
|
|
|
@ -49,82 +49,6 @@ typedef struct SCreateBuilder {
|
||||||
} SCreateBuilder;
|
} SCreateBuilder;
|
||||||
static void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, int16_t type, size_t valueLength);
|
static void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, int16_t type, size_t valueLength);
|
||||||
|
|
||||||
static int32_t getToStringLength(const char *pData, int32_t length, int32_t type) {
|
|
||||||
char buf[512] = {0};
|
|
||||||
|
|
||||||
int32_t len = 0;
|
|
||||||
int32_t MAX_BOOL_TYPE_LENGTH = 5; // max(strlen("true"), strlen("false"));
|
|
||||||
switch (type) {
|
|
||||||
case TSDB_DATA_TYPE_BINARY:
|
|
||||||
return length;
|
|
||||||
case TSDB_DATA_TYPE_NCHAR:
|
|
||||||
return length;
|
|
||||||
case TSDB_DATA_TYPE_DOUBLE: {
|
|
||||||
double dv = 0;
|
|
||||||
dv = GET_DOUBLE_VAL(pData);
|
|
||||||
len = sprintf(buf, "%lf", dv);
|
|
||||||
if (strncasecmp("nan", buf, 3) == 0) {
|
|
||||||
len = 4;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case TSDB_DATA_TYPE_FLOAT: {
|
|
||||||
float fv = 0;
|
|
||||||
fv = GET_FLOAT_VAL(pData);
|
|
||||||
len = sprintf(buf, "%f", fv);
|
|
||||||
if (strncasecmp("nan", buf, 3) == 0) {
|
|
||||||
len = 4;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
|
||||||
len = sprintf(buf, "%" PRId64, *(int64_t *)pData);
|
|
||||||
break;
|
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
|
||||||
len = MAX_BOOL_TYPE_LENGTH;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
len = sprintf(buf, "%d", *(int32_t *)pData);
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* we need to convert all data into string, so we need to sprintf all kinds of
|
|
||||||
* non-string data into string, and record its length to get the right
|
|
||||||
* maximum length. The length may be less or greater than its original binary length:
|
|
||||||
* For example:
|
|
||||||
* length((short) 1) == 1, less than sizeof(short)
|
|
||||||
* length((uint64_t) 123456789011) > 12, greater than sizsof(uint64_t)
|
|
||||||
*/
|
|
||||||
static int32_t tscMaxLengthOfTagsFields(SSqlObj *pSql) {
|
|
||||||
STableMeta *pMeta = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0, 0)->pTableMeta;
|
|
||||||
|
|
||||||
if (pMeta->tableType == TSDB_SUPER_TABLE || pMeta->tableType == TSDB_NORMAL_TABLE ||
|
|
||||||
pMeta->tableType == TSDB_STREAM_TABLE) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char * pTagValue = tsGetTagsValue(pMeta);
|
|
||||||
SSchema *pTagsSchema = tscGetTableTagSchema(pMeta);
|
|
||||||
|
|
||||||
int32_t len = getToStringLength(pTagValue, pTagsSchema[0].bytes, pTagsSchema[0].type);
|
|
||||||
|
|
||||||
pTagValue += pTagsSchema[0].bytes;
|
|
||||||
int32_t numOfTags = tscGetNumOfTags(pMeta);
|
|
||||||
|
|
||||||
for (int32_t i = 1; i < numOfTags; ++i) {
|
|
||||||
int32_t tLen = getToStringLength(pTagValue, pTagsSchema[i].bytes, pTagsSchema[i].type);
|
|
||||||
if (len < tLen) {
|
|
||||||
len = tLen;
|
|
||||||
}
|
|
||||||
|
|
||||||
pTagValue += pTagsSchema[i].bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
||||||
SSqlRes *pRes = &pSql->res;
|
SSqlRes *pRes = &pSql->res;
|
||||||
|
|
||||||
|
@ -186,8 +110,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// the following is handle display tags value for meters created according to metric
|
// the following is handle display tags for table created according to super table
|
||||||
char *pTagValue = tsGetTagsValue(pMeta);
|
|
||||||
for (int32_t i = numOfRows; i < totalNumOfRows; ++i) {
|
for (int32_t i = numOfRows; i < totalNumOfRows; ++i) {
|
||||||
// field name
|
// field name
|
||||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 0);
|
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 0);
|
||||||
|
@ -219,8 +142,6 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
||||||
char *target = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 3) * totalNumOfRows + pField->bytes * i;
|
char *target = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 3) * totalNumOfRows + pField->bytes * i;
|
||||||
const char *src = "TAG";
|
const char *src = "TAG";
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(target, src, pField->bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(target, src, pField->bytes);
|
||||||
|
|
||||||
pTagValue += pSchema[i].bytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -286,10 +207,10 @@ static int32_t tscProcessDescribeTable(SSqlObj *pSql) {
|
||||||
const int32_t TYPE_COLUMN_LENGTH = 16;
|
const int32_t TYPE_COLUMN_LENGTH = 16;
|
||||||
const int32_t NOTE_COLUMN_MIN_LENGTH = 8;
|
const int32_t NOTE_COLUMN_MIN_LENGTH = 8;
|
||||||
|
|
||||||
int32_t noteFieldLen = tscMaxLengthOfTagsFields(pSql);
|
int32_t noteFieldLen = NOTE_COLUMN_MIN_LENGTH;//tscMaxLengthOfTagsFields(pSql);
|
||||||
if (noteFieldLen == 0) {
|
// if (noteFieldLen == 0) {
|
||||||
noteFieldLen = NOTE_COLUMN_MIN_LENGTH;
|
// noteFieldLen = NOTE_COLUMN_MIN_LENGTH;
|
||||||
}
|
// }
|
||||||
|
|
||||||
int32_t rowLen = tscBuildTableSchemaResultFields(pSql, NUM_OF_DESC_TABLE_COLUMNS, TYPE_COLUMN_LENGTH, noteFieldLen);
|
int32_t rowLen = tscBuildTableSchemaResultFields(pSql, NUM_OF_DESC_TABLE_COLUMNS, TYPE_COLUMN_LENGTH, noteFieldLen);
|
||||||
tscFieldInfoUpdateOffset(pQueryInfo);
|
tscFieldInfoUpdateOffset(pQueryInfo);
|
||||||
|
|
|
@ -197,28 +197,6 @@ STableMeta* tscCreateTableMetaFromMsg(STableMetaMsg* pTableMetaMsg, size_t* size
|
||||||
return pTableMeta;
|
return pTableMeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* the TableMeta data format in memory is as follows:
|
|
||||||
*
|
|
||||||
* +--------------------+
|
|
||||||
* |STableMeta Body data| sizeof(STableMeta)
|
|
||||||
* +--------------------+
|
|
||||||
* |Schema data | numOfTotalColumns * sizeof(SSchema)
|
|
||||||
* +--------------------+
|
|
||||||
* |Tags data | tag_col_1.bytes + tag_col_2.bytes + ....
|
|
||||||
* +--------------------+
|
|
||||||
*
|
|
||||||
* @param pTableMeta
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
char* tsGetTagsValue(STableMeta* pTableMeta) {
|
|
||||||
int32_t offset = 0;
|
|
||||||
// int32_t numOfTotalCols = pTableMeta->numOfColumns + pTableMeta->numOfTags;
|
|
||||||
// uint32_t offset = sizeof(STableMeta) + numOfTotalCols * sizeof(SSchema);
|
|
||||||
|
|
||||||
return ((char*)pTableMeta + offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo refactor
|
// todo refactor
|
||||||
UNUSED_FUNC static FORCE_INLINE char* skipSegments(char* input, char delim, int32_t num) {
|
UNUSED_FUNC static FORCE_INLINE char* skipSegments(char* input, char delim, int32_t num) {
|
||||||
for (int32_t i = 0; i < num; ++i) {
|
for (int32_t i = 0; i < num; ++i) {
|
||||||
|
|
|
@ -886,7 +886,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
STSVnodeBlockInfo *pBlockInfo = tsBufGetVnodeBlockInfo(pQueryInfo->tsBuf, vnodeId);
|
STSVnodeBlockInfo *pBlockInfo = tsBufGetVnodeBlockInfo(pQueryInfo->tsBuf, vnodeId);
|
||||||
assert(QUERY_IS_JOIN_QUERY(pQueryInfo->type) && pBlockInfo != NULL); // this query should not be sent
|
assert(QUERY_IS_JOIN_QUERY(pQueryInfo->type) && pBlockInfo != NULL); // this query should not be sent
|
||||||
|
|
||||||
// todo refactor
|
// todo refactor, extract method and put into tsBuf.c
|
||||||
if (fseek(pQueryInfo->tsBuf->f, pBlockInfo->offset, SEEK_SET) != 0) {
|
if (fseek(pQueryInfo->tsBuf->f, pBlockInfo->offset, SEEK_SET) != 0) {
|
||||||
int code = TAOS_SYSTEM_ERROR(ferror(pQueryInfo->tsBuf->f));
|
int code = TAOS_SYSTEM_ERROR(ferror(pQueryInfo->tsBuf->f));
|
||||||
tscError("%p: fseek failed: %s", pSql, tstrerror(code));
|
tscError("%p: fseek failed: %s", pSql, tstrerror(code));
|
||||||
|
|
|
@ -338,34 +338,6 @@ void tscFreeSqlResult(SSqlObj* pSql) {
|
||||||
memset(&pSql->res, 0, sizeof(SSqlRes));
|
memset(&pSql->res, 0, sizeof(SSqlRes));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tscPartiallyFreeSqlObj(SSqlObj* pSql) {
|
|
||||||
if (pSql == NULL || pSql->signature != pSql) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSqlCmd* pCmd = &pSql->cmd;
|
|
||||||
int32_t cmd = pCmd->command;
|
|
||||||
if (cmd < TSDB_SQL_INSERT || cmd == TSDB_SQL_RETRIEVE_LOCALMERGE || cmd == TSDB_SQL_RETRIEVE_EMPTY_RESULT ||
|
|
||||||
cmd == TSDB_SQL_TABLE_JOIN_RETRIEVE) {
|
|
||||||
tscRemoveFromSqlList(pSql);
|
|
||||||
}
|
|
||||||
|
|
||||||
// pSql->sqlstr will be used by tscBuildQueryStreamDesc
|
|
||||||
// if (pObj->signature == pObj) {
|
|
||||||
//pthread_mutex_lock(&pObj->mutex);
|
|
||||||
taosTFree(pSql->sqlstr);
|
|
||||||
//pthread_mutex_unlock(&pObj->mutex);
|
|
||||||
// }
|
|
||||||
|
|
||||||
tscFreeSqlResult(pSql);
|
|
||||||
|
|
||||||
taosTFree(pSql->pSubs);
|
|
||||||
pSql->subState.numOfSub = 0;
|
|
||||||
pSql->self = 0;
|
|
||||||
|
|
||||||
tscResetSqlCmdObj(pCmd, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tscFreeSubobj(SSqlObj* pSql) {
|
static void tscFreeSubobj(SSqlObj* pSql) {
|
||||||
if (pSql->subState.numOfSub == 0) {
|
if (pSql->subState.numOfSub == 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -434,22 +406,32 @@ void tscFreeSqlObj(SSqlObj* pSql) {
|
||||||
tscDebug("%p start to free sqlObj", pSql);
|
tscDebug("%p start to free sqlObj", pSql);
|
||||||
|
|
||||||
pSql->res.code = TSDB_CODE_TSC_QUERY_CANCELLED;
|
pSql->res.code = TSDB_CODE_TSC_QUERY_CANCELLED;
|
||||||
|
|
||||||
tscFreeSubobj(pSql);
|
tscFreeSubobj(pSql);
|
||||||
|
|
||||||
tscPartiallyFreeSqlObj(pSql);
|
SSqlCmd* pCmd = &pSql->cmd;
|
||||||
|
int32_t cmd = pCmd->command;
|
||||||
|
if (cmd < TSDB_SQL_INSERT || cmd == TSDB_SQL_RETRIEVE_LOCALMERGE || cmd == TSDB_SQL_RETRIEVE_EMPTY_RESULT ||
|
||||||
|
cmd == TSDB_SQL_TABLE_JOIN_RETRIEVE) {
|
||||||
|
tscRemoveFromSqlList(pSql);
|
||||||
|
}
|
||||||
|
|
||||||
pSql->signature = NULL;
|
pSql->signature = NULL;
|
||||||
pSql->fp = NULL;
|
pSql->fp = NULL;
|
||||||
|
taosTFree(pSql->sqlstr);
|
||||||
|
|
||||||
SSqlCmd* pCmd = &pSql->cmd;
|
taosTFree(pSql->pSubs);
|
||||||
|
pSql->subState.numOfSub = 0;
|
||||||
|
pSql->self = 0;
|
||||||
|
|
||||||
|
tscFreeSqlResult(pSql);
|
||||||
|
tscResetSqlCmdObj(pCmd, false);
|
||||||
|
|
||||||
memset(pCmd->payload, 0, (size_t)pCmd->allocSize);
|
memset(pCmd->payload, 0, (size_t)pCmd->allocSize);
|
||||||
taosTFree(pCmd->payload);
|
taosTFree(pCmd->payload);
|
||||||
pCmd->allocSize = 0;
|
pCmd->allocSize = 0;
|
||||||
|
|
||||||
taosTFree(pSql->sqlstr);
|
|
||||||
tsem_destroy(&pSql->rspSem);
|
tsem_destroy(&pSql->rspSem);
|
||||||
|
|
||||||
free(pSql);
|
free(pSql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ typedef struct SSingleColumnFilterInfo {
|
||||||
SColumnFilterElem* pFilters;
|
SColumnFilterElem* pFilters;
|
||||||
} SSingleColumnFilterInfo;
|
} SSingleColumnFilterInfo;
|
||||||
|
|
||||||
typedef struct STableQueryInfo { // todo merge with the STableQueryInfo struct
|
typedef struct STableQueryInfo {
|
||||||
TSKEY lastKey;
|
TSKEY lastKey;
|
||||||
int32_t groupIndex; // group id in table list
|
int32_t groupIndex; // group id in table list
|
||||||
int16_t queryRangeSet; // denote if the query range is set, only available for interval query
|
int16_t queryRangeSet; // denote if the query range is set, only available for interval query
|
||||||
|
|
|
@ -223,13 +223,6 @@ typedef struct tSQLExprList {
|
||||||
tSQLExprItem *a; /* One entry for each expression */
|
tSQLExprItem *a; /* One entry for each expression */
|
||||||
} tSQLExprList;
|
} tSQLExprList;
|
||||||
|
|
||||||
typedef struct tSQLExprListList {
|
|
||||||
int32_t nList; /* Number of expressions on the list */
|
|
||||||
int32_t nAlloc; /* Number of entries allocated below */
|
|
||||||
tSQLExprList **a; /* one entry for each row */
|
|
||||||
} tSQLExprListList;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param yyp The parser
|
* @param yyp The parser
|
||||||
|
|
Loading…
Reference in New Issue