Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
05d6ccf4
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
05d6ccf4
编写于
4月 07, 2022
作者:
X
Xiaoyu Wang
提交者:
GitHub
4月 07, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #11293 from taosdata/feature/3.0_wxy
db/table options adjust
上级
fde1bbc0
a7aa8152
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
3040 addition
and
3041 deletion
+3040
-3041
include/common/ttokendef.h
include/common/ttokendef.h
+148
-148
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+22
-26
include/util/taoserror.h
include/util/taoserror.h
+11
-0
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+9
-20
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+55
-40
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+93
-417
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+294
-55
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+22
-0
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+2380
-2335
source/libs/parser/test/parserAstTest.cpp
source/libs/parser/test/parserAstTest.cpp
+6
-0
未找到文件。
include/common/ttokendef.h
浏览文件 @
05d6ccf4
...
...
@@ -69,153 +69,154 @@
#define TK_CACHELAST 51
#define TK_COMP 52
#define TK_DAYS 53
#define TK_FSYNC 54
#define TK_MAXROWS 55
#define TK_MINROWS 56
#define TK_KEEP 57
#define TK_PRECISION 58
#define TK_QUORUM 59
#define TK_REPLICA 60
#define TK_TTL 61
#define TK_WAL 62
#define TK_VGROUPS 63
#define TK_SINGLE_STABLE 64
#define TK_STREAM_MODE 65
#define TK_RETENTIONS 66
#define TK_NK_COMMA 67
#define TK_TABLE 68
#define TK_NK_LP 69
#define TK_NK_RP 70
#define TK_STABLE 71
#define TK_ADD 72
#define TK_COLUMN 73
#define TK_MODIFY 74
#define TK_RENAME 75
#define TK_TAG 76
#define TK_SET 77
#define TK_NK_EQ 78
#define TK_USING 79
#define TK_TAGS 80
#define TK_NK_DOT 81
#define TK_COMMENT 82
#define TK_BOOL 83
#define TK_TINYINT 84
#define TK_SMALLINT 85
#define TK_INT 86
#define TK_INTEGER 87
#define TK_BIGINT 88
#define TK_FLOAT 89
#define TK_DOUBLE 90
#define TK_BINARY 91
#define TK_TIMESTAMP 92
#define TK_NCHAR 93
#define TK_UNSIGNED 94
#define TK_JSON 95
#define TK_VARCHAR 96
#define TK_MEDIUMBLOB 97
#define TK_BLOB 98
#define TK_VARBINARY 99
#define TK_DECIMAL 100
#define TK_SMA 101
#define TK_ROLLUP 102
#define TK_FILE_FACTOR 103
#define TK_NK_FLOAT 104
#define TK_DELAY 105
#define TK_SHOW 106
#define TK_DATABASES 107
#define TK_TABLES 108
#define TK_STABLES 109
#define TK_MNODES 110
#define TK_MODULES 111
#define TK_QNODES 112
#define TK_FUNCTIONS 113
#define TK_INDEXES 114
#define TK_FROM 115
#define TK_ACCOUNTS 116
#define TK_APPS 117
#define TK_CONNECTIONS 118
#define TK_LICENCE 119
#define TK_QUERIES 120
#define TK_SCORES 121
#define TK_TOPICS 122
#define TK_VARIABLES 123
#define TK_LIKE 124
#define TK_INDEX 125
#define TK_FULLTEXT 126
#define TK_FUNCTION 127
#define TK_INTERVAL 128
#define TK_TOPIC 129
#define TK_AS 130
#define TK_DESC 131
#define TK_DESCRIBE 132
#define TK_RESET 133
#define TK_QUERY 134
#define TK_EXPLAIN 135
#define TK_ANALYZE 136
#define TK_VERBOSE 137
#define TK_NK_BOOL 138
#define TK_RATIO 139
#define TK_COMPACT 140
#define TK_VNODES 141
#define TK_IN 142
#define TK_OUTPUTTYPE 143
#define TK_AGGREGATE 144
#define TK_BUFSIZE 145
#define TK_STREAM 146
#define TK_INTO 147
#define TK_KILL 148
#define TK_CONNECTION 149
#define TK_MERGE 150
#define TK_VGROUP 151
#define TK_REDISTRIBUTE 152
#define TK_SPLIT 153
#define TK_SYNCDB 154
#define TK_NULL 155
#define TK_NK_VARIABLE 156
#define TK_NOW 157
#define TK_ROWTS 158
#define TK_TBNAME 159
#define TK_QSTARTTS 160
#define TK_QENDTS 161
#define TK_WSTARTTS 162
#define TK_WENDTS 163
#define TK_WDURATION 164
#define TK_BETWEEN 165
#define TK_IS 166
#define TK_NK_LT 167
#define TK_NK_GT 168
#define TK_NK_LE 169
#define TK_NK_GE 170
#define TK_NK_NE 171
#define TK_MATCH 172
#define TK_NMATCH 173
#define TK_JOIN 174
#define TK_INNER 175
#define TK_SELECT 176
#define TK_DISTINCT 177
#define TK_WHERE 178
#define TK_PARTITION 179
#define TK_BY 180
#define TK_SESSION 181
#define TK_STATE_WINDOW 182
#define TK_SLIDING 183
#define TK_FILL 184
#define TK_VALUE 185
#define TK_NONE 186
#define TK_PREV 187
#define TK_LINEAR 188
#define TK_NEXT 189
#define TK_GROUP 190
#define TK_HAVING 191
#define TK_ORDER 192
#define TK_SLIMIT 193
#define TK_SOFFSET 194
#define TK_LIMIT 195
#define TK_OFFSET 196
#define TK_ASC 197
#define TK_NULLS 198
#define TK_FIRST 199
#define TK_LAST 200
#define TK_NK_VARIABLE 54
#define TK_FSYNC 55
#define TK_MAXROWS 56
#define TK_MINROWS 57
#define TK_KEEP 58
#define TK_PRECISION 59
#define TK_QUORUM 60
#define TK_REPLICA 61
#define TK_TTL 62
#define TK_WAL 63
#define TK_VGROUPS 64
#define TK_SINGLE_STABLE 65
#define TK_STREAM_MODE 66
#define TK_RETENTIONS 67
#define TK_NK_COMMA 68
#define TK_NK_COLON 69
#define TK_TABLE 70
#define TK_NK_LP 71
#define TK_NK_RP 72
#define TK_STABLE 73
#define TK_ADD 74
#define TK_COLUMN 75
#define TK_MODIFY 76
#define TK_RENAME 77
#define TK_TAG 78
#define TK_SET 79
#define TK_NK_EQ 80
#define TK_USING 81
#define TK_TAGS 82
#define TK_NK_DOT 83
#define TK_COMMENT 84
#define TK_BOOL 85
#define TK_TINYINT 86
#define TK_SMALLINT 87
#define TK_INT 88
#define TK_INTEGER 89
#define TK_BIGINT 90
#define TK_FLOAT 91
#define TK_DOUBLE 92
#define TK_BINARY 93
#define TK_TIMESTAMP 94
#define TK_NCHAR 95
#define TK_UNSIGNED 96
#define TK_JSON 97
#define TK_VARCHAR 98
#define TK_MEDIUMBLOB 99
#define TK_BLOB 100
#define TK_VARBINARY 101
#define TK_DECIMAL 102
#define TK_SMA 103
#define TK_ROLLUP 104
#define TK_FILE_FACTOR 105
#define TK_NK_FLOAT 106
#define TK_DELAY 107
#define TK_SHOW 108
#define TK_DATABASES 109
#define TK_TABLES 110
#define TK_STABLES 111
#define TK_MNODES 112
#define TK_MODULES 113
#define TK_QNODES 114
#define TK_FUNCTIONS 115
#define TK_INDEXES 116
#define TK_FROM 117
#define TK_ACCOUNTS 118
#define TK_APPS 119
#define TK_CONNECTIONS 120
#define TK_LICENCE 121
#define TK_QUERIES 122
#define TK_SCORES 123
#define TK_TOPICS 124
#define TK_VARIABLES 125
#define TK_LIKE 126
#define TK_INDEX 127
#define TK_FULLTEXT 128
#define TK_FUNCTION 129
#define TK_INTERVAL 130
#define TK_TOPIC 131
#define TK_AS 132
#define TK_DESC 133
#define TK_DESCRIBE 134
#define TK_RESET 135
#define TK_QUERY 136
#define TK_EXPLAIN 137
#define TK_ANALYZE 138
#define TK_VERBOSE 139
#define TK_NK_BOOL 140
#define TK_RATIO 141
#define TK_COMPACT 142
#define TK_VNODES 143
#define TK_IN 144
#define TK_OUTPUTTYPE 145
#define TK_AGGREGATE 146
#define TK_BUFSIZE 147
#define TK_STREAM 148
#define TK_INTO 149
#define TK_KILL 150
#define TK_CONNECTION 151
#define TK_MERGE 152
#define TK_VGROUP 153
#define TK_REDISTRIBUTE 154
#define TK_SPLIT 155
#define TK_SYNCDB 156
#define TK_NULL 157
#define TK_NOW 158
#define TK_ROWTS 159
#define TK_TBNAME 160
#define TK_QSTARTTS 161
#define TK_QENDTS 162
#define TK_WSTARTTS 163
#define TK_WENDTS 164
#define TK_WDURATION 165
#define TK_BETWEEN 166
#define TK_IS 167
#define TK_NK_LT 168
#define TK_NK_GT 169
#define TK_NK_LE 170
#define TK_NK_GE 171
#define TK_NK_NE 172
#define TK_MATCH 173
#define TK_NMATCH 174
#define TK_JOIN 175
#define TK_INNER 176
#define TK_SELECT 177
#define TK_DISTINCT 178
#define TK_WHERE 179
#define TK_PARTITION 180
#define TK_BY 181
#define TK_SESSION 182
#define TK_STATE_WINDOW 183
#define TK_SLIDING 184
#define TK_FILL 185
#define TK_VALUE 186
#define TK_NONE 187
#define TK_PREV 188
#define TK_LINEAR 189
#define TK_NEXT 190
#define TK_GROUP 191
#define TK_HAVING 192
#define TK_ORDER 193
#define TK_SLIMIT 194
#define TK_SOFFSET 195
#define TK_LIMIT 196
#define TK_OFFSET 197
#define TK_ASC 198
#define TK_NULLS 199
#define TK_FIRST 200
#define TK_LAST 201
#define TK_NK_SPACE 300
#define TK_NK_COMMENT 301
...
...
@@ -226,7 +227,6 @@
#define TK_NK_FILE 306
#define TK_NK_QUESTION 307 // denoting the placeholder of "?",when invoking statement bind query
#define TK_NK_COLON 500
#define TK_NK_BITNOT 501
#define TK_INSERT 502
#define TK_VALUES 507
...
...
include/libs/nodes/cmdnodes.h
浏览文件 @
05d6ccf4
...
...
@@ -30,25 +30,23 @@ extern "C" {
typedef
struct
SDatabaseOptions
{
ENodeType
type
;
int32_t
numOfBlocks
;
int32_t
cacheBlockSize
;
int8_t
cachelast
;
int32_t
compressionLevel
;
int32_t
daysPerFile
;
int32_t
fsyncPeriod
;
int32_t
maxRowsPerBlock
;
int32_t
minRowsPerBlock
;
int32_t
keep0
;
int32_t
keep1
;
int32_t
keep2
;
int32_t
precision
;
int32_t
quorum
;
int32_t
replica
;
int32_t
ttl
;
int32_t
walLevel
;
int32_t
numOfVgroups
;
int8_t
singleStable
;
int8_t
streamMode
;
SValueNode
*
pNumOfBlocks
;
SValueNode
*
pCacheBlockSize
;
SValueNode
*
pCachelast
;
SValueNode
*
pCompressionLevel
;
SValueNode
*
pDaysPerFile
;
SValueNode
*
pFsyncPeriod
;
SValueNode
*
pMaxRowsPerBlock
;
SValueNode
*
pMinRowsPerBlock
;
SNodeList
*
pKeep
;
SValueNode
*
pPrecision
;
SValueNode
*
pQuorum
;
SValueNode
*
pReplica
;
SValueNode
*
pTtl
;
SValueNode
*
pWalLevel
;
SValueNode
*
pNumOfVgroups
;
SValueNode
*
pSingleStable
;
SValueNode
*
pStreamMode
;
SNodeList
*
pRetentions
;
}
SDatabaseOptions
;
...
...
@@ -78,15 +76,13 @@ typedef struct SAlterDatabaseStmt {
typedef
struct
STableOptions
{
ENodeType
type
;
int32_t
keep0
;
int32_t
keep1
;
int32_t
keep2
;
int32_t
ttl
;
char
comments
[
TSDB_STB_COMMENT_LEN
];
SNodeList
*
pKeep
;
SValueNode
*
pTtl
;
SValueNode
*
pComments
;
SNodeList
*
pSma
;
SNodeList
*
pFuncs
;
float
f
ilesFactor
;
int32_t
d
elay
;
SValueNode
*
pF
ilesFactor
;
SValueNode
*
pD
elay
;
}
STableOptions
;
typedef
struct
SColumnDefNode
{
...
...
include/util/taoserror.h
浏览文件 @
05d6ccf4
...
...
@@ -482,6 +482,17 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_DB_NOT_SPECIFIED TAOS_DEF_ERROR_CODE(0, 0x2616)
#define TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME TAOS_DEF_ERROR_CODE(0, 0x2617)
#define TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR TAOS_DEF_ERROR_CODE(0, 0x2618)
#define TSDB_CODE_PAR_INVALID_RANGE_OPTION TAOS_DEF_ERROR_CODE(0, 0x2619)
#define TSDB_CODE_PAR_INVALID_STR_OPTION TAOS_DEF_ERROR_CODE(0, 0x2620)
#define TSDB_CODE_PAR_INVALID_ENUM_OPTION TAOS_DEF_ERROR_CODE(0, 0x2621)
#define TSDB_CODE_PAR_INVALID_TTL_OPTION TAOS_DEF_ERROR_CODE(0, 0x2622)
#define TSDB_CODE_PAR_INVALID_KEEP_NUM TAOS_DEF_ERROR_CODE(0, 0x2623)
#define TSDB_CODE_PAR_INVALID_KEEP_ORDER TAOS_DEF_ERROR_CODE(0, 0x2624)
#define TSDB_CODE_PAR_INVALID_KEEP_VALUE TAOS_DEF_ERROR_CODE(0, 0x2625)
#define TSDB_CODE_PAR_INVALID_COMMENT_OPTION TAOS_DEF_ERROR_CODE(0, 0x2626)
#define TSDB_CODE_PAR_INVALID_F_RANGE_OPTION TAOS_DEF_ERROR_CODE(0, 0x2627)
#define TSDB_CODE_PAR_INVALID_ROLLUP_OPTION TAOS_DEF_ERROR_CODE(0, 0x2628)
#define TSDB_CODE_PAR_INVALID_RETENTIONS_OPTION TAOS_DEF_ERROR_CODE(0, 0x2629)
//planner
#define TSDB_CODE_PLAN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2700)
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
05d6ccf4
...
...
@@ -35,7 +35,7 @@ typedef struct SAstCreateContext {
}
SAstCreateContext
;
typedef
enum
EDatabaseOptionType
{
DB_OPTION_BLOCKS
=
0
,
DB_OPTION_BLOCKS
=
1
,
DB_OPTION_CACHE
,
DB_OPTION_CACHELAST
,
DB_OPTION_COMP
,
...
...
@@ -52,26 +52,22 @@ typedef enum EDatabaseOptionType {
DB_OPTION_VGROUPS
,
DB_OPTION_SINGLE_STABLE
,
DB_OPTION_STREAM_MODE
,
DB_OPTION_RETENTIONS
,
DB_OPTION_MAX
DB_OPTION_RETENTIONS
}
EDatabaseOptionType
;
typedef
enum
ETableOptionType
{
TABLE_OPTION_KEEP
=
0
,
TABLE_OPTION_KEEP
=
1
,
TABLE_OPTION_TTL
,
TABLE_OPTION_COMMENT
,
TABLE_OPTION_SMA
,
TABLE_OPTION_FILE_FACTOR
,
TABLE_OPTION_DELAY
,
TABLE_OPTION_MAX
TABLE_OPTION_DELAY
}
ETableOptionType
;
typedef
struct
SAlterOption
{
int32_t
type
;
S
Token
v
al
;
SNodeList
*
p
Keep
;
S
ValueNode
*
pV
al
;
SNodeList
*
p
List
;
}
SAlterOption
;
extern
SToken
nil_token
;
...
...
@@ -97,6 +93,7 @@ SNode* createBetweenAnd(SAstCreateContext* pCxt, SNode* pExpr, SNode* pLeft, SNo
SNode
*
createNotBetweenAnd
(
SAstCreateContext
*
pCxt
,
SNode
*
pExpr
,
SNode
*
pLeft
,
SNode
*
pRight
);
SNode
*
createFunctionNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pFuncName
,
SNodeList
*
pParameterList
);
SNode
*
createNodeListNode
(
SAstCreateContext
*
pCxt
,
SNodeList
*
pList
);
SNode
*
createNodeListNodeEx
(
SAstCreateContext
*
pCxt
,
SNode
*
p1
,
SNode
*
p2
);
SNode
*
createRealTableNode
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
,
SToken
*
pTableName
,
SToken
*
pTableAlias
);
SNode
*
createTempTableNode
(
SAstCreateContext
*
pCxt
,
SNode
*
pSubquery
,
const
SToken
*
pTableAlias
);
SNode
*
createJoinTableNode
(
SAstCreateContext
*
pCxt
,
EJoinType
type
,
SNode
*
pLeft
,
SNode
*
pRight
,
SNode
*
pJoinCond
);
...
...
@@ -119,20 +116,12 @@ SNode* addLimitClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pLimit);
SNode
*
createSelectStmt
(
SAstCreateContext
*
pCxt
,
bool
isDistinct
,
SNodeList
*
pProjectionList
,
SNode
*
pTable
);
SNode
*
createSetOperator
(
SAstCreateContext
*
pCxt
,
ESetOperatorType
type
,
SNode
*
pLeft
,
SNode
*
pRight
);
SNode
*
createDefaultDatabaseOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
createDefaultAlterDatabaseOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
setDatabaseOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
EDatabaseOptionType
type
,
const
SToken
*
pVal
);
SNode
*
setDatabaseKeepOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pKeep
);
SNode
*
createDatabaseOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
setDatabaseAlterOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SAlterOption
*
pAlterOption
);
SNode
*
createCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreExists
,
SToken
*
pDbName
,
SNode
*
pOptions
);
SNode
*
createDropDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreNotExists
,
SToken
*
pDbName
);
SNode
*
createAlterDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
,
SNode
*
pOptions
);
SNode
*
createDefaultTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
createDefaultAlterTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
setTableOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
ETableOptionType
type
,
const
SToken
*
pVal
);
SNode
*
setTableSmaOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pSma
);
SNode
*
setTableRollupOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pFuncs
);
SNode
*
setTableKeepOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pKeep
);
SNode
*
createTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
setTableAlterOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SAlterOption
*
pAlterOption
);
SNode
*
createColumnDefNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pColName
,
SDataType
dataType
,
const
SToken
*
pComment
);
SDataType
createDataType
(
uint8_t
type
);
...
...
source/libs/parser/inc/sql.y
浏览文件 @
05d6ccf4
...
...
@@ -128,44 +128,59 @@ not_exists_opt(A) ::= .
exists_opt(A) ::= IF EXISTS. { A = true; }
exists_opt(A) ::= . { A = false; }
db_options(A) ::= . { A = createDefaultDatabaseOptions(pCxt); }
db_options(A) ::= db_options(B) BLOCKS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_BLOCKS, &C); }
db_options(A) ::= db_options(B) CACHE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHE, &C); }
db_options(A) ::= db_options(B) CACHELAST NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHELAST, &C); }
db_options(A) ::= db_options(B) COMP NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_COMP, &C); }
db_options(A) ::= db_options(B) DAYS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
db_options(A) ::= db_options(B) FSYNC NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_FSYNC, &C); }
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_MAXROWS, &C); }
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_MINROWS, &C); }
db_options(A) ::= db_options(B) KEEP integer_list(C). { A = setDatabaseKeepOption(pCxt, B, C); }
db_options(A) ::= db_options(B) PRECISION NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
db_options(A) ::= db_options(B) QUORUM NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_QUORUM, &C); }
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
db_options(A) ::= db_options(B) TTL NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_TTL, &C); }
db_options(A) ::= db_options(B) WAL NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL, &C); }
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_VGROUPS, &C); }
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_SINGLE_STABLE, &C); }
db_options(A) ::= db_options(B) STREAM_MODE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_STREAM_MODE, &C); }
db_options(A) ::= db_options(B) RETENTIONS NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, &C); }
alter_db_options(A) ::= alter_db_option(B). { A = createDefaultAlterDatabaseOptions(pCxt); A = setDatabaseAlterOption(pCxt, A, &B); }
db_options(A) ::= . { A = createDatabaseOptions(pCxt); }
db_options(A) ::= db_options(B) BLOCKS NK_INTEGER(C). { ((SDatabaseOptions*)B)->pNumOfBlocks = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) CACHE NK_INTEGER(C). { ((SDatabaseOptions*)B)->pCacheBlockSize = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) CACHELAST NK_INTEGER(C). { ((SDatabaseOptions*)B)->pCachelast = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) COMP NK_INTEGER(C). { ((SDatabaseOptions*)B)->pCompressionLevel = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) DAYS NK_INTEGER(C). { ((SDatabaseOptions*)B)->pDaysPerFile = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) DAYS NK_VARIABLE(C). { ((SDatabaseOptions*)B)->pDaysPerFile = (SValueNode*)createDurationValueNode(pCxt, &C); A = B; }
db_options(A) ::= db_options(B) FSYNC NK_INTEGER(C). { ((SDatabaseOptions*)B)->pFsyncPeriod = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C). { ((SDatabaseOptions*)B)->pMaxRowsPerBlock = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C). { ((SDatabaseOptions*)B)->pMinRowsPerBlock = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) KEEP integer_list(C). { ((SDatabaseOptions*)B)->pKeep = C; A = B; }
db_options(A) ::= db_options(B) KEEP variable_list(C). { ((SDatabaseOptions*)B)->pKeep = C; A = B; }
db_options(A) ::= db_options(B) PRECISION NK_STRING(C). { ((SDatabaseOptions*)B)->pPrecision = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C); A = B; }
db_options(A) ::= db_options(B) QUORUM NK_INTEGER(C). { ((SDatabaseOptions*)B)->pQuorum = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C). { ((SDatabaseOptions*)B)->pReplica = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) TTL NK_INTEGER(C). { ((SDatabaseOptions*)B)->pTtl = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) WAL NK_INTEGER(C). { ((SDatabaseOptions*)B)->pWalLevel = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C). { ((SDatabaseOptions*)B)->pNumOfVgroups = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C). { ((SDatabaseOptions*)B)->pSingleStable = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) STREAM_MODE NK_INTEGER(C). { ((SDatabaseOptions*)B)->pStreamMode = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
db_options(A) ::= db_options(B) RETENTIONS retention_list(C). { ((SDatabaseOptions*)B)->pRetentions = C; A = B; }
alter_db_options(A) ::= alter_db_option(B). { A = createDatabaseOptions(pCxt); A = setDatabaseAlterOption(pCxt, A, &B); }
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C). { A = setDatabaseAlterOption(pCxt, B, &C); }
%type alter_db_option { SAlterOption }
%destructor alter_db_option { }
alter_db_option(A) ::= BLOCKS NK_INTEGER(B). { A.type = DB_OPTION_BLOCKS; A.val = B; }
alter_db_option(A) ::= FSYNC NK_INTEGER(B). { A.type = DB_OPTION_FSYNC; A.val = B; }
alter_db_option(A) ::= KEEP integer_list(B). { A.type = DB_OPTION_KEEP; A.pKeep = B; }
alter_db_option(A) ::= WAL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
alter_db_option(A) ::= QUORUM NK_INTEGER(B). { A.type = DB_OPTION_QUORUM; A.val = B; }
alter_db_option(A) ::= CACHELAST NK_INTEGER(B). { A.type = DB_OPTION_CACHELAST; A.val = B; }
alter_db_option(A) ::= REPLICA NK_INTEGER(B). { A.type = DB_OPTION_REPLICA; A.val = B; }
alter_db_option(A) ::= BLOCKS NK_INTEGER(B). { A.type = DB_OPTION_BLOCKS; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
alter_db_option(A) ::= FSYNC NK_INTEGER(B). { A.type = DB_OPTION_FSYNC; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
alter_db_option(A) ::= KEEP integer_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; }
alter_db_option(A) ::= KEEP variable_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; }
alter_db_option(A) ::= WAL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
alter_db_option(A) ::= QUORUM NK_INTEGER(B). { A.type = DB_OPTION_QUORUM; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
alter_db_option(A) ::= CACHELAST NK_INTEGER(B). { A.type = DB_OPTION_CACHELAST; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
alter_db_option(A) ::= REPLICA NK_INTEGER(B). { A.type = DB_OPTION_REPLICA; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
%type integer_list { SNodeList* }
%destructor integer_list { nodesDestroyList($$); }
integer_list(A) ::= NK_INTEGER(B). { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
integer_list(A) ::= integer_list(B) NK_COMMA NK_INTEGER(C). { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
%type variable_list { SNodeList* }
%destructor variable_list { nodesDestroyList($$); }
variable_list(A) ::= NK_VARIABLE(B). { A = createNodeList(pCxt, createDurationValueNode(pCxt, &B)); }
variable_list(A) ::= variable_list(B) NK_COMMA NK_VARIABLE(C). { A = addNodeToList(pCxt, B, createDurationValueNode(pCxt, &C)); }
%type retention_list { SNodeList* }
%destructor retention_list { nodesDestroyList($$); }
retention_list(A) ::= retention(B). { A = createNodeList(pCxt, B); }
retention_list(A) ::= retention_list(B) NK_COMMA retention(C). { A = addNodeToList(pCxt, B, C); }
retention(A) ::= NK_VARIABLE(B) NK_COLON NK_VARIABLE(C). { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
/************************************************ create/drop table/stable ********************************************/
cmd ::= CREATE TABLE not_exists_opt(A) full_table_name(B)
NK_LP column_def_list(C) NK_RP tags_def_opt(D) table_options(E). { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
...
...
@@ -263,23 +278,23 @@ tags_def_opt(A) ::= tags_def(B).
%destructor tags_def { nodesDestroyList($$); }
tags_def(A) ::= TAGS NK_LP column_def_list(B) NK_RP. { A = B; }
table_options(A) ::= . { A = create
Default
TableOptions(pCxt); }
table_options(A) ::= table_options(B) COMMENT NK_STRING(C). {
A = setTableOption(pCxt, B, TABLE_OPTION_COMMENT, &C)
; }
table_options(A) ::= table_options(B) KEEP integer_list(C). {
A = setTableKeepOption(pCxt, B, C)
; }
table_options(A) ::= table_options(B) TTL NK_INTEGER(C). {
A = setTableOption(pCxt, B, TABLE_OPTION_TTL, &C)
; }
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP. {
A = setTableSmaOption(pCxt, B, C)
; }
table_options(A) ::= table_options(B) ROLLUP NK_LP func_name_list(C) NK_RP. {
A = setTableRollupOption(pCxt, B, C)
; }
table_options(A) ::= table_options(B) FILE_FACTOR NK_FLOAT(C). {
A = setTableOption(pCxt, B, TABLE_OPTION_FILE_FACTOR, &C)
; }
table_options(A) ::= table_options(B) DELAY NK_INTEGER(C). {
A = setTableOption(pCxt, B, TABLE_OPTION_DELAY, &C)
; }
table_options(A) ::= . { A = createTableOptions(pCxt); }
table_options(A) ::= table_options(B) COMMENT NK_STRING(C). {
((STableOptions*)B)->pComments = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C); A = B
; }
table_options(A) ::= table_options(B) KEEP integer_list(C). {
((STableOptions*)B)->pKeep = C; A = B
; }
table_options(A) ::= table_options(B) TTL NK_INTEGER(C). {
((STableOptions*)B)->pTtl = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B
; }
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP. {
((STableOptions*)B)->pSma = C; A = B
; }
table_options(A) ::= table_options(B) ROLLUP NK_LP func_name_list(C) NK_RP. {
((STableOptions*)B)->pFuncs = C; A = B
; }
table_options(A) ::= table_options(B) FILE_FACTOR NK_FLOAT(C). {
((STableOptions*)B)->pFilesFactor = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &C); A = B
; }
table_options(A) ::= table_options(B) DELAY NK_INTEGER(C). {
((STableOptions*)B)->pDelay = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B
; }
alter_table_options(A) ::= alter_table_option(B). { A = create
DefaultAlter
TableOptions(pCxt); A = setTableAlterOption(pCxt, A, &B); }
alter_table_options(A) ::= alter_table_option(B). { A = createTableOptions(pCxt); A = setTableAlterOption(pCxt, A, &B); }
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C). { A = setTableAlterOption(pCxt, B, &C); }
%type alter_table_option { SAlterOption }
%destructor alter_table_option { }
alter_table_option(A) ::= COMMENT NK_STRING(B). { A.type = TABLE_OPTION_COMMENT; A.
val = B
; }
alter_table_option(A) ::= KEEP integer_list(B). { A.type = TABLE_OPTION_KEEP; A.p
Keep
= B; }
alter_table_option(A) ::= TTL NK_INTEGER(B). { A.type = TABLE_OPTION_TTL; A.
val = B
; }
alter_table_option(A) ::= COMMENT NK_STRING(B). { A.type = TABLE_OPTION_COMMENT; A.
pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)
; }
alter_table_option(A) ::= KEEP integer_list(B). { A.type = TABLE_OPTION_KEEP; A.p
List
= B; }
alter_table_option(A) ::= TTL NK_INTEGER(B). { A.type = TABLE_OPTION_TTL; A.
pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)
; }
%type col_name_list { SNodeList* }
%destructor col_name_list { nodesDestroyList($$); }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
05d6ccf4
此差异已折叠。
点击以展开。
source/libs/parser/src/parTranslater.c
浏览文件 @
05d6ccf4
...
...
@@ -21,6 +21,8 @@
#include "parUtil.h"
#include "ttime.h"
#define GET_OPTION_VAL(pVal, defaultVal) (NULL == (pVal) ? (defaultVal) : ((SValueNode*)(pVal))->datum.i)
typedef
struct
STranslateContext
{
SParseContext
*
pParseCxt
;
int32_t
errCode
;
...
...
@@ -934,7 +936,7 @@ static int32_t translateSelect(STranslateContext* pCxt, SSelectStmt* pSelect) {
static
int32_t
buildCreateDbRetentions
(
const
SNodeList
*
pRetentions
,
SCreateDbReq
*
pReq
)
{
if
(
NULL
!=
pRetentions
)
{
pReq
->
pRetensions
=
taosArrayInit
(
LIST_LENGTH
(
pRetentions
)
/
2
,
sizeof
(
SRetention
));
pReq
->
pRetensions
=
taosArrayInit
(
LIST_LENGTH
(
pRetentions
),
sizeof
(
SRetention
));
if
(
NULL
==
pReq
->
pRetensions
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
...
...
@@ -943,18 +945,15 @@ static int32_t buildCreateDbRetentions(const SNodeList* pRetentions, SCreateDbRe
SNode
*
pNode
=
NULL
;
int32_t
index
=
0
;
FOREACH
(
pNode
,
pRetentions
)
{
if
(
0
==
((
index
++
)
&
1
))
{
pFreq
=
(
SValueNode
*
)
pNode
;
}
else
{
pKeep
=
(
SValueNode
*
)
pNode
;
SRetention
retention
=
{
.
freq
=
pFreq
->
datum
.
i
,
.
freqUnit
=
pFreq
->
unit
,
.
keep
=
pKeep
->
datum
.
i
,
.
keepUnit
=
pKeep
->
unit
};
taosArrayPush
(
pReq
->
pRetensions
,
&
retention
);
}
pFreq
=
(
SValueNode
*
)
nodesListGetNode
(((
SNodeListNode
*
)
pNode
)
->
pNodeList
,
0
);
pKeep
=
(
SValueNode
*
)
nodesListGetNode
(((
SNodeListNode
*
)
pNode
)
->
pNodeList
,
1
);
SRetention
retention
=
{
.
freq
=
pFreq
->
datum
.
i
,
.
freqUnit
=
pFreq
->
unit
,
.
keep
=
pKeep
->
datum
.
i
,
.
keepUnit
=
pKeep
->
unit
};
taosArrayPush
(
pReq
->
pRetensions
,
&
retention
);
}
pReq
->
numOfRetensions
=
taosArrayGetSize
(
pReq
->
pRetensions
);
}
...
...
@@ -965,41 +964,220 @@ static int32_t buildCreateDbReq(STranslateContext* pCxt, SCreateDatabaseStmt* pS
SName
name
=
{
0
};
tNameSetDbName
(
&
name
,
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
dbName
,
strlen
(
pStmt
->
dbName
));
tNameGetFullDbName
(
&
name
,
pReq
->
db
);
pReq
->
numOfVgroups
=
pStmt
->
pOptions
->
numOfVgroups
;
pReq
->
cacheBlockSize
=
pStmt
->
pOptions
->
cacheBlockSize
;
pReq
->
totalBlocks
=
pStmt
->
pOptions
->
numOfBlocks
;
pReq
->
daysPerFile
=
pStmt
->
pOptions
->
daysPerFile
;
pReq
->
daysToKeep0
=
pStmt
->
pOptions
->
keep0
;
pReq
->
daysToKeep1
=
pStmt
->
pOptions
->
keep1
;
pReq
->
daysToKeep2
=
pStmt
->
pOptions
->
keep2
;
pReq
->
minRows
=
pStmt
->
pOptions
->
minRowsPerBlock
;
pReq
->
maxRows
=
pStmt
->
pOptions
->
maxRowsPerBlock
;
pReq
->
numOfVgroups
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pNumOfVgroups
,
TSDB_DEFAULT_VN_PER_DB
)
;
pReq
->
cacheBlockSize
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pCacheBlockSize
,
TSDB_DEFAULT_CACHE_BLOCK_SIZE
)
;
pReq
->
totalBlocks
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pNumOfBlocks
,
TSDB_DEFAULT_TOTAL_BLOCKS
)
;
pReq
->
daysPerFile
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pDaysPerFile
,
TSDB_DEFAULT_DAYS_PER_FILE
)
;
pReq
->
daysToKeep0
=
GET_OPTION_VAL
(
nodesListGetNode
(
pStmt
->
pOptions
->
pKeep
,
0
),
TSDB_DEFAULT_KEEP
)
;
pReq
->
daysToKeep1
=
GET_OPTION_VAL
(
nodesListGetNode
(
pStmt
->
pOptions
->
pKeep
,
1
),
TSDB_DEFAULT_KEEP
)
;
pReq
->
daysToKeep2
=
GET_OPTION_VAL
(
nodesListGetNode
(
pStmt
->
pOptions
->
pKeep
,
2
),
TSDB_DEFAULT_KEEP
)
;
pReq
->
minRows
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pMinRowsPerBlock
,
TSDB_DEFAULT_MIN_ROW_FBLOCK
)
;
pReq
->
maxRows
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pMaxRowsPerBlock
,
TSDB_DEFAULT_MAX_ROW_FBLOCK
)
;
pReq
->
commitTime
=
-
1
;
pReq
->
fsyncPeriod
=
pStmt
->
pOptions
->
fsyncPeriod
;
pReq
->
walLevel
=
pStmt
->
pOptions
->
walLevel
;
pReq
->
precision
=
pStmt
->
pOptions
->
precision
;
pReq
->
compression
=
pStmt
->
pOptions
->
compressionLevel
;
pReq
->
replications
=
pStmt
->
pOptions
->
replica
;
pReq
->
quorum
=
pStmt
->
pOptions
->
quorum
;
pReq
->
fsyncPeriod
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pFsyncPeriod
,
TSDB_DEFAULT_FSYNC_PERIOD
)
;
pReq
->
walLevel
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pWalLevel
,
TSDB_DEFAULT_WAL_LEVEL
)
;
pReq
->
precision
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pPrecision
,
TSDB_TIME_PRECISION_MILLI
)
;
pReq
->
compression
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pCompressionLevel
,
TSDB_DEFAULT_COMP_LEVEL
)
;
pReq
->
replications
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pReplica
,
TSDB_DEFAULT_DB_REPLICA_OPTION
)
;
pReq
->
quorum
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pQuorum
,
TSDB_DEFAULT_DB_QUORUM_OPTION
)
;
pReq
->
update
=
-
1
;
pReq
->
cacheLastRow
=
pStmt
->
pOptions
->
cachelast
;
pReq
->
cacheLastRow
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pCachelast
,
TSDB_DEFAULT_CACHE_LAST_ROW
)
;
pReq
->
ignoreExist
=
pStmt
->
ignoreExists
;
pReq
->
streamMode
=
pStmt
->
pOptions
->
streamMode
;
pReq
->
streamMode
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pStreamMode
,
TSDB_DEFAULT_DB_STREAM_MODE_OPTION
)
;
return
buildCreateDbRetentions
(
pStmt
->
pOptions
->
pRetentions
,
pReq
);
}
static
int32_t
checkCreateDatabase
(
STranslateContext
*
pCxt
,
SCreateDatabaseStmt
*
pStmt
)
{
if
(
NULL
!=
pStmt
->
pOptions
->
pRetentions
)
{
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pStmt
->
pOptions
->
pRetentions
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
(
SValueNode
*
)
pNode
))
{
static
int32_t
checkRangeOption
(
STranslateContext
*
pCxt
,
const
char
*
pName
,
SValueNode
*
pVal
,
int32_t
minVal
,
int32_t
maxVal
)
{
if
(
NULL
!=
pVal
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
int64_t
val
=
pVal
->
datum
.
i
;
if
(
val
<
minVal
||
val
>
maxVal
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_RANGE_OPTION
,
pName
,
val
,
minVal
,
maxVal
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
void
convertValueFromStrToInt
(
SValueNode
*
pVal
,
int64_t
val
)
{
taosMemoryFreeClear
(
pVal
->
datum
.
p
);
pVal
->
datum
.
i
=
val
;
pVal
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BIGINT
;
pVal
->
node
.
resType
.
bytes
=
tDataTypes
[
pVal
->
node
.
resType
.
type
].
bytes
;
}
static
int32_t
checkDbPrecisionOption
(
STranslateContext
*
pCxt
,
SValueNode
*
pVal
)
{
if
(
NULL
!=
pVal
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
char
*
pRrecision
=
varDataVal
(
pVal
->
datum
.
p
);
if
(
0
==
strcmp
(
pRrecision
,
TSDB_TIME_PRECISION_MILLI_STR
))
{
convertValueFromStrToInt
(
pVal
,
TSDB_TIME_PRECISION_MILLI
);
}
else
if
(
0
==
strcmp
(
pRrecision
,
TSDB_TIME_PRECISION_MICRO_STR
))
{
convertValueFromStrToInt
(
pVal
,
TSDB_TIME_PRECISION_MICRO
);
}
else
if
(
0
==
strcmp
(
pRrecision
,
TSDB_TIME_PRECISION_NANO_STR
))
{
convertValueFromStrToInt
(
pVal
,
TSDB_TIME_PRECISION_NANO
);
}
else
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_STR_OPTION
,
"precision"
,
pVal
->
datum
.
p
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkDbEnumOption
(
STranslateContext
*
pCxt
,
const
char
*
pName
,
SValueNode
*
pVal
,
int32_t
v1
,
int32_t
v2
)
{
if
(
NULL
!=
pVal
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
int64_t
val
=
pVal
->
datum
.
i
;
if
(
val
!=
v1
&&
val
!=
v2
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_ENUM_OPTION
,
pName
,
val
,
v1
,
v2
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkTtlOption
(
STranslateContext
*
pCxt
,
SValueNode
*
pVal
)
{
if
(
NULL
!=
pVal
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
int64_t
val
=
pVal
->
datum
.
i
;
if
(
val
<
TSDB_MIN_DB_TTL_OPTION
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_TTL_OPTION
,
val
,
TSDB_MIN_DB_TTL_OPTION
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkKeepOption
(
STranslateContext
*
pCxt
,
SNodeList
*
pKeep
)
{
if
(
NULL
==
pKeep
)
{
return
TSDB_CODE_SUCCESS
;
}
int32_t
numOfKeep
=
LIST_LENGTH
(
pKeep
);
if
(
numOfKeep
>
3
||
numOfKeep
<
1
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_KEEP_NUM
);
}
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pKeep
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
(
SValueNode
*
)
pNode
))
{
return
pCxt
->
errCode
;
}
}
if
(
1
==
numOfKeep
)
{
if
(
TSDB_CODE_SUCCESS
!=
nodesListStrictAppend
(
pKeep
,
nodesCloneNode
(
nodesListGetNode
(
pKeep
,
0
))))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
++
numOfKeep
;
}
if
(
2
==
numOfKeep
)
{
if
(
TSDB_CODE_SUCCESS
!=
nodesListStrictAppend
(
pKeep
,
nodesCloneNode
(
nodesListGetNode
(
pKeep
,
1
))))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
int32_t
daysToKeep0
=
((
SValueNode
*
)
nodesListGetNode
(
pKeep
,
0
))
->
datum
.
i
;
int32_t
daysToKeep1
=
((
SValueNode
*
)
nodesListGetNode
(
pKeep
,
1
))
->
datum
.
i
;
int32_t
daysToKeep2
=
((
SValueNode
*
)
nodesListGetNode
(
pKeep
,
2
))
->
datum
.
i
;
if
(
daysToKeep0
<
TSDB_MIN_KEEP
||
daysToKeep1
<
TSDB_MIN_KEEP
||
daysToKeep2
<
TSDB_MIN_KEEP
||
daysToKeep0
>
TSDB_MAX_KEEP
||
daysToKeep1
>
TSDB_MAX_KEEP
||
daysToKeep2
>
TSDB_MAX_KEEP
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_KEEP_VALUE
,
daysToKeep0
,
daysToKeep1
,
daysToKeep2
,
TSDB_MIN_KEEP
,
TSDB_MAX_KEEP
);
}
if
(
!
((
daysToKeep0
<=
daysToKeep1
)
&&
(
daysToKeep1
<=
daysToKeep2
)))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_KEEP_ORDER
);
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkDbRetentionsOption
(
STranslateContext
*
pCxt
,
SNodeList
*
pRetentions
)
{
if
(
NULL
==
pRetentions
)
{
return
TSDB_CODE_SUCCESS
;
}
if
(
LIST_LENGTH
(
pRetentions
)
>
3
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_RETENTIONS_OPTION
);
}
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pRetentions
)
{
SNode
*
pVal
=
NULL
;
FOREACH
(
pVal
,
((
SNodeListNode
*
)
pNode
)
->
pNodeList
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
(
SValueNode
*
)
pVal
))
{
return
pCxt
->
errCode
;
}
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkDatabaseOptions
(
STranslateContext
*
pCxt
,
SDatabaseOptions
*
pOptions
)
{
int32_t
code
=
checkRangeOption
(
pCxt
,
"totalBlocks"
,
pOptions
->
pNumOfBlocks
,
TSDB_MIN_TOTAL_BLOCKS
,
TSDB_MAX_TOTAL_BLOCKS
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"cacheBlockSize"
,
pOptions
->
pCacheBlockSize
,
TSDB_MIN_CACHE_BLOCK_SIZE
,
TSDB_MAX_CACHE_BLOCK_SIZE
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"cacheLast"
,
pOptions
->
pCachelast
,
TSDB_MIN_DB_CACHE_LAST_ROW
,
TSDB_MAX_DB_CACHE_LAST_ROW
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"compression"
,
pOptions
->
pCompressionLevel
,
TSDB_MIN_COMP_LEVEL
,
TSDB_MAX_COMP_LEVEL
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"daysPerFile"
,
pOptions
->
pDaysPerFile
,
TSDB_MIN_DAYS_PER_FILE
,
TSDB_MAX_DAYS_PER_FILE
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"fsyncPeriod"
,
pOptions
->
pFsyncPeriod
,
TSDB_MIN_FSYNC_PERIOD
,
TSDB_MAX_FSYNC_PERIOD
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"maxRowsPerBlock"
,
pOptions
->
pMaxRowsPerBlock
,
TSDB_MIN_MAX_ROW_FBLOCK
,
TSDB_MAX_MAX_ROW_FBLOCK
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"minRowsPerBlock"
,
pOptions
->
pMinRowsPerBlock
,
TSDB_MIN_MIN_ROW_FBLOCK
,
TSDB_MAX_MIN_ROW_FBLOCK
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkKeepOption
(
pCxt
,
pOptions
->
pKeep
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbPrecisionOption
(
pCxt
,
pOptions
->
pPrecision
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"quorum"
,
pOptions
->
pQuorum
,
TSDB_MIN_DB_QUORUM_OPTION
,
TSDB_MAX_DB_QUORUM_OPTION
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbEnumOption
(
pCxt
,
"replications"
,
pOptions
->
pReplica
,
TSDB_MIN_DB_REPLICA_OPTION
,
TSDB_MAX_DB_REPLICA_OPTION
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTtlOption
(
pCxt
,
pOptions
->
pTtl
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbEnumOption
(
pCxt
,
"walLevel"
,
pOptions
->
pWalLevel
,
TSDB_MIN_WAL_LEVEL
,
TSDB_MAX_WAL_LEVEL
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"vgroups"
,
pOptions
->
pNumOfVgroups
,
TSDB_MIN_VNODES_PER_DB
,
TSDB_MAX_VNODES_PER_DB
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbEnumOption
(
pCxt
,
"singleStable"
,
pOptions
->
pSingleStable
,
TSDB_MIN_DB_SINGLE_STABLE_OPTION
,
TSDB_MAX_DB_SINGLE_STABLE_OPTION
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbEnumOption
(
pCxt
,
"streamMode"
,
pOptions
->
pStreamMode
,
TSDB_MIN_DB_STREAM_MODE_OPTION
,
TSDB_MAX_DB_STREAM_MODE_OPTION
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkDbRetentionsOption
(
pCxt
,
pOptions
->
pRetentions
);
}
return
code
;
}
static
int32_t
checkCreateDatabase
(
STranslateContext
*
pCxt
,
SCreateDatabaseStmt
*
pStmt
)
{
return
checkDatabaseOptions
(
pCxt
,
pStmt
->
pOptions
);
}
static
int32_t
translateCreateDatabase
(
STranslateContext
*
pCxt
,
SCreateDatabaseStmt
*
pStmt
)
{
SCreateDbReq
createReq
=
{
0
};
...
...
@@ -1053,19 +1231,24 @@ static void buildAlterDbReq(STranslateContext* pCxt, SAlterDatabaseStmt* pStmt,
SName
name
=
{
0
};
tNameSetDbName
(
&
name
,
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
dbName
,
strlen
(
pStmt
->
dbName
));
tNameGetFullDbName
(
&
name
,
pReq
->
db
);
pReq
->
totalBlocks
=
pStmt
->
pOptions
->
numOfBlocks
;
pReq
->
daysToKeep0
=
pStmt
->
pOptions
->
keep0
;
pReq
->
daysToKeep1
=
pStmt
->
pOptions
->
keep1
;
pReq
->
daysToKeep2
=
pStmt
->
pOptions
->
keep2
;
pReq
->
fsyncPeriod
=
pStmt
->
pOptions
->
fsyncPeriod
;
pReq
->
walLevel
=
pStmt
->
pOptions
->
walLevel
;
pReq
->
quorum
=
pStmt
->
pOptions
->
quorum
;
pReq
->
cacheLastRow
=
pStmt
->
pOptions
->
cachelast
;
pReq
->
replications
=
pStmt
->
pOptions
->
replica
;
pReq
->
totalBlocks
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pNumOfBlocks
,
-
1
)
;
pReq
->
daysToKeep0
=
GET_OPTION_VAL
(
nodesListGetNode
(
pStmt
->
pOptions
->
pKeep
,
0
),
-
1
)
;
pReq
->
daysToKeep1
=
GET_OPTION_VAL
(
nodesListGetNode
(
pStmt
->
pOptions
->
pKeep
,
1
),
-
1
)
;
pReq
->
daysToKeep2
=
GET_OPTION_VAL
(
nodesListGetNode
(
pStmt
->
pOptions
->
pKeep
,
2
),
-
1
)
;
pReq
->
fsyncPeriod
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pFsyncPeriod
,
-
1
)
;
pReq
->
walLevel
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pWalLevel
,
-
1
)
;
pReq
->
quorum
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pQuorum
,
-
1
)
;
pReq
->
cacheLastRow
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pCachelast
,
-
1
)
;
pReq
->
replications
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pReplica
,
-
1
)
;
return
;
}
static
int32_t
translateAlterDatabase
(
STranslateContext
*
pCxt
,
SAlterDatabaseStmt
*
pStmt
)
{
int32_t
code
=
checkDatabaseOptions
(
pCxt
,
pStmt
->
pOptions
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
SAlterDbReq
alterReq
=
{
0
};
buildAlterDbReq
(
pCxt
,
pStmt
,
&
alterReq
);
...
...
@@ -1129,7 +1312,31 @@ static SColumnDefNode* findColDef(SNodeList* pCols, const SColumnNode* pCol) {
return
NULL
;
}
static
int32_t
checkCreateTable
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
static
int32_t
checkTableCommentOption
(
STranslateContext
*
pCxt
,
SValueNode
*
pVal
)
{
if
(
NULL
!=
pVal
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
if
(
pVal
->
node
.
resType
.
bytes
>=
TSDB_STB_COMMENT_LEN
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_COMMENT_OPTION
,
TSDB_STB_COMMENT_LEN
-
1
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checTableFactorOption
(
STranslateContext
*
pCxt
,
SValueNode
*
pVal
)
{
if
(
NULL
!=
pVal
)
{
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
if
(
pVal
->
datum
.
d
<
TSDB_MIN_DB_FILE_FACTOR
||
pVal
->
datum
.
d
>
TSDB_MAX_DB_FILE_FACTOR
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_F_RANGE_OPTION
,
"file_factor"
,
pVal
->
datum
.
d
,
TSDB_MIN_DB_FILE_FACTOR
,
TSDB_MAX_DB_FILE_FACTOR
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkTableSmaOption
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
if
(
NULL
!=
pStmt
->
pOptions
->
pSma
)
{
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pStmt
->
pCols
)
{
...
...
@@ -1145,15 +1352,47 @@ static int32_t checkCreateTable(STranslateContext* pCxt, SCreateTableStmt* pStmt
pColDef
->
sma
=
true
;
}
}
if
(
NULL
!=
pStmt
->
pOptions
->
pFuncs
)
{
SFunctionNode
*
pFunc
=
nodesListGetNode
(
pStmt
->
pOptions
->
pFuncs
,
0
);
if
(
TSDB_CODE_SUCCESS
!=
fmGetFuncInfo
(
pFunc
->
functionName
,
&
pFunc
->
funcId
,
&
pFunc
->
funcType
))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_FUNTION
,
pFunc
->
functionName
);
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkTableRollupOption
(
STranslateContext
*
pCxt
,
SNodeList
*
pFuncs
)
{
if
(
NULL
==
pFuncs
)
{
return
TSDB_CODE_SUCCESS
;
}
if
(
1
!=
LIST_LENGTH
(
pFuncs
))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_ROLLUP_OPTION
);
}
SFunctionNode
*
pFunc
=
nodesListGetNode
(
pFuncs
,
0
);
if
(
TSDB_CODE_SUCCESS
!=
fmGetFuncInfo
(
pFunc
->
functionName
,
&
pFunc
->
funcId
,
&
pFunc
->
funcType
))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_INVALID_FUNTION
,
pFunc
->
functionName
);
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkCreateTable
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
int32_t
code
=
checkKeepOption
(
pCxt
,
pStmt
->
pOptions
->
pKeep
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTtlOption
(
pCxt
,
pStmt
->
pOptions
->
pTtl
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTableCommentOption
(
pCxt
,
pStmt
->
pOptions
->
pComments
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTableSmaOption
(
pCxt
,
pStmt
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTableRollupOption
(
pCxt
,
pStmt
->
pOptions
->
pFuncs
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checTableFactorOption
(
pCxt
,
pStmt
->
pOptions
->
pFilesFactor
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkRangeOption
(
pCxt
,
"delay"
,
pStmt
->
pOptions
->
pDelay
,
TSDB_MIN_DB_DELAY
,
TSDB_MAX_DB_DELAY
);
}
return
code
;
}
static
int32_t
getAggregationMethod
(
SNodeList
*
pFuncs
)
{
if
(
NULL
==
pFuncs
)
{
return
-
1
;
...
...
@@ -1170,8 +1409,8 @@ static int32_t translateCreateSuperTable(STranslateContext* pCxt, SCreateTableSt
SMCreateStbReq
createReq
=
{
0
};
createReq
.
igExists
=
pStmt
->
ignoreExists
;
createReq
.
aggregationMethod
=
getAggregationMethod
(
pStmt
->
pOptions
->
pFuncs
);
createReq
.
xFilesFactor
=
pStmt
->
pOptions
->
filesFactor
;
createReq
.
delay
=
pStmt
->
pOptions
->
delay
;
createReq
.
xFilesFactor
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pFilesFactor
,
TSDB_DEFAULT_DB_FILE_FACTOR
)
;
createReq
.
delay
=
GET_OPTION_VAL
(
pStmt
->
pOptions
->
pDelay
,
TSDB_DEFAULT_DB_DELAY
)
;
columnDefNodeToField
(
pStmt
->
pCols
,
&
createReq
.
pColumns
);
columnDefNodeToField
(
pStmt
->
pTags
,
&
createReq
.
pTags
);
createReq
.
numOfColumns
=
LIST_LENGTH
(
pStmt
->
pCols
);
...
...
@@ -2188,8 +2427,8 @@ static int32_t buildSmaParam(STableOptions* pOptions, SVCreateTbReq* pReq) {
if
(
NULL
==
pReq
->
ntbCfg
.
pRSmaParam
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pReq
->
ntbCfg
.
pRSmaParam
->
delay
=
pOptions
->
delay
;
pReq
->
ntbCfg
.
pRSmaParam
->
xFilesFactor
=
pOptions
->
filesFactor
;
pReq
->
ntbCfg
.
pRSmaParam
->
delay
=
GET_OPTION_VAL
(
pOptions
->
pDelay
,
TSDB_DEFAULT_DB_DELAY
)
;
pReq
->
ntbCfg
.
pRSmaParam
->
xFilesFactor
=
GET_OPTION_VAL
(
pOptions
->
pFilesFactor
,
TSDB_DEFAULT_DB_FILE_FACTOR
)
;
pReq
->
ntbCfg
.
pRSmaParam
->
nFuncIds
=
LIST_LENGTH
(
pOptions
->
pFuncs
);
pReq
->
ntbCfg
.
pRSmaParam
->
pFuncIds
=
taosMemoryCalloc
(
pReq
->
ntbCfg
.
pRSmaParam
->
nFuncIds
,
sizeof
(
func_id_t
));
if
(
NULL
==
pReq
->
ntbCfg
.
pRSmaParam
->
pFuncIds
)
{
...
...
@@ -2439,7 +2678,7 @@ static int32_t buildKVRowForAllTags(STranslateContext* pCxt, SCreateSubTableClau
static
int32_t
checkCreateSubTable
(
STranslateContext
*
pCxt
,
SCreateSubTableClause
*
pStmt
)
{
if
(
0
!=
strcmp
(
pStmt
->
dbName
,
pStmt
->
useDbName
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
);
;
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
);
}
return
TSDB_CODE_SUCCESS
;
}
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
05d6ccf4
...
...
@@ -67,6 +67,28 @@ static char* getSyntaxErrFormat(int32_t errCode) {
return
"Invalid identifier name : %s"
;
case
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
:
return
"corresponding super table not in this db"
;
case
TSDB_CODE_PAR_INVALID_RANGE_OPTION
:
return
"invalid option %s: %"
PRId64
" valid range: [%d, %d]"
;
case
TSDB_CODE_PAR_INVALID_STR_OPTION
:
return
"invalid option %s: %s"
;
case
TSDB_CODE_PAR_INVALID_ENUM_OPTION
:
return
"invalid option %s: %"
PRId64
", only %d, %d allowed"
;
case
TSDB_CODE_PAR_INVALID_TTL_OPTION
:
return
"invalid option ttl: %"
PRId64
", should be greater than or equal to %d"
;
case
TSDB_CODE_PAR_INVALID_KEEP_NUM
:
return
"invalid number of keep options"
;
case
TSDB_CODE_PAR_INVALID_KEEP_ORDER
:
return
"invalid keep value, should be keep0 <= keep1 <= keep2"
;
case
TSDB_CODE_PAR_INVALID_KEEP_VALUE
:
return
"invalid option keep: %d, %d, %d valid range: [%d, %d]"
;
case
TSDB_CODE_PAR_INVALID_COMMENT_OPTION
:
return
"invalid option comment, length cannot exceed %d"
;
case
TSDB_CODE_PAR_INVALID_F_RANGE_OPTION
:
return
"invalid option %s: %f valid range: [%d, %d]"
;
case
TSDB_CODE_PAR_INVALID_ROLLUP_OPTION
:
return
"invalid option rollup: only one function is allowed"
;
case
TSDB_CODE_PAR_INVALID_RETENTIONS_OPTION
:
return
"invalid option retentions"
;
case
TSDB_CODE_OUT_OF_MEMORY
:
return
"Out of memory"
;
default:
...
...
source/libs/parser/src/sql.c
浏览文件 @
05d6ccf4
此差异已折叠。
点击以展开。
source/libs/parser/test/parserAstTest.cpp
浏览文件 @
05d6ccf4
...
...
@@ -446,6 +446,12 @@ TEST_F(ParserTest, createDatabase) {
"RETENTIONS '15s:7d,1m:21d,15m:5y'"
);
ASSERT_TRUE
(
run
());
bind
(
"create database if not exists wxy_db "
"DAYS 100m "
"KEEP 200m,300h,400d "
);
ASSERT_TRUE
(
run
());
}
TEST_F
(
ParserTest
,
alterDatabase
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录