Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
66b47472
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
66b47472
编写于
3月 26, 2022
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-13039] fix memory leak and invlad memory operations.
上级
36faa27d
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
28 addition
and
22 deletion
+28
-22
source/libs/scalar/inc/sclInt.h
source/libs/scalar/inc/sclInt.h
+1
-1
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+3
-4
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+23
-16
source/libs/scalar/test/scalar/scalarTests.cpp
source/libs/scalar/test/scalar/scalarTests.cpp
+1
-1
未找到文件。
source/libs/scalar/inc/sclInt.h
浏览文件 @
66b47472
...
...
@@ -43,7 +43,7 @@ typedef struct SScalarCtx {
#define SCL_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0)
#define SCL_ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { terrno = code; goto _return; } } while (0)
int32_t
doConvertDataType
(
S
ScalarParam
*
in
,
SScalarParam
*
out
,
SValueNode
*
pValueNode
);
int32_t
doConvertDataType
(
S
ValueNode
*
pValueNode
,
SScalarParam
*
out
);
SColumnInfoData
*
createColumnInfoData
(
SDataType
*
pType
,
int32_t
numOfRows
);
//int32_t sclMoveParamListData(SScalarParam *params, int32_t listNum, int32_t idx);
...
...
source/libs/scalar/src/filter.c
浏览文件 @
66b47472
...
...
@@ -1022,12 +1022,12 @@ int32_t fltAddGroupUnitFromNode(SFilterInfo *info, SNode* tree, SArray *group) {
SNodeListNode
*
listNode
=
(
SNodeListNode
*
)
node
->
pRight
;
SListCell
*
cell
=
listNode
->
pNodeList
->
pHead
;
SScalarParam
in
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))},
out
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))};
SScalarParam
out
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))};
out
.
columnData
->
info
.
type
=
type
;
for
(
int32_t
i
=
0
;
i
<
listNode
->
pNodeList
->
length
;
++
i
)
{
SValueNode
*
valueNode
=
(
SValueNode
*
)
cell
->
pNode
;
code
=
doConvertDataType
(
&
in
,
&
out
,
valueNode
);
code
=
doConvertDataType
(
valueNode
,
&
out
);
if
(
code
)
{
// fltError("convert from %d to %d failed", in.type, out.type);
FLT_ERR_RET
(
code
);
...
...
@@ -1791,12 +1791,11 @@ int32_t fltInitValFieldData(SFilterInfo *info) {
if
(
dType
->
type
==
type
)
{
assignVal
(
fi
->
data
,
nodesGetValueFromNode
(
var
),
dType
->
bytes
,
type
);
}
else
{
SScalarParam
in
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))};
SScalarParam
out
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))};
out
.
columnData
->
info
.
type
=
type
;
// todo refactor the convert
int32_t
code
=
doConvertDataType
(
&
in
,
&
out
,
var
);
int32_t
code
=
doConvertDataType
(
var
,
&
out
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
qError
(
"convert value to type[%d] failed"
,
type
);
return
TSDB_CODE_TSC_INVALID_OPERATION
;
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
66b47472
...
...
@@ -38,13 +38,17 @@ SColumnInfoData* createColumnInfoData(SDataType* pType, int32_t numOfRows) {
}
}
int32_t
doConvertDataType
(
S
ScalarParam
*
in
,
SScalarParam
*
out
,
SValueNode
*
pValueNode
)
{
in
->
columnData
=
createColumnInfoData
(
&
pValueNode
->
node
.
resType
,
1
)
;
colDataAppend
(
in
->
columnData
,
0
,
nodesGetValueFromNode
(
pValueNode
),
false
);
in
->
numOfRows
=
1
;
int32_t
doConvertDataType
(
S
ValueNode
*
pValueNode
,
SScalarParam
*
out
)
{
SScalarParam
in
=
{.
numOfRows
=
1
}
;
in
.
columnData
=
createColumnInfoData
(
&
pValueNode
->
node
.
resType
,
1
);
colDataAppend
(
in
.
columnData
,
0
,
nodesGetValueFromNode
(
pValueNode
),
false
)
;
blockDataEnsureColumnCapacity
(
out
->
columnData
,
1
);
return
vectorConvertImpl
(
in
,
out
);
int32_t
code
=
vectorConvertImpl
(
&
in
,
out
);
sclFreeParam
(
&
in
);
return
code
;
}
int32_t
scalarGenerateSetFromList
(
void
**
data
,
void
*
pNode
,
uint32_t
type
)
{
...
...
@@ -60,7 +64,7 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
SNodeListNode
*
nodeList
=
(
SNodeListNode
*
)
pNode
;
SListCell
*
cell
=
nodeList
->
pNodeList
->
pHead
;
SScalarParam
in
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))},
out
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))};
SScalarParam
out
=
{.
columnData
=
calloc
(
1
,
sizeof
(
SColumnInfoData
))};
int32_t
len
=
0
;
void
*
buf
=
NULL
;
...
...
@@ -72,8 +76,8 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
out
.
columnData
->
info
.
type
=
type
;
out
.
columnData
->
info
.
bytes
=
tDataTypes
[
type
].
bytes
;
doConvertDataType
(
&
in
,
&
out
,
valueNode
);
if
(
code
)
{
code
=
doConvertDataType
(
valueNode
,
&
out
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
// sclError("convert data from %d to %d failed", in.type, out.type);
SCL_ERR_JRET
(
code
);
}
...
...
@@ -104,6 +108,7 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
}
*
data
=
pObj
;
return
TSDB_CODE_SUCCESS
;
_return:
...
...
@@ -131,13 +136,15 @@ void sclFreeParamNoData(SScalarParam *param) {
void
sclFreeParam
(
SScalarParam
*
param
)
{
sclFreeParamNoData
(
param
);
// if (!param->dataInBlock) {
// if (SCL_DATA_TYPE_DUMMY_HASH == param->type) {
// taosHashCleanup((SHashObj *)param->orig.data);
// } else {
// tfree(param->orig.data);
// }
// }
if
(
param
->
columnData
!=
NULL
)
{
colDataDestroy
(
param
->
columnData
);
tfree
(
param
->
columnData
);
}
if
(
param
->
pHashFilter
!=
NULL
)
{
taosHashCleanup
(
param
->
pHashFilter
);
}
}
int32_t
sclCopyValueNodeValue
(
SValueNode
*
pNode
,
void
**
res
)
{
...
...
@@ -413,7 +420,7 @@ int32_t sclExecOperator(SOperatorNode *node, SScalarCtx *ctx, SScalarParam *outp
_return:
for
(
int32_t
i
=
0
;
i
<
paramNum
;
++
i
)
{
sclFreeParamNoData
(
params
+
i
);
// sclFreeParam(¶ms[i]
);
}
tfree
(
params
);
...
...
source/libs/scalar/test/scalar/scalarTests.cpp
浏览文件 @
66b47472
...
...
@@ -1270,7 +1270,7 @@ TEST(columnTest, binary_column_is_true) {
}
int32_t
rowNum
=
sizeof
(
leftv
)
/
sizeof
(
leftv
[
0
]);
scltMakeColumnNode
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
3
,
rowNum
,
leftv
);
scltMakeColumnNode
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
5
,
rowNum
,
leftv
);
scltMakeOpNode
(
&
opNode
,
OP_TYPE_IS_TRUE
,
TSDB_DATA_TYPE_BOOL
,
pLeft
,
NULL
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录