Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
5c185b90
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
5c185b90
编写于
6月 20, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: sql command 'show local variables' and 'show dnode variables'
上级
b4057d65
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
1565 addition
and
1326 deletion
+1565
-1326
include/common/systable.h
include/common/systable.h
+1
-0
include/libs/catalog/catalog.h
include/libs/catalog/catalog.h
+4
-0
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+13
-8
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+3
-1
source/libs/catalog/src/catalog.c
source/libs/catalog/src/catalog.c
+4
-0
source/libs/command/src/command.c
source/libs/command/src/command.c
+4
-0
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+8
-2
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+1
-0
source/libs/parser/inc/parUtil.h
source/libs/parser/inc/parUtil.h
+4
-0
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+3
-1
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+8
-0
source/libs/parser/src/parAstParser.c
source/libs/parser/src/parAstParser.c
+12
-1
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+82
-7
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+15
-0
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+1330
-1304
source/libs/parser/test/mockCatalog.cpp
source/libs/parser/test/mockCatalog.cpp
+22
-0
source/libs/parser/test/mockCatalogService.cpp
source/libs/parser/test/mockCatalogService.cpp
+25
-0
source/libs/parser/test/mockCatalogService.h
source/libs/parser/test/mockCatalogService.h
+2
-0
source/libs/parser/test/parShowToUse.cpp
source/libs/parser/test/parShowToUse.cpp
+17
-1
source/libs/planner/src/planPhysiCreater.c
source/libs/planner/src/planPhysiCreater.c
+5
-1
source/libs/planner/test/planOtherTest.cpp
source/libs/planner/test/planOtherTest.cpp
+2
-0
未找到文件。
include/common/systable.h
浏览文件 @
5c185b90
...
...
@@ -41,6 +41,7 @@ extern "C" {
#define TSDB_INS_TABLE_VGROUPS "vgroups"
#define TSDB_INS_TABLE_VNODES "vnodes"
#define TSDB_INS_TABLE_CONFIGS "configs"
#define TSDB_INS_TABLE_DNODE_VARIABLES "dnode_variables"
#define TSDB_PERFORMANCE_SCHEMA_DB "performance_schema"
#define TSDB_PERFS_TABLE_SMAS "smas"
...
...
include/libs/catalog/catalog.h
浏览文件 @
5c185b90
...
...
@@ -69,6 +69,7 @@ typedef struct SCatalogReq {
SArray
*
pUser
;
// element is SUserAuthInfo
SArray
*
pTableIndex
;
// element is SNAME
bool
qNodeRequired
;
// valid qnode
bool
dNodeRequired
;
// valid dnode
bool
forceUpdate
;
}
SCatalogReq
;
...
...
@@ -88,6 +89,7 @@ typedef struct SMetaData {
SArray
*
pIndex
;
// pRes = SIndexInfo*
SArray
*
pUser
;
// pRes = bool*
SArray
*
pQnodeList
;
// pRes = SArray<SQueryNodeLoad>*
SArray
*
pDnodeList
;
// pRes = SArray<SEpSet>*
}
SMetaData
;
typedef
struct
SCatalogCfg
{
...
...
@@ -268,6 +270,8 @@ int32_t catalogAsyncGetAllMeta(SCatalog* pCtg, SRequestConnInfo* pConn, uint64_t
int32_t
catalogGetQnodeList
(
SCatalog
*
pCatalog
,
SRequestConnInfo
*
pConn
,
SArray
*
pQnodeList
);
int32_t
catalogGetDnodeList
(
SCatalog
*
pCatalog
,
SRequestConnInfo
*
pConn
,
SArray
**
pDnodeList
);
int32_t
catalogGetExpiredSTables
(
SCatalog
*
pCatalog
,
SSTableVersion
**
stables
,
uint32_t
*
num
);
int32_t
catalogGetExpiredDBs
(
SCatalog
*
pCatalog
,
SDbVgVersion
**
dbs
,
uint32_t
*
num
);
...
...
include/libs/nodes/cmdnodes.h
浏览文件 @
5c185b90
...
...
@@ -119,14 +119,14 @@ typedef struct SCreateTableStmt {
}
SCreateTableStmt
;
typedef
struct
SCreateSubTableClause
{
ENodeType
type
;
char
dbName
[
TSDB_DB_NAME_LEN
];
char
tableName
[
TSDB_TABLE_NAME_LEN
];
char
useDbName
[
TSDB_DB_NAME_LEN
];
char
useTableName
[
TSDB_TABLE_NAME_LEN
];
bool
ignoreExists
;
SNodeList
*
pSpecificTags
;
SNodeList
*
pValsOfTags
;
ENodeType
type
;
char
dbName
[
TSDB_DB_NAME_LEN
];
char
tableName
[
TSDB_TABLE_NAME_LEN
];
char
useDbName
[
TSDB_DB_NAME_LEN
];
char
useTableName
[
TSDB_TABLE_NAME_LEN
];
bool
ignoreExists
;
SNodeList
*
pSpecificTags
;
SNodeList
*
pValsOfTags
;
STableOptions
*
pOptions
;
}
SCreateSubTableClause
;
...
...
@@ -230,6 +230,11 @@ typedef struct SShowTableDistributedStmt {
char
tableName
[
TSDB_TABLE_NAME_LEN
];
}
SShowTableDistributedStmt
;
typedef
struct
SShowDnodeVariablesStmt
{
ENodeType
type
;
SNode
*
pDnodeId
;
}
SShowDnodeVariablesStmt
;
typedef
enum
EIndexType
{
INDEX_TYPE_SMA
=
1
,
INDEX_TYPE_FULLTEXT
}
EIndexType
;
typedef
struct
SIndexOptions
{
...
...
include/libs/nodes/nodes.h
浏览文件 @
5c185b90
...
...
@@ -180,7 +180,9 @@ typedef enum ENodeType {
QUERY_NODE_SHOW_VNODES_STMT
,
QUERY_NODE_SHOW_APPS_STMT
,
QUERY_NODE_SHOW_SCORES_STMT
,
QUERY_NODE_SHOW_VARIABLE_STMT
,
QUERY_NODE_SHOW_VARIABLES_STMT
,
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
,
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
,
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
,
QUERY_NODE_SHOW_CREATE_TABLE_STMT
,
QUERY_NODE_SHOW_CREATE_STABLE_STMT
,
...
...
source/libs/catalog/src/catalog.c
浏览文件 @
5c185b90
...
...
@@ -1121,6 +1121,10 @@ _return:
CTG_API_LEAVE
(
TSDB_CODE_SUCCESS
);
}
int32_t
catalogGetDnodeList
(
SCatalog
*
pCatalog
,
SRequestConnInfo
*
pConn
,
SArray
**
pDnodeList
)
{
return
TSDB_CODE_CTG_INVALID_INPUT
;
}
int32_t
catalogGetExpiredSTables
(
SCatalog
*
pCtg
,
SSTableVersion
**
stables
,
uint32_t
*
num
)
{
CTG_API_ENTER
();
...
...
source/libs/command/src/command.c
浏览文件 @
5c185b90
...
...
@@ -131,6 +131,8 @@ static int32_t execShowCreateSTable(SShowCreateTableStmt* pStmt) { return TSDB_C
static
int32_t
execAlterLocal
(
SAlterLocalStmt
*
pStmt
)
{
return
TSDB_CODE_FAILED
;
}
static
int32_t
execShowLocalVariables
()
{
return
TSDB_CODE_FAILED
;
}
int32_t
qExecCommand
(
SNode
*
pStmt
,
SRetrieveTableRsp
**
pRsp
)
{
switch
(
nodeType
(
pStmt
))
{
case
QUERY_NODE_DESCRIBE_STMT
:
...
...
@@ -145,6 +147,8 @@ int32_t qExecCommand(SNode* pStmt, SRetrieveTableRsp** pRsp) {
return
execShowCreateSTable
((
SShowCreateTableStmt
*
)
pStmt
);
case
QUERY_NODE_ALTER_LOCAL_STMT
:
return
execAlterLocal
((
SAlterLocalStmt
*
)
pStmt
);
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
return
execShowLocalVariables
();
default:
break
;
}
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
5c185b90
...
...
@@ -207,9 +207,12 @@ SNode* nodesMakeNode(ENodeType type) {
case
QUERY_NODE_SHOW_VNODES_STMT
:
case
QUERY_NODE_SHOW_APPS_STMT
:
case
QUERY_NODE_SHOW_SCORES_STMT
:
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowStmt
));
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowDnodeVariablesStmt
));
case
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowCreateDatabaseStmt
));
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
...
...
@@ -637,13 +640,16 @@ void nodesDestroyNode(SNode* pNode) {
case
QUERY_NODE_SHOW_VNODES_STMT
:
case
QUERY_NODE_SHOW_APPS_STMT
:
case
QUERY_NODE_SHOW_SCORES_STMT
:
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
{
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
pNode
;
nodesDestroyNode
(
pStmt
->
pDbName
);
nodesDestroyNode
(
pStmt
->
pTbName
);
break
;
}
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
// no pointer field
break
;
case
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
:
taosMemoryFreeClear
(((
SShowCreateDatabaseStmt
*
)
pNode
)
->
pCfg
);
break
;
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
5c185b90
...
...
@@ -161,6 +161,7 @@ SNode* createShowStmtWithCond(SAstCreateContext* pCxt, ENodeType type, SNode* pD
SNode
*
createShowCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createShowCreateTableStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pRealTable
);
SNode
*
createShowTableDistributedStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
);
SNode
*
createShowDnodeVariablesStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pDnodeId
);
SNode
*
createCreateUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
const
SToken
*
pPassword
);
SNode
*
createAlterUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
int8_t
alterType
,
const
SToken
*
pVal
);
SNode
*
createDropUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
);
...
...
source/libs/parser/inc/parUtil.h
浏览文件 @
5c185b90
...
...
@@ -47,6 +47,8 @@ typedef struct SParseMetaCache {
SHashObj
*
pUserAuth
;
// key is SUserAuthInfo serialized string, element is bool indicating whether or not to pass
SHashObj
*
pUdf
;
// key is funcName, element is SFuncInfo*
SHashObj
*
pTableIndex
;
// key is tbFName, element is SArray<STableIndexInfo>*
SArray
*
pDnodes
;
// element is SEpSet
bool
dnodeRequired
;
}
SParseMetaCache
;
int32_t
generateSyntaxErrMsg
(
SMsgBuf
*
pBuf
,
int32_t
errCode
,
...);
...
...
@@ -77,6 +79,7 @@ int32_t reserveUserAuthInCache(int32_t acctId, const char* pUser, const char* pD
int32_t
reserveUserAuthInCacheExt
(
const
char
*
pUser
,
const
SName
*
pName
,
AUTH_TYPE
type
,
SParseMetaCache
*
pMetaCache
);
int32_t
reserveUdfInCache
(
const
char
*
pFunc
,
SParseMetaCache
*
pMetaCache
);
int32_t
reserveTableIndexInCache
(
int32_t
acctId
,
const
char
*
pDb
,
const
char
*
pTable
,
SParseMetaCache
*
pMetaCache
);
int32_t
reserveDnodeRequiredInCache
(
SParseMetaCache
*
pMetaCache
);
int32_t
getTableMetaFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
STableMeta
**
pMeta
);
int32_t
getDbVgInfoFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
SArray
**
pVgInfo
);
int32_t
getTableVgroupFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
SVgroupInfo
*
pVgroup
);
...
...
@@ -87,6 +90,7 @@ int32_t getUserAuthFromCache(SParseMetaCache* pMetaCache, const char* pUser, con
bool
*
pPass
);
int32_t
getUdfInfoFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pFunc
,
SFuncInfo
*
pInfo
);
int32_t
getTableIndexFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
SArray
**
pIndexes
);
int32_t
getDnodeListFromCache
(
SParseMetaCache
*
pMetaCache
,
SArray
**
pDnodes
);
void
destoryParseMetaCache
(
SParseMetaCache
*
pMetaCache
);
#ifdef __cplusplus
...
...
source/libs/parser/inc/sql.y
浏览文件 @
5c185b90
...
...
@@ -373,7 +373,9 @@ cmd ::= SHOW CREATE STABLE full_table_name(A).
cmd ::= SHOW QUERIES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
cmd ::= SHOW SCORES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
cmd ::= SHOW TOPICS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
cmd ::= SHOW VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLE_STMT); }
cmd ::= SHOW VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); }
cmd ::= SHOW LOCAL VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); }
cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES. { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
cmd ::= SHOW BNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
cmd ::= SHOW SNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
cmd ::= SHOW CLUSTER. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
5c185b90
...
...
@@ -1197,6 +1197,14 @@ SNode* createShowTableDistributedStmt(SAstCreateContext* pCxt, SNode* pRealTable
return
(
SNode
*
)
pStmt
;
}
SNode
*
createShowDnodeVariablesStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pDnodeId
)
{
CHECK_PARSER_STATUS
(
pCxt
);
SShowDnodeVariablesStmt
*
pStmt
=
(
SShowDnodeVariablesStmt
*
)
nodesMakeNode
(
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
pDnodeId
=
pDnodeId
;
return
(
SNode
*
)
pStmt
;
}
SNode
*
createCreateUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
const
SToken
*
pPassword
)
{
CHECK_PARSER_STATUS
(
pCxt
);
char
password
[
TSDB_USET_PASSWORD_LEN
]
=
{
0
};
...
...
source/libs/parser/src/parAstParser.c
浏览文件 @
5c185b90
...
...
@@ -397,6 +397,15 @@ static int32_t collectMetaKeyFromShowVariables(SCollectMetaKeyCxt* pCxt, SShowSt
pCxt
->
pMetaCache
);
}
static
int32_t
collectMetaKeyFromShowDnodeVariables
(
SCollectMetaKeyCxt
*
pCxt
,
SShowDnodeVariablesStmt
*
pStmt
)
{
int32_t
code
=
reserveTableMetaInCache
(
pCxt
->
pParseCxt
->
acctId
,
TSDB_INFORMATION_SCHEMA_DB
,
TSDB_INS_TABLE_DNODE_VARIABLES
,
pCxt
->
pMetaCache
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
reserveDnodeRequiredInCache
(
pCxt
->
pMetaCache
);
}
return
code
;
}
static
int32_t
collectMetaKeyFromShowCreateDatabase
(
SCollectMetaKeyCxt
*
pCxt
,
SShowCreateDatabaseStmt
*
pStmt
)
{
return
reserveDbCfgInCache
(
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
dbName
,
pCxt
->
pMetaCache
);
}
...
...
@@ -484,8 +493,10 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
return
collectMetaKeyFromShowConnections
(
pCxt
,
(
SShowStmt
*
)
pStmt
);
case
QUERY_NODE_SHOW_QUERIES_STMT
:
return
collectMetaKeyFromShowQueries
(
pCxt
,
(
SShowStmt
*
)
pStmt
);
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLE
S
_STMT
:
return
collectMetaKeyFromShowVariables
(
pCxt
,
(
SShowStmt
*
)
pStmt
);
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
return
collectMetaKeyFromShowDnodeVariables
(
pCxt
,
(
SShowDnodeVariablesStmt
*
)
pStmt
);
case
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
:
return
collectMetaKeyFromShowCreateDatabase
(
pCxt
,
(
SShowCreateDatabaseStmt
*
)
pStmt
);
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
5c185b90
...
...
@@ -305,6 +305,24 @@ static int32_t getTableIndex(STranslateContext* pCxt, const SName* pName, SArray
return
code
;
}
static
int32_t
getDnodeList
(
STranslateContext
*
pCxt
,
SArray
**
pDnodes
)
{
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getDnodeListFromCache
(
pCxt
->
pMetaCache
,
pDnodes
);
}
else
{
SRequestConnInfo
conn
=
{.
pTrans
=
pParCxt
->
pTransporter
,
.
requestId
=
pParCxt
->
requestId
,
.
requestObjRefId
=
pParCxt
->
requestRid
,
.
mgmtEps
=
pParCxt
->
mgmtEpSet
};
code
=
catalogGetDnodeList
(
pParCxt
->
pCatalog
,
&
conn
,
pDnodes
);
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"getDnodeList error, code:%s"
,
tstrerror
(
code
));
}
return
code
;
}
static
int32_t
initTranslateContext
(
SParseContext
*
pParseCxt
,
SParseMetaCache
*
pMetaCache
,
STranslateContext
*
pCxt
)
{
pCxt
->
pParseCxt
=
pParseCxt
;
pCxt
->
errCode
=
TSDB_CODE_SUCCESS
;
...
...
@@ -1450,12 +1468,27 @@ static int32_t addMnodeToVgroupList(const SEpSet* pEpSet, SArray** pVgroupList)
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
setSysTableVgroupList
(
STranslateContext
*
pCxt
,
SName
*
pName
,
SRealTableNode
*
pRealTable
)
{
if
(
0
!=
strcmp
(
pRealTable
->
table
.
tableName
,
TSDB_INS_TABLE_USER_TABLES
)
&&
0
!=
strcmp
(
pRealTable
->
table
.
tableName
,
TSDB_INS_TABLE_USER_TABLE_DISTRIBUTED
))
{
return
TSDB_CODE_SUCCESS
;
static
int32_t
dnodeToVgroupsInfo
(
SArray
*
pDnodes
,
SVgroupsInfo
**
pVgsInfo
)
{
size_t
ndnode
=
taosArrayGetSize
(
pDnodes
);
*
pVgsInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SVgroupsInfo
)
+
sizeof
(
SVgroupInfo
)
*
ndnode
);
if
(
NULL
==
*
pVgsInfo
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
(
*
pVgsInfo
)
->
numOfVgroups
=
ndnode
;
for
(
int32_t
i
=
0
;
i
<
ndnode
;
++
i
)
{
memcpy
(
&
((
*
pVgsInfo
)
->
vgroups
[
i
].
epSet
),
taosArrayGet
(
pDnodes
,
i
),
sizeof
(
SEpSet
));
}
return
TSDB_CODE_SUCCESS
;
}
static
bool
sysTableFromVnode
(
const
char
*
pTable
)
{
return
(
0
==
strcmp
(
pTable
,
TSDB_INS_TABLE_USER_TABLES
))
||
(
0
==
strcmp
(
pTable
,
TSDB_INS_TABLE_USER_TABLE_DISTRIBUTED
));
}
static
bool
sysTableFromDnode
(
const
char
*
pTable
)
{
return
0
==
strcmp
(
pTable
,
TSDB_INS_TABLE_DNODE_VARIABLES
);
}
static
int32_t
setVnodeSysTableVgroupList
(
STranslateContext
*
pCxt
,
SName
*
pName
,
SRealTableNode
*
pRealTable
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
SArray
*
vgroupList
=
NULL
;
if
(
'\0'
!=
pRealTable
->
qualDbName
[
0
])
{
...
...
@@ -1478,6 +1511,26 @@ static int32_t setSysTableVgroupList(STranslateContext* pCxt, SName* pName, SRea
return
code
;
}
static
int32_t
setDnodeSysTableVgroupList
(
STranslateContext
*
pCxt
,
SName
*
pName
,
SRealTableNode
*
pRealTable
)
{
SArray
*
pDnodes
=
NULL
;
int32_t
code
=
getDnodeList
(
pCxt
,
&
pDnodes
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
dnodeToVgroupsInfo
(
pDnodes
,
&
pRealTable
->
pVgroupList
);
}
taosArrayDestroy
(
pDnodes
);
return
code
;
}
static
int32_t
setSysTableVgroupList
(
STranslateContext
*
pCxt
,
SName
*
pName
,
SRealTableNode
*
pRealTable
)
{
if
(
sysTableFromVnode
(
pRealTable
->
table
.
tableName
))
{
return
setVnodeSysTableVgroupList
(
pCxt
,
pName
,
pRealTable
);
}
else
if
(
sysTableFromDnode
(
pRealTable
->
table
.
tableName
))
{
return
setDnodeSysTableVgroupList
(
pCxt
,
pName
,
pRealTable
);
}
else
{
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
setTableVgroupList
(
STranslateContext
*
pCxt
,
SName
*
pName
,
SRealTableNode
*
pRealTable
)
{
if
(
pCxt
->
pParseCxt
->
topicQuery
)
{
return
TSDB_CODE_SUCCESS
;
...
...
@@ -4542,7 +4595,8 @@ static const char* getSysDbName(ENodeType type) {
case
QUERY_NODE_SHOW_SNODES_STMT
:
case
QUERY_NODE_SHOW_LICENCE_STMT
:
case
QUERY_NODE_SHOW_CLUSTER_STMT
:
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
return
TSDB_INFORMATION_SCHEMA_DB
;
case
QUERY_NODE_SHOW_CONNECTIONS_STMT
:
case
QUERY_NODE_SHOW_QUERIES_STMT
:
...
...
@@ -4599,10 +4653,12 @@ static const char* getSysTableName(ENodeType type) {
return
TSDB_PERFS_TABLE_TOPICS
;
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
return
TSDB_PERFS_TABLE_TRANS
;
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLE
S
_STMT
:
return
TSDB_INS_TABLE_CONFIGS
;
case
QUERY_NODE_SHOW_APPS_STMT
:
return
TSDB_PERFS_TABLE_APPS
;
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
return
TSDB_INS_TABLE_DNODE_VARIABLES
;
default:
break
;
}
...
...
@@ -4729,6 +4785,21 @@ static int32_t rewriteShow(STranslateContext* pCxt, SQuery* pQuery) {
return
code
;
}
static
int32_t
rewriteShowDnodeVariables
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
SSelectStmt
*
pStmt
=
NULL
;
int32_t
code
=
createSelectStmtForShow
(
nodeType
(
pQuery
->
pRoot
),
&
pStmt
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
createOperatorNode
(
OP_TYPE_EQUAL
,
"dnode_id"
,
((
SShowDnodeVariablesStmt
*
)
pQuery
->
pRoot
)
->
pDnodeId
,
&
pStmt
->
pWhere
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
pQuery
->
showRewrite
=
true
;
nodesDestroyNode
(
pQuery
->
pRoot
);
pQuery
->
pRoot
=
(
SNode
*
)
pStmt
;
}
return
code
;
}
static
SNode
*
createBlockDistInfoFunc
()
{
SFunctionNode
*
pFunc
=
(
SFunctionNode
*
)
nodesMakeNode
(
QUERY_NODE_FUNCTION
);
if
(
NULL
==
pFunc
)
{
...
...
@@ -5724,10 +5795,13 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
case
QUERY_NODE_SHOW_CLUSTER_STMT
:
case
QUERY_NODE_SHOW_TOPICS_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLE
S
_STMT
:
case
QUERY_NODE_SHOW_APPS_STMT
:
code
=
rewriteShow
(
pCxt
,
pQuery
);
break
;
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
code
=
rewriteShowDnodeVariables
(
pCxt
,
pQuery
);
break
;
case
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT
:
code
=
rewriteShowTableDist
(
pCxt
,
pQuery
);
break
;
...
...
@@ -5818,6 +5892,7 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) {
break
;
case
QUERY_NODE_RESET_QUERY_CACHE_STMT
:
case
QUERY_NODE_ALTER_LOCAL_STMT
:
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
pQuery
->
execMode
=
QUERY_EXEC_MODE_LOCAL
;
break
;
default:
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
5c185b90
...
...
@@ -561,6 +561,7 @@ int32_t buildCatalogReq(const SParseMetaCache* pMetaCache, SCatalogReq* pCatalog
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildTableReq
(
pMetaCache
->
pTableIndex
,
&
pCatalogReq
->
pTableIndex
);
}
pCatalogReq
->
dNodeRequired
=
pMetaCache
->
dnodeRequired
;
return
code
;
}
...
...
@@ -656,6 +657,7 @@ int32_t putMetaDataToCache(const SCatalogReq* pCatalogReq, const SMetaData* pMet
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
putTableDataToCache
(
pCatalogReq
->
pTableIndex
,
pMetaData
->
pTableIndex
,
&
pMetaCache
->
pTableIndex
);
}
pMetaCache
->
pDnodes
=
pMetaData
->
pDnodeList
;
return
code
;
}
...
...
@@ -875,6 +877,19 @@ int32_t getTableIndexFromCache(SParseMetaCache* pMetaCache, const SName* pName,
return
code
;
}
int32_t
reserveDnodeRequiredInCache
(
SParseMetaCache
*
pMetaCache
)
{
pMetaCache
->
dnodeRequired
=
true
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
getDnodeListFromCache
(
SParseMetaCache
*
pMetaCache
,
SArray
**
pDnodes
)
{
*
pDnodes
=
taosArrayDup
(
pMetaCache
->
pDnodes
);
if
(
NULL
==
*
pDnodes
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
return
TSDB_CODE_SUCCESS
;
}
void
destoryParseMetaCache
(
SParseMetaCache
*
pMetaCache
)
{
taosHashCleanup
(
pMetaCache
->
pTableMeta
);
taosHashCleanup
(
pMetaCache
->
pDbVgroup
);
...
...
source/libs/parser/src/sql.c
浏览文件 @
5c185b90
因为 它太大了无法显示 source diff 。你可以改为
查看blob
。
source/libs/parser/test/mockCatalog.cpp
浏览文件 @
5c185b90
...
...
@@ -93,6 +93,16 @@ void generateInformationSchema(MockCatalogService* mcs) {
.
addColumn
(
"db_name"
,
TSDB_DATA_TYPE_BINARY
,
TSDB_DB_NAME_LEN
);
builder
.
done
();
}
{
ITableBuilder
&
builder
=
mcs
->
createTableBuilder
(
"information_schema"
,
"configs"
,
TSDB_SYSTEM_TABLE
,
1
)
.
addColumn
(
"name"
,
TSDB_DATA_TYPE_BINARY
,
TSDB_CONFIG_OPTION_LEN
);
builder
.
done
();
}
{
ITableBuilder
&
builder
=
mcs
->
createTableBuilder
(
"information_schema"
,
"dnode_variables"
,
TSDB_SYSTEM_TABLE
,
1
)
.
addColumn
(
"dnode_id"
,
TSDB_DATA_TYPE_INT
);
builder
.
done
();
}
}
void
generatePerformanceSchema
(
MockCatalogService
*
mcs
)
{
...
...
@@ -187,6 +197,12 @@ void generateFunctions(MockCatalogService* mcs) {
8
);
}
void
generateDnodes
(
MockCatalogService
*
mcs
)
{
mcs
->
createDnode
(
1
,
"host1"
,
7030
);
mcs
->
createDnode
(
2
,
"host2"
,
7030
);
mcs
->
createDnode
(
3
,
"host3"
,
7030
);
}
}
// namespace
int32_t
__catalogGetHandle
(
const
char
*
clusterId
,
struct
SCatalog
**
catalogHandle
)
{
return
0
;
}
...
...
@@ -241,6 +257,10 @@ int32_t __catalogGetTableIndex(SCatalog* pCtg, void* pTrans, const SEpSet* pMgmt
return
g_mockCatalogService
->
catalogGetTableIndex
(
pName
,
pRes
);
}
int32_t
__catalogGetDnodeList
(
SCatalog
*
pCatalog
,
SRequestConnInfo
*
pConn
,
SArray
**
pDnodeList
)
{
return
g_mockCatalogService
->
catalogGetDnodeList
(
pDnodeList
);
}
void
initMetaDataEnv
()
{
g_mockCatalogService
.
reset
(
new
MockCatalogService
());
...
...
@@ -258,6 +278,7 @@ void initMetaDataEnv() {
stub
.
set
(
catalogRefreshGetTableMeta
,
__catalogRefreshGetTableMeta
);
stub
.
set
(
catalogRemoveTableMeta
,
__catalogRemoveTableMeta
);
stub
.
set
(
catalogGetTableIndex
,
__catalogGetTableIndex
);
stub
.
set
(
catalogGetDnodeList
,
__catalogGetDnodeList
);
// {
// AddrAny any("libcatalog.so");
// std::map<std::string,void*> result;
...
...
@@ -307,6 +328,7 @@ void generateMetaData() {
generateTestST1
(
g_mockCatalogService
.
get
());
generateTestST2
(
g_mockCatalogService
.
get
());
generateFunctions
(
g_mockCatalogService
.
get
());
generateDnodes
(
g_mockCatalogService
.
get
());
g_mockCatalogService
->
showTables
();
}
...
...
source/libs/parser/test/mockCatalogService.cpp
浏览文件 @
5c185b90
...
...
@@ -165,6 +165,14 @@ class MockCatalogServiceImpl {
return
TSDB_CODE_SUCCESS
;
}
int32_t
catalogGetDnodeList
(
SArray
**
pDnodes
)
const
{
*
pDnodes
=
taosArrayInit
(
dnode_
.
size
(),
sizeof
(
SEpSet
));
for
(
const
auto
&
dnode
:
dnode_
)
{
taosArrayPush
(
*
pDnodes
,
&
dnode
.
second
);
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
catalogGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
const
{
int32_t
code
=
getAllTableMeta
(
pCatalogReq
->
pTableMeta
,
&
pMetaData
->
pTableMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
@@ -188,6 +196,9 @@ class MockCatalogServiceImpl {
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
getAllTableIndex
(
pCatalogReq
->
pTableIndex
,
&
pMetaData
->
pTableIndex
);
}
if
(
TSDB_CODE_SUCCESS
==
code
&&
pCatalogReq
->
dNodeRequired
)
{
code
=
catalogGetDnodeList
(
&
pMetaData
->
pDnodeList
);
}
return
code
;
}
...
...
@@ -303,11 +314,18 @@ class MockCatalogServiceImpl {
}
}
void
createDnode
(
int32_t
dnodeId
,
const
std
::
string
&
host
,
int16_t
port
)
{
SEpSet
epSet
=
{
0
};
addEpIntoEpSet
(
&
epSet
,
host
.
c_str
(),
port
);
dnode_
.
insert
(
std
::
make_pair
(
dnodeId
,
epSet
));
}
private:
typedef
std
::
map
<
std
::
string
,
std
::
shared_ptr
<
MockTableMeta
>>
TableMetaCache
;
typedef
std
::
map
<
std
::
string
,
TableMetaCache
>
DbMetaCache
;
typedef
std
::
map
<
std
::
string
,
std
::
shared_ptr
<
SFuncInfo
>>
UdfMetaCache
;
typedef
std
::
map
<
std
::
string
,
std
::
vector
<
STableIndexInfo
>>
IndexMetaCache
;
typedef
std
::
map
<
int32_t
,
SEpSet
>
DnodeCache
;
uint64_t
getNextId
()
{
return
id_
++
;
}
...
...
@@ -532,6 +550,7 @@ class MockCatalogServiceImpl {
DbMetaCache
meta_
;
UdfMetaCache
udf_
;
IndexMetaCache
index_
;
DnodeCache
dnode_
;
};
MockCatalogService
::
MockCatalogService
()
:
impl_
(
new
MockCatalogServiceImpl
())
{}
...
...
@@ -557,6 +576,10 @@ void MockCatalogService::createFunction(const std::string& func, int8_t funcType
void
MockCatalogService
::
createSmaIndex
(
const
SMCreateSmaReq
*
pReq
)
{
impl_
->
createSmaIndex
(
pReq
);
}
void
MockCatalogService
::
createDnode
(
int32_t
dnodeId
,
const
std
::
string
&
host
,
int16_t
port
)
{
impl_
->
createDnode
(
dnodeId
,
host
,
port
);
}
int32_t
MockCatalogService
::
catalogGetTableMeta
(
const
SName
*
pTableName
,
STableMeta
**
pTableMeta
)
const
{
return
impl_
->
catalogGetTableMeta
(
pTableName
,
pTableMeta
);
}
...
...
@@ -581,6 +604,8 @@ int32_t MockCatalogService::catalogGetTableIndex(const SName* pTableName, SArray
return
impl_
->
catalogGetTableIndex
(
pTableName
,
pIndexes
);
}
int32_t
MockCatalogService
::
catalogGetDnodeList
(
SArray
**
pDnodes
)
const
{
return
impl_
->
catalogGetDnodeList
(
pDnodes
);
}
int32_t
MockCatalogService
::
catalogGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
const
{
return
impl_
->
catalogGetAllMeta
(
pCatalogReq
,
pMetaData
);
}
...
...
source/libs/parser/test/mockCatalogService.h
浏览文件 @
5c185b90
...
...
@@ -62,6 +62,7 @@ class MockCatalogService {
void
showTables
()
const
;
void
createFunction
(
const
std
::
string
&
func
,
int8_t
funcType
,
int8_t
outputType
,
int32_t
outputLen
,
int32_t
bufSize
);
void
createSmaIndex
(
const
SMCreateSmaReq
*
pReq
);
void
createDnode
(
int32_t
dnodeId
,
const
std
::
string
&
host
,
int16_t
port
);
int32_t
catalogGetTableMeta
(
const
SName
*
pTableName
,
STableMeta
**
pTableMeta
)
const
;
int32_t
catalogGetTableHashVgroup
(
const
SName
*
pTableName
,
SVgroupInfo
*
vgInfo
)
const
;
...
...
@@ -69,6 +70,7 @@ class MockCatalogService {
int32_t
catalogGetDBVgInfo
(
const
char
*
pDbFName
,
SArray
**
pVgList
)
const
;
int32_t
catalogGetUdfInfo
(
const
std
::
string
&
funcName
,
SFuncInfo
*
pInfo
)
const
;
int32_t
catalogGetTableIndex
(
const
SName
*
pTableName
,
SArray
**
pIndexes
)
const
;
int32_t
catalogGetDnodeList
(
SArray
**
pDnodes
)
const
;
int32_t
catalogGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
const
;
private:
...
...
source/libs/parser/test/parShowToUse.cpp
浏览文件 @
5c185b90
...
...
@@ -76,6 +76,12 @@ TEST_F(ParserShowToUseTest, showDnodes) {
run
(
"SHOW dnodes"
);
}
TEST_F
(
ParserShowToUseTest
,
showDnodeVariables
)
{
useDb
(
"root"
,
"test"
);
run
(
"SHOW DNODE 1 VARIABLES"
);
}
TEST_F
(
ParserShowToUseTest
,
showFunctions
)
{
useDb
(
"root"
,
"test"
);
...
...
@@ -84,6 +90,12 @@ TEST_F(ParserShowToUseTest, showFunctions) {
// todo SHOW licence
TEST_F
(
ParserShowToUseTest
,
showLocalVariables
)
{
useDb
(
"root"
,
"test"
);
run
(
"SHOW LOCAL VARIABLES"
);
}
TEST_F
(
ParserShowToUseTest
,
showIndexes
)
{
useDb
(
"root"
,
"test"
);
...
...
@@ -157,7 +169,11 @@ TEST_F(ParserShowToUseTest, showUsers) {
run
(
"SHOW users"
);
}
// todo SHOW variables
TEST_F
(
ParserShowToUseTest
,
showVariables
)
{
useDb
(
"root"
,
"test"
);
run
(
"SHOW VARIABLES"
);
}
TEST_F
(
ParserShowToUseTest
,
showVgroups
)
{
useDb
(
"root"
,
"test"
);
...
...
source/libs/planner/src/planPhysiCreater.c
浏览文件 @
5c185b90
...
...
@@ -534,7 +534,11 @@ static int32_t createSystemTableScanPhysiNode(SPhysiPlanContext* pCxt, SSubplan*
}
SQueryNodeLoad
node
=
{.
addr
=
{.
nodeId
=
MNODE_HANDLE
,
.
epSet
=
pCxt
->
pPlanCxt
->
mgmtEpSet
},
.
load
=
0
};
taosArrayPush
(
pCxt
->
pExecNodeList
,
&
node
);
pScan
->
mgmtEpSet
=
pCxt
->
pPlanCxt
->
mgmtEpSet
;
if
(
0
==
strcmp
(
pScanLogicNode
->
tableName
.
tname
,
TSDB_INS_TABLE_DNODE_VARIABLES
))
{
pScan
->
mgmtEpSet
=
pScanLogicNode
->
pVgroupList
->
vgroups
->
epSet
;
}
else
{
pScan
->
mgmtEpSet
=
pCxt
->
pPlanCxt
->
mgmtEpSet
;
}
tNameGetFullDbName
(
&
pScanLogicNode
->
tableName
,
pSubplan
->
dbFName
);
return
createScanPhysiNodeFinalize
(
pCxt
,
pSubplan
,
pScanLogicNode
,
(
SScanPhysiNode
*
)
pScan
,
pPhyNode
);
...
...
source/libs/planner/test/planOtherTest.cpp
浏览文件 @
5c185b90
...
...
@@ -74,6 +74,8 @@ TEST_F(PlanOtherTest, show) {
run
(
"SHOW TABLE DISTRIBUTED t1"
);
run
(
"SHOW TABLE DISTRIBUTED st1"
);
run
(
"SHOW DNODE 1 VARIABLES"
);
}
TEST_F
(
PlanOtherTest
,
delete
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录