Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d6c7c58b
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
d6c7c58b
编写于
1月 23, 2021
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bug
上级
3afb13a4
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
87 addition
and
2 deletion
+87
-2
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+80
-0
src/common/src/tvariant.c
src/common/src/tvariant.c
+2
-2
src/inc/taosdef.h
src/inc/taosdef.h
+5
-0
未找到文件。
src/client/src/tscSQLParser.c
浏览文件 @
d6c7c58b
...
...
@@ -4300,6 +4300,78 @@ static void doAddJoinTagsColumnsIntoTagList(SSqlCmd* pCmd, SQueryInfo* pQueryInf
}
}
static
int32_t
validateTagCondExpr
(
SSqlCmd
*
pCmd
,
tExprNode
*
p
)
{
const
char
*
msg1
=
"tag type mismatch"
;
const
char
*
msg2
=
"invalid tag operator"
;
const
char
*
msg3
=
"not supported filter condition"
;
do
{
if
(
p
->
nodeType
!=
TSQL_NODE_EXPR
)
{
break
;
}
if
(
!
p
->
_node
.
pLeft
||
!
p
->
_node
.
pRight
)
{
break
;
}
if
(
IS_ARITHMETIC_OPTR
(
p
->
_node
.
optr
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
if
(
!
IS_RELATION_OPTR
(
p
->
_node
.
optr
))
{
break
;
}
tVariant
*
vVariant
=
NULL
;
int32_t
schemaType
=
-
1
;
if
(
p
->
_node
.
pLeft
->
nodeType
==
TSQL_NODE_VALUE
&&
p
->
_node
.
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
if
(
!
p
->
_node
.
pRight
->
pSchema
)
{
break
;
}
vVariant
=
p
->
_node
.
pLeft
->
pVal
->
nType
;
schemaType
=
p
->
_node
.
pRight
->
pSchema
->
type
;
}
else
if
(
p
->
_node
.
pLeft
->
nodeType
==
TSQL_NODE_COL
&&
p
->
_node
.
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
if
(
!
p
->
_node
.
pLeft
->
pSchema
)
{
break
;
}
vVariant
=
p
->
_node
.
pRight
->
pVal
->
nType
;
schemaType
=
p
->
_node
.
pLeft
->
pSchema
->
type
;
}
else
{
break
;
}
if
(
schemaType
>=
TSDB_DATA_TYPE_TINYINT
&&
schemaType
<=
TSDB_DATA_TYPE_BIGINT
)
{
schemaType
=
TSDB_DATA_TYPE_BIGINT
;
}
else
if
(
schemaType
==
TSDB_DATA_TYPE_FLOAT
||
schemaType
==
TSDB_DATA_TYPE_DOUBLE
)
{
schemaType
=
TSDB_DATA_TYPE_DOUBLE
;
}
int32_t
retVal
=
TSDB_CODE_SUCCESS
;
if
(
schemaType
==
TSDB_DATA_TYPE_BINARY
)
{
char
*
tmp
=
(
int64_t
)
calloc
(
1
,
(
vVariant
->
nLen
+
1
)
+
TSDB_NCHAR_SIZE
);
retVal
=
tVariantDump
(
vVariant
,
tmp
,
schemaType
,
false
);
free
(
tmp
);
}
else
if
(
schemaType
==
TSDB_DATA_TYPE_NCHAR
)
{
// pRight->val.nLen + 1 is larger than the actual nchar string length
char
*
tmp
=
(
int64_t
)
calloc
(
1
,
(
vVariant
->
nLen
+
1
)
*
TSDB_NCHAR_SIZE
);
retVal
=
tVariantDump
(
vVariant
,
tmp
,
schemaType
,
false
);
free
(
tmp
);
}
else
{
double
tmp
;
retVal
=
tVariantDump
(
vVariant
,
(
char
*
)
&
tmp
,
schemaType
,
false
);
}
if
(
retVal
!=
TSDB_CODE_SUCCESS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
while
(
0
);
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
getTagQueryCondExpr
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
SCondExpr
*
pCondExpr
,
tSQLExpr
**
pExpr
)
{
int32_t
ret
=
TSDB_CODE_SUCCESS
;
...
...
@@ -4342,6 +4414,10 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
tsSetSTableQueryCond
(
&
pQueryInfo
->
tagCond
,
uid
,
&
bw
);
doCompactQueryExpr
(
pExpr
);
if
(
ret
==
TSDB_CODE_SUCCESS
)
{
ret
=
validateTagCondExpr
(
pCmd
,
p
);
}
tSqlExprDestroy
(
p1
);
tExprTreeDestroy
(
p
,
NULL
);
...
...
@@ -4349,6 +4425,10 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
if
(
pQueryInfo
->
tagCond
.
pCond
!=
NULL
&&
taosArrayGetSize
(
pQueryInfo
->
tagCond
.
pCond
)
>
0
&&
!
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
"filter on tag not supported for normal table"
);
}
if
(
ret
)
{
break
;
}
}
pCondExpr
->
pTagCond
=
NULL
;
...
...
src/common/src/tvariant.c
浏览文件 @
d6c7c58b
...
...
@@ -430,7 +430,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result
}
errno
=
0
;
if
(
IS_SIGNED_NUMERIC_TYPE
(
pVariant
->
nType
))
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
pVariant
->
nType
)
||
(
pVariant
->
nType
==
TSDB_DATA_TYPE_BOOL
)
)
{
*
result
=
pVariant
->
i64
;
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pVariant
->
nType
))
{
*
result
=
pVariant
->
u64
;
...
...
src/inc/taosdef.h
浏览文件 @
d6c7c58b
...
...
@@ -163,6 +163,11 @@ do { \
#define TSDB_BINARY_OP_MULTIPLY 32
#define TSDB_BINARY_OP_DIVIDE 33
#define TSDB_BINARY_OP_REMAINDER 34
#define IS_RELATION_OPTR(op) (((op) >= TSDB_RELATION_LESS) && ((op) <= TSDB_RELATION_IN))
#define IS_ARITHMETIC_OPTR(op) (((op) >= TSDB_BINARY_OP_ADD) && ((op) <= TSDB_BINARY_OP_REMAINDER))
#define TS_PATH_DELIMITER_LEN 1
#define TSDB_UNI_LEN 24
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录