提交 3cb595b6 编写于 作者: Y yihaoDeng

[TD-4335]<feature> group by multi column

上级 a9d71e28
...@@ -48,6 +48,8 @@ ...@@ -48,6 +48,8 @@
(_dst).ekey = (_src).ekey;\ (_dst).ekey = (_src).ekey;\
} while (0) } while (0)
#define GROUPBY_MULTI_COLUMN_DELIM "-"
enum { enum {
TS_JOIN_TS_EQUAL = 0, TS_JOIN_TS_EQUAL = 0,
TS_JOIN_TS_NOT_EQUALS = 1, TS_JOIN_TS_NOT_EQUALS = 1,
...@@ -1476,6 +1478,8 @@ static bool buildGroupbyInfo(const SSDataBlock *pSDataBlock, const SGroupbyExpr ...@@ -1476,6 +1478,8 @@ static bool buildGroupbyInfo(const SSDataBlock *pSDataBlock, const SGroupbyExpr
} }
} }
} }
pInfo->totalBytes += strlen(GROUPBY_MULTI_COLUMN_DELIM) * pGroupbyExpr->numOfGroupCols;
return true; return true;
} }
static void buildGroupbyKeyBuf(const SSDataBlock *pSDataBlock, SGroupbyOperatorInfo *pInfo, int32_t rowId, char **buf, bool *isNullKey) { static void buildGroupbyKeyBuf(const SSDataBlock *pSDataBlock, SGroupbyOperatorInfo *pInfo, int32_t rowId, char **buf, bool *isNullKey) {
...@@ -1501,6 +1505,8 @@ static void buildGroupbyKeyBuf(const SSDataBlock *pSDataBlock, SGroupbyOperatorI ...@@ -1501,6 +1505,8 @@ static void buildGroupbyKeyBuf(const SSDataBlock *pSDataBlock, SGroupbyOperatorI
memcpy(p, val, pDataInfo->bytes); memcpy(p, val, pDataInfo->bytes);
p += pDataInfo->bytes; p += pDataInfo->bytes;
} }
memcpy(p, GROUPBY_MULTI_COLUMN_DELIM, strlen(GROUPBY_MULTI_COLUMN_DELIM));
p += strlen(GROUPBY_MULTI_COLUMN_DELIM);
*isNullKey = false; *isNullKey = false;
} }
} }
...@@ -1516,6 +1522,7 @@ static bool isGroupbyKeyEqual(void *a, void *b, void *ext) { ...@@ -1516,6 +1522,7 @@ static bool isGroupbyKeyEqual(void *a, void *b, void *ext) {
return false; return false;
} }
offset += pDataInfo->bytes; offset += pDataInfo->bytes;
offset += strlen(GROUPBY_MULTI_COLUMN_DELIM);
} }
return true; return true;
} }
...@@ -1661,22 +1668,22 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf ...@@ -1661,22 +1668,22 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf
pSDataBlock->info.rows, pOperator->numOfOutput); pSDataBlock->info.rows, pOperator->numOfOutput);
} }
static void setResultRowKey(SResultRow* pResultRow, char* pData, int16_t type) { //static void setResultRowKey(SResultRow* pResultRow, char* pData, int16_t type) {
if (IS_VAR_DATA_TYPE(type)) { // if (IS_VAR_DATA_TYPE(type)) {
if (pResultRow->key == NULL) { // if (pResultRow->key == NULL) {
pResultRow->key = malloc(varDataTLen(pData)); // pResultRow->key = malloc(varDataTLen(pData));
varDataCopy(pResultRow->key, pData); // varDataCopy(pResultRow->key, pData);
} else { // } else {
assert(memcmp(pResultRow->key, pData, varDataTLen(pData)) == 0); // assert(memcmp(pResultRow->key, pData, varDataTLen(pData)) == 0);
} // }
} else { // } else {
int64_t v = -1; // int64_t v = -1;
GET_TYPED_DATA(v, int64_t, type, pData); // GET_TYPED_DATA(v, int64_t, type, pData);
//
pResultRow->win.skey = v; // pResultRow->win.skey = v;
pResultRow->win.ekey = v; // pResultRow->win.ekey = v;
} // }
} //}
static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SOptrBasicInfo *binfo, int32_t numOfCols, char *pData, int16_t type, int16_t bytes, int32_t groupIndex) { static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SOptrBasicInfo *binfo, int32_t numOfCols, char *pData, int16_t type, int16_t bytes, int32_t groupIndex) {
SDiskbasedResultBuf *pResultBuf = pRuntimeEnv->pResultBuf; SDiskbasedResultBuf *pResultBuf = pRuntimeEnv->pResultBuf;
...@@ -1698,7 +1705,7 @@ static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SOptrBasic ...@@ -1698,7 +1705,7 @@ static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SOptrBasic
SResultRow *pResultRow = doSetResultOutBufByKey(pRuntimeEnv, pResultRowInfo, tid, d, len, true, groupIndex); SResultRow *pResultRow = doSetResultOutBufByKey(pRuntimeEnv, pResultRowInfo, tid, d, len, true, groupIndex);
assert (pResultRow != NULL); assert (pResultRow != NULL);
setResultRowKey(pResultRow, pData, type); //setResultRowKey(pResultRow, pData, type);
if (pResultRow->pageId == -1) { if (pResultRow->pageId == -1) {
int32_t ret = addNewWindowResultBuf(pResultRow, pResultBuf, groupIndex, pRuntimeEnv->pQueryAttr->resultRowSize); int32_t ret = addNewWindowResultBuf(pResultRow, pResultBuf, groupIndex, pRuntimeEnv->pQueryAttr->resultRowSize);
if (ret != 0) { if (ret != 0) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册