[td-10564] fix bug in planner.
This commit is contained in:
parent
80295947f2
commit
0108d6da73
|
@ -230,6 +230,8 @@ SExprInfo* createExprInfo(STableMetaInfo* pTableMetaInfo, int16_t functionId, SC
|
||||||
int32_t copyExprInfoList(SArray* dst, const SArray* src, uint64_t uid, bool deepcopy);
|
int32_t copyExprInfoList(SArray* dst, const SArray* src, uint64_t uid, bool deepcopy);
|
||||||
|
|
||||||
STableMetaInfo* getMetaInfo(SQueryStmtInfo* pQueryInfo, int32_t tableIndex);
|
STableMetaInfo* getMetaInfo(SQueryStmtInfo* pQueryInfo, int32_t tableIndex);
|
||||||
|
SSchema *getOneColumnSchema(const STableMeta* pTableMeta, int32_t colIndex);
|
||||||
|
|
||||||
int32_t getNewResColId();
|
int32_t getNewResColId();
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -27,7 +27,6 @@ int32_t getNumOfColumns(const STableMeta* pTableMeta);
|
||||||
int32_t getNumOfTags(const STableMeta* pTableMeta);
|
int32_t getNumOfTags(const STableMeta* pTableMeta);
|
||||||
SSchema *getTableColumnSchema(const STableMeta *pTableMeta);
|
SSchema *getTableColumnSchema(const STableMeta *pTableMeta);
|
||||||
SSchema *getTableTagSchema(const STableMeta* pTableMeta);
|
SSchema *getTableTagSchema(const STableMeta* pTableMeta);
|
||||||
SSchema *getOneColumnSchema(const STableMeta* pTableMeta, int32_t colIndex);
|
|
||||||
|
|
||||||
size_t getNumOfExprs(SQueryStmtInfo* pQueryInfo);
|
size_t getNumOfExprs(SQueryStmtInfo* pQueryInfo);
|
||||||
SExprInfo* createBinaryExprInfo(struct tExprNode* pNode, SSchema* pResSchema);
|
SExprInfo* createBinaryExprInfo(struct tExprNode* pNode, SSchema* pResSchema);
|
||||||
|
|
|
@ -1790,6 +1790,8 @@ static void setTsOutputExprInfo(SQueryStmtInfo* pQueryInfo, STableMetaInfo* pTab
|
||||||
SSchema s = createSchema(TSDB_DATA_TYPE_TIMESTAMP, TSDB_KEYSIZE, getNewResColId(), "ts");
|
SSchema s = createSchema(TSDB_DATA_TYPE_TIMESTAMP, TSDB_KEYSIZE, getNewResColId(), "ts");
|
||||||
|
|
||||||
SExprInfo* pExpr = createExprInfo(pTableMetaInfo, FUNCTION_TS_DUMMY, &indexTS, NULL, &s, TSDB_KEYSIZE);
|
SExprInfo* pExpr = createExprInfo(pTableMetaInfo, FUNCTION_TS_DUMMY, &indexTS, NULL, &s, TSDB_KEYSIZE);
|
||||||
|
strncpy(pExpr->base.token, "ts", tListLen(pExpr->base.token));
|
||||||
|
|
||||||
addExprInfo(pQueryInfo, outputIndex, pExpr);
|
addExprInfo(pQueryInfo, outputIndex, pExpr);
|
||||||
|
|
||||||
SSchema* pSourceSchema = getOneColumnSchema(pTableMetaInfo->pTableMeta, indexTS.columnIndex);
|
SSchema* pSourceSchema = getOneColumnSchema(pTableMetaInfo->pTableMeta, indexTS.columnIndex);
|
||||||
|
|
|
@ -108,9 +108,7 @@ static SQueryPlanNode* createQueryNode(int32_t type, const char* name, SQueryPla
|
||||||
pNode->pExpr = taosArrayInit(numOfOutput, POINTER_BYTES);
|
pNode->pExpr = taosArrayInit(numOfOutput, POINTER_BYTES);
|
||||||
|
|
||||||
for(int32_t i = 0; i < numOfOutput; ++i) {
|
for(int32_t i = 0; i < numOfOutput; ++i) {
|
||||||
SExprInfo* p = calloc(1, sizeof(SExprInfo));
|
taosArrayPush(pNode->pExpr, &pExpr[i]);
|
||||||
assignExprInfo(p, pExpr[i]);
|
|
||||||
taosArrayPush(pNode->pExpr, &p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pNode->pPrevNodes = taosArrayInit(4, POINTER_BYTES);
|
pNode->pPrevNodes = taosArrayInit(4, POINTER_BYTES);
|
||||||
|
@ -183,16 +181,16 @@ static SQueryPlanNode* doAddTableColumnNode(SQueryStmtInfo* pQueryInfo, STableMe
|
||||||
// table source column projection, generate the projection expr
|
// table source column projection, generate the projection expr
|
||||||
int32_t numOfCols = (int32_t) taosArrayGetSize(tableCols);
|
int32_t numOfCols = (int32_t) taosArrayGetSize(tableCols);
|
||||||
SExprInfo** pExpr = calloc(numOfCols, POINTER_BYTES);
|
SExprInfo** pExpr = calloc(numOfCols, POINTER_BYTES);
|
||||||
SSchema* pSchema = pTableMetaInfo->pTableMeta->schema;
|
|
||||||
|
|
||||||
STableMetaInfo* pTableMetaInfo1 = getMetaInfo(pQueryInfo, 0);
|
STableMetaInfo* pTableMetaInfo1 = getMetaInfo(pQueryInfo, 0);
|
||||||
SSchema resultSchema = *pSchema;
|
|
||||||
resultSchema.colId = getNewResColId();
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfCols; ++i) {
|
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||||
SColumn* pCol = taosArrayGetP(tableCols, i);
|
SColumn* pCol = taosArrayGetP(tableCols, i);
|
||||||
SColumnIndex index = {.tableIndex = 0, .columnIndex = pCol->columnIndex};
|
SColumnIndex index = {.tableIndex = 0, .columnIndex = pCol->columnIndex};
|
||||||
|
|
||||||
|
SSchema* pSchema = getOneColumnSchema(pTableMetaInfo->pTableMeta, i);
|
||||||
|
SSchema resultSchema = *pSchema;
|
||||||
|
|
||||||
SExprInfo* p = createExprInfo(pTableMetaInfo1, FUNCTION_PRJ, &index, NULL, &resultSchema, 0);
|
SExprInfo* p = createExprInfo(pTableMetaInfo1, FUNCTION_PRJ, &index, NULL, &resultSchema, 0);
|
||||||
pExpr[i] = p;
|
pExpr[i] = p;
|
||||||
}
|
}
|
||||||
|
@ -252,7 +250,8 @@ static SQueryPlanNode* doCreateQueryPlanForOneTableImpl(SQueryStmtInfo* pQueryIn
|
||||||
static SQueryPlanNode* doCreateQueryPlanForOneTable(SQueryStmtInfo* pQueryInfo, STableMetaInfo* pTableMetaInfo, SArray* pExprs,
|
static SQueryPlanNode* doCreateQueryPlanForOneTable(SQueryStmtInfo* pQueryInfo, STableMetaInfo* pTableMetaInfo, SArray* pExprs,
|
||||||
SArray* tableCols) {
|
SArray* tableCols) {
|
||||||
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
||||||
tNameExtractFullName(&pTableMetaInfo->name, name);
|
tstrncpy(name, pTableMetaInfo->name.tname, TSDB_TABLE_FNAME_LEN);
|
||||||
|
// tNameExtractFullName(&pTableMetaInfo->name, name);
|
||||||
|
|
||||||
SQueryTableInfo info = {.tableName = strdup(name), .uid = pTableMetaInfo->pTableMeta->uid,};
|
SQueryTableInfo info = {.tableName = strdup(name), .uid = pTableMetaInfo->pTableMeta->uid,};
|
||||||
|
|
||||||
|
@ -450,9 +449,11 @@ static int32_t doPrintPlan(char* buf, SQueryPlanNode* pQueryNode, int32_t level,
|
||||||
len += len1;
|
len += len1;
|
||||||
|
|
||||||
SInterval* pInterval = pQueryNode->pExtInfo;
|
SInterval* pInterval = pQueryNode->pExtInfo;
|
||||||
len1 = sprintf(buf + len, "interval:%" PRId64 "(%s), sliding:%" PRId64 "(%s), offset:%" PRId64 "\n",
|
|
||||||
|
// todo dynamic return the time precision
|
||||||
|
len1 = sprintf(buf + len, "interval:%" PRId64 "(%s), sliding:%" PRId64 "(%s), offset:%" PRId64 "(%s)\n",
|
||||||
pInterval->interval, TSDB_TIME_PRECISION_MILLI_STR, pInterval->sliding, TSDB_TIME_PRECISION_MILLI_STR,
|
pInterval->interval, TSDB_TIME_PRECISION_MILLI_STR, pInterval->sliding, TSDB_TIME_PRECISION_MILLI_STR,
|
||||||
pInterval->offset);
|
pInterval->offset, TSDB_TIME_PRECISION_MILLI_STR);
|
||||||
len += len1;
|
len += len1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue