Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
a33e3062
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a33e3062
编写于
11月 16, 2020
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-225]
上级
88e6b831
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
69 addition
and
92 deletion
+69
-92
src/client/inc/tscLocalMerge.h
src/client/inc/tscLocalMerge.h
+2
-2
src/client/src/tscLocalMerge.c
src/client/src/tscLocalMerge.c
+35
-40
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+6
-4
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+3
-36
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+8
-0
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+15
-10
未找到文件。
src/client/inc/tscLocalMerge.h
浏览文件 @
a33e3062
...
...
@@ -84,7 +84,7 @@ typedef struct SRetrieveSupport {
}
SRetrieveSupport
;
int32_t
tscLocalReducerEnvCreate
(
SSqlObj
*
pSql
,
tExtMemBuffer
***
pMemBuffer
,
tOrderDescriptor
**
pDesc
,
SColumnModel
**
pFinalModel
,
SColumnModel
**
pFFModel
,
uint32_t
nBufferSize
);
SColumnModel
**
pFinalModel
,
uint32_t
nBufferSize
);
void
tscLocalReducerEnvDestroy
(
tExtMemBuffer
**
pMemBuffer
,
tOrderDescriptor
*
pDesc
,
SColumnModel
*
pFinalModel
,
int32_t
numOfVnodes
);
...
...
@@ -98,7 +98,7 @@ int32_t tscFlushTmpBuffer(tExtMemBuffer *pMemoryBuf, tOrderDescriptor *pDesc, tF
* create local reducer to launch the second-stage reduce process at client site
*/
void
tscCreateLocalReducer
(
tExtMemBuffer
**
pMemBuffer
,
int32_t
numOfBuffer
,
tOrderDescriptor
*
pDesc
,
SColumnModel
*
finalModel
,
SSqlObj
*
pSql
);
SColumnModel
*
finalModel
,
S
ColumnModel
*
pFFModel
,
S
SqlObj
*
pSql
);
void
tscDestroyLocalReducer
(
SSqlObj
*
pSql
);
...
...
src/client/src/tscLocalMerge.c
浏览文件 @
a33e3062
...
...
@@ -30,7 +30,7 @@ typedef struct SCompareParam {
int32_t
groupOrderType
;
}
SCompareParam
;
static
void
doArithmeticCalculate
(
SQueryInfo
*
pQueryInfo
,
char
*
pBuf
,
char
*
src
,
int32_t
numOfRows
);
static
void
doArithmeticCalculate
(
SQueryInfo
*
pQueryInfo
,
tFilePage
*
pOutput
,
int32_t
rowSize
,
int32_t
finalRowSize
);
int32_t
treeComparator
(
const
void
*
pLeft
,
const
void
*
pRight
,
void
*
param
)
{
int32_t
pLeftIdx
=
*
(
int32_t
*
)
pLeft
;
...
...
@@ -169,7 +169,7 @@ static SFillColInfo* createFillColInfo(SQueryInfo* pQueryInfo) {
}
void
tscCreateLocalReducer
(
tExtMemBuffer
**
pMemBuffer
,
int32_t
numOfBuffer
,
tOrderDescriptor
*
pDesc
,
SColumnModel
*
finalmodel
,
SSqlObj
*
pSql
)
{
SColumnModel
*
finalmodel
,
S
ColumnModel
*
pFFModel
,
S
SqlObj
*
pSql
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
...
...
@@ -505,7 +505,8 @@ void tscDestroyLocalReducer(SSqlObj *pSql) {
pLocalReducer
->
pFillInfo
=
taosDestroyFillInfo
(
pLocalReducer
->
pFillInfo
);
if
(
pLocalReducer
->
pCtx
!=
NULL
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
int32_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfExprs
;
++
i
)
{
SQLFunctionCtx
*
pCtx
=
&
pLocalReducer
->
pCtx
[
i
];
tVariantDestroy
(
&
pCtx
->
tag
);
...
...
@@ -569,7 +570,8 @@ static int32_t createOrderDescriptor(tOrderDescriptor **pOrderDesc, SSqlCmd *pCm
if
(
numOfGroupByCols
>
0
)
{
if
(
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
>
0
)
{
int32_t
startCols
=
pQueryInfo
->
fieldsInfo
.
numOfOutput
-
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
;
int32_t
numOfInternalOutput
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
startCols
=
numOfInternalOutput
-
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
;
// the last "pQueryInfo->groupbyExpr.numOfGroupCols" columns are order-by columns
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
groupbyExpr
.
numOfGroupCols
;
++
i
)
{
...
...
@@ -655,7 +657,7 @@ bool isSameGroup(SSqlCmd *pCmd, SLocalReducer *pReducer, char *pPrev, tFilePage
}
int32_t
tscLocalReducerEnvCreate
(
SSqlObj
*
pSql
,
tExtMemBuffer
***
pMemBuffer
,
tOrderDescriptor
**
pOrderDesc
,
SColumnModel
**
pFinalModel
,
SColumnModel
**
pFFModel
,
uint32_t
nBufferSizes
)
{
SColumnModel
**
pFinalModel
,
uint32_t
nBufferSizes
)
{
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
...
...
@@ -688,6 +690,8 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr
pSchema
[
i
].
bytes
=
pExpr
->
resBytes
;
pSchema
[
i
].
type
=
(
int8_t
)
pExpr
->
resType
;
tstrncpy
(
pSchema
[
i
].
name
,
pExpr
->
aliasName
,
tListLen
(
pSchema
[
i
].
name
));
rlen
+=
pExpr
->
resBytes
;
}
...
...
@@ -751,18 +755,7 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr
*
pFinalModel
=
createColumnModel
(
pSchema
,
(
int32_t
)
size
,
capacity
);
memset
(
pSchema
,
0
,
sizeof
(
SSchema
)
*
pQueryInfo
->
fieldsInfo
.
numOfOutput
);
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
SInternalField
*
pIField
=
taosArrayGet
(
pQueryInfo
->
fieldsInfo
.
internalField
,
i
);
TAOS_FIELD
*
pField
=
&
pIField
->
field
;
pSchema
[
i
].
type
=
pField
->
type
;
pSchema
[
i
].
bytes
=
pField
->
bytes
;
strncpy
(
pSchema
[
i
].
name
,
pField
->
name
,
tListLen
(
pField
->
name
));
}
*
pFFModel
=
createColumnModel
(
pSchema
,
pQueryInfo
->
fieldsInfo
.
numOfOutput
,
capacity
);
tfree
(
pSchema
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -1249,11 +1242,7 @@ bool genFinalResults(SSqlObj *pSql, SLocalReducer *pLocalReducer, bool noMoreCur
tColModelCompact
(
pModel
,
pResBuf
,
pModel
->
capacity
);
if
(
tscIsSecondStageQuery
(
pQueryInfo
))
{
char
*
pbuf
=
calloc
(
1
,
pResBuf
->
num
*
pModel
->
rowSize
);
doArithmeticCalculate
(
pQueryInfo
,
pbuf
,
pResBuf
->
data
,
(
int32_t
)
pResBuf
->
num
);
memcpy
(
pResBuf
->
data
,
pbuf
,
pResBuf
->
num
*
pModel
->
rowSize
);
free
(
pbuf
);
doArithmeticCalculate
(
pQueryInfo
,
pResBuf
,
pModel
->
rowSize
,
pLocalReducer
->
finalRowSize
);
}
#ifdef _DEBUG_VIEW
...
...
@@ -1623,11 +1612,23 @@ void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen)
pRes
->
data
=
pRes
->
pLocalReducer
->
pResultBuf
->
data
;
}
void
doArithmeticCalculate
(
SQueryInfo
*
pQueryInfo
,
char
*
outputBuf
,
char
*
src
,
int32_t
numOfRows
)
{
void
doArithmeticCalculate
(
SQueryInfo
*
pQueryInfo
,
tFilePage
*
pOutput
,
int32_t
rowSize
,
int32_t
finalRowSize
)
{
char
*
pbuf
=
calloc
(
1
,
pOutput
->
num
*
rowSize
);
size_t
size
=
tscNumOfFields
(
pQueryInfo
);
SArithmeticSupport
*
pArithSup
=
(
SArithmeticSupport
*
)
calloc
(
1
,
sizeof
(
SArithmeticSupport
));
SArithmeticSupport
arithSup
=
{
0
};
// todo refactor
arithSup
.
offset
=
0
;
arithSup
.
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
arithSup
.
exprList
=
pQueryInfo
->
exprList
;
arithSup
.
data
=
calloc
(
arithSup
.
numOfCols
,
POINTER_BYTES
);
for
(
int32_t
k
=
0
;
k
<
arithSup
.
numOfCols
;
++
k
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
k
);
arithSup
.
data
[
k
]
=
(
pOutput
->
data
+
pOutput
->
num
*
pExpr
->
offset
);
}
int32_t
rowIndex
=
0
;
int32_t
offset
=
0
;
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
...
...
@@ -1635,25 +1636,19 @@ void doArithmeticCalculate(SQueryInfo* pQueryInfo, char* outputBuf, char* src, i
// calculate the result from several other columns
if
(
pSup
->
pArithExprInfo
!=
NULL
)
{
// todo refactor
pArithSup
->
offset
=
0
;
pArithSup
->
pArithExpr
=
pSup
->
pArithExprInfo
;
pArithSup
->
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
pArithSup
->
exprList
=
pQueryInfo
->
exprList
;
pArithSup
->
data
=
calloc
(
pArithSup
->
numOfCols
,
POINTER_BYTES
);
for
(
int32_t
k
=
0
;
k
<
pArithSup
->
numOfCols
;
++
k
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
k
);
pArithSup
->
data
[
k
]
=
(
src
+
numOfRows
*
pExpr
->
offset
)
+
rowIndex
*
pExpr
->
resBytes
;
}
tExprTreeCalcTraverse
(
pArithSup
->
pArithExpr
->
pExpr
,
numOfRows
,
outputBuf
+
numOfRows
*
offset
,
pArithSup
,
TSDB_ORDER_ASC
,
getArithemicInputSrc
);
arithSup
.
pArithExpr
=
pSup
->
pArithExprInfo
;
tExprTreeCalcTraverse
(
arithSup
.
pArithExpr
->
pExpr
,
pOutput
->
num
,
pbuf
+
pOutput
->
num
*
offset
,
&
arithSup
,
TSDB_ORDER_ASC
,
getArithemicInputSrc
);
}
else
{
SSqlExpr
*
pExpr
=
pSup
->
pSqlExpr
;
memcpy
(
outputBuf
+
numOfRows
*
offset
,
pExpr
->
offset
*
numOfRows
+
src
,
pExpr
->
resBytes
*
numOfRows
);
memcpy
(
pbuf
+
pOutput
->
num
*
offset
,
pExpr
->
offset
*
pOutput
->
num
+
pOutput
->
data
,
pExpr
->
resBytes
*
pOutput
->
num
);
}
offset
+=
pSup
->
field
.
bytes
;
}
assert
(
finalRowSize
<=
rowSize
);
memcpy
(
pOutput
->
data
,
pbuf
,
pOutput
->
num
*
finalRowSize
);
tfree
(
pbuf
);
tfree
(
arithSup
.
data
);
}
\ No newline at end of file
src/client/src/tscSQLParser.c
浏览文件 @
a33e3062
...
...
@@ -1410,10 +1410,12 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
// TODO: other error handling
}
END_TRY
pInfo
->
pArithExprInfo
->
base
.
arg
[
0
].
argBytes
=
(
int16_t
)
tbufTell
(
&
bw
);
pInfo
->
pArithExprInfo
->
base
.
arg
[
0
].
argValue
.
pz
=
tbufGetData
(
&
bw
,
true
);
pInfo
->
pArithExprInfo
->
base
.
arg
[
0
].
argType
=
TSDB_DATA_TYPE_BINARY
;
tbufCloseWriter
(
&
bw
);
SSqlFuncMsg
*
pFuncMsg
=
&
pInfo
->
pArithExprInfo
->
base
;
pFuncMsg
->
arg
[
0
].
argBytes
=
(
int16_t
)
tbufTell
(
&
bw
);
pFuncMsg
->
arg
[
0
].
argValue
.
pz
=
tbufGetData
(
&
bw
,
true
);
pFuncMsg
->
arg
[
0
].
argType
=
TSDB_DATA_TYPE_BINARY
;
// tbufCloseWriter(&bw); // TODO there is a memory leak
}
return
TSDB_CODE_SUCCESS
;
...
...
src/client/src/tscSubquery.c
浏览文件 @
a33e3062
...
...
@@ -1644,7 +1644,6 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
tExtMemBuffer
**
pMemoryBuf
=
NULL
;
tOrderDescriptor
*
pDesc
=
NULL
;
SColumnModel
*
pModel
=
NULL
;
SColumnModel
*
pFFModel
=
NULL
;
pRes
->
qhandle
=
0x1
;
// hack the qhandle check
...
...
@@ -1663,7 +1662,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
assert
(
pState
->
numOfSub
>
0
);
int32_t
ret
=
tscLocalReducerEnvCreate
(
pSql
,
&
pMemoryBuf
,
&
pDesc
,
&
pModel
,
&
pFFModel
,
nBufferSize
);
int32_t
ret
=
tscLocalReducerEnvCreate
(
pSql
,
&
pMemoryBuf
,
&
pDesc
,
&
pModel
,
nBufferSize
);
if
(
ret
!=
0
)
{
pRes
->
code
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
tscQueueAsyncRes
(
pSql
);
...
...
@@ -1708,8 +1707,7 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
trs
->
subqueryIndex
=
i
;
trs
->
pParentSql
=
pSql
;
trs
->
pFinalColModel
=
pModel
;
trs
->
pFFColModel
=
pFFModel
;
SSqlObj
*
pNew
=
tscCreateSTableSubquery
(
pSql
,
trs
,
NULL
);
if
(
pNew
==
NULL
)
{
tscError
(
"%p failed to malloc buffer for subObj, orderOfSub:%d, reason:%s"
,
pSql
,
i
,
strerror
(
errno
));
...
...
@@ -1764,10 +1762,6 @@ static void tscFreeRetrieveSup(SSqlObj *pSql) {
}
tscDebug
(
"%p start to free subquery supp obj:%p"
,
pSql
,
trsupport
);
// int32_t index = trsupport->subqueryIndex;
// SSqlObj *pParentSql = trsupport->pParentSql;
// assert(pSql == pParentSql->pSubs[index]);
tfree
(
trsupport
->
localBuffer
);
tfree
(
trsupport
);
}
...
...
@@ -1958,7 +1952,7 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
SQueryInfo
*
pPQueryInfo
=
tscGetQueryInfoDetail
(
&
pParentSql
->
cmd
,
0
);
tscClearInterpInfo
(
pPQueryInfo
);
tscCreateLocalReducer
(
trsupport
->
pExtMemBuffer
,
pState
->
numOfSub
,
pDesc
,
trsupport
->
pFinalColModel
,
pParentSql
);
tscCreateLocalReducer
(
trsupport
->
pExtMemBuffer
,
pState
->
numOfSub
,
pDesc
,
trsupport
->
pFinalColModel
,
trsupport
->
pFFColModel
,
pParentSql
);
tscDebug
(
"%p build loser tree completed"
,
pParentSql
);
pParentSql
->
res
.
precision
=
pSql
->
res
.
precision
;
...
...
@@ -2467,33 +2461,6 @@ TAOS_ROW doSetResultRowData(SSqlObj *pSql, bool finalResult) {
if
(
pRes
->
tsrow
[
i
]
!=
NULL
&&
pField
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
transferNcharData
(
pSql
,
i
,
pField
);
}
// calculate the result from several other columns
// if (pSup->pArithExprInfo != NULL) {
// if (pRes->pArithSup == NULL) {
// pRes->pArithSup = (SArithmeticSupport*)calloc(1, sizeof(SArithmeticSupport));
// }
//
// pRes->pArithSup->offset = 0;
// pRes->pArithSup->pArithExpr = pSup->pArithExprInfo;
// pRes->pArithSup->numOfCols = (int32_t)tscSqlExprNumOfExprs(pQueryInfo);
// pRes->pArithSup->exprList = pQueryInfo->exprList;
// pRes->pArithSup->data = calloc(pRes->pArithSup->numOfCols, POINTER_BYTES);
//
// if (pRes->buffer[i] == NULL) {
// TAOS_FIELD* field = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i);
// pRes->buffer[i] = malloc(field->bytes);
// }
//
// for(int32_t k = 0; k < pRes->pArithSup->numOfCols; ++k) {
// SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, k);
// pRes->pArithSup->data[k] = (pRes->data + pRes->numOfRows* pExpr->offset) + pRes->row*pExpr->resBytes;
// }
//
// tExprTreeCalcTraverse(pRes->pArithSup->pArithExpr->pExpr, 1, pRes->buffer[i], pRes->pArithSup,
// TSDB_ORDER_ASC, getArithemicInputSrc);
// pRes->tsrow[i] = (unsigned char*)pRes->buffer[i];
// }
}
pRes
->
row
++
;
// index increase one-step
...
...
src/client/src/tscUtil.c
浏览文件 @
a33e3062
...
...
@@ -945,6 +945,14 @@ void tscFieldInfoClear(SFieldInfo* pFieldInfo) {
if
(
pInfo
->
pArithExprInfo
!=
NULL
)
{
tExprTreeDestroy
(
&
pInfo
->
pArithExprInfo
->
pExpr
,
NULL
);
SSqlFuncMsg
*
pFuncMsg
=
&
pInfo
->
pArithExprInfo
->
base
;
for
(
int32_t
j
=
0
;
j
<
pFuncMsg
->
numOfParams
;
++
j
)
{
if
(
pFuncMsg
->
arg
[
j
].
argType
==
TSDB_DATA_TYPE_BINARY
)
{
tfree
(
pFuncMsg
->
arg
[
j
].
argValue
.
pz
);
}
}
tfree
(
pInfo
->
pArithExprInfo
);
}
}
...
...
src/query/src/qExecutor.c
浏览文件 @
a33e3062
...
...
@@ -5336,7 +5336,7 @@ static char *getArithemicInputSrc(void *param, const char *name, int32_t colId)
}
static
void
doSecondaryArithmeticProcess
(
SQuery
*
pQuery
)
{
SArithmeticSupport
*
pArithSup
=
(
SArithmeticSupport
*
)
calloc
(
1
,
sizeof
(
SArithmeticSupport
))
;
SArithmeticSupport
arithSup
=
{
0
}
;
tFilePage
**
data
=
calloc
(
pQuery
->
numOfExpr2
,
POINTER_BYTES
);
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfExpr2
;
++
i
)
{
...
...
@@ -5344,13 +5344,13 @@ static void doSecondaryArithmeticProcess(SQuery* pQuery) {
data
[
i
]
=
(
tFilePage
*
)
malloc
(
bytes
*
pQuery
->
rec
.
rows
+
sizeof
(
tFilePage
));
}
pArithSup
->
offset
=
0
;
pArithSup
->
numOfCols
=
(
int32_t
)
pQuery
->
numOfOutput
;
pArithSup
->
exprList
=
pQuery
->
pExpr1
;
pArithSup
->
data
=
calloc
(
pArithSup
->
numOfCols
,
POINTER_BYTES
);
arithSup
.
offset
=
0
;
arithSup
.
numOfCols
=
(
int32_t
)
pQuery
->
numOfOutput
;
arithSup
.
exprList
=
pQuery
->
pExpr1
;
arithSup
.
data
=
calloc
(
arithSup
.
numOfCols
,
POINTER_BYTES
);
for
(
int32_t
k
=
0
;
k
<
pArithSup
->
numOfCols
;
++
k
)
{
pArithSup
->
data
[
k
]
=
pQuery
->
sdata
[
k
]
->
data
;
for
(
int32_t
k
=
0
;
k
<
arithSup
.
numOfCols
;
++
k
)
{
arithSup
.
data
[
k
]
=
pQuery
->
sdata
[
k
]
->
data
;
}
for
(
int
i
=
0
;
i
<
pQuery
->
numOfExpr2
;
++
i
)
{
...
...
@@ -5368,8 +5368,8 @@ static void doSecondaryArithmeticProcess(SQuery* pQuery) {
}
}
}
else
{
pArithSup
->
pArithExpr
=
pExpr
;
tExprTreeCalcTraverse
(
pArithSup
->
pArithExpr
->
pExpr
,
(
int32_t
)
pQuery
->
rec
.
rows
,
data
[
i
]
->
data
,
pA
rithSup
,
TSDB_ORDER_ASC
,
arithSup
.
pArithExpr
=
pExpr
;
tExprTreeCalcTraverse
(
arithSup
.
pArithExpr
->
pExpr
,
(
int32_t
)
pQuery
->
rec
.
rows
,
data
[
i
]
->
data
,
&
a
rithSup
,
TSDB_ORDER_ASC
,
getArithemicInputSrc
);
}
}
...
...
@@ -5378,7 +5378,12 @@ static void doSecondaryArithmeticProcess(SQuery* pQuery) {
memcpy
(
pQuery
->
sdata
[
i
]
->
data
,
data
[
i
]
->
data
,
pQuery
->
pExpr2
[
i
].
bytes
*
pQuery
->
rec
.
rows
);
}
tfree
(
pArithSup
);
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfExpr2
;
++
i
)
{
tfree
(
data
[
i
]);
}
tfree
(
data
);
tfree
(
arithSup
.
data
);
}
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录