Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
aafcd688
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看板
未验证
提交
aafcd688
编写于
9月 09, 2022
作者:
H
Hongze Cheng
提交者:
GitHub
9月 09, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16758 from taosdata/fix/stt_trigger_config
refact: stt trigger config
上级
25e463d7
a0ba99e8
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
36 addition
and
33 deletion
+36
-33
include/util/tdef.h
include/util/tdef.h
+2
-2
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+4
-4
source/dnode/mnode/impl/src/mndDb.c
source/dnode/mnode/impl/src/mndDb.c
+1
-1
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+3
-1
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+3
-5
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+8
-8
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
+1
-1
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
+1
-1
source/dnode/vnode/src/vnd/vnodeCfg.c
source/dnode/vnode/src/vnd/vnodeCfg.c
+5
-4
source/dnode/vnode/src/vnd/vnodeOpen.c
source/dnode/vnode/src/vnd/vnodeOpen.c
+2
-0
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+2
-2
source/libs/parser/test/parAlterToBalanceTest.cpp
source/libs/parser/test/parAlterToBalanceTest.cpp
+4
-4
未找到文件。
include/util/tdef.h
浏览文件 @
aafcd688
...
...
@@ -359,8 +359,8 @@ typedef enum ELogicConditionType {
#define TSDB_DB_SCHEMALESS_ON 1
#define TSDB_DB_SCHEMALESS_OFF 0
#define TSDB_DEFAULT_DB_SCHEMALESS TSDB_DB_SCHEMALESS_OFF
#define TSDB_MIN_S
S
T_TRIGGER 1
#define TSDB_MAX_S
ST_TRIGGER 128
#define TSDB_MIN_S
T
T_TRIGGER 1
#define TSDB_MAX_S
TT_TRIGGER 16
#define TSDB_DEFAULT_SST_TRIGGER 8
#define TSDB_MIN_HASH_PREFIX 0
#define TSDB_MAX_HASH_PREFIX 128
...
...
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
浏览文件 @
aafcd688
...
...
@@ -167,7 +167,7 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
pCfg
->
walCfg
.
segSize
=
pCreate
->
walSegmentSize
;
pCfg
->
walCfg
.
level
=
pCreate
->
walLevel
;
pCfg
->
s
s
tTrigger
=
pCreate
->
sstTrigger
;
pCfg
->
s
t
tTrigger
=
pCreate
->
sstTrigger
;
pCfg
->
hashBegin
=
pCreate
->
hashBegin
;
pCfg
->
hashEnd
=
pCreate
->
hashEnd
;
pCfg
->
hashMethod
=
pCreate
->
hashMethod
;
...
...
@@ -223,10 +223,10 @@ int32_t vmProcessCreateVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
}
dInfo
(
"vgId:%d, start to create vnode, tsma:%d standby:%d cacheLast:%d cacheLastSize:%d sstTrigger:%d"
,
createReq
.
vgId
,
createReq
.
isTsma
,
createReq
.
standby
,
createReq
.
cacheLast
,
createReq
.
cacheLastSize
,
createReq
.
sstTrigger
);
createReq
.
vgId
,
createReq
.
isTsma
,
createReq
.
standby
,
createReq
.
cacheLast
,
createReq
.
cacheLastSize
,
createReq
.
sstTrigger
);
dInfo
(
"vgId:%d, hashMethod:%d begin:%u end:%u prefix:%d surfix:%d"
,
createReq
.
vgId
,
createReq
.
hashMethod
,
createReq
.
hashBegin
,
createReq
.
hashEnd
,
createReq
.
hashPrefix
,
createReq
.
hashSuffix
);
createReq
.
hashBegin
,
createReq
.
hashEnd
,
createReq
.
hashPrefix
,
createReq
.
hashSuffix
);
vmGenerateVnodeCfg
(
&
createReq
,
&
vnodeCfg
);
if
(
vmTsmaAdjustDays
(
&
vnodeCfg
,
&
createReq
)
<
0
)
{
...
...
source/dnode/mnode/impl/src/mndDb.c
浏览文件 @
aafcd688
...
...
@@ -338,7 +338,7 @@ static int32_t mndCheckDbCfg(SMnode *pMnode, SDbCfg *pCfg) {
if
(
pCfg
->
walRetentionSize
<
TSDB_DB_MIN_WAL_RETENTION_SIZE
)
return
-
1
;
if
(
pCfg
->
walRollPeriod
<
TSDB_DB_MIN_WAL_ROLL_PERIOD
)
return
-
1
;
if
(
pCfg
->
walSegmentSize
<
TSDB_DB_MIN_WAL_SEGMENT_SIZE
)
return
-
1
;
if
(
pCfg
->
sstTrigger
<
TSDB_MIN_S
ST_TRIGGER
||
pCfg
->
sstTrigger
>
TSDB_MAX_SS
T_TRIGGER
)
return
-
1
;
if
(
pCfg
->
sstTrigger
<
TSDB_MIN_S
TT_TRIGGER
||
pCfg
->
sstTrigger
>
TSDB_MAX_ST
T_TRIGGER
)
return
-
1
;
if
(
pCfg
->
hashPrefix
<
TSDB_MIN_HASH_PREFIX
||
pCfg
->
hashPrefix
>
TSDB_MAX_HASH_PREFIX
)
return
-
1
;
if
(
pCfg
->
hashSuffix
<
TSDB_MIN_HASH_SUFFIX
||
pCfg
->
hashSuffix
>
TSDB_MAX_HASH_SUFFIX
)
return
-
1
;
...
...
source/dnode/vnode/inc/vnode.h
浏览文件 @
aafcd688
...
...
@@ -125,6 +125,8 @@ int32_t metaTbCursorNext(SMTbCursor *pTbCur);
// typedef struct STsdb STsdb;
typedef
struct
STsdbReader
STsdbReader
;
#define TSDB_DEFAULT_STT_FILE 8
#define TIMEWINDOW_RANGE_CONTAINED 1
#define TIMEWINDOW_RANGE_EXTERNAL 2
...
...
@@ -288,7 +290,7 @@ struct SVnodeCfg {
SVnodeStats
vndStats
;
uint32_t
hashBegin
;
uint32_t
hashEnd
;
int16_t
s
s
tTrigger
;
int16_t
s
t
tTrigger
;
int16_t
hashPrefix
;
int16_t
hashSuffix
;
};
...
...
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
aafcd688
...
...
@@ -69,8 +69,6 @@ typedef struct SLDataIter SLDataIter;
#define TSDB_FILE_DLMT ((uint32_t)0xF00AFA0F)
#define TSDB_MAX_SUBBLOCKS 8
#define TSDB_MAX_STT_FILE 16
#define TSDB_DEFAULT_STT_FILE 8
#define TSDB_FHDR_SIZE 512
#define TSDB_DEFAULT_PAGE_SIZE 4096
...
...
@@ -574,7 +572,7 @@ struct SDFileSet {
SDataFile
*
pDataF
;
SSmaFile
*
pSmaF
;
uint8_t
nSttF
;
SSttFile
*
aSttF
[
TSDB_MAX_STT_
FILE
];
SSttFile
*
aSttF
[
TSDB_MAX_STT_
TRIGGER
];
};
struct
SRowIter
{
...
...
@@ -624,7 +622,7 @@ struct SDataFWriter {
SHeadFile
fHead
;
SDataFile
fData
;
SSmaFile
fSma
;
SSttFile
fStt
[
TSDB_MAX_STT_
FILE
];
SSttFile
fStt
[
TSDB_MAX_STT_
TRIGGER
];
uint8_t
*
aBuf
[
4
];
};
...
...
@@ -635,7 +633,7 @@ struct SDataFReader {
STsdbFD
*
pHeadFD
;
STsdbFD
*
pDataFD
;
STsdbFD
*
pSmaFD
;
STsdbFD
*
aSttFD
[
TSDB_MAX_STT_
FILE
];
STsdbFD
*
aSttFD
[
TSDB_MAX_STT_
TRIGGER
];
uint8_t
*
aBuf
[
3
];
};
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
aafcd688
...
...
@@ -45,7 +45,7 @@ typedef struct {
int32_t
minRow
;
int32_t
maxRow
;
int8_t
cmprAlg
;
int8_t
maxLast
;
int8_t
sttTrigger
;
SArray
*
aTbDataP
;
// memory
STsdbFS
fs
;
// disk
// --------------
...
...
@@ -66,7 +66,7 @@ typedef struct {
SDataIter
*
pIter
;
SRBTree
rbt
;
SDataIter
dataIter
;
SDataIter
aDataIter
[
TSDB_MAX_STT_
FILE
];
SDataIter
aDataIter
[
TSDB_MAX_STT_
TRIGGER
];
int8_t
toLastOnly
;
};
struct
{
...
...
@@ -423,7 +423,7 @@ static int32_t tsdbOpenCommitIter(SCommitter *pCommitter) {
pCommitter
->
toLastOnly
=
0
;
SDataFReader
*
pReader
=
pCommitter
->
dReader
.
pReader
;
if
(
pReader
)
{
if
(
pReader
->
pSet
->
nSttF
>=
pCommitter
->
maxLast
)
{
if
(
pReader
->
pSet
->
nSttF
>=
pCommitter
->
sttTrigger
)
{
int8_t
iIter
=
0
;
for
(
int32_t
iStt
=
0
;
iStt
<
pReader
->
pSet
->
nSttF
;
iStt
++
)
{
pIter
=
&
pCommitter
->
aDataIter
[
iIter
];
...
...
@@ -510,11 +510,11 @@ static int32_t tsdbCommitFileDataStart(SCommitter *pCommitter) {
SSttFile
fStt
=
{.
commitID
=
pCommitter
->
commitID
};
SDFileSet
wSet
=
{.
fid
=
pCommitter
->
commitFid
,
.
pHeadF
=
&
fHead
,
.
pDataF
=
&
fData
,
.
pSmaF
=
&
fSma
};
if
(
pRSet
)
{
ASSERT
(
pRSet
->
nSttF
<=
pCommitter
->
maxLast
);
ASSERT
(
pRSet
->
nSttF
<=
pCommitter
->
sttTrigger
);
fData
=
*
pRSet
->
pDataF
;
fSma
=
*
pRSet
->
pSmaF
;
wSet
.
diskId
=
pRSet
->
diskId
;
if
(
pRSet
->
nSttF
<
pCommitter
->
maxLast
)
{
if
(
pRSet
->
nSttF
<
pCommitter
->
sttTrigger
)
{
for
(
int32_t
iStt
=
0
;
iStt
<
pRSet
->
nSttF
;
iStt
++
)
{
wSet
.
aSttF
[
iStt
]
=
pRSet
->
aSttF
[
iStt
];
}
...
...
@@ -750,7 +750,7 @@ static int32_t tsdbStartCommit(STsdb *pTsdb, SCommitter *pCommitter) {
pCommitter
->
minRow
=
pTsdb
->
pVnode
->
config
.
tsdbCfg
.
minRows
;
pCommitter
->
maxRow
=
pTsdb
->
pVnode
->
config
.
tsdbCfg
.
maxRows
;
pCommitter
->
cmprAlg
=
pTsdb
->
pVnode
->
config
.
tsdbCfg
.
compression
;
pCommitter
->
maxLast
=
TSDB_DEFAULT_STT_FILE
;
// TODO: make it as a config
pCommitter
->
sttTrigger
=
pTsdb
->
pVnode
->
config
.
sttTrigger
;
pCommitter
->
aTbDataP
=
tsdbMemTableGetTbDataArray
(
pTsdb
->
imem
);
if
(
pCommitter
->
aTbDataP
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -780,7 +780,7 @@ static int32_t tsdbCommitDataStart(SCommitter *pCommitter) {
if
(
code
)
goto
_exit
;
// merger
for
(
int32_t
iStt
=
0
;
iStt
<
TSDB_MAX_STT_
FILE
;
iStt
++
)
{
for
(
int32_t
iStt
=
0
;
iStt
<
TSDB_MAX_STT_
TRIGGER
;
iStt
++
)
{
SDataIter
*
pIter
=
&
pCommitter
->
aDataIter
[
iStt
];
pIter
->
aSttBlk
=
taosArrayInit
(
0
,
sizeof
(
SSttBlk
));
if
(
pIter
->
aSttBlk
==
NULL
)
{
...
...
@@ -822,7 +822,7 @@ static void tsdbCommitDataEnd(SCommitter *pCommitter) {
tBlockDataDestroy
(
&
pCommitter
->
dReader
.
bData
,
1
);
// merger
for
(
int32_t
iStt
=
0
;
iStt
<
TSDB_MAX_STT_
FILE
;
iStt
++
)
{
for
(
int32_t
iStt
=
0
;
iStt
<
TSDB_MAX_STT_
TRIGGER
;
iStt
++
)
{
SDataIter
*
pIter
=
&
pCommitter
->
aDataIter
[
iStt
];
taosArrayDestroy
(
pIter
->
aSttBlk
);
tBlockDataDestroy
(
&
pIter
->
bData
,
1
);
...
...
source/dnode/vnode/src/tsdb/tsdbReaderWriter.c
浏览文件 @
aafcd688
...
...
@@ -780,7 +780,7 @@ int32_t tsdbDataFReaderClose(SDataFReader **ppReader) {
tsdbCloseFile
(
&
(
*
ppReader
)
->
pSmaFD
);
// stt
for
(
int32_t
iStt
=
0
;
iStt
<
TSDB_MAX_STT_
FILE
;
iStt
++
)
{
for
(
int32_t
iStt
=
0
;
iStt
<
TSDB_MAX_STT_
TRIGGER
;
iStt
++
)
{
if
((
*
ppReader
)
->
aSttFD
[
iStt
])
{
tsdbCloseFile
(
&
(
*
ppReader
)
->
aSttFD
[
iStt
]);
}
...
...
source/dnode/vnode/src/tsdb/tsdbSnapshot.c
浏览文件 @
aafcd688
...
...
@@ -51,7 +51,7 @@ struct STsdbSnapReader {
SDataFReader
*
pDataFReader
;
SFDataIter
*
pIter
;
SRBTree
rbt
;
SFDataIter
aFDataIter
[
TSDB_MAX_STT_
FILE
+
1
];
SFDataIter
aFDataIter
[
TSDB_MAX_STT_
TRIGGER
+
1
];
SBlockData
bData
;
SSkmInfo
skmTable
;
// for del file
...
...
source/dnode/vnode/src/vnd/vnodeCfg.c
浏览文件 @
aafcd688
...
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "vnd.h"
#include "tutil.h"
#include "vnd.h"
const
SVnodeCfg
vnodeCfgDefault
=
{.
vgId
=
-
1
,
.
dbname
=
""
,
...
...
@@ -48,7 +48,8 @@ const SVnodeCfg vnodeCfgDefault = {.vgId = -1,
},
.
hashBegin
=
0
,
.
hashEnd
=
0
,
.
hashMethod
=
0
};
.
hashMethod
=
0
,
.
sttTrigger
=
TSDB_DEFAULT_STT_FILE
};
int
vnodeCheckCfg
(
const
SVnodeCfg
*
pCfg
)
{
// TODO
...
...
@@ -107,7 +108,7 @@ int vnodeEncodeConfig(const void *pObj, SJson *pJson) {
if
(
tjsonAddIntegerToObject
(
pJson
,
"wal.retentionSize"
,
pCfg
->
walCfg
.
retentionSize
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"wal.segSize"
,
pCfg
->
walCfg
.
segSize
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"wal.level"
,
pCfg
->
walCfg
.
level
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"sstTrigger"
,
pCfg
->
s
s
tTrigger
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"sstTrigger"
,
pCfg
->
s
t
tTrigger
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"hashBegin"
,
pCfg
->
hashBegin
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"hashEnd"
,
pCfg
->
hashEnd
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"hashMethod"
,
pCfg
->
hashMethod
)
<
0
)
return
-
1
;
...
...
@@ -209,7 +210,7 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) {
if
(
code
<
0
)
return
-
1
;
tjsonGetNumberValue
(
pJson
,
"wal.level"
,
pCfg
->
walCfg
.
level
,
code
);
if
(
code
<
0
)
return
-
1
;
tjsonGetNumberValue
(
pJson
,
"sstTrigger"
,
pCfg
->
s
s
tTrigger
,
code
);
tjsonGetNumberValue
(
pJson
,
"sstTrigger"
,
pCfg
->
s
t
tTrigger
,
code
);
if
(
code
<
0
)
return
-
1
;
tjsonGetNumberValue
(
pJson
,
"hashBegin"
,
pCfg
->
hashBegin
,
code
);
if
(
code
<
0
)
return
-
1
;
...
...
source/dnode/vnode/src/vnd/vnodeOpen.c
浏览文件 @
aafcd688
...
...
@@ -60,6 +60,8 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
snprintf
(
dir
,
TSDB_FILENAME_LEN
,
"%s%s%s"
,
tfsGetPrimaryPath
(
pTfs
),
TD_DIRSEP
,
path
);
info
.
config
=
vnodeCfgDefault
;
// load vnode info
ret
=
vnodeLoadInfo
(
dir
,
&
info
);
if
(
ret
<
0
)
{
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
aafcd688
...
...
@@ -3770,7 +3770,7 @@ static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName
checkDbRangeOption
(
pCxt
,
"walSegmentSize"
,
pOptions
->
walSegmentSize
,
TSDB_DB_MIN_WAL_SEGMENT_SIZE
,
INT32_MAX
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbRangeOption
(
pCxt
,
"sstTrigger"
,
pOptions
->
sstTrigger
,
TSDB_MIN_S
ST_TRIGGER
,
TSDB_MAX_SS
T_TRIGGER
);
code
=
checkDbRangeOption
(
pCxt
,
"sstTrigger"
,
pOptions
->
sstTrigger
,
TSDB_MIN_S
TT_TRIGGER
,
TSDB_MAX_ST
T_TRIGGER
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbRangeOption
(
pCxt
,
"tablePrefix"
,
pOptions
->
tablePrefix
,
TSDB_MIN_HASH_PREFIX
,
TSDB_MAX_HASH_PREFIX
);
...
...
@@ -6606,7 +6606,7 @@ static int32_t buildUpdateTagValReq(STranslateContext* pCxt, SAlterTableStmt* pS
SDataType
targetDt
=
schemaToDataType
(
pTableMeta
->
tableInfo
.
precision
,
pSchema
);
if
(
QUERY_NODE_VALUE
!=
pStmt
->
pVal
->
node
.
type
)
{
SValueNode
*
pVal
=
NULL
;
SValueNode
*
pVal
=
NULL
;
pCxt
->
errCode
=
createTagValFromExpr
(
pCxt
,
targetDt
,
(
SNode
*
)
pStmt
->
pVal
,
&
pVal
);
if
(
pCxt
->
errCode
)
{
return
pCxt
->
errCode
;
...
...
source/libs/parser/test/parAlterToBalanceTest.cpp
浏览文件 @
aafcd688
...
...
@@ -88,7 +88,7 @@ TEST_F(ParserInitialATest, alterDnode) {
* | REPLICA int_value -- todo: enum 1, 3, default 1, unit replica
* | STRICT {'off' | 'on'} -- todo: default 'off'
* | WAL_LEVEL int_value -- enum 1, 2, default 1
* | SST_TRIGGER int_value -- rang [1, 1
28
], default 8
* | SST_TRIGGER int_value -- rang [1, 1
6
], default 8
* }
*/
TEST_F
(
ParserInitialATest
,
alterDatabase
)
{
...
...
@@ -161,8 +161,8 @@ TEST_F(ParserInitialATest, alterDatabase) {
setAlterDbFsync
(
200
);
setAlterDbWal
(
1
);
setAlterDbCacheModel
(
TSDB_CACHE_MODEL_LAST_ROW
);
setAlterDbSstTrigger
(
20
);
run
(
"ALTER DATABASE test CACHEMODEL 'last_row' CACHESIZE 32 WAL_FSYNC_PERIOD 200 KEEP 10 WAL_LEVEL 1 SST_TRIGGER
20
"
);
setAlterDbSstTrigger
(
16
);
run
(
"ALTER DATABASE test CACHEMODEL 'last_row' CACHESIZE 32 WAL_FSYNC_PERIOD 200 KEEP 10 WAL_LEVEL 1 SST_TRIGGER
16
"
);
clearAlterDbReq
();
initAlterDb
(
"test"
);
...
...
@@ -237,7 +237,7 @@ TEST_F(ParserInitialATest, alterDatabaseSemanticCheck) {
run
(
"ALTER DATABASE test WAL_LEVEL 0"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test WAL_LEVEL 3"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test SST_TRIGGER 0"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test SST_TRIGGER 1
29
"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test SST_TRIGGER 1
7
"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
// Regardless of the specific sentence
run
(
"ALTER DATABASE db WAL_LEVEL 0 # td-14436"
,
TSDB_CODE_PAR_SYNTAX_ERROR
,
PARSER_STAGE_PARSE
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录