[td-187] support group by on normal columns.
This commit is contained in:
parent
102cf898a4
commit
7ddbf61980
|
@ -2477,6 +2477,10 @@ int32_t parseGroupbyClause(SQueryInfo* pQueryInfo, tVariantList* pList, SSqlCmd*
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pQueryInfo->colList == NULL) {
|
||||||
|
pQueryInfo->colList = taosArrayInit(4, POINTER_BYTES);
|
||||||
|
}
|
||||||
|
|
||||||
pQueryInfo->groupbyExpr.numOfGroupCols = pList->nExpr;
|
pQueryInfo->groupbyExpr.numOfGroupCols = pList->nExpr;
|
||||||
if (pList->nExpr > TSDB_MAX_TAGS) {
|
if (pList->nExpr > TSDB_MAX_TAGS) {
|
||||||
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
||||||
|
@ -4915,7 +4919,7 @@ void doAddGroupColumnForSubquery(SQueryInfo* pQueryInfo, int32_t tagIndex) {
|
||||||
list.num = 1;
|
list.num = 1;
|
||||||
list.ids[0] = colIndex;
|
list.ids[0] = colIndex;
|
||||||
|
|
||||||
insertResultField(pQueryInfo, size - 1, &list, pSchema->bytes, pSchema->type, pSchema->name, pExpr);
|
insertResultField(pQueryInfo, size, &list, pSchema->bytes, pSchema->type, pSchema->name, pExpr);
|
||||||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, size - 1);
|
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, size - 1);
|
||||||
pInfo->visible = false;
|
pInfo->visible = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -990,9 +990,7 @@ static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, char *pDat
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static UNUSED_FUNC char *getGroupbyColumnData(SQuery *pQuery, SData **data, int16_t *type, int16_t *bytes) {
|
static char *getGroupbyColumnData(SQuery *pQuery, int16_t *type, int16_t *bytes, SArray* pDataBlock) {
|
||||||
char *groupbyColumnData = NULL;
|
|
||||||
|
|
||||||
SSqlGroupbyExpr *pGroupbyExpr = pQuery->pGroupbyExpr;
|
SSqlGroupbyExpr *pGroupbyExpr = pQuery->pGroupbyExpr;
|
||||||
|
|
||||||
for (int32_t k = 0; k < pGroupbyExpr->numOfGroupCols; ++k) {
|
for (int32_t k = 0; k < pGroupbyExpr->numOfGroupCols; ++k) {
|
||||||
|
@ -1015,12 +1013,22 @@ static UNUSED_FUNC char *getGroupbyColumnData(SQuery *pQuery, SData **data, int1
|
||||||
|
|
||||||
*type = pQuery->colList[colIndex].type;
|
*type = pQuery->colList[colIndex].type;
|
||||||
*bytes = pQuery->colList[colIndex].bytes;
|
*bytes = pQuery->colList[colIndex].bytes;
|
||||||
|
/*
|
||||||
// groupbyColumnData = doGetDataBlocks(pQuery, data, pQuery->colList[colIndex].inf);
|
* the colIndex is acquired from the first meter of all qualified meters in this vnode during query prepare
|
||||||
break;
|
* stage, the remain meter may not have the required column in cache actually. So, the validation of required
|
||||||
|
* column in cache with the corresponding meter schema is reinforced.
|
||||||
|
*/
|
||||||
|
int32_t numOfCols = taosArrayGetSize(pDataBlock);
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||||
|
SColumnInfoData *p = taosArrayGet(pDataBlock, i);
|
||||||
|
if (pColIndex->colId == p->info.colId) {
|
||||||
|
return p->pData;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return groupbyColumnData;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, int32_t offset) {
|
static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, int32_t offset) {
|
||||||
|
@ -1091,8 +1099,7 @@ static void rowwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, SDataStatis *pS
|
||||||
|
|
||||||
char *groupbyColumnData = NULL;
|
char *groupbyColumnData = NULL;
|
||||||
if (groupbyStateValue) {
|
if (groupbyStateValue) {
|
||||||
assert(0);
|
groupbyColumnData = getGroupbyColumnData(pQuery, &type, &bytes, pDataBlock);
|
||||||
// groupbyColumnData = getGroupbyColumnData(pQuery, data, &type, &bytes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int32_t k = 0; k < pQuery->numOfOutput; ++k) {
|
for (int32_t k = 0; k < pQuery->numOfOutput; ++k) {
|
||||||
|
@ -6088,9 +6095,16 @@ int32_t qCreateQueryInfo(void *tsdb, SQueryTableMsg *pQueryMsg, qinfo_t *pQInfo)
|
||||||
|
|
||||||
STableId *id = taosArrayGet(pTableIdList, 0);
|
STableId *id = taosArrayGet(pTableIdList, 0);
|
||||||
id->uid = -1; // todo fix me
|
id->uid = -1; // todo fix me
|
||||||
|
|
||||||
|
// group by normal column, do not pass the group by condition to tsdb to group table into different group
|
||||||
|
int32_t numOfGroupByCols = pQueryMsg->numOfGroupCols;
|
||||||
|
if (pQueryMsg->numOfGroupCols == 1 && !TSDB_COL_IS_TAG(pGroupColIndex->flag)) {
|
||||||
|
numOfGroupByCols = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo handle the error
|
||||||
/*int32_t ret =*/tsdbQueryByTagsCond(tsdb, id->uid, tagCond, pQueryMsg->tagCondLen, &groupInfo, pGroupColIndex,
|
/*int32_t ret =*/tsdbQueryByTagsCond(tsdb, id->uid, tagCond, pQueryMsg->tagCondLen, &groupInfo, pGroupColIndex,
|
||||||
pQueryMsg->numOfGroupCols);
|
numOfGroupByCols);
|
||||||
if (groupInfo.numOfTables == 0) { // no qualified tables no need to do query
|
if (groupInfo.numOfTables == 0) { // no qualified tables no need to do query
|
||||||
code = TSDB_CODE_SUCCESS;
|
code = TSDB_CODE_SUCCESS;
|
||||||
goto _query_over;
|
goto _query_over;
|
||||||
|
|
Loading…
Reference in New Issue