Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e7db8928
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
e7db8928
编写于
9月 01, 2022
作者:
S
Shengliang Guan
提交者:
GitHub
9月 01, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16559 from taosdata/fix/3.0_bugfix_wxy
feat: insert using statement supports ttl and comment
上级
a083c636
7708900f
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
53 addition
and
2 deletion
+53
-2
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+53
-2
未找到文件。
source/libs/parser/src/parInsert.c
浏览文件 @
e7db8928
...
@@ -786,6 +786,7 @@ static void buildCreateTbReq(SVCreateTbReq* pTbReq, const char* tname, STag* pTa
...
@@ -786,6 +786,7 @@ static void buildCreateTbReq(SVCreateTbReq* pTbReq, const char* tname, STag* pTa
if
(
sname
)
pTbReq
->
ctb
.
name
=
strdup
(
sname
);
if
(
sname
)
pTbReq
->
ctb
.
name
=
strdup
(
sname
);
pTbReq
->
ctb
.
pTag
=
(
uint8_t
*
)
pTag
;
pTbReq
->
ctb
.
pTag
=
(
uint8_t
*
)
pTag
;
pTbReq
->
ctb
.
tagName
=
taosArrayDup
(
tagName
);
pTbReq
->
ctb
.
tagName
=
taosArrayDup
(
tagName
);
pTbReq
->
ttl
=
TSDB_DEFAULT_TABLE_TTL
;
pTbReq
->
commentLen
=
-
1
;
pTbReq
->
commentLen
=
-
1
;
return
;
return
;
...
@@ -1121,6 +1122,40 @@ static int32_t ignoreAutoCreateTableClause(SInsertParseContext* pCxt) {
...
@@ -1121,6 +1122,40 @@ static int32_t ignoreAutoCreateTableClause(SInsertParseContext* pCxt) {
return
code
;
return
code
;
}
}
static
int32_t
parseTableOptions
(
SInsertParseContext
*
pCxt
)
{
do
{
int32_t
index
=
0
;
SToken
sToken
;
NEXT_TOKEN_KEEP_SQL
(
pCxt
->
pSql
,
sToken
,
index
);
if
(
TK_TTL
==
sToken
.
type
)
{
pCxt
->
pSql
+=
index
;
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
if
(
TK_NK_INTEGER
!=
sToken
.
type
)
{
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"Invalid option ttl"
,
sToken
.
z
);
}
pCxt
->
createTblReq
.
ttl
=
taosStr2Int32
(
sToken
.
z
,
NULL
,
10
);
}
else
if
(
TK_COMMENT
==
sToken
.
type
)
{
pCxt
->
pSql
+=
index
;
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
if
(
TK_NK_STRING
!=
sToken
.
type
)
{
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"Invalid option comment"
,
sToken
.
z
);
}
if
(
sToken
.
n
>=
TSDB_TB_COMMENT_LEN
)
{
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"comment too long"
,
sToken
.
z
);
}
int32_t
len
=
trimString
(
sToken
.
z
,
sToken
.
n
,
pCxt
->
tmpTokenBuf
,
TSDB_TB_COMMENT_LEN
);
pCxt
->
createTblReq
.
comment
=
strndup
(
pCxt
->
tmpTokenBuf
,
len
);
if
(
NULL
==
pCxt
->
createTblReq
.
comment
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pCxt
->
createTblReq
.
commentLen
=
len
;
}
else
{
break
;
}
}
while
(
1
);
return
TSDB_CODE_SUCCESS
;
}
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
static
int32_t
parseUsingClause
(
SInsertParseContext
*
pCxt
,
int32_t
tbNo
,
SName
*
name
,
char
*
tbFName
)
{
static
int32_t
parseUsingClause
(
SInsertParseContext
*
pCxt
,
int32_t
tbNo
,
SName
*
name
,
char
*
tbFName
)
{
int32_t
len
=
strlen
(
tbFName
);
int32_t
len
=
strlen
(
tbFName
);
...
@@ -1172,7 +1207,7 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, int32_t tbNo, SName*
...
@@ -1172,7 +1207,7 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, int32_t tbNo, SName*
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
") is expected"
,
sToken
.
z
);
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
") is expected"
,
sToken
.
z
);
}
}
return
TSDB_CODE_SUCCESS
;
return
parseTableOptions
(
pCxt
)
;
}
}
static
int
parseOneRow
(
SInsertParseContext
*
pCxt
,
STableDataBlocks
*
pDataBlocks
,
int16_t
timePrec
,
bool
*
gotRow
,
static
int
parseOneRow
(
SInsertParseContext
*
pCxt
,
STableDataBlocks
*
pDataBlocks
,
int16_t
timePrec
,
bool
*
gotRow
,
...
@@ -1700,6 +1735,21 @@ static int32_t skipValuesClause(SInsertParseSyntaxCxt* pCxt) {
...
@@ -1700,6 +1735,21 @@ static int32_t skipValuesClause(SInsertParseSyntaxCxt* pCxt) {
static
int32_t
skipTagsClause
(
SInsertParseSyntaxCxt
*
pCxt
)
{
return
skipParentheses
(
pCxt
);
}
static
int32_t
skipTagsClause
(
SInsertParseSyntaxCxt
*
pCxt
)
{
return
skipParentheses
(
pCxt
);
}
static
int32_t
skipTableOptions
(
SInsertParseSyntaxCxt
*
pCxt
)
{
do
{
int32_t
index
=
0
;
SToken
sToken
;
NEXT_TOKEN_KEEP_SQL
(
pCxt
->
pSql
,
sToken
,
index
);
if
(
TK_TTL
==
sToken
.
type
||
TK_COMMENT
==
sToken
.
type
)
{
pCxt
->
pSql
+=
index
;
NEXT_TOKEN
(
pCxt
->
pSql
,
sToken
);
}
else
{
break
;
}
}
while
(
1
);
return
TSDB_CODE_SUCCESS
;
}
// pSql -> [(tag1_name, ...)] TAGS (tag1_value, ...)
// pSql -> [(tag1_name, ...)] TAGS (tag1_value, ...)
static
int32_t
skipUsingClause
(
SInsertParseSyntaxCxt
*
pCxt
)
{
static
int32_t
skipUsingClause
(
SInsertParseSyntaxCxt
*
pCxt
)
{
SToken
sToken
;
SToken
sToken
;
...
@@ -1718,6 +1768,7 @@ static int32_t skipUsingClause(SInsertParseSyntaxCxt* pCxt) {
...
@@ -1718,6 +1768,7 @@ static int32_t skipUsingClause(SInsertParseSyntaxCxt* pCxt) {
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"( is expected"
,
sToken
.
z
);
return
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"( is expected"
,
sToken
.
z
);
}
}
CHECK_CODE
(
skipTagsClause
(
pCxt
));
CHECK_CODE
(
skipTagsClause
(
pCxt
));
CHECK_CODE
(
skipTableOptions
(
pCxt
));
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录