Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
43651032
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
43651032
编写于
6月 13, 2022
作者:
dengyihao
提交者:
GitHub
6月 13, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13755 from taosdata/fix/invalidIdx
fix: invalid idx
上级
d476c34a
3c9ee325
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
69 addition
and
39 deletion
+69
-39
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+52
-32
source/libs/index/src/indexFilter.c
source/libs/index/src/indexFilter.c
+17
-7
未找到文件。
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
43651032
...
...
@@ -31,7 +31,7 @@ void metaReaderClear(SMetaReader *pReader) {
}
int
metaGetTableEntryByVersion
(
SMetaReader
*
pReader
,
int64_t
version
,
tb_uid_t
uid
)
{
SMeta
*
pMeta
=
pReader
->
pMeta
;
SMeta
*
pMeta
=
pReader
->
pMeta
;
STbDbKey
tbDbKey
=
{.
version
=
version
,
.
uid
=
uid
};
// query table.db
...
...
@@ -54,7 +54,7 @@ _err:
}
int
metaGetTableEntryByUid
(
SMetaReader
*
pReader
,
tb_uid_t
uid
)
{
SMeta
*
pMeta
=
pReader
->
pMeta
;
SMeta
*
pMeta
=
pReader
->
pMeta
;
int64_t
version
;
// query uid.idx
...
...
@@ -68,7 +68,7 @@ int metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) {
}
int
metaGetTableEntryByName
(
SMetaReader
*
pReader
,
const
char
*
name
)
{
SMeta
*
pMeta
=
pReader
->
pMeta
;
SMeta
*
pMeta
=
pReader
->
pMeta
;
tb_uid_t
uid
;
// query name.idx
...
...
@@ -82,7 +82,7 @@ int metaGetTableEntryByName(SMetaReader *pReader, const char *name) {
}
tb_uid_t
metaGetTableEntryUidByName
(
SMeta
*
pMeta
,
const
char
*
name
)
{
void
*
pData
=
NULL
;
void
*
pData
=
NULL
;
int
nData
=
0
;
tb_uid_t
uid
=
0
;
...
...
@@ -138,7 +138,7 @@ void metaCloseTbCursor(SMTbCursor *pTbCur) {
int
metaTbCursorNext
(
SMTbCursor
*
pTbCur
)
{
int
ret
;
void
*
pBuf
;
void
*
pBuf
;
STbCfg
tbCfg
;
for
(;;)
{
...
...
@@ -159,7 +159,7 @@ int metaTbCursorNext(SMTbCursor *pTbCur) {
}
SSchemaWrapper
*
metaGetTableSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
,
bool
isinline
)
{
void
*
pData
=
NULL
;
void
*
pData
=
NULL
;
int
nData
=
0
;
int64_t
version
;
SSchemaWrapper
schema
=
{
0
};
...
...
@@ -219,11 +219,11 @@ _err:
}
struct
SMCtbCursor
{
SMeta
*
pMeta
;
TBC
*
pCur
;
SMeta
*
pMeta
;
TBC
*
pCur
;
tb_uid_t
suid
;
void
*
pKey
;
void
*
pVal
;
void
*
pKey
;
void
*
pVal
;
int
kLen
;
int
vLen
;
};
...
...
@@ -294,10 +294,10 @@ tb_uid_t metaCtbCursorNext(SMCtbCursor *pCtbCur) {
STSchema
*
metaGetTbTSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
)
{
// SMetaReader mr = {0};
STSchema
*
pTSchema
=
NULL
;
STSchema
*
pTSchema
=
NULL
;
SSchemaWrapper
*
pSW
=
NULL
;
STSchemaBuilder
sb
=
{
0
};
SSchema
*
pSchema
;
SSchema
*
pSchema
;
pSW
=
metaGetTableSchema
(
pMeta
,
uid
,
sver
,
0
);
if
(
!
pSW
)
return
NULL
;
...
...
@@ -323,11 +323,11 @@ int metaGetTbNum(SMeta *pMeta) {
}
typedef
struct
{
SMeta
*
pMeta
;
TBC
*
pCur
;
SMeta
*
pMeta
;
TBC
*
pCur
;
tb_uid_t
uid
;
void
*
pKey
;
void
*
pVal
;
void
*
pKey
;
void
*
pVal
;
int
kLen
;
int
vLen
;
}
SMSmaCursor
;
...
...
@@ -399,7 +399,7 @@ tb_uid_t metaSmaCursorNext(SMSmaCursor *pSmaCur) {
STSmaWrapper
*
metaGetSmaInfoByTable
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
bool
deepCopy
)
{
STSmaWrapper
*
pSW
=
NULL
;
SArray
*
pSmaIds
=
NULL
;
SArray
*
pSmaIds
=
NULL
;
if
(
!
(
pSmaIds
=
metaGetSmaIdsByTable
(
pMeta
,
uid
)))
{
return
NULL
;
...
...
@@ -423,7 +423,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid, bool deepCopy) {
metaReaderInit
(
&
mr
,
pMeta
,
0
);
int64_t
smaId
;
int
smaIdx
=
0
;
STSma
*
pTSma
=
NULL
;
STSma
*
pTSma
=
NULL
;
for
(
int
i
=
0
;
i
<
pSW
->
number
;
++
i
)
{
smaId
=
*
(
tb_uid_t
*
)
taosArrayGet
(
pSmaIds
,
i
);
if
(
metaGetTableEntryByUid
(
&
mr
,
smaId
)
<
0
)
{
...
...
@@ -471,7 +471,7 @@ _err:
}
STSma
*
metaGetSmaInfoByIndex
(
SMeta
*
pMeta
,
int64_t
indexUid
)
{
STSma
*
pTSma
=
NULL
;
STSma
*
pTSma
=
NULL
;
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pMeta
,
0
);
if
(
metaGetTableEntryByUid
(
&
mr
,
indexUid
)
<
0
)
{
...
...
@@ -493,7 +493,7 @@ STSma *metaGetSmaInfoByIndex(SMeta *pMeta, int64_t indexUid) {
}
SArray
*
metaGetSmaIdsByTable
(
SMeta
*
pMeta
,
tb_uid_t
uid
)
{
SArray
*
pUids
=
NULL
;
SArray
*
pUids
=
NULL
;
SSmaIdxKey
*
pSmaIdxKey
=
NULL
;
SMSmaCursor
*
pCur
=
metaOpenSmaCursor
(
pMeta
,
uid
);
...
...
@@ -531,7 +531,7 @@ SArray *metaGetSmaIdsByTable(SMeta *pMeta, tb_uid_t uid) {
}
SArray
*
metaGetSmaTbUids
(
SMeta
*
pMeta
)
{
SArray
*
pUids
=
NULL
;
SArray
*
pUids
=
NULL
;
SSmaIdxKey
*
pSmaIdxKey
=
NULL
;
tb_uid_t
lastUid
=
0
;
...
...
@@ -593,19 +593,21 @@ const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *val) {
}
typedef
struct
{
SMeta
*
pMeta
;
TBC
*
pCur
;
SMeta
*
pMeta
;
TBC
*
pCur
;
tb_uid_t
suid
;
int16_t
cid
;
int16_t
type
;
void
*
pKey
;
void
*
pVal
;
void
*
pKey
;
void
*
pVal
;
int32_t
kLen
;
int32_t
vLen
;
}
SIdxCursor
;
int32_t
metaFilteTableIds
(
SMeta
*
pMeta
,
SMetaFltParam
*
param
,
SArray
*
pUids
)
{
SIdxCursor
*
pCursor
=
NULL
;
char
*
buf
=
NULL
;
int32_t
maxSize
=
0
;
int32_t
ret
=
0
,
valid
=
0
;
pCursor
=
(
SIdxCursor
*
)
taosMemoryCalloc
(
1
,
sizeof
(
SIdxCursor
));
...
...
@@ -623,17 +625,34 @@ int32_t metaFilteTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) {
int32_t
nKey
=
0
;
int32_t
nTagData
=
0
;
void
*
tagData
=
NULL
;
void
*
tagData
=
NULL
;
if
(
IS_VAR_DATA_TYPE
(
param
->
type
)
)
{
tagData
=
varDataVal
(
param
->
val
);
nTagData
=
varDataLen
(
param
->
val
)
;
if
(
param
->
val
==
NULL
)
{
metaError
(
"vgId:%d failed to filter NULL data"
,
TD_VID
(
pMeta
->
pVnode
)
);
return
-
1
;
}
else
{
tagData
=
param
->
val
;
nTagData
=
tDataTypes
[
param
->
type
].
bytes
;
if
(
IS_VAR_DATA_TYPE
(
param
->
type
))
{
tagData
=
varDataVal
(
param
->
val
);
nTagData
=
varDataLen
(
param
->
val
);
if
(
param
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
maxSize
=
4
*
nTagData
+
1
;
buf
=
taosMemoryCalloc
(
1
,
maxSize
);
if
(
false
==
taosMbsToUcs4
(
tagData
,
nTagData
,
(
TdUcs4
*
)
buf
,
maxSize
,
&
maxSize
))
{
goto
END
;
}
tagData
=
buf
;
nTagData
=
maxSize
;
}
}
else
{
tagData
=
param
->
val
;
nTagData
=
tDataTypes
[
param
->
type
].
bytes
;
}
}
ret
=
metaCreateTagIdxKey
(
pCursor
->
suid
,
pCursor
->
cid
,
tagData
,
nTagData
,
pCursor
->
type
,
param
->
reverse
?
INT64_MAX
:
INT64_MIN
,
&
pKey
,
&
nKey
);
if
(
ret
!=
0
)
{
goto
END
;
}
...
...
@@ -642,7 +661,7 @@ int32_t metaFilteTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) {
goto
END
;
}
void
*
entryKey
=
NULL
,
*
entryVal
=
NULL
;
void
*
entryKey
=
NULL
,
*
entryVal
=
NULL
;
int32_t
nEntryKey
,
nEntryVal
;
while
(
1
)
{
valid
=
tdbTbcGet
(
pCursor
->
pCur
,
(
const
void
**
)
&
entryKey
,
&
nEntryKey
,
(
const
void
**
)
&
entryVal
,
&
nEntryVal
);
...
...
@@ -676,6 +695,7 @@ int32_t metaFilteTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) {
END:
if
(
pCursor
->
pMeta
)
metaULock
(
pCursor
->
pMeta
);
if
(
pCursor
->
pCur
)
tdbTbcClose
(
pCursor
->
pCur
);
taosMemoryFree
(
buf
);
taosMemoryFree
(
pCursor
);
...
...
source/libs/index/src/indexFilter.c
浏览文件 @
43651032
...
...
@@ -141,7 +141,7 @@ static int32_t sifGetValueFromNode(SNode *node, char **value) {
if
(
*
pData
==
TSDB_DATA_TYPE_NULL
)
{
dataLen
=
0
;
}
else
if
(
*
pData
==
TSDB_DATA_TYPE_NCHAR
)
{
dataLen
=
varDataTLen
(
pData
+
CHAR_BYTES
);
dataLen
=
varDataTLen
(
pData
);
}
else
if
(
*
pData
==
TSDB_DATA_TYPE_DOUBLE
)
{
dataLen
=
LONG_BYTES
;
}
else
if
(
*
pData
==
TSDB_DATA_TYPE_BOOL
)
{
...
...
@@ -180,15 +180,17 @@ static int32_t sifInitJsonParam(SNode *node, SIFParam *param, SIFCtx *ctx) {
// memcpy(param->colName, l->colName, sizeof(l->colName));
}
static
int32_t
sifInitParam
(
SNode
*
node
,
SIFParam
*
param
,
SIFCtx
*
ctx
)
{
param
->
status
=
SFLT_COARSE_INDEX
;
switch
(
nodeType
(
node
))
{
case
QUERY_NODE_VALUE
:
{
SValueNode
*
vn
=
(
SValueNode
*
)
node
;
if
(
vn
->
typeData
==
TSDB_DATA_TYPE_NULL
&&
(
vn
->
literal
==
NULL
||
strlen
(
vn
->
literal
)
==
0
))
{
param
->
status
=
SFLT_NOT_INDEX
;
return
0
;
}
SIF_ERR_RET
(
sifGetValueFromNode
(
node
,
&
param
->
condValue
));
param
->
colId
=
-
1
;
param
->
colValType
=
(
uint8_t
)(
vn
->
node
.
resType
.
type
);
if
(
vn
->
literal
==
NULL
||
strlen
(
vn
->
literal
)
==
0
)
{
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
memcpy
(
param
->
colName
,
vn
->
literal
,
strlen
(
vn
->
literal
));
break
;
}
...
...
@@ -517,9 +519,17 @@ static int32_t sifExecOper(SOperatorNode *node, SIFCtx *ctx, SIFParam *output) {
// ugly code, refactor later
output
->
arg
=
ctx
->
arg
;
sif_func_t
operFn
=
sifNullFunc
;
code
=
sifGetOperFn
(
node
->
opType
,
&
operFn
,
&
output
->
status
);
if
(
!
ctx
->
noExec
)
{
code
=
operFn
(
&
params
[
0
],
nParam
>
1
?
&
params
[
1
]
:
NULL
,
output
);
SIF_ERR_RET
(
sifGetOperFn
(
node
->
opType
,
&
operFn
,
&
output
->
status
));
SIF_ERR_RET
(
operFn
(
&
params
[
0
],
nParam
>
1
?
&
params
[
1
]
:
NULL
,
output
));
}
else
{
// ugly code, refactor later
if
(
nParam
>
1
&&
params
[
1
].
status
==
SFLT_NOT_INDEX
)
{
output
->
status
=
SFLT_NOT_INDEX
;
return
code
;
}
SIF_ERR_RET
(
sifGetOperFn
(
node
->
opType
,
&
operFn
,
&
output
->
status
));
}
taosMemoryFree
(
params
);
...
...
@@ -595,7 +605,7 @@ static EDealRes sifWalkLogic(SNode *pNode, void *context) {
}
static
EDealRes
sifWalkOper
(
SNode
*
pNode
,
void
*
context
)
{
SOperatorNode
*
node
=
(
SOperatorNode
*
)
pNode
;
SIFParam
output
=
{.
result
=
taosArrayInit
(
8
,
sizeof
(
uint64_t
))};
SIFParam
output
=
{.
result
=
taosArrayInit
(
8
,
sizeof
(
uint64_t
))
,
.
status
=
SFLT_COARSE_INDEX
};
SIFCtx
*
ctx
=
context
;
ctx
->
code
=
sifExecOper
(
node
,
ctx
,
&
output
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录