Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
1c7f854a
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看板
提交
1c7f854a
编写于
8月 11, 2023
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enhance: add only meta ctb index to tag scan physi node
上级
7c39bc98
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
180 addition
and
4 deletion
+180
-4
include/libs/nodes/plannodes.h
include/libs/nodes/plannodes.h
+13
-1
source/libs/nodes/src/nodesCloneFuncs.c
source/libs/nodes/src/nodesCloneFuncs.c
+10
-1
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+68
-2
source/libs/nodes/src/nodesMsgFuncs.c
source/libs/nodes/src/nodesMsgFuncs.c
+89
-0
未找到文件。
include/libs/nodes/plannodes.h
浏览文件 @
1c7f854a
...
...
@@ -334,7 +334,19 @@ typedef struct SScanPhysiNode {
bool
groupOrderScan
;
}
SScanPhysiNode
;
typedef
SScanPhysiNode
STagScanPhysiNode
;
typedef
struct
STagScanPhysiNode
{
// SScanPhysiNode scan; //TODO?
SPhysiNode
node
;
SNodeList
*
pScanCols
;
SNodeList
*
pScanPseudoCols
;
uint64_t
uid
;
// unique id of the table
uint64_t
suid
;
int8_t
tableType
;
SName
tableName
;
bool
groupOrderScan
;
bool
onlyMetaCtbIdx
;
//no tbname, tag index not used.
}
STagScanPhysiNode
;
typedef
SScanPhysiNode
SBlockDistScanPhysiNode
;
typedef
struct
SLastRowScanPhysiNode
{
...
...
source/libs/nodes/src/nodesCloneFuncs.c
浏览文件 @
1c7f854a
...
...
@@ -564,7 +564,16 @@ static int32_t physiScanCopy(const SScanPhysiNode* pSrc, SScanPhysiNode* pDst) {
}
static
int32_t
physiTagScanCopy
(
const
STagScanPhysiNode
*
pSrc
,
STagScanPhysiNode
*
pDst
)
{
return
physiScanCopy
(
pSrc
,
pDst
);
COPY_BASE_OBJECT_FIELD
(
node
,
physiNodeCopy
);
CLONE_NODE_LIST_FIELD
(
pScanCols
);
CLONE_NODE_LIST_FIELD
(
pScanPseudoCols
);
COPY_SCALAR_FIELD
(
uid
);
COPY_SCALAR_FIELD
(
suid
);
COPY_SCALAR_FIELD
(
tableType
);
COPY_OBJECT_FIELD
(
tableName
,
sizeof
(
SName
));
COPY_SCALAR_FIELD
(
groupOrderScan
);
COPY_SCALAR_FIELD
(
onlyMetaCtbIdx
);
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
physiTableScanCopy
(
const
STableScanPhysiNode
*
pSrc
,
STableScanPhysiNode
*
pDst
)
{
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
1c7f854a
...
...
@@ -1562,7 +1562,7 @@ static const char* jkScanPhysiPlanTableName = "TableName";
static
const
char
*
jkScanPhysiPlanGroupOrderScan
=
"GroupOrderScan"
;
static
int32_t
physiScanNodeToJson
(
const
void
*
pObj
,
SJson
*
pJson
)
{
const
S
TagScanPhysiNode
*
pNode
=
(
const
STag
ScanPhysiNode
*
)
pObj
;
const
S
ScanPhysiNode
*
pNode
=
(
const
S
ScanPhysiNode
*
)
pObj
;
int32_t
code
=
physicPlanNodeToJson
(
pObj
,
pJson
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
@@ -1591,7 +1591,7 @@ static int32_t physiScanNodeToJson(const void* pObj, SJson* pJson) {
}
static
int32_t
jsonToPhysiScanNode
(
const
SJson
*
pJson
,
void
*
pObj
)
{
S
TagScanPhysiNode
*
pNode
=
(
STag
ScanPhysiNode
*
)
pObj
;
S
ScanPhysiNode
*
pNode
=
(
S
ScanPhysiNode
*
)
pObj
;
int32_t
code
=
jsonToPhysicPlanNode
(
pJson
,
pObj
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
@@ -1619,6 +1619,70 @@ static int32_t jsonToPhysiScanNode(const SJson* pJson, void* pObj) {
return
code
;
}
static
const
char
*
jkTagScanPhysiOnlyMetaCtbIdx
=
"OnlyMetaCtbIdx"
;
static
int32_t
physiTagScanNodeToJson
(
const
void
*
pObj
,
SJson
*
pJson
)
{
const
STagScanPhysiNode
*
pNode
=
(
const
STagScanPhysiNode
*
)
pObj
;
int32_t
code
=
physicPlanNodeToJson
(
pObj
,
pJson
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodeListToJson
(
pJson
,
jkScanPhysiPlanScanCols
,
pNode
->
pScanCols
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodeListToJson
(
pJson
,
jkScanPhysiPlanScanPseudoCols
,
pNode
->
pScanPseudoCols
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddIntegerToObject
(
pJson
,
jkScanPhysiPlanTableId
,
pNode
->
uid
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddIntegerToObject
(
pJson
,
jkScanPhysiPlanSTableId
,
pNode
->
suid
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddIntegerToObject
(
pJson
,
jkScanPhysiPlanTableType
,
pNode
->
tableType
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddObject
(
pJson
,
jkScanPhysiPlanTableName
,
nameToJson
,
&
pNode
->
tableName
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddBoolToObject
(
pJson
,
jkScanPhysiPlanGroupOrderScan
,
pNode
->
groupOrderScan
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddBoolToObject
(
pJson
,
jkTagScanPhysiOnlyMetaCtbIdx
,
pNode
->
onlyMetaCtbIdx
);
}
return
code
;
}
static
int32_t
jsonToPhysiTagScanNode
(
const
SJson
*
pJson
,
void
*
pObj
)
{
STagScanPhysiNode
*
pNode
=
(
STagScanPhysiNode
*
)
pObj
;
int32_t
code
=
jsonToPhysicPlanNode
(
pJson
,
pObj
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
jsonToNodeList
(
pJson
,
jkScanPhysiPlanScanCols
,
&
pNode
->
pScanCols
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
jsonToNodeList
(
pJson
,
jkScanPhysiPlanScanPseudoCols
,
&
pNode
->
pScanPseudoCols
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetUBigIntValue
(
pJson
,
jkScanPhysiPlanTableId
,
&
pNode
->
uid
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetUBigIntValue
(
pJson
,
jkScanPhysiPlanSTableId
,
&
pNode
->
suid
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetTinyIntValue
(
pJson
,
jkScanPhysiPlanTableType
,
&
pNode
->
tableType
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonToObject
(
pJson
,
jkScanPhysiPlanTableName
,
jsonToName
,
&
pNode
->
tableName
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetBoolValue
(
pJson
,
jkScanPhysiPlanGroupOrderScan
,
&
pNode
->
groupOrderScan
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonGetBoolValue
(
pJson
,
jkTagScanPhysiOnlyMetaCtbIdx
,
&
pNode
->
onlyMetaCtbIdx
);
}
return
code
;
}
static
const
char
*
jkLastRowScanPhysiPlanGroupTags
=
"GroupTags"
;
static
const
char
*
jkLastRowScanPhysiPlanGroupSort
=
"GroupSort"
;
...
...
@@ -6590,6 +6654,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
case
QUERY_NODE_LOGIC_PLAN
:
return
logicPlanToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
return
physiTableScanNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
return
physiScanNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN
:
...
...
@@ -6908,6 +6973,7 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
case
QUERY_NODE_LOGIC_PLAN
:
return
jsonToLogicPlan
(
pJson
,
pObj
);
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
return
jsonToPhysiTagScanNode
(
pJson
,
pObj
);
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN
:
return
jsonToPhysiScanNode
(
pJson
,
pObj
);
...
...
source/libs/nodes/src/nodesMsgFuncs.c
浏览文件 @
1c7f854a
...
...
@@ -2003,6 +2003,91 @@ static int32_t msgToPhysiScanNode(STlvDecoder* pDecoder, void* pObj) {
return
code
;
}
enum
{
PHY_TAG_SCAN_CODE_BASE_NODE
=
1
,
PHY_TAG_SCAN_CODE_SCAN_COLS
,
PHY_TAG_SCAN_CODE_SCAN_PSEUDO_COLS
,
PHY_TAG_SCAN_CODE_BASE_UID
,
PHY_TAG_SCAN_CODE_BASE_SUID
,
PHY_TAG_SCAN_CODE_BASE_TABLE_TYPE
,
PHY_TAG_SCAN_CODE_BASE_TABLE_NAME
,
PHY_TAG_SCAN_CODE_BASE_GROUP_ORDER_SCAN
,
PHY_TAG_SCAN_CODE_ONLY_META_CTB_IDX
};
static
int32_t
physiTagScanNodeToMsg
(
const
void
*
pObj
,
STlvEncoder
*
pEncoder
)
{
const
STagScanPhysiNode
*
pNode
=
(
const
STagScanPhysiNode
*
)
pObj
;
int32_t
code
=
tlvEncodeObj
(
pEncoder
,
PHY_TAG_SCAN_CODE_BASE_NODE
,
physiNodeToMsg
,
&
pNode
->
node
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeObj
(
pEncoder
,
PHY_TAG_SCAN_CODE_SCAN_COLS
,
nodeListToMsg
,
pNode
->
pScanCols
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeObj
(
pEncoder
,
PHY_TAG_SCAN_CODE_SCAN_PSEUDO_COLS
,
nodeListToMsg
,
pNode
->
pScanPseudoCols
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeU64
(
pEncoder
,
PHY_TAG_SCAN_CODE_BASE_UID
,
pNode
->
uid
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeU64
(
pEncoder
,
PHY_TAG_SCAN_CODE_BASE_SUID
,
pNode
->
suid
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeI8
(
pEncoder
,
PHY_TAG_SCAN_CODE_BASE_TABLE_TYPE
,
pNode
->
tableType
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeObj
(
pEncoder
,
PHY_TAG_SCAN_CODE_BASE_TABLE_NAME
,
nameToMsg
,
&
pNode
->
tableName
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeBool
(
pEncoder
,
PHY_TAG_SCAN_CODE_BASE_GROUP_ORDER_SCAN
,
pNode
->
groupOrderScan
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tlvEncodeBool
(
pEncoder
,
PHY_TAG_SCAN_CODE_ONLY_META_CTB_IDX
,
pNode
->
onlyMetaCtbIdx
);
}
return
code
;
}
static
int32_t
msgToPhysiTagScanNode
(
STlvDecoder
*
pDecoder
,
void
*
pObj
)
{
STagScanPhysiNode
*
pNode
=
(
STagScanPhysiNode
*
)
pObj
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
STlv
*
pTlv
=
NULL
;
tlvForEach
(
pDecoder
,
pTlv
,
code
)
{
switch
(
pTlv
->
type
)
{
case
PHY_TAG_SCAN_CODE_BASE_NODE
:
code
=
tlvDecodeObjFromTlv
(
pTlv
,
msgToPhysiNode
,
&
pNode
->
node
);
break
;
case
PHY_TAG_SCAN_CODE_SCAN_COLS
:
code
=
msgToNodeListFromTlv
(
pTlv
,
(
void
**
)
&
pNode
->
pScanCols
);
break
;
case
PHY_TAG_SCAN_CODE_SCAN_PSEUDO_COLS
:
code
=
msgToNodeListFromTlv
(
pTlv
,
(
void
**
)
&
pNode
->
pScanPseudoCols
);
break
;
case
PHY_TAG_SCAN_CODE_BASE_UID
:
code
=
tlvDecodeU64
(
pTlv
,
&
pNode
->
uid
);
break
;
case
PHY_TAG_SCAN_CODE_BASE_SUID
:
code
=
tlvDecodeU64
(
pTlv
,
&
pNode
->
suid
);
break
;
case
PHY_TAG_SCAN_CODE_BASE_TABLE_TYPE
:
code
=
tlvDecodeI8
(
pTlv
,
&
pNode
->
tableType
);
break
;
case
PHY_TAG_SCAN_CODE_BASE_TABLE_NAME
:
code
=
tlvDecodeObjFromTlv
(
pTlv
,
msgToName
,
&
pNode
->
tableName
);
break
;
case
PHY_TAG_SCAN_CODE_BASE_GROUP_ORDER_SCAN
:
code
=
tlvDecodeBool
(
pTlv
,
&
pNode
->
groupOrderScan
);
break
;
case
PHY_TAG_SCAN_CODE_ONLY_META_CTB_IDX
:
code
=
tlvDecodeBool
(
pTlv
,
&
pNode
->
onlyMetaCtbIdx
);
break
;
default:
break
;
}
}
return
code
;
}
enum
{
PHY_LAST_ROW_SCAN_CODE_SCAN
=
1
,
PHY_LAST_ROW_SCAN_CODE_GROUP_TAGS
,
...
...
@@ -3726,6 +3811,8 @@ static int32_t specificNodeToMsg(const void* pObj, STlvEncoder* pEncoder) {
code
=
caseWhenNodeToMsg
(
pObj
,
pEncoder
);
break
;
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
code
=
physiTagScanNodeToMsg
(
pObj
,
pEncoder
);
break
;
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
code
=
physiScanNodeToMsg
(
pObj
,
pEncoder
);
break
;
...
...
@@ -3869,6 +3956,8 @@ static int32_t msgToSpecificNode(STlvDecoder* pDecoder, void* pObj) {
code
=
msgToCaseWhenNode
(
pDecoder
,
pObj
);
break
;
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
code
=
msgToPhysiTagScanNode
(
pDecoder
,
pObj
);
break
;
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
code
=
msgToPhysiScanNode
(
pDecoder
,
pObj
);
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录