Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
9abea767
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
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看板
提交
9abea767
编写于
10月 17, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: do coverity scan
上级
4223b43a
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
165 addition
and
108 deletion
+165
-108
include/libs/nodes/plannodes.h
include/libs/nodes/plannodes.h
+1
-1
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+1
-1
source/libs/command/src/command.c
source/libs/command/src/command.c
+101
-43
source/libs/executor/src/dataDispatcher.c
source/libs/executor/src/dataDispatcher.c
+2
-0
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+35
-48
source/libs/parser/src/parInsertData.c
source/libs/parser/src/parInsertData.c
+2
-2
source/libs/parser/src/parTokenizer.c
source/libs/parser/src/parTokenizer.c
+2
-0
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+14
-9
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+1
-1
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+2
-1
source/libs/planner/src/planSpliter.c
source/libs/planner/src/planSpliter.c
+4
-2
未找到文件。
include/libs/nodes/plannodes.h
浏览文件 @
9abea767
...
...
@@ -525,7 +525,7 @@ typedef struct SDataInserterNode {
SDataSinkNode
sink
;
int32_t
numOfTables
;
uint32_t
size
;
char
*
pData
;
void
*
pData
;
}
SDataInserterNode
;
typedef
struct
SQueryInserterNode
{
...
...
include/libs/nodes/querynodes.h
浏览文件 @
9abea767
...
...
@@ -356,7 +356,7 @@ typedef struct SVgDataBlocks {
SVgroupInfo
vg
;
int32_t
numOfTables
;
// number of tables in current submit block
uint32_t
size
;
char
*
pData
;
// SMsgDesc + SSubmitReq + SSubmitBlk + ...
void
*
pData
;
// SMsgDesc + SSubmitReq + SSubmitBlk + ...
}
SVgDataBlocks
;
typedef
struct
SVnodeModifOpStmt
{
...
...
source/libs/command/src/command.c
浏览文件 @
9abea767
...
...
@@ -43,7 +43,6 @@ static int32_t buildRetrieveTableRsp(SSDataBlock* pBlock, int32_t numOfCols, SRe
blockEncode
(
pBlock
,
(
*
pRsp
)
->
data
,
&
len
,
numOfCols
,
false
);
ASSERT
(
len
==
rspSize
-
sizeof
(
SRetrieveTableRsp
));
blockDataDestroy
(
pBlock
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -59,21 +58,33 @@ static int32_t getSchemaBytes(const SSchema* pSchema) {
}
}
static
SSDataBlock
*
buildDescResultDataBlock
(
)
{
static
int32_t
buildDescResultDataBlock
(
SSDataBlock
**
pOutput
)
{
SSDataBlock
*
pBlock
=
createDataBlock
();
if
(
NULL
==
pBlock
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
SColumnInfoData
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
DESCRIBE_RESULT_FIELD_LEN
,
1
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
DESCRIBE_RESULT_TYPE_LEN
,
2
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_INT
,
tDataTypes
[
TSDB_DATA_TYPE_INT
].
bytes
,
3
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
int32_t
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
DESCRIBE_RESULT_TYPE_LEN
,
2
);
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_INT
,
tDataTypes
[
TSDB_DATA_TYPE_INT
].
bytes
,
3
);
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
DESCRIBE_RESULT_NOTE_LEN
,
4
);
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
}
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
DESCRIBE_RESULT_NOTE_LEN
,
4
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
return
pBlock
;
if
(
TSDB_CODE_SUCCESS
==
code
)
{
*
pOutput
=
pBlock
;
}
else
{
blockDataDestroy
(
pBlock
);
}
return
code
;
}
static
void
setDescResultIntoDataBlock
(
bool
sysInfoUser
,
SSDataBlock
*
pBlock
,
int32_t
numOfRows
,
STableMeta
*
pMeta
)
{
...
...
@@ -109,22 +120,39 @@ static int32_t execDescribe(bool sysInfoUser, SNode* pStmt, SRetrieveTableRsp**
SDescribeStmt
*
pDesc
=
(
SDescribeStmt
*
)
pStmt
;
int32_t
numOfRows
=
TABLE_TOTAL_COL_NUM
(
pDesc
->
pMeta
);
SSDataBlock
*
pBlock
=
buildDescResultDataBlock
();
setDescResultIntoDataBlock
(
sysInfoUser
,
pBlock
,
numOfRows
,
pDesc
->
pMeta
);
return
buildRetrieveTableRsp
(
pBlock
,
DESCRIBE_RESULT_COLS
,
pRsp
);
SSDataBlock
*
pBlock
=
NULL
;
int32_t
code
=
buildDescResultDataBlock
(
&
pBlock
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
setDescResultIntoDataBlock
(
sysInfoUser
,
pBlock
,
numOfRows
,
pDesc
->
pMeta
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildRetrieveTableRsp
(
pBlock
,
DESCRIBE_RESULT_COLS
,
pRsp
);
}
blockDataDestroy
(
pBlock
);
return
code
;
}
static
int32_t
execResetQueryCache
()
{
return
catalogClearCache
();
}
static
SSDataBlock
*
buildCreateDBResultDataBlock
()
{
SSDataBlock
*
pBlock
=
createDataBlock
();
static
int32_t
buildCreateDBResultDataBlock
(
SSDataBlock
**
pOutput
)
{
SSDataBlock
*
pBlock
=
createDataBlock
();
if
(
NULL
==
pBlock
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
SColumnInfoData
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
SHOW_CREATE_DB_RESULT_COLS
,
1
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
int32_t
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
SHOW_CREATE_DB_RESULT_FIELD2_LEN
,
2
);
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
}
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
SHOW_CREATE_DB_RESULT_FIELD2_LEN
,
2
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
return
pBlock
;
if
(
TSDB_CODE_SUCCESS
==
code
)
{
*
pOutput
=
pBlock
;
}
else
{
blockDataDestroy
(
pBlock
);
}
return
code
;
}
int64_t
getValOfDiffPrecision
(
int8_t
unit
,
int64_t
val
)
{
...
...
@@ -259,21 +287,37 @@ static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbFName, S
}
static
int32_t
execShowCreateDatabase
(
SShowCreateDatabaseStmt
*
pStmt
,
SRetrieveTableRsp
**
pRsp
)
{
SSDataBlock
*
pBlock
=
buildCreateDBResultDataBlock
();
setCreateDBResultIntoDataBlock
(
pBlock
,
pStmt
->
dbName
,
pStmt
->
pCfg
);
return
buildRetrieveTableRsp
(
pBlock
,
SHOW_CREATE_DB_RESULT_COLS
,
pRsp
);
SSDataBlock
*
pBlock
=
NULL
;
int32_t
code
=
buildCreateDBResultDataBlock
(
&
pBlock
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
setCreateDBResultIntoDataBlock
(
pBlock
,
pStmt
->
dbName
,
pStmt
->
pCfg
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildRetrieveTableRsp
(
pBlock
,
SHOW_CREATE_DB_RESULT_COLS
,
pRsp
);
}
blockDataDestroy
(
pBlock
);
return
code
;
}
static
SSDataBlock
*
buildCreateTbResultDataBlock
(
)
{
static
int32_t
buildCreateTbResultDataBlock
(
SSDataBlock
**
pOutput
)
{
SSDataBlock
*
pBlock
=
createDataBlock
();
if
(
NULL
==
pBlock
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
SColumnInfoData
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
SHOW_CREATE_TB_RESULT_FIELD1_LEN
,
1
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
SHOW_CREATE_TB_RESULT_FIELD2_LEN
,
2
);
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
int32_t
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
infoData
=
createColumnInfoData
(
TSDB_DATA_TYPE_VARCHAR
,
SHOW_CREATE_TB_RESULT_FIELD2_LEN
,
2
);
code
=
blockDataAppendColInfo
(
pBlock
,
&
infoData
);
}
return
pBlock
;
if
(
TSDB_CODE_SUCCESS
==
code
)
{
*
pOutput
=
pBlock
;
}
else
{
blockDataDestroy
(
pBlock
);
}
return
code
;
}
void
appendColumnFields
(
char
*
buf
,
int32_t
*
len
,
STableCfg
*
pCfg
)
{
...
...
@@ -482,12 +526,16 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p
}
static
int32_t
execShowCreateTable
(
SShowCreateTableStmt
*
pStmt
,
SRetrieveTableRsp
**
pRsp
)
{
SSDataBlock
*
pBlock
=
buildCreateTbResultDataBlock
()
;
int32_t
code
=
setCreateTBResultIntoDataBlock
(
pBlock
,
pStmt
->
pDbCfg
,
pStmt
->
tableName
,
pStmt
->
pTableCfg
);
if
(
code
)
{
return
code
;
SSDataBlock
*
pBlock
=
NULL
;
int32_t
code
=
buildCreateTbResultDataBlock
(
&
pBlock
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
setCreateTBResultIntoDataBlock
(
pBlock
,
pStmt
->
pDbCfg
,
pStmt
->
tableName
,
pStmt
->
pTableCfg
)
;
}
return
buildRetrieveTableRsp
(
pBlock
,
SHOW_CREATE_TB_RESULT_COLS
,
pRsp
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildRetrieveTableRsp
(
pBlock
,
SHOW_CREATE_TB_RESULT_COLS
,
pRsp
);
}
blockDataDestroy
(
pBlock
);
return
code
;
}
static
int32_t
execShowCreateSTable
(
SShowCreateTableStmt
*
pStmt
,
SRetrieveTableRsp
**
pRsp
)
{
...
...
@@ -556,8 +604,12 @@ _return:
return
TSDB_CODE_SUCCESS
;
}
static
SSDataBlock
*
buildLocalVariablesResultDataBlock
(
)
{
static
int32_t
buildLocalVariablesResultDataBlock
(
SSDataBlock
**
pOutput
)
{
SSDataBlock
*
pBlock
=
taosMemoryCalloc
(
1
,
sizeof
(
SSDataBlock
));
if
(
NULL
==
pBlock
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pBlock
->
info
.
hasVarCol
=
true
;
pBlock
->
pDataBlock
=
taosArrayInit
(
SHOW_LOCAL_VARIABLES_RESULT_COLS
,
sizeof
(
SColumnInfoData
));
...
...
@@ -572,7 +624,8 @@ static SSDataBlock* buildLocalVariablesResultDataBlock() {
infoData
.
info
.
bytes
=
SHOW_LOCAL_VARIABLES_RESULT_FIELD2_LEN
;
taosArrayPush
(
pBlock
->
pDataBlock
,
&
infoData
);
return
pBlock
;
*
pOutput
=
pBlock
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
setLocalVariablesResultIntoDataBlock
(
SSDataBlock
*
pBlock
)
{
...
...
@@ -604,12 +657,16 @@ int32_t setLocalVariablesResultIntoDataBlock(SSDataBlock* pBlock) {
}
static
int32_t
execShowLocalVariables
(
SRetrieveTableRsp
**
pRsp
)
{
SSDataBlock
*
pBlock
=
buildLocalVariablesResultDataBlock
()
;
int32_t
code
=
setLocalVariablesResultIntoDataBlock
(
pBlock
);
if
(
code
)
{
return
code
;
SSDataBlock
*
pBlock
=
NULL
;
int32_t
code
=
buildLocalVariablesResultDataBlock
(
&
pBlock
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
setLocalVariablesResultIntoDataBlock
(
pBlock
)
;
}
return
buildRetrieveTableRsp
(
pBlock
,
SHOW_LOCAL_VARIABLES_RESULT_COLS
,
pRsp
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildRetrieveTableRsp
(
pBlock
,
SHOW_LOCAL_VARIABLES_RESULT_COLS
,
pRsp
);
}
blockDataDestroy
(
pBlock
);
return
code
;
}
static
int32_t
createSelectResultDataBlock
(
SNodeList
*
pProjects
,
SSDataBlock
**
pOutput
)
{
...
...
@@ -659,6 +716,7 @@ static int32_t execSelectWithoutFrom(SSelectStmt* pSelect, SRetrieveTableRsp** p
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildRetrieveTableRsp
(
pBlock
,
LIST_LENGTH
(
pSelect
->
pProjectionList
),
pRsp
);
}
blockDataDestroy
(
pBlock
);
return
code
;
}
...
...
source/libs/executor/src/dataDispatcher.c
浏览文件 @
9abea767
...
...
@@ -170,6 +170,7 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryE
SDataDispatchBuf
*
pBuf
=
NULL
;
taosReadQitem
(
pDispatcher
->
pDataBlocks
,
(
void
**
)
&
pBuf
);
ASSERT
(
NULL
!=
pBuf
);
memcpy
(
&
pDispatcher
->
nextOutput
,
pBuf
,
sizeof
(
SDataDispatchBuf
));
taosFreeQitem
(
pBuf
);
...
...
@@ -258,6 +259,7 @@ int32_t createDataDispatcher(SDataSinkManager* pManager, const SDataSinkNode* pD
dispatcher
->
pDataBlocks
=
taosOpenQueue
();
taosThreadMutexInit
(
&
dispatcher
->
mutex
,
NULL
);
if
(
NULL
==
dispatcher
->
pDataBlocks
)
{
taosMemoryFree
(
dispatcher
);
terrno
=
TSDB_CODE_QRY_OUT_OF_MEMORY
;
return
TSDB_CODE_QRY_OUT_OF_MEMORY
;
}
...
...
source/libs/parser/src/parInsert.c
浏览文件 @
9abea767
...
...
@@ -543,7 +543,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
case
TSDB_DATA_TYPE_UTINYINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned tinyint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UTINYINT
(
uv
)
)
{
}
else
if
(
uv
>
UINT8_MAX
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned tinyint data overflow"
,
pToken
->
z
);
}
uint8_t
tmpVal
=
(
uint8_t
)
uv
;
...
...
@@ -563,7 +563,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
case
TSDB_DATA_TYPE_USMALLINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned smallint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_USMALLINT
(
uv
)
)
{
}
else
if
(
uv
>
UINT16_MAX
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned smallint data overflow"
,
pToken
->
z
);
}
uint16_t
tmpVal
=
(
uint16_t
)
uv
;
...
...
@@ -583,7 +583,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
case
TSDB_DATA_TYPE_UINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned int data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UINT
(
uv
)
)
{
}
else
if
(
uv
>
UINT32_MAX
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned int data overflow"
,
pToken
->
z
);
}
uint32_t
tmpVal
=
(
uint32_t
)
uv
;
...
...
@@ -600,8 +600,6 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
case
TSDB_DATA_TYPE_UBIGINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned bigint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UBIGINT
(
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned bigint data overflow"
,
pToken
->
z
);
}
return
func
(
pMsgBuf
,
&
uv
,
pSchema
->
bytes
,
param
);
}
...
...
@@ -844,7 +842,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
case
TSDB_DATA_TYPE_UTINYINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned tinyint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UTINYINT
(
uv
)
)
{
}
else
if
(
uv
>
UINT8_MAX
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned tinyint data overflow"
,
pToken
->
z
);
}
*
(
uint8_t
*
)(
&
val
->
i64
)
=
uv
;
...
...
@@ -864,7 +862,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
case
TSDB_DATA_TYPE_USMALLINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned smallint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_USMALLINT
(
uv
)
)
{
}
else
if
(
uv
>
UINT16_MAX
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned smallint data overflow"
,
pToken
->
z
);
}
*
(
uint16_t
*
)(
&
val
->
i64
)
=
uv
;
...
...
@@ -884,7 +882,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
case
TSDB_DATA_TYPE_UINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned int data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UINT
(
uv
)
)
{
}
else
if
(
uv
>
UINT32_MAX
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned int data overflow"
,
pToken
->
z
);
}
*
(
uint32_t
*
)(
&
val
->
i64
)
=
uv
;
...
...
@@ -902,8 +900,6 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
case
TSDB_DATA_TYPE_UBIGINT
:
{
if
(
TSDB_CODE_SUCCESS
!=
toUInteger
(
pToken
->
z
,
pToken
->
n
,
10
,
&
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid unsigned bigint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UBIGINT
(
uv
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"unsigned bigint data overflow"
,
pToken
->
z
);
}
*
(
uint64_t
*
)(
&
val
->
i64
)
=
uv
;
break
;
...
...
@@ -994,7 +990,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
isParseBindParam
=
true
;
if
(
NULL
==
pCxt
->
pStmtCb
)
{
code
=
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"? only used in stmt"
,
sToken
.
z
);
goto
end
;
break
;
}
continue
;
...
...
@@ -1002,57 +998,47 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
if
(
isParseBindParam
)
{
code
=
buildInvalidOperationMsg
(
&
pCxt
->
msg
,
"no mix usage for ? and tag values"
);
goto
end
;
break
;
}
SSchema
*
pTagSchema
=
&
pSchema
[
pCxt
->
tags
.
boundColumns
[
i
]];
char
tmpTokenBuf
[
TSDB_MAX_BYTES_PER_ROW
]
=
{
0
};
// todo this can be optimize with parse column
code
=
checkAndTrimValue
(
&
sToken
,
tmpTokenBuf
,
&
pCxt
->
msg
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
if
(
!
isNullValue
(
pTagSchema
->
type
,
&
sToken
))
{
taosArrayPush
(
tagName
,
pTagSchema
->
name
);
}
if
(
pTagSchema
->
type
==
TSDB_DATA_TYPE_JSON
)
{
if
(
sToken
.
n
>
(
TSDB_MAX_JSON_TAG_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
code
=
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"json string too long than 4095"
,
sToken
.
z
);
goto
end
;
}
if
(
isNullValue
(
pTagSchema
->
type
,
&
sToken
))
{
code
=
tTagNew
(
pTagVals
,
1
,
true
,
&
pTag
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
!
isNullValue
(
pTagSchema
->
type
,
&
sToken
))
{
taosArrayPush
(
tagName
,
pTagSchema
->
name
);
}
if
(
pTagSchema
->
type
==
TSDB_DATA_TYPE_JSON
)
{
isJson
=
true
;
if
(
sToken
.
n
>
(
TSDB_MAX_JSON_TAG_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
code
=
buildSyntaxErrMsg
(
&
pCxt
->
msg
,
"json string too long than 4095"
,
sToken
.
z
);
break
;
}
if
(
isNullValue
(
pTagSchema
->
type
,
&
sToken
))
{
code
=
tTagNew
(
pTagVals
,
1
,
true
,
&
pTag
);
}
else
{
code
=
parseJsontoTagData
(
sToken
.
z
,
pTagVals
,
&
pTag
,
&
pCxt
->
msg
);
}
}
else
{
code
=
parseJsontoTagData
(
sToken
.
z
,
pTagVals
,
&
pTag
,
&
pCxt
->
msg
);
}
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
isJson
=
true
;
}
else
{
STagVal
val
=
{
0
};
code
=
parseTagToken
(
&
pCxt
->
pSql
,
&
sToken
,
pTagSchema
,
precision
,
&
val
,
&
pCxt
->
msg
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
goto
end
;
STagVal
val
=
{
0
};
code
=
parseTagToken
(
&
pCxt
->
pSql
,
&
sToken
,
pTagSchema
,
precision
,
&
val
,
&
pCxt
->
msg
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
taosArrayPush
(
pTagVals
,
&
val
);
}
}
taosArrayPush
(
pTagVals
,
&
val
);
}
}
if
(
isParseBindParam
)
{
code
=
TSDB_CODE_SUCCESS
;
goto
end
;
if
(
TSDB_CODE_SUCCESS
==
code
&&
!
isParseBindParam
&&
!
isJson
)
{
code
=
tTagNew
(
pTagVals
,
1
,
false
,
&
pTag
);
}
if
(
!
isJson
&&
(
code
=
tTagNew
(
pTagVals
,
1
,
false
,
&
pTag
))
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
if
(
TSDB_CODE_SUCCESS
==
code
&&
!
isParseBindParam
)
{
buildCreateTbReq
(
&
pCxt
->
createTblReq
,
tName
,
pTag
,
pCxt
->
pTableMeta
->
suid
,
pCxt
->
sTableName
,
tagName
,
pCxt
->
pTableMeta
->
tableInfo
.
numOfTags
);
pTag
=
NULL
;
}
buildCreateTbReq
(
&
pCxt
->
createTblReq
,
tName
,
pTag
,
pCxt
->
pTableMeta
->
suid
,
pCxt
->
sTableName
,
tagName
,
pCxt
->
pTableMeta
->
tableInfo
.
numOfTags
);
end:
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pTagVals
);
++
i
)
{
STagVal
*
p
=
(
STagVal
*
)
taosArrayGet
(
pTagVals
,
i
);
if
(
IS_VAR_DATA_TYPE
(
p
->
type
))
{
...
...
@@ -1061,6 +1047,7 @@ end:
}
taosArrayDestroy
(
pTagVals
);
taosArrayDestroy
(
tagName
);
tTagFree
(
pTag
);
return
code
;
}
...
...
source/libs/parser/src/parInsertData.c
浏览文件 @
9abea767
...
...
@@ -244,7 +244,7 @@ int32_t getDataBlockFromList(SHashObj* pHashList, void* id, int32_t idLen, int32
}
}
taosHashPut
(
pHashList
,
(
const
char
*
)
id
,
idLen
,
(
char
*
)
dataBlocks
,
POINTER_BYTES
);
taosHashPut
(
pHashList
,
id
,
idLen
,
dataBlocks
,
POINTER_BYTES
);
if
(
pBlockList
)
{
taosArrayPush
(
pBlockList
,
dataBlocks
);
}
...
...
@@ -666,7 +666,7 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, SB
}
}
else
{
for
(
int32_t
i
=
0
;
i
<
numOfRows
;
++
i
)
{
char
*
payload
=
(
blkKeyTuple
+
i
)
->
payloadAddr
;
void
*
payload
=
(
blkKeyTuple
+
i
)
->
payloadAddr
;
TDRowLenT
rowTLen
=
TD_ROW_LEN
((
STSRow
*
)
payload
);
memcpy
(
pDataBlock
,
payload
,
rowTLen
);
pDataBlock
=
POINTER_SHIFT
(
pDataBlock
,
rowTLen
);
...
...
source/libs/parser/src/parTokenizer.c
浏览文件 @
9abea767
...
...
@@ -597,6 +597,8 @@ uint32_t tGetToken(const char* z, uint32_t* tokenId) {
*
tokenId
=
TK_NK_BOOL
;
return
i
;
}
*
tokenId
=
tKeywordCode
(
z
,
i
);
return
i
;
}
default:
{
if
(((
*
z
&
0x80
)
!=
0
)
||
!
isIdChar
[(
uint8_t
)
*
z
])
{
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
9abea767
...
...
@@ -995,13 +995,17 @@ static int32_t parseTimeFromValueNode(STranslateContext* pCxt, SValueNode* pVal)
if
(
DEAL_RES_ERROR
==
translateValue
(
pCxt
,
pVal
))
{
return
pCxt
->
errCode
;
}
int64_t
value
=
0
;
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pVal
->
node
.
resType
.
type
))
{
pVal
->
datum
.
i
=
(
int64_t
)
pVal
->
datum
.
u
;
value
=
pVal
->
datum
.
u
;
}
else
if
(
IS_FLOAT_TYPE
(
pVal
->
node
.
resType
.
type
))
{
pVal
->
datum
.
i
=
(
int64_t
)
pVal
->
datum
.
d
;
value
=
pVal
->
datum
.
d
;
}
else
if
(
TSDB_DATA_TYPE_BOOL
==
pVal
->
node
.
resType
.
type
)
{
pVal
->
datum
.
i
=
pVal
->
datum
.
b
;
value
=
pVal
->
datum
.
b
;
}
else
{
value
=
pVal
->
datum
.
i
;
}
pVal
->
datum
.
i
=
value
;
return
TSDB_CODE_SUCCESS
;
}
else
if
(
IS_VAR_DATA_TYPE
(
pVal
->
node
.
resType
.
type
)
||
TSDB_DATA_TYPE_TIMESTAMP
==
pVal
->
node
.
resType
.
type
)
{
if
(
TSDB_CODE_SUCCESS
==
taosParseTime
(
pVal
->
literal
,
&
pVal
->
datum
.
i
,
pVal
->
node
.
resType
.
bytes
,
...
...
@@ -1083,7 +1087,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
}
case
TSDB_DATA_TYPE_UTINYINT
:
{
code
=
toUInteger
(
pVal
->
literal
,
strlen
(
pVal
->
literal
),
10
,
&
pVal
->
datum
.
u
);
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
!
IS_VALID_UTINYINT
(
pVal
->
datum
.
u
)
))
{
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
pVal
->
datum
.
u
>
UINT8_MAX
))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
pVal
->
literal
);
}
*
(
uint8_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
...
...
@@ -1091,7 +1095,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
}
case
TSDB_DATA_TYPE_USMALLINT
:
{
code
=
toUInteger
(
pVal
->
literal
,
strlen
(
pVal
->
literal
),
10
,
&
pVal
->
datum
.
u
);
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
!
IS_VALID_USMALLINT
(
pVal
->
datum
.
u
)
))
{
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
pVal
->
datum
.
u
>
UINT16_MAX
))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
pVal
->
literal
);
}
*
(
uint16_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
...
...
@@ -1099,7 +1103,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
}
case
TSDB_DATA_TYPE_UINT
:
{
code
=
toUInteger
(
pVal
->
literal
,
strlen
(
pVal
->
literal
),
10
,
&
pVal
->
datum
.
u
);
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
!
IS_VALID_UINT
(
pVal
->
datum
.
u
)
))
{
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
pVal
->
datum
.
u
>
UINT32_MAX
))
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
pVal
->
literal
);
}
*
(
uint32_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
...
...
@@ -1107,7 +1111,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
}
case
TSDB_DATA_TYPE_UBIGINT
:
{
code
=
toUInteger
(
pVal
->
literal
,
strlen
(
pVal
->
literal
),
10
,
&
pVal
->
datum
.
u
);
if
(
strict
&&
(
TSDB_CODE_SUCCESS
!=
code
||
!
IS_VALID_UBIGINT
(
pVal
->
datum
.
u
))
)
{
if
(
strict
&&
TSDB_CODE_SUCCESS
!=
code
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
pVal
->
literal
);
}
*
(
uint64_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
...
...
@@ -4286,8 +4290,9 @@ static int32_t checkTableColsSchema(STranslateContext* pCxt, SHashObj* pHash, in
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_DUPLICATED_COLUMN
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
pCol
->
dataType
.
bytes
=
calcTypeBytes
(
pCol
->
dataType
);
if
((
TSDB_DATA_TYPE_VARCHAR
==
pCol
->
dataType
.
type
&&
pCol
->
dataType
.
bytes
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pCol
->
dataType
.
type
&&
pCol
->
dataType
.
bytes
>
TSDB_MAX_NCHAR_LEN
))
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
}
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
9abea767
...
...
@@ -1200,7 +1200,7 @@ int32_t getTableMetaFromCacheForInsert(SArray* pTableMetaPos, SParseMetaCache* p
int32_t
reqIndex
=
*
(
int32_t
*
)
taosArrayGet
(
pTableMetaPos
,
tableNo
);
SMetaRes
*
pRes
=
taosArrayGet
(
pMetaCache
->
pTableMetaData
,
reqIndex
);
if
(
TSDB_CODE_SUCCESS
==
pRes
->
code
)
{
*
pMeta
=
tableMetaDup
(
pRes
->
pRes
);
*
pMeta
=
tableMetaDup
(
(
const
STableMeta
*
)
pRes
->
pRes
);
if
(
NULL
==
*
pMeta
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
9abea767
...
...
@@ -1960,7 +1960,8 @@ static SNode* rewriteUniqueOptCreateFirstFunc(SFunctionNode* pSelectValue, SNode
if
(
NULL
!=
pSelectValue
)
{
strcpy
(
pFunc
->
node
.
aliasName
,
pSelectValue
->
node
.
aliasName
);
}
else
{
snprintf
(
pFunc
->
node
.
aliasName
,
sizeof
(
pFunc
->
node
.
aliasName
),
"%s.%p"
,
pFunc
->
functionName
,
(
void
*
)
pFunc
);
int64_t
pointer
=
(
int64_t
)
pFunc
;
snprintf
(
pFunc
->
node
.
aliasName
,
sizeof
(
pFunc
->
node
.
aliasName
),
"%s.%"
PRId64
""
,
pFunc
->
functionName
,
pointer
);
}
int32_t
code
=
nodesListMakeStrictAppend
(
&
pFunc
->
pParameterList
,
nodesCloneNode
(
pCol
));
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
source/libs/planner/src/planSpliter.c
浏览文件 @
9abea767
...
...
@@ -342,7 +342,8 @@ static int32_t stbSplAppendWStart(SNodeList* pFuncs, int32_t* pIndex) {
return
TSDB_CODE_OUT_OF_MEMORY
;
}
strcpy
(
pWStart
->
functionName
,
"_wstart"
);
snprintf
(
pWStart
->
node
.
aliasName
,
sizeof
(
pWStart
->
node
.
aliasName
),
"%s.%p"
,
pWStart
->
functionName
,
(
void
*
)
pWStart
);
int64_t
pointer
=
(
int64_t
)
pWStart
;
snprintf
(
pWStart
->
node
.
aliasName
,
sizeof
(
pWStart
->
node
.
aliasName
),
"%s.%"
PRId64
""
,
pWStart
->
functionName
,
pointer
);
int32_t
code
=
fmGetFuncInfo
(
pWStart
,
NULL
,
0
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListStrictAppend
(
pFuncs
,
(
SNode
*
)
pWStart
);
...
...
@@ -367,7 +368,8 @@ static int32_t stbSplAppendWEnd(SWindowLogicNode* pWin, int32_t* pIndex) {
return
TSDB_CODE_OUT_OF_MEMORY
;
}
strcpy
(
pWEnd
->
functionName
,
"_wend"
);
snprintf
(
pWEnd
->
node
.
aliasName
,
sizeof
(
pWEnd
->
node
.
aliasName
),
"%s.%p"
,
pWEnd
->
functionName
,
(
void
*
)
pWEnd
);
int64_t
pointer
=
(
int64_t
)
pWEnd
;
snprintf
(
pWEnd
->
node
.
aliasName
,
sizeof
(
pWEnd
->
node
.
aliasName
),
"%s.%"
PRId64
""
,
pWEnd
->
functionName
,
pointer
);
int32_t
code
=
fmGetFuncInfo
(
pWEnd
,
NULL
,
0
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListStrictAppend
(
pWin
->
pFuncs
,
(
SNode
*
)
pWEnd
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录