Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d49adcd4
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1192
Star
22018
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看板
提交
d49adcd4
编写于
3月 17, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
TD-13675 rollup, alter db, alter table syntax definition
上级
7eb4153a
变更
8
展开全部
隐藏空白更改
内联
并排
Showing
8 changed file
with
427 addition
and
219 deletion
+427
-219
include/common/tmsg.h
include/common/tmsg.h
+6
-5
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+6
-1
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+1
-0
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+12
-1
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+7
-7
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+28
-5
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+58
-0
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+309
-200
未找到文件。
include/common/tmsg.h
浏览文件 @
d49adcd4
...
...
@@ -111,15 +111,16 @@ typedef enum _mgmt_table {
TSDB_MGMT_TABLE_MAX
,
}
EShowType
;
#define TSDB_ALTER_TABLE_ADD_TAG 1
#define TSDB_ALTER_TABLE_DROP_TAG 2
#define TSDB_ALTER_TABLE_UPDATE_TAG_NAME 3
#define TSDB_ALTER_TABLE_UPDATE_TAG_VAL 4
#define TSDB_ALTER_TABLE_ADD_TAG 1
#define TSDB_ALTER_TABLE_DROP_TAG 2
#define TSDB_ALTER_TABLE_UPDATE_TAG_NAME 3
#define TSDB_ALTER_TABLE_UPDATE_TAG_VAL 4
#define TSDB_ALTER_TABLE_ADD_COLUMN 5
#define TSDB_ALTER_TABLE_DROP_COLUMN 6
#define TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES 7
#define TSDB_ALTER_TABLE_UPDATE_TAG_BYTES 8
#define TSDB_ALTER_TABLE_UPDATE_OPTIONS 9
#define TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME 10
#define TSDB_FILL_NONE 0
#define TSDB_FILL_NULL 1
...
...
include/libs/nodes/cmdnodes.h
浏览文件 @
d49adcd4
...
...
@@ -131,7 +131,12 @@ typedef struct SAlterTableStmt {
ENodeType
type
;
char
dbName
[
TSDB_DB_NAME_LEN
];
char
tableName
[
TSDB_TABLE_NAME_LEN
];
// todo
int8_t
alterType
;
char
colName
[
TSDB_COL_NAME_LEN
];
char
newColName
[
TSDB_COL_NAME_LEN
];
STableOptions
*
pOptions
;
SDataType
dataType
;
SValueNode
*
pVal
;
}
SAlterTableStmt
;
typedef
struct
SCreateUserStmt
{
...
...
include/libs/nodes/nodes.h
浏览文件 @
d49adcd4
...
...
@@ -166,6 +166,7 @@ SNodeList* nodesMakeList();
int32_t
nodesListAppend
(
SNodeList
*
pList
,
SNodeptr
pNode
);
int32_t
nodesListStrictAppend
(
SNodeList
*
pList
,
SNodeptr
pNode
);
int32_t
nodesListAppendList
(
SNodeList
*
pTarget
,
SNodeList
*
pSrc
);
int32_t
nodesListStrictAppendList
(
SNodeList
*
pTarget
,
SNodeList
*
pSrc
);
SListCell
*
nodesListErase
(
SNodeList
*
pList
,
SListCell
*
pCell
);
SNodeptr
nodesListGetNode
(
SNodeList
*
pList
,
int32_t
index
);
void
nodesDestroyList
(
SNodeList
*
pList
);
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
d49adcd4
...
...
@@ -359,6 +359,17 @@ int32_t nodesListAppendList(SNodeList* pTarget, SNodeList* pSrc) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
nodesListStrictAppendList
(
SNodeList
*
pTarget
,
SNodeList
*
pSrc
)
{
if
(
NULL
==
pSrc
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
int32_t
code
=
nodesListAppendList
(
pTarget
,
pSrc
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
nodesDestroyList
(
pSrc
);
}
return
code
;
}
SListCell
*
nodesListErase
(
SNodeList
*
pList
,
SListCell
*
pCell
)
{
if
(
NULL
==
pCell
->
pPrev
)
{
pList
->
pHead
=
pCell
->
pNext
;
...
...
@@ -573,7 +584,7 @@ typedef struct SCollectFuncsCxt {
static
EDealRes
collectFuncs
(
SNode
*
pNode
,
void
*
pContext
)
{
SCollectFuncsCxt
*
pCxt
=
(
SCollectFuncsCxt
*
)
pContext
;
if
(
QUERY_NODE_FUNCTION
==
nodeType
(
pNode
)
&&
pCxt
->
classifier
(((
SFunctionNode
*
)
pNode
)
->
funcId
))
{
pCxt
->
errCode
=
nodesList
Append
(
pCxt
->
pFuncs
,
pNode
);
pCxt
->
errCode
=
nodesList
StrictAppend
(
pCxt
->
pFuncs
,
nodesCloneNode
(
pNode
)
);
return
(
TSDB_CODE_SUCCESS
==
pCxt
->
errCode
?
DEAL_RES_IGNORE_CHILD
:
DEAL_RES_ERROR
);
}
return
DEAL_RES_CONTINUE
;
...
...
source/libs/parser/inc/sql.y
浏览文件 @
d49adcd4
...
...
@@ -181,18 +181,18 @@ cmd ::= ALTER STABLE alter_table_clause(A).
alter_table_clause(A) ::= full_table_name(B) alter_table_options(C). { A = createAlterTableOption(pCxt, B, C); }
alter_table_clause(A) ::=
full_table_name(B) ADD COLUMN column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_COLUMN, &C, D); }
alter_table_clause(A) ::= full_table_name(B) DROP COLUMN column_name(C). { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_
ADD
_COLUMN, &C); }
alter_table_clause(A) ::= full_table_name(B) DROP COLUMN column_name(C). { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_
DROP
_COLUMN, &C); }
alter_table_clause(A) ::=
full_table_name(B) MODIFY COLUMN column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_
ADD_COLUMN
, &C, D); }
full_table_name(B) MODIFY COLUMN column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_
UPDATE_COLUMN_BYTES
, &C, D); }
alter_table_clause(A) ::=
full_table_name(B) RENAME COLUMN column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_
ADD_COLUMN
, &C, &D); }
full_table_name(B) RENAME COLUMN column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_
UPDATE_COLUMN_NAME
, &C, &D); }
alter_table_clause(A) ::=
full_table_name(B) ADD TAG column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_
COLUMN
, &C, D); }
alter_table_clause(A) ::= full_table_name(B) DROP TAG column_name(C). { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_
ADD_COLUMN
, &C); }
full_table_name(B) ADD TAG column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_
TAG
, &C, D); }
alter_table_clause(A) ::= full_table_name(B) DROP TAG column_name(C). { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_
DROP_TAG
, &C); }
alter_table_clause(A) ::=
full_table_name(B) MODIFY TAG column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_
ADD_COLUMN
, &C, D); }
full_table_name(B) MODIFY TAG column_name(C) type_name(D). { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_
UPDATE_TAG_BYTES
, &C, D); }
alter_table_clause(A) ::=
full_table_name(B) RENAME TAG column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_
ADD_COLUMN
, &C, &D); }
full_table_name(B) RENAME TAG column_name(C) column_name(D). { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_
UPDATE_TAG_NAME
, &C, &D); }
alter_table_clause(A) ::=
full_table_name(B) SET TAG column_name(C) NK_EQ literal(D). { A = createAlterTableSetTag(pCxt, B, &C, D); }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
d49adcd4
...
...
@@ -961,23 +961,46 @@ SNode* createDropSuperTableStmt(SAstCreateContext* pCxt, bool ignoreNotExists, S
}
SNode
*
createAlterTableOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
SNode
*
pOptions
)
{
SAlterTableStmt
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_ALTER_TABLE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
alterType
=
TSDB_ALTER_TABLE_UPDATE_OPTIONS
;
pStmt
->
pOptions
=
(
STableOptions
*
)
pOptions
;
return
(
SNode
*
)
pStmt
;
}
SNode
*
createAlterTableAddModifyCol
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
int8_t
alterType
,
const
SToken
*
pColName
,
SDataType
dataType
)
{
SAlterTableStmt
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_ALTER_TABLE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
alterType
=
alterType
;
strncpy
(
pStmt
->
colName
,
pColName
->
z
,
pColName
->
n
);
pStmt
->
dataType
=
dataType
;
return
(
SNode
*
)
pStmt
;
}
SNode
*
createAlterTableDropCol
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
int8_t
alterType
,
const
SToken
*
pColName
)
{
SAlterTableStmt
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_ALTER_TABLE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
alterType
=
alterType
;
strncpy
(
pStmt
->
colName
,
pColName
->
z
,
pColName
->
n
);
return
(
SNode
*
)
pStmt
;
}
SNode
*
createAlterTableRenameCol
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
int8_t
alterType
,
const
SToken
*
pOldColName
,
const
SToken
*
pNewColName
)
{
SAlterTableStmt
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_ALTER_TABLE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
alterType
=
alterType
;
strncpy
(
pStmt
->
colName
,
pOldColName
->
z
,
pOldColName
->
n
);
strncpy
(
pStmt
->
newColName
,
pNewColName
->
z
,
pNewColName
->
n
);
return
(
SNode
*
)
pStmt
;
}
SNode
*
createAlterTableSetTag
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
const
SToken
*
pTagName
,
SNode
*
pVal
)
{
SAlterTableStmt
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_ALTER_TABLE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
alterType
=
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
;
strncpy
(
pStmt
->
colName
,
pTagName
->
z
,
pTagName
->
n
);
pStmt
->
pVal
=
(
SValueNode
*
)
pVal
;
return
(
SNode
*
)
pStmt
;
}
SNode
*
createUseDatabaseStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pDbName
)
{
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
d49adcd4
...
...
@@ -962,8 +962,56 @@ static int32_t translateDropSuperTable(STranslateContext* pCxt, SDropSuperTableS
return
doTranslateDropSuperTable
(
pCxt
,
&
tableName
,
pStmt
->
ignoreNotExists
);
}
static
int32_t
setAlterTableField
(
SAlterTableStmt
*
pStmt
,
SMAltertbReq
*
pAlterReq
)
{
pAlterReq
->
pFields
=
taosArrayInit
(
2
,
sizeof
(
TAOS_FIELD
));
if
(
NULL
==
pAlterReq
->
pFields
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
switch
(
pStmt
->
alterType
)
{
case
TSDB_ALTER_TABLE_ADD_TAG
:
case
TSDB_ALTER_TABLE_DROP_TAG
:
case
TSDB_ALTER_TABLE_ADD_COLUMN
:
case
TSDB_ALTER_TABLE_DROP_COLUMN
:
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
:
case
TSDB_ALTER_TABLE_UPDATE_TAG_BYTES
:
{
TAOS_FIELD
field
=
{
.
type
=
pStmt
->
dataType
.
type
,
.
bytes
=
pStmt
->
dataType
.
bytes
};
strcpy
(
field
.
name
,
pStmt
->
colName
);
taosArrayPush
(
pAlterReq
->
pFields
,
&
field
);
break
;
}
case
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
:
case
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
:
{
TAOS_FIELD
oldField
=
{
0
};
strcpy
(
oldField
.
name
,
pStmt
->
colName
);
taosArrayPush
(
pAlterReq
->
pFields
,
&
oldField
);
TAOS_FIELD
newField
=
{
0
};
strcpy
(
oldField
.
name
,
pStmt
->
newColName
);
taosArrayPush
(
pAlterReq
->
pFields
,
&
newField
);
break
;
}
default:
break
;
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
translateAlterTable
(
STranslateContext
*
pCxt
,
SAlterTableStmt
*
pStmt
)
{
SMAltertbReq
alterReq
=
{
0
};
SName
tableName
=
{
.
type
=
TSDB_TABLE_NAME_T
,
.
acctId
=
pCxt
->
pParseCxt
->
acctId
};
strcpy
(
tableName
.
dbname
,
pStmt
->
dbName
);
strcpy
(
tableName
.
tname
,
pStmt
->
tableName
);
tNameExtractFullName
(
&
tableName
,
alterReq
.
name
);
alterReq
.
alterType
=
pStmt
->
alterType
;
alterReq
.
numOfFields
=
1
;
if
(
TSDB_ALTER_TABLE_UPDATE_OPTIONS
==
pStmt
->
alterType
)
{
// todo
}
else
{
if
(
TSDB_CODE_SUCCESS
!=
setAlterTableField
(
pStmt
,
&
alterReq
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
pCxt
->
pCmdMsg
=
malloc
(
sizeof
(
SCmdMsgInfo
));
if
(
NULL
==
pCxt
->
pCmdMsg
)
{
...
...
@@ -1910,6 +1958,11 @@ static int32_t rewriteCreateMultiTable(STranslateContext* pCxt, SQuery* pQuery)
return
rewriteToVnodeModifOpStmt
(
pQuery
,
pBufArray
);
}
static
int32_t
rewriteAlterTable
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
// todo
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
rewriteQuery
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
switch
(
nodeType
(
pQuery
->
pRoot
))
{
...
...
@@ -1921,6 +1974,11 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
case
QUERY_NODE_CREATE_MULTI_TABLE_STMT
:
code
=
rewriteCreateMultiTable
(
pCxt
,
pQuery
);
break
;
case
QUERY_NODE_ALTER_TABLE_STMT
:
if
(
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
==
((
SAlterTableStmt
*
)
pQuery
->
pRoot
)
->
alterType
)
{
code
=
rewriteAlterTable
(
pCxt
,
pQuery
);
}
break
;
default:
break
;
}
...
...
source/libs/planner/src/planLogicCreater.c
浏览文件 @
d49adcd4
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录