Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
99f92792
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1185
Star
22015
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看板
提交
99f92792
编写于
6月 23, 2020
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/hotfix/coverity_query' into hotfix/crash
上级
a2d965ea
4830d2f1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
96 addition
and
49 deletion
+96
-49
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+47
-22
src/query/src/qUtil.c
src/query/src/qUtil.c
+1
-1
src/query/src/qpercentile.c
src/query/src/qpercentile.c
+6
-5
src/query/src/qtsbuf.c
src/query/src/qtsbuf.c
+42
-21
未找到文件。
src/query/src/qExecutor.c
浏览文件 @
99f92792
...
...
@@ -5153,9 +5153,7 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
}
if
(
!
validateQuerySourceCols
(
pQueryMsg
,
*
pExpr
))
{
tfree
(
*
pExpr
);
return
TSDB_CODE_QRY_INVALID_MSG
;
goto
_cleanup
;
}
pMsg
=
createTableIdList
(
pQueryMsg
,
pMsg
,
pTableIdList
);
...
...
@@ -5227,8 +5225,17 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
pQueryMsg
,
pQueryMsg
->
numOfTables
,
pQueryMsg
->
queryType
,
pQueryMsg
->
window
.
skey
,
pQueryMsg
->
window
.
ekey
,
pQueryMsg
->
numOfGroupCols
,
pQueryMsg
->
order
,
pQueryMsg
->
numOfOutput
,
pQueryMsg
->
numOfCols
,
pQueryMsg
->
intervalTime
,
pQueryMsg
->
fillType
,
pQueryMsg
->
tsLen
,
pQueryMsg
->
tsNumOfBlocks
,
pQueryMsg
->
limit
,
pQueryMsg
->
offset
);
return
0
;
_cleanup:
tfree
(
*
pExpr
);
taosArrayDestroy
(
*
pTableIdList
);
*
pTableIdList
=
NULL
;
tfree
(
*
tbnameCond
);
tfree
(
*
groupbyCols
);
tfree
(
*
tagCols
);
tfree
(
*
tagCond
);
return
TSDB_CODE_QRY_INVALID_MSG
;
}
static
int32_t
buildAirthmeticExprFromMsg
(
SExprInfo
*
pArithExprInfo
,
SQueryTableMsg
*
pQueryMsg
)
{
...
...
@@ -5494,6 +5501,8 @@ static int compareTableIdInfo(const void* a, const void* b) {
return
0
;
}
static
void
freeQInfo
(
SQInfo
*
pQInfo
);
static
SQInfo
*
createQInfoImpl
(
SQueryTableMsg
*
pQueryMsg
,
SArray
*
pTableIdList
,
SSqlGroupbyExpr
*
pGroupbyExpr
,
SExprInfo
*
pExprs
,
STableGroupInfo
*
pTableGroupInfo
,
SColumnInfo
*
pTagCols
)
{
SQInfo
*
pQInfo
=
(
SQInfo
*
)
calloc
(
1
,
sizeof
(
SQInfo
));
...
...
@@ -5634,22 +5643,27 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
return
pQInfo
;
_cleanup:
tfree
(
pQuery
->
fillVal
);
//
tfree(pQuery->fillVal);
if
(
pQuery
->
sdata
!=
NULL
)
{
for
(
int16_t
col
=
0
;
col
<
pQuery
->
numOfOutput
;
++
col
)
{
tfree
(
pQuery
->
sdata
[
col
]);
}
}
//
if (pQuery->sdata != NULL) {
//
for (int16_t col = 0; col < pQuery->numOfOutput; ++col) {
//
tfree(pQuery->sdata[col]);
//
}
//
}
tfree
(
pQuery
->
sdata
);
tfree
(
pQuery
->
pFilterInfo
);
tfree
(
pQuery
->
colList
);
//
//tfree(pQuery->sdata);
//tfree(pQuery->pFilterInfo);
//tfree(pQuery->colList);
tfree
(
pExprs
);
tfree
(
pGroupbyExpr
);
//
tfree(pExprs);
//
tfree(pGroupbyExpr);
tfree
(
pQInfo
);
//taosArrayDestroy(pQInfo->arrTableIdInfo);
//tsdbDestoryTableGroup(&pQInfo->tableGroupInfo);
//
//tfree(pQInfo);
freeQInfo
(
pQInfo
);
return
NULL
;
}
...
...
@@ -5668,7 +5682,6 @@ static bool isValidQInfo(void *param) {
return
(
sig
==
(
uint64_t
)
pQInfo
);
}
static
void
freeQInfo
(
SQInfo
*
pQInfo
);
static
int32_t
initQInfo
(
SQueryTableMsg
*
pQueryMsg
,
void
*
tsdb
,
int32_t
vgId
,
SQInfo
*
pQInfo
,
bool
isSTable
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
...
...
@@ -5869,6 +5882,8 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
SSqlFuncMsg
**
pExprMsg
=
NULL
;
SColIndex
*
pGroupColIndex
=
NULL
;
SColumnInfo
*
pTagColumnInfo
=
NULL
;
SExprInfo
*
pExprs
=
NULL
;
SSqlGroupbyExpr
*
pGroupbyExpr
=
NULL
;
if
((
code
=
convertQueryMsg
(
pQueryMsg
,
&
pTableIdList
,
&
pExprMsg
,
&
tagCond
,
&
tbnameCond
,
&
pGroupColIndex
,
&
pTagColumnInfo
))
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -5887,12 +5902,12 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
goto
_over
;
}
SExprInfo
*
pExprs
=
NULL
;
if
((
code
=
createQFunctionExprFromMsg
(
pQueryMsg
,
&
pExprs
,
pExprMsg
,
pTagColumnInfo
))
!=
TSDB_CODE_SUCCESS
)
{
free
(
pExprMsg
);
goto
_over
;
}
SSqlGroupbyExpr
*
pGroupbyExpr
=
createGroupbyExprFromMsg
(
pQueryMsg
,
pGroupColIndex
,
&
code
);
pGroupbyExpr
=
createGroupbyExprFromMsg
(
pQueryMsg
,
pGroupColIndex
,
&
code
);
if
((
pGroupbyExpr
==
NULL
&&
pQueryMsg
->
numOfGroupCols
!=
0
)
||
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_over
;
}
...
...
@@ -5939,6 +5954,10 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
}
(
*
pQInfo
)
=
createQInfoImpl
(
pQueryMsg
,
pTableIdList
,
pGroupbyExpr
,
pExprs
,
&
tableGroupInfo
,
pTagColumnInfo
);
pExprs
=
NULL
;
pGroupbyExpr
=
NULL
;
pTagColumnInfo
=
NULL
;
if
((
*
pQInfo
)
==
NULL
)
{
code
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
goto
_over
;
...
...
@@ -5947,9 +5966,15 @@ int32_t qCreateQueryInfo(void *tsdb, int32_t vgId, SQueryTableMsg *pQueryMsg, qi
code
=
initQInfo
(
pQueryMsg
,
tsdb
,
vgId
,
*
pQInfo
,
isSTableQuery
);
_over:
tfree
(
tagCond
);
tfree
(
tbnameCond
);
tfree
(
pGroupColIndex
);
free
(
tagCond
);
free
(
tbnameCond
);
free
(
pGroupColIndex
);
if
(
pGroupbyExpr
!=
NULL
)
{
taosArrayDestroy
(
pGroupbyExpr
->
columnInfo
);
free
(
pGroupbyExpr
);
}
free
(
pTagColumnInfo
);
free
(
pExprs
);
taosArrayDestroy
(
pTableIdList
);
//pQInfo already freed in initQInfo, but *pQInfo may not pointer to null;
...
...
src/query/src/qUtil.c
浏览文件 @
99f92792
...
...
@@ -138,7 +138,7 @@ void clearFirstNTimeWindow(SQueryRuntimeEnv *pRuntimeEnv, int32_t num) {
SWindowResult
*
pResult
=
&
pWindowResInfo
->
pResult
[
k
];
int32_t
*
p
=
(
int32_t
*
)
taosHashGet
(
pWindowResInfo
->
hashList
,
(
const
char
*
)
&
pResult
->
window
.
skey
,
tDataTypeDesc
[
pWindowResInfo
->
type
].
nSize
);
assert
(
p
!=
NULL
);
int32_t
v
=
(
*
p
-
num
);
assert
(
v
>=
0
&&
v
<=
pWindowResInfo
->
size
);
taosHashPut
(
pWindowResInfo
->
hashList
,
(
char
*
)
&
pResult
->
window
.
skey
,
tDataTypeDesc
[
pWindowResInfo
->
type
].
nSize
,
...
...
src/query/src/qpercentile.c
浏览文件 @
99f92792
...
...
@@ -879,8 +879,8 @@ double getPercentileImpl(tMemBucket *pMemBucket, int32_t count, double fraction)
UNUSED
(
ret
);
for
(
uint32_t
jx
=
0
;
jx
<
pFlushInfo
->
numOfPages
;
++
jx
)
{
ret
=
fread
(
pPage
,
pMemBuffer
->
pageSize
,
1
,
pMemBuffer
->
file
);
UNUSED
(
ret
);
size_t
sz
=
fread
(
pPage
,
pMemBuffer
->
pageSize
,
1
,
pMemBuffer
->
file
);
UNUSED
(
sz
);
tMemBucketPut
(
pMemBucket
,
pPage
->
data
,
pPage
->
num
);
}
...
...
@@ -965,10 +965,11 @@ char *getFirstElemOfMemBuffer(tMemBucketSegment *pSeg, int32_t slotIdx, tFilePag
*/
tFlushoutInfo
*
pFlushInfo
=
&
pMemBuffer
->
fileMeta
.
flushoutData
.
pFlushoutInfo
[
0
];
assert
(
pFlushInfo
->
numOfPages
==
pMemBuffer
->
fileMeta
.
nFileSize
);
fseek
(
pMemBuffer
->
file
,
pFlushInfo
->
startPageId
*
pMemBuffer
->
pageSize
,
SEEK_SET
);
size_t
ret
=
fread
(
pPage
,
pMemBuffer
->
pageSize
,
1
,
pMemBuffer
->
file
);
int32_t
ret
;
ret
=
fseek
(
pMemBuffer
->
file
,
pFlushInfo
->
startPageId
*
pMemBuffer
->
pageSize
,
SEEK_SET
);
UNUSED
(
ret
);
size_t
sz
=
fread
(
pPage
,
pMemBuffer
->
pageSize
,
1
,
pMemBuffer
->
file
);
UNUSED
(
sz
);
thisVal
=
pPage
->
data
;
}
return
thisVal
;
...
...
src/query/src/qtsbuf.c
浏览文件 @
99f92792
...
...
@@ -65,8 +65,10 @@ STSBuf* tsBufCreateFromFile(const char* path, bool autoDelete) {
// validate the file magic number
STSBufFileHeader
header
=
{
0
};
fseek
(
pTSBuf
->
f
,
0
,
SEEK_SET
);
fread
(
&
header
,
1
,
sizeof
(
STSBufFileHeader
),
pTSBuf
->
f
);
int32_t
ret
=
fseek
(
pTSBuf
->
f
,
0
,
SEEK_SET
);
UNUSED
(
ret
);
size_t
sz
=
fread
(
&
header
,
1
,
sizeof
(
STSBufFileHeader
),
pTSBuf
->
f
);
UNUSED
(
sz
);
// invalid file
if
(
header
.
magic
!=
TS_COMP_FILE_MAGIC
)
{
...
...
@@ -97,22 +99,30 @@ STSBuf* tsBufCreateFromFile(const char* path, bool autoDelete) {
size_t
infoSize
=
sizeof
(
STSVnodeBlockInfo
)
*
pTSBuf
->
numOfVnodes
;
STSVnodeBlockInfo
*
buf
=
(
STSVnodeBlockInfo
*
)
calloc
(
1
,
infoSize
);
if
(
buf
==
NULL
)
{
tsBufDestory
(
pTSBuf
);
return
NULL
;
}
//int64_t pos = ftell(pTSBuf->f); //pos not used
fread
(
buf
,
infoSize
,
1
,
pTSBuf
->
f
);
sz
=
fread
(
buf
,
infoSize
,
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
// the length value for each vnode is not kept in file, so does not set the length value
for
(
int32_t
i
=
0
;
i
<
pTSBuf
->
numOfVnodes
;
++
i
)
{
STSVnodeBlockInfoEx
*
pBlockList
=
&
pTSBuf
->
pData
[
i
];
memcpy
(
&
pBlockList
->
info
,
&
buf
[
i
],
sizeof
(
STSVnodeBlockInfo
));
}
free
(
buf
);
fseek
(
pTSBuf
->
f
,
0
,
SEEK_END
);
ret
=
fseek
(
pTSBuf
->
f
,
0
,
SEEK_END
);
UNUSED
(
ret
);
struct
stat
fileStat
;
fstat
(
fileno
(
pTSBuf
->
f
),
&
fileStat
);
if
(
fstat
(
fileno
(
pTSBuf
->
f
),
&
fileStat
)
!=
0
)
{
tsBufDestory
(
pTSBuf
);
return
NULL
;
}
pTSBuf
->
fileSize
=
(
uint32_t
)
fileStat
.
st_size
;
tsBufResetPos
(
pTSBuf
);
...
...
@@ -278,19 +288,24 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
* set the right position for the reversed traverse, the reversed traverse is started from
* the end of each comp data block
*/
fseek
(
pTSBuf
->
f
,
-
sizeof
(
pBlock
->
padding
),
SEEK_CUR
);
fread
(
&
pBlock
->
padding
,
sizeof
(
pBlock
->
padding
),
1
,
pTSBuf
->
f
);
int32_t
ret
=
fseek
(
pTSBuf
->
f
,
-
sizeof
(
pBlock
->
padding
),
SEEK_CUR
);
size_t
sz
=
fread
(
&
pBlock
->
padding
,
sizeof
(
pBlock
->
padding
),
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
pBlock
->
compLen
=
pBlock
->
padding
;
int32_t
offset
=
pBlock
->
compLen
+
sizeof
(
pBlock
->
compLen
)
*
2
+
sizeof
(
pBlock
->
numOfElem
)
+
sizeof
(
pBlock
->
tag
);
fseek
(
pTSBuf
->
f
,
-
offset
,
SEEK_CUR
);
ret
=
fseek
(
pTSBuf
->
f
,
-
offset
,
SEEK_CUR
);
UNUSED
(
ret
);
}
fread
(
&
pBlock
->
tag
,
sizeof
(
pBlock
->
tag
),
1
,
pTSBuf
->
f
);
fread
(
&
pBlock
->
numOfElem
,
sizeof
(
pBlock
->
numOfElem
),
1
,
pTSBuf
->
f
);
fread
(
&
pBlock
->
compLen
,
sizeof
(
pBlock
->
compLen
),
1
,
pTSBuf
->
f
);
fread
(
pBlock
->
payload
,
(
size_t
)
pBlock
->
compLen
,
1
,
pTSBuf
->
f
);
size_t
sz
=
fread
(
&
pBlock
->
tag
,
sizeof
(
pBlock
->
tag
),
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
sz
=
fread
(
&
pBlock
->
numOfElem
,
sizeof
(
pBlock
->
numOfElem
),
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
sz
=
fread
(
&
pBlock
->
compLen
,
sizeof
(
pBlock
->
compLen
),
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
sz
=
fread
(
pBlock
->
payload
,
(
size_t
)
pBlock
->
compLen
,
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
if
(
decomp
)
{
pTSBuf
->
tsData
.
len
=
...
...
@@ -299,12 +314,13 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
}
// read the comp length at the length of comp block
fread
(
&
pBlock
->
padding
,
sizeof
(
pBlock
->
padding
),
1
,
pTSBuf
->
f
);
sz
=
fread
(
&
pBlock
->
padding
,
sizeof
(
pBlock
->
padding
),
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
// for backwards traverse, set the start position at the end of previous block
if
(
order
==
TSDB_ORDER_DESC
)
{
int32_t
offset
=
pBlock
->
compLen
+
sizeof
(
pBlock
->
compLen
)
*
2
+
sizeof
(
pBlock
->
numOfElem
)
+
sizeof
(
pBlock
->
tag
);
int
64
_t
r
=
fseek
(
pTSBuf
->
f
,
-
offset
,
SEEK_CUR
);
int
32
_t
r
=
fseek
(
pTSBuf
->
f
,
-
offset
,
SEEK_CUR
);
UNUSED
(
r
);
}
...
...
@@ -441,7 +457,8 @@ static int32_t tsBufFindBlock(STSBuf* pTSBuf, STSVnodeBlockInfo* pBlockInfo, int
STSBlock
*
pBlock
=
&
pTSBuf
->
block
;
int32_t
compBlockSize
=
pBlock
->
compLen
+
sizeof
(
pBlock
->
compLen
)
*
2
+
sizeof
(
pBlock
->
numOfElem
)
+
sizeof
(
pBlock
->
tag
);
fseek
(
pTSBuf
->
f
,
-
compBlockSize
,
SEEK_CUR
);
int32_t
ret
=
fseek
(
pTSBuf
->
f
,
-
compBlockSize
,
SEEK_CUR
);
UNUSED
(
ret
);
}
return
0
;
...
...
@@ -538,7 +555,7 @@ int32_t STSBufUpdateHeader(STSBuf* pTSBuf, STSBufFileHeader* pHeader) {
assert
(
pHeader
->
tsOrder
==
TSDB_ORDER_ASC
||
pHeader
->
tsOrder
==
TSDB_ORDER_DESC
);
int
64
_t
r
=
fseek
(
pTSBuf
->
f
,
0
,
SEEK_SET
);
int
32
_t
r
=
fseek
(
pTSBuf
->
f
,
0
,
SEEK_SET
);
if
(
r
!=
0
)
{
return
-
1
;
}
...
...
@@ -743,7 +760,9 @@ int32_t tsBufMerge(STSBuf* pDestBuf, const STSBuf* pSrcBuf, int32_t vnodeId) {
int32_t
oldSize
=
pDestBuf
->
fileSize
;
struct
stat
fileStat
;
fstat
(
fileno
(
pDestBuf
->
f
),
&
fileStat
);
if
(
fstat
(
fileno
(
pDestBuf
->
f
),
&
fileStat
)
!=
0
)
{
return
-
1
;
}
pDestBuf
->
fileSize
=
(
uint32_t
)
fileStat
.
st_size
;
assert
(
pDestBuf
->
fileSize
==
oldSize
+
size
);
...
...
@@ -766,8 +785,10 @@ STSBuf* tsBufCreateFromCompBlocks(const char* pData, int32_t numOfBlocks, int32_
// update prev vnode length info in file
TSBufUpdateVnodeInfo
(
pTSBuf
,
pTSBuf
->
numOfVnodes
-
1
,
pBlockInfo
);
fseek
(
pTSBuf
->
f
,
pBlockInfo
->
offset
,
SEEK_SET
);
fwrite
((
void
*
)
pData
,
1
,
len
,
pTSBuf
->
f
);
int32_t
ret
=
fseek
(
pTSBuf
->
f
,
pBlockInfo
->
offset
,
SEEK_SET
);
UNUSED
(
ret
);
size_t
sz
=
fwrite
((
void
*
)
pData
,
1
,
len
,
pTSBuf
->
f
);
UNUSED
(
sz
);
pTSBuf
->
fileSize
+=
len
;
pTSBuf
->
tsOrder
=
order
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录