Merge pull request #4354 from taosdata/bugfix/td-2216
[TD-2216]<fix>: crash in qUtil.c
This commit is contained in:
commit
5f3bb47bc2
|
@ -27,7 +27,7 @@
|
||||||
int32_t getOutputInterResultBufSize(SQuery* pQuery);
|
int32_t getOutputInterResultBufSize(SQuery* pQuery);
|
||||||
|
|
||||||
void clearResultRow(SQueryRuntimeEnv* pRuntimeEnv, SResultRow* pRow, int16_t type);
|
void clearResultRow(SQueryRuntimeEnv* pRuntimeEnv, SResultRow* pRow, int16_t type);
|
||||||
void copyResultRow(SQueryRuntimeEnv* pRuntimeEnv, SResultRow* dst, const SResultRow* src);
|
void copyResultRow(SQueryRuntimeEnv* pRuntimeEnv, SResultRow* dst, const SResultRow* src, int16_t type);
|
||||||
SResultRowCellInfo* getResultCell(SQueryRuntimeEnv* pRuntimeEnv, const SResultRow* pRow, int32_t index);
|
SResultRowCellInfo* getResultCell(SQueryRuntimeEnv* pRuntimeEnv, const SResultRow* pRow, int32_t index);
|
||||||
|
|
||||||
int32_t initWindowResInfo(SWindowResInfo* pWindowResInfo, int32_t size, int32_t threshold, int16_t type);
|
int32_t initWindowResInfo(SWindowResInfo* pWindowResInfo, int32_t size, int32_t threshold, int16_t type);
|
||||||
|
|
|
@ -133,7 +133,7 @@ void clearFirstNWindowRes(SQueryRuntimeEnv *pRuntimeEnv, int32_t num) {
|
||||||
|
|
||||||
// clear all the closed windows from the window list
|
// clear all the closed windows from the window list
|
||||||
for (int32_t k = 0; k < remain; ++k) {
|
for (int32_t k = 0; k < remain; ++k) {
|
||||||
copyResultRow(pRuntimeEnv, pWindowResInfo->pResult[k], pWindowResInfo->pResult[num + k]);
|
copyResultRow(pRuntimeEnv, pWindowResInfo->pResult[k], pWindowResInfo->pResult[num + k], type);
|
||||||
}
|
}
|
||||||
|
|
||||||
// move the unclosed window in the front of the window list
|
// move the unclosed window in the front of the window list
|
||||||
|
@ -272,9 +272,15 @@ void clearResultRow(SQueryRuntimeEnv *pRuntimeEnv, SResultRow *pWindowRes, int16
|
||||||
* since the attribute of "Pos" is bound to each window result when the window result is created in the
|
* since the attribute of "Pos" is bound to each window result when the window result is created in the
|
||||||
* disk-based result buffer.
|
* disk-based result buffer.
|
||||||
*/
|
*/
|
||||||
void copyResultRow(SQueryRuntimeEnv *pRuntimeEnv, SResultRow *dst, const SResultRow *src) {
|
void copyResultRow(SQueryRuntimeEnv *pRuntimeEnv, SResultRow *dst, const SResultRow *src, int16_t type) {
|
||||||
dst->numOfRows = src->numOfRows;
|
dst->numOfRows = src->numOfRows;
|
||||||
|
|
||||||
|
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
dst->key = realloc(dst->key, varDataTLen(src->key));
|
||||||
|
varDataCopy(dst->key, src->key);
|
||||||
|
} else {
|
||||||
dst->win = src->win;
|
dst->win = src->win;
|
||||||
|
}
|
||||||
dst->closed = src->closed;
|
dst->closed = src->closed;
|
||||||
|
|
||||||
int32_t nOutputCols = pRuntimeEnv->pQuery->numOfOutput;
|
int32_t nOutputCols = pRuntimeEnv->pQuery->numOfOutput;
|
||||||
|
|
Loading…
Reference in New Issue