Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
41c7b062
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
41c7b062
编写于
6月 22, 2021
作者:
Y
yihaoDeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-4098]<feature> refactor IN filter
上级
b7fded8b
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
36 addition
and
67 deletion
+36
-67
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+35
-66
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+1
-1
未找到文件。
src/client/src/tscSQLParser.c
浏览文件 @
41c7b062
...
...
@@ -65,7 +65,6 @@ static char* getAccountId(SSqlObj* pSql);
static
int
convertTimestampStrToInt64
(
tVariant
*
pVar
,
int32_t
precision
);
static
bool
serializeExprListToVariant
(
SArray
*
pList
,
tVariant
**
dest
,
int16_t
colType
,
uint8_t
precision
);
static
int32_t
validateParamOfRelationIn
(
tVariant
*
pVar
,
int32_t
colType
);
static
bool
has
(
SArray
*
pFieldList
,
int32_t
startIdx
,
const
char
*
name
);
static
char
*
cloneCurrentDBName
(
SSqlObj
*
pSql
);
...
...
@@ -156,78 +155,60 @@ bool serializeExprListToVariant(SArray* pList, tVariant **dst, int16_t colType,
return
ret
;
}
tSqlExprItem
*
item
=
(
tSqlExprItem
*
)
taosArrayGet
(
pList
,
0
);
int32_t
firstTokenType
=
item
->
pNode
->
token
.
type
;
int32_t
type
=
firstTokenType
;
//nchar to binary and other xxint to bigint
toTSDBType
(
type
);
if
(
colType
!=
TSDB_DATA_TYPE_TIMESTAMP
&&
!
IS_UNSIGNED_NUMERIC_TYPE
(
colType
))
{
if
(
type
!=
colType
&&
(
type
!=
TSDB_DATA_TYPE_BINARY
||
colType
!=
TSDB_DATA_TYPE_NCHAR
))
{
return
false
;
}
}
type
=
colType
;
tSqlExpr
*
item
=
((
tSqlExprItem
*
)(
taosArrayGet
(
pList
,
0
)))
->
pNode
;
int32_t
firstVarType
=
item
->
value
.
nType
;
SBufferWriter
bw
=
tbufInitWriter
(
NULL
,
false
);
tbufEnsureCapacity
(
&
bw
,
512
);
if
(
colType
==
TSDB_DATA_TYPE_TIMESTAMP
)
{
tbufWriteUint32
(
&
bw
,
TSDB_DATA_TYPE_BIGINT
);
}
else
{
tbufWriteUint32
(
&
bw
,
colType
);
}
tbufWriteInt32
(
&
bw
,
(
int32_t
)(
pList
->
size
));
int32_t
size
=
(
int32_t
)(
pList
->
size
);
tbufWriteUint32
(
&
bw
,
type
);
tbufWriteInt32
(
&
bw
,
size
);
for
(
int32_t
i
=
0
;
i
<
size
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
(
int32_t
)
pList
->
size
;
i
++
)
{
tSqlExpr
*
pSub
=
((
tSqlExprItem
*
)(
taosArrayGet
(
pList
,
i
)))
->
pNode
;
tVariant
*
var
=
&
pSub
->
value
;
// check all the token type in expr list same or not
if
(
first
TokenType
!=
pSub
->
token
.
t
ype
)
{
if
(
first
VarType
!=
var
->
nT
ype
)
{
break
;
}
toTSDBType
(
pSub
->
token
.
type
);
tVariant
var
;
tVariantCreate
(
&
var
,
&
pSub
->
token
);
if
(
type
==
TSDB_DATA_TYPE_BOOL
||
IS_SIGNED_NUMERIC_TYPE
(
type
))
{
tbufWriteInt64
(
&
bw
,
var
.
i64
);
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
))
{
// ugly code, refactor later
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pSub
->
token
.
type
)
||
IS_SIGNED_NUMERIC_TYPE
(
pSub
->
token
.
type
))
{
tbufWriteUint64
(
&
bw
,
var
.
i64
);
if
((
colType
==
TSDB_DATA_TYPE_BOOL
||
IS_SIGNED_NUMERIC_TYPE
(
colType
)))
{
tbufWriteInt64
(
&
bw
,
var
->
i64
);
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
colType
))
{
tbufWriteUint64
(
&
bw
,
var
->
u64
);
}
else
if
(
colType
==
TSDB_DATA_TYPE_DOUBLE
||
colType
==
TSDB_DATA_TYPE_FLOAT
)
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
var
->
nType
)
||
IS_UNSIGNED_NUMERIC_TYPE
(
var
->
nType
))
{
tbufWriteDouble
(
&
bw
,
(
double
)(
var
->
i64
));
}
else
{
tVariantDestroy
(
&
var
);
break
;
}
tbufWriteDouble
(
&
bw
,
var
->
dKey
);
}
else
if
(
type
==
TSDB_DATA_TYPE_DOUBLE
||
type
==
TSDB_DATA_TYPE_FLOAT
)
{
tbufWriteDouble
(
&
bw
,
var
.
dKey
);
}
else
if
(
type
==
TSDB_DATA_TYPE_BINARY
){
tbufWriteBinary
(
&
bw
,
var
.
pz
,
var
.
nLen
);
}
else
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
char
*
buf
=
(
char
*
)
calloc
(
1
,
(
var
.
nLen
+
1
)
*
TSDB_NCHAR_SIZE
);
if
(
tVariantDump
(
&
var
,
buf
,
type
,
false
)
!=
TSDB_CODE_SUCCESS
)
{
}
else
if
(
colType
==
TSDB_DATA_TYPE_BINARY
)
{
tbufWriteBinary
(
&
bw
,
var
->
pz
,
var
->
nLen
);
}
else
if
(
colType
==
TSDB_DATA_TYPE_NCHAR
)
{
char
*
buf
=
(
char
*
)
calloc
(
1
,
(
var
->
nLen
+
1
)
*
TSDB_NCHAR_SIZE
);
if
(
tVariantDump
(
var
,
buf
,
colType
,
false
)
!=
TSDB_CODE_SUCCESS
)
{
free
(
buf
);
tVariantDestroy
(
&
var
);
break
;
}
tbufWriteBinary
(
&
bw
,
buf
,
twcslen
((
wchar_t
*
)
buf
)
*
TSDB_NCHAR_SIZE
);
free
(
buf
);
}
else
if
(
type
==
TSDB_DATA_TYPE_TIMESTAMP
)
{
if
(
var
.
nType
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
convertTimestampStrToInt64
(
&
var
,
precision
)
<
0
)
{
tVariantDestroy
(
&
var
);
}
else
if
(
colType
==
TSDB_DATA_TYPE_TIMESTAMP
)
{
if
(
var
->
nType
==
TSDB_DATA_TYPE_BINARY
)
{
if
(
convertTimestampStrToInt64
(
var
,
precision
)
<
0
)
{
break
;
}
tbufWriteInt64
(
&
bw
,
var
.
i64
);
}
else
if
(
var
.
nType
==
TSDB_DATA_TYPE_BIGINT
)
{
tbufWriteInt64
(
&
bw
,
var
.
i64
);
tbufWriteInt64
(
&
bw
,
var
->
i64
);
}
else
if
(
var
->
nType
==
TSDB_DATA_TYPE_BIGINT
)
{
tbufWriteInt64
(
&
bw
,
var
->
i64
);
}
}
else
{
break
;
}
tVariantDestroy
(
&
var
);
if
(
i
==
size
-
1
)
{
ret
=
true
;}
if
(
i
==
(
int32_t
)(
pList
->
size
-
1
))
{
ret
=
true
;}
}
if
(
ret
==
true
)
{
if
((
*
dst
=
calloc
(
1
,
sizeof
(
tVariant
)))
!=
NULL
)
{
tVariantCreateFromBinary
(
*
dst
,
tbufGetData
(
&
bw
,
false
),
tbufTell
(
&
bw
),
TSDB_DATA_TYPE_BINARY
);
...
...
@@ -239,13 +220,6 @@ bool serializeExprListToVariant(SArray* pList, tVariant **dst, int16_t colType,
return
ret
;
}
static
int32_t
validateParamOfRelationIn
(
tVariant
*
pVar
,
int32_t
colType
)
{
if
(
pVar
->
nType
!=
TSDB_DATA_TYPE_BINARY
)
{
return
-
1
;
}
SBufferReader
br
=
tbufInitReader
(
pVar
->
pz
,
pVar
->
nLen
,
false
);
return
colType
==
TSDB_DATA_TYPE_NCHAR
?
0
:
(
tbufReadUint32
(
&
br
)
==
colType
?
0
:
-
1
);
}
static
uint8_t
convertOptr
(
SStrToken
*
pToken
)
{
switch
(
pToken
->
type
)
{
...
...
@@ -3366,11 +3340,6 @@ static int32_t doExtractColumnFilterInfo(SSqlCmd* pCmd, SQueryInfo* pQueryInfo,
if
(
pRight
->
tokenId
!=
TK_SET
||
!
serializeExprListToVariant
(
pRight
->
pParam
,
&
pVal
,
colType
,
timePrecision
))
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
);
}
if
(
validateParamOfRelationIn
(
pVal
,
colType
)
!=
TSDB_CODE_SUCCESS
)
{
tVariantDestroy
(
pVal
);
free
(
pVal
);
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
);
}
pColumnFilter
->
pz
=
(
int64_t
)
calloc
(
1
,
pVal
->
nLen
+
1
);
pColumnFilter
->
len
=
pVal
->
nLen
;
pColumnFilter
->
filterstr
=
1
;
...
...
@@ -8151,7 +8120,7 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS
int32_t
colType
=
-
1
;
STableMeta
*
pTableMeta
=
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
;
if
(
pCols
!=
NULL
&&
taosArrayGetSize
(
pCols
)
>
0
)
{
SColIndex
*
idx
=
taosArrayGet
(
pCols
,
0
);
SColIndex
*
idx
=
taosArrayGet
(
pCols
,
taosArrayGetSize
(
pCols
)
-
1
);
SSchema
*
pSchema
=
tscGetTableColumnSchema
(
pTableMeta
,
idx
->
colIndex
);
if
(
pSchema
!=
NULL
)
{
colType
=
pSchema
->
type
;
...
...
src/tsdb/src/tsdbRead.c
浏览文件 @
41c7b062
...
...
@@ -3364,7 +3364,7 @@ static bool tableFilterFp(const void* pNode, void* param) {
GET_TYPED_DATA
(
v
,
uint64_t
,
pInfo
->
sch
.
type
,
val
);
return
NULL
!=
taosHashGet
((
SHashObj
*
)
pInfo
->
q
,
(
char
*
)
&
v
,
sizeof
(
v
));
}
else
if
(
type
==
TSDB_DATA_TYPE_DOUBLE
||
type
==
TSDB_DATA_TYPE_
DOUBLE
)
{
else
if
(
type
==
TSDB_DATA_TYPE_DOUBLE
||
type
==
TSDB_DATA_TYPE_
FLOAT
)
{
double
v
;
GET_TYPED_DATA
(
v
,
double
,
pInfo
->
sch
.
type
,
val
);
return
NULL
!=
taosHashGet
((
SHashObj
*
)
pInfo
->
q
,
(
char
*
)
&
v
,
sizeof
(
v
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录