Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
cc1d37cf
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
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看板
提交
cc1d37cf
编写于
8月 29, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: some problems of parser
上级
a39e6f7d
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
60 addition
and
7 deletion
+60
-7
source/common/src/tvariant.c
source/common/src/tvariant.c
+4
-4
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+4
-0
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+51
-2
source/util/src/terror.c
source/util/src/terror.c
+1
-1
未找到文件。
source/common/src/tvariant.c
浏览文件 @
cc1d37cf
...
@@ -155,8 +155,8 @@ void taosVariantCreateFromBinary(SVariant *pVar, const char *pz, size_t len, uin
...
@@ -155,8 +155,8 @@ void taosVariantCreateFromBinary(SVariant *pVar, const char *pz, size_t len, uin
void
taosVariantDestroy
(
SVariant
*
pVar
)
{
void
taosVariantDestroy
(
SVariant
*
pVar
)
{
if
(
pVar
==
NULL
)
return
;
if
(
pVar
==
NULL
)
return
;
if
(
pVar
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pVar
->
nType
==
TSDB_DATA_TYPE_NCHAR
if
(
pVar
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pVar
->
nType
==
TSDB_DATA_TYPE_NCHAR
||
||
pVar
->
nType
==
TSDB_DATA_TYPE_JSON
)
{
pVar
->
nType
==
TSDB_DATA_TYPE_JSON
)
{
taosMemoryFreeClear
(
pVar
->
pz
);
taosMemoryFreeClear
(
pVar
->
pz
);
pVar
->
nLen
=
0
;
pVar
->
nLen
=
0
;
}
}
...
@@ -185,8 +185,8 @@ void taosVariantAssign(SVariant *pDst, const SVariant *pSrc) {
...
@@ -185,8 +185,8 @@ void taosVariantAssign(SVariant *pDst, const SVariant *pSrc) {
if
(
pSrc
==
NULL
||
pDst
==
NULL
)
return
;
if
(
pSrc
==
NULL
||
pDst
==
NULL
)
return
;
pDst
->
nType
=
pSrc
->
nType
;
pDst
->
nType
=
pSrc
->
nType
;
if
(
pSrc
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pSrc
->
nType
==
TSDB_DATA_TYPE_NCHAR
if
(
pSrc
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pSrc
->
nType
==
TSDB_DATA_TYPE_NCHAR
||
||
pSrc
->
nType
==
TSDB_DATA_TYPE_JSON
)
{
pSrc
->
nType
==
TSDB_DATA_TYPE_JSON
)
{
int32_t
len
=
pSrc
->
nLen
+
TSDB_NCHAR_SIZE
;
int32_t
len
=
pSrc
->
nLen
+
TSDB_NCHAR_SIZE
;
char
*
p
=
taosMemoryRealloc
(
pDst
->
pz
,
len
);
char
*
p
=
taosMemoryRealloc
(
pDst
->
pz
,
len
);
assert
(
p
);
assert
(
p
);
...
...
source/libs/parser/src/parInsert.c
浏览文件 @
cc1d37cf
...
@@ -502,6 +502,10 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
...
@@ -502,6 +502,10 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
return
func
(
pMsgBuf
,
NULL
,
0
,
param
);
return
func
(
pMsgBuf
,
NULL
,
0
,
param
);
}
}
if
(
IS_NUMERIC_TYPE
(
pSchema
->
type
)
&&
pToken
->
n
==
0
)
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"invalid numeric data"
,
pToken
->
z
);
}
switch
(
pSchema
->
type
)
{
switch
(
pSchema
->
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
{
case
TSDB_DATA_TYPE_BOOL
:
{
if
((
pToken
->
type
==
TK_NK_BOOL
||
pToken
->
type
==
TK_NK_STRING
)
&&
(
pToken
->
n
!=
0
))
{
if
((
pToken
->
type
==
TK_NK_BOOL
||
pToken
->
type
==
TK_NK_STRING
)
&&
(
pToken
->
n
!=
0
))
{
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
cc1d37cf
...
@@ -2475,13 +2475,62 @@ static int32_t translateOrderBy(STranslateContext* pCxt, SSelectStmt* pSelect) {
...
@@ -2475,13 +2475,62 @@ static int32_t translateOrderBy(STranslateContext* pCxt, SSelectStmt* pSelect) {
return
code
;
return
code
;
}
}
static
EDealRes
needFillImpl
(
SNode
*
pNode
,
void
*
pContext
)
{
if
(
isAggFunc
(
pNode
))
{
*
(
bool
*
)
pContext
=
true
;
return
DEAL_RES_END
;
}
return
DEAL_RES_CONTINUE
;
}
static
bool
needFill
(
SNode
*
pNode
)
{
bool
hasFillFunc
=
false
;
nodesWalkExpr
(
pNode
,
needFillImpl
,
&
hasFillFunc
);
return
hasFillFunc
;
}
static
bool
mismatchFillDataType
(
SDataType
origDt
,
SDataType
fillDt
)
{
if
(
IS_NUMERIC_TYPE
(
origDt
.
type
)
&&
!
IS_NUMERIC_TYPE
(
fillDt
.
type
))
{
return
true
;
}
if
(
IS_VAR_DATA_TYPE
(
origDt
.
type
)
&&
!
IS_VAR_DATA_TYPE
(
fillDt
.
type
))
{
return
true
;
}
return
false
;
}
static
int32_t
checkFillValues
(
STranslateContext
*
pCxt
,
SFillNode
*
pFill
,
SNodeList
*
pProjectionList
)
{
if
(
FILL_MODE_VALUE
!=
pFill
->
mode
)
{
return
TSDB_CODE_SUCCESS
;
}
int32_t
fillNo
=
0
;
SNodeListNode
*
pFillValues
=
(
SNodeListNode
*
)
pFill
->
pValues
;
SNode
*
pProject
=
NULL
;
FOREACH
(
pProject
,
pProjectionList
)
{
if
(
needFill
(
pProject
))
{
if
(
fillNo
>=
LIST_LENGTH
(
pFillValues
->
pNodeList
))
{
return
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Filled values number mismatch"
);
}
if
(
mismatchFillDataType
(((
SExprNode
*
)
pProject
)
->
resType
,
((
SExprNode
*
)
nodesListGetNode
(
pFillValues
->
pNodeList
,
fillNo
))
->
resType
))
{
return
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Filled data type mismatch"
);
}
++
fillNo
;
}
}
if
(
fillNo
!=
LIST_LENGTH
(
pFillValues
->
pNodeList
))
{
return
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Filled values number mismatch"
);
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
translateFillValues
(
STranslateContext
*
pCxt
,
SSelectStmt
*
pSelect
)
{
static
int32_t
translateFillValues
(
STranslateContext
*
pCxt
,
SSelectStmt
*
pSelect
)
{
if
(
NULL
==
pSelect
->
pWindow
||
QUERY_NODE_INTERVAL_WINDOW
!=
nodeType
(
pSelect
->
pWindow
)
||
if
(
NULL
==
pSelect
->
pWindow
||
QUERY_NODE_INTERVAL_WINDOW
!=
nodeType
(
pSelect
->
pWindow
)
||
NULL
==
((
SIntervalWindowNode
*
)
pSelect
->
pWindow
)
->
pFill
)
{
NULL
==
((
SIntervalWindowNode
*
)
pSelect
->
pWindow
)
->
pFill
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
SFillNode
*
pFill
=
(
SFillNode
*
)((
SIntervalWindowNode
*
)
pSelect
->
pWindow
)
->
pFill
;
return
checkFillValues
(
pCxt
,
(
SFillNode
*
)((
SIntervalWindowNode
*
)
pSelect
->
pWindow
)
->
pFill
,
pSelect
->
pProjectionList
);
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
rewriteProjectAlias
(
SNodeList
*
pProjectionList
)
{
static
int32_t
rewriteProjectAlias
(
SNodeList
*
pProjectionList
)
{
...
...
source/util/src/terror.c
浏览文件 @
cc1d37cf
...
@@ -121,7 +121,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_TSC_CONN_KILLED, "Connection killed")
...
@@ -121,7 +121,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_TSC_CONN_KILLED, "Connection killed")
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
,
"Syntax error in SQL"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
,
"Syntax error in SQL"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_DB_NOT_SELECTED
,
"Database not specified or available"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_DB_NOT_SELECTED
,
"Database not specified or available"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_INVALID_TABLE_NAME
,
"Table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_INVALID_TABLE_NAME
,
"Table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_EXCEED_SQL_LIMIT
,
"SQL statement too long
, check maxSQLLength config
"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_EXCEED_SQL_LIMIT
,
"SQL statement too long"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_FILE_EMPTY
,
"File is empty"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_FILE_EMPTY
,
"File is empty"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_LINE_SYNTAX_ERROR
,
"Syntax error in Line"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_LINE_SYNTAX_ERROR
,
"Syntax error in Line"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_NO_META_CACHED
,
"No table meta cached"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_TSC_NO_META_CACHED
,
"No table meta cached"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录