Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lzh_me
TDengine
提交
f402c642
TDengine
项目概览
lzh_me
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
f402c642
编写于
2月 26, 2021
作者:
H
haojun Liao
提交者:
GitHub
2月 26, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5279 from taosdata/feature/query
Feature/query
上级
6fe5202a
83282d1f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
193 addition
and
55 deletion
+193
-55
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+5
-2
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+122
-25
src/query/src/qParserImpl.c
src/query/src/qParserImpl.c
+53
-1
src/util/src/tcompare.c
src/util/src/tcompare.c
+13
-27
未找到文件。
src/client/src/tscSQLParser.c
浏览文件 @
f402c642
...
...
@@ -1144,7 +1144,7 @@ bool validateOneTags(SSqlCmd* pCmd, TAOS_FIELD* pTagField) {
return
false
;
}
if
((
pTagField
->
type
<
TSDB_DATA_TYPE_BOOL
)
||
(
pTagField
->
type
>
TSDB_DATA_TYPE_
NCHAR
))
{
if
((
pTagField
->
type
<
TSDB_DATA_TYPE_BOOL
)
||
(
pTagField
->
type
>
TSDB_DATA_TYPE_
UBIGINT
))
{
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg6
);
return
false
;
}
...
...
@@ -1208,7 +1208,7 @@ bool validateOneColumn(SSqlCmd* pCmd, TAOS_FIELD* pColField) {
return
false
;
}
if
(
pColField
->
type
<
TSDB_DATA_TYPE_BOOL
||
pColField
->
type
>
TSDB_DATA_TYPE_
NCHAR
)
{
if
(
pColField
->
type
<
TSDB_DATA_TYPE_BOOL
||
pColField
->
type
>
TSDB_DATA_TYPE_
UBIGINT
)
{
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
return
false
;
}
...
...
@@ -1885,6 +1885,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
const
char
*
msg7
=
"normal table can not apply this function"
;
const
char
*
msg8
=
"multi-columns selection does not support alias column name"
;
const
char
*
msg9
=
"invalid function"
;
const
char
*
msg10
=
"diff can no be applied to unsigned numeric type"
;
switch
(
optr
)
{
case
TK_COUNT
:
{
...
...
@@ -2023,6 +2024,8 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
if
(
!
IS_NUMERIC_TYPE
(
colType
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
colType
)
&&
optr
==
TK_DIFF
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg10
);
}
int16_t
resultType
=
0
;
...
...
src/query/src/qAggMain.c
浏览文件 @
f402c642
...
...
@@ -1051,7 +1051,7 @@ static void minMax_function(SQLFunctionCtx *pCtx, char *pOutput, int32_t isMin,
TYPED_LOOPCHECK_N
(
uint16_t
,
pOutput
,
p
,
pCtx
,
pCtx
->
inputType
,
isMin
,
*
notNullElems
);
}
else
if
(
pCtx
->
inputType
==
TSDB_DATA_TYPE_UINT
)
{
TYPED_LOOPCHECK_N
(
uint32_t
,
pOutput
,
p
,
pCtx
,
pCtx
->
inputType
,
isMin
,
*
notNullElems
);
}
else
if
(
pCtx
->
inputType
==
TSDB_DATA_TYPE_BIGINT
)
{
}
else
if
(
pCtx
->
inputType
==
TSDB_DATA_TYPE_
U
BIGINT
)
{
TYPED_LOOPCHECK_N
(
uint64_t
,
pOutput
,
p
,
pCtx
,
pCtx
->
inputType
,
isMin
,
*
notNullElems
);
}
}
else
if
(
pCtx
->
inputType
==
TSDB_DATA_TYPE_DOUBLE
)
{
...
...
@@ -2172,19 +2172,22 @@ static void do_top_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pData,
if
(
pInfo
->
num
<
maxLen
)
{
if
(
pInfo
->
num
==
0
||
((
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
&&
val
.
i64
>=
pList
[
pInfo
->
num
-
1
]
->
v
.
i64
)
||
((
type
>=
TSDB_DATA_TYPE_FLOAT
&&
type
<=
TSDB_DATA_TYPE_DOUBLE
)
&&
val
.
dKey
>=
pList
[
pInfo
->
num
-
1
]
->
v
.
dKey
))
{
(
IS_SIGNED_NUMERIC_TYPE
(
type
)
&&
val
.
i64
>=
pList
[
pInfo
->
num
-
1
]
->
v
.
i64
)
||
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
)
&&
val
.
u64
>=
pList
[
pInfo
->
num
-
1
]
->
v
.
u64
)
||
(
IS_FLOAT_TYPE
(
type
)
&&
val
.
dKey
>=
pList
[
pInfo
->
num
-
1
]
->
v
.
dKey
))
{
valuePairAssign
(
pList
[
pInfo
->
num
],
type
,
(
const
char
*
)
&
val
.
i64
,
ts
,
pTags
,
pTagInfo
,
stage
);
}
else
{
int32_t
i
=
pInfo
->
num
-
1
;
if
(
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
type
))
{
while
(
i
>=
0
&&
pList
[
i
]
->
v
.
i64
>
val
.
i64
)
{
VALUEPAIRASSIGN
(
pList
[
i
+
1
],
pList
[
i
],
pTagInfo
->
tagsLen
);
i
-=
1
;
}
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
))
{
while
(
i
>=
0
&&
pList
[
i
]
->
v
.
u64
>
val
.
u64
)
{
VALUEPAIRASSIGN
(
pList
[
i
+
1
],
pList
[
i
],
pTagInfo
->
tagsLen
);
i
-=
1
;
}
}
else
{
while
(
i
>=
0
&&
pList
[
i
]
->
v
.
dKey
>
val
.
dKey
)
{
VALUEPAIRASSIGN
(
pList
[
i
+
1
],
pList
[
i
],
pTagInfo
->
tagsLen
);
...
...
@@ -2198,23 +2201,29 @@ static void do_top_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pData,
pInfo
->
num
++
;
}
else
{
int32_t
i
=
0
;
if
(((
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
&&
val
.
i64
>
pList
[
0
]
->
v
.
i64
)
||
((
type
>=
TSDB_DATA_TYPE_FLOAT
&&
type
<=
TSDB_DATA_TYPE_DOUBLE
)
&&
val
.
dKey
>
pList
[
0
]
->
v
.
dKey
))
{
if
((
IS_SIGNED_NUMERIC_TYPE
(
type
)
&&
val
.
i64
>
pList
[
0
]
->
v
.
i64
)
||
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
)
&&
val
.
u64
>
pList
[
0
]
->
v
.
u64
)
||
(
IS_FLOAT_TYPE
(
type
)
&&
val
.
dKey
>
pList
[
0
]
->
v
.
dKey
))
{
// find the appropriate the slot position
if
(
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
type
)
)
{
while
(
i
+
1
<
maxLen
&&
pList
[
i
+
1
]
->
v
.
i64
<
val
.
i64
)
{
VALUEPAIRASSIGN
(
pList
[
i
],
pList
[
i
+
1
],
pTagInfo
->
tagsLen
);
i
+=
1
;
}
}
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
))
{
while
(
i
+
1
<
maxLen
&&
pList
[
i
+
1
]
->
v
.
u64
<
val
.
u64
)
{
VALUEPAIRASSIGN
(
pList
[
i
],
pList
[
i
+
1
],
pTagInfo
->
tagsLen
);
i
+=
1
;
}
}
else
{
while
(
i
+
1
<
maxLen
&&
pList
[
i
+
1
]
->
v
.
dKey
<
val
.
dKey
)
{
VALUEPAIRASSIGN
(
pList
[
i
],
pList
[
i
+
1
],
pTagInfo
->
tagsLen
);
i
+=
1
;
}
}
valuePairAssign
(
pList
[
i
],
type
,
(
const
char
*
)
&
val
.
i64
,
ts
,
pTags
,
pTagInfo
,
stage
);
valuePairAssign
(
pList
[
i
],
type
,
(
const
char
*
)
&
val
.
i64
,
ts
,
pTags
,
pTagInfo
,
stage
);
}
}
}
...
...
@@ -2233,11 +2242,16 @@ static void do_bottom_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pDa
}
else
{
int32_t
i
=
pInfo
->
num
-
1
;
if
(
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
type
)
)
{
while
(
i
>=
0
&&
pList
[
i
]
->
v
.
i64
<
val
.
i64
)
{
VALUEPAIRASSIGN
(
pList
[
i
+
1
],
pList
[
i
],
pTagInfo
->
tagsLen
);
i
-=
1
;
}
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
))
{
while
(
i
>=
0
&&
pList
[
i
]
->
v
.
u64
<
val
.
u64
)
{
VALUEPAIRASSIGN
(
pList
[
i
+
1
],
pList
[
i
],
pTagInfo
->
tagsLen
);
i
-=
1
;
}
}
else
{
while
(
i
>=
0
&&
pList
[
i
]
->
v
.
dKey
<
val
.
dKey
)
{
VALUEPAIRASSIGN
(
pList
[
i
+
1
],
pList
[
i
],
pTagInfo
->
tagsLen
);
...
...
@@ -2252,14 +2266,20 @@ static void do_bottom_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pDa
}
else
{
int32_t
i
=
0
;
if
(((
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
&&
val
.
i64
<
pList
[
0
]
->
v
.
i64
)
||
((
type
>=
TSDB_DATA_TYPE_FLOAT
&&
type
<=
TSDB_DATA_TYPE_DOUBLE
)
&&
val
.
dKey
<
pList
[
0
]
->
v
.
dKey
))
{
if
((
IS_SIGNED_NUMERIC_TYPE
(
type
)
&&
val
.
i64
<
pList
[
0
]
->
v
.
i64
)
||
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
)
&&
val
.
u64
<
pList
[
0
]
->
v
.
u64
)
||
(
IS_FLOAT_TYPE
(
type
)
&&
val
.
dKey
<
pList
[
0
]
->
v
.
dKey
))
{
// find the appropriate the slot position
if
(
type
>=
TSDB_DATA_TYPE_TINYINT
&&
type
<=
TSDB_DATA_TYPE_BIGINT
)
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
type
)
)
{
while
(
i
+
1
<
maxLen
&&
pList
[
i
+
1
]
->
v
.
i64
>
val
.
i64
)
{
VALUEPAIRASSIGN
(
pList
[
i
],
pList
[
i
+
1
],
pTagInfo
->
tagsLen
);
i
+=
1
;
}
}
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
type
))
{
while
(
i
+
1
<
maxLen
&&
pList
[
i
+
1
]
->
v
.
u64
>
val
.
u64
)
{
VALUEPAIRASSIGN
(
pList
[
i
],
pList
[
i
+
1
],
pTagInfo
->
tagsLen
);
i
+=
1
;
}
}
else
{
while
(
i
+
1
<
maxLen
&&
pList
[
i
+
1
]
->
v
.
dKey
>
val
.
dKey
)
{
VALUEPAIRASSIGN
(
pList
[
i
],
pList
[
i
+
1
],
pTagInfo
->
tagsLen
);
...
...
@@ -2289,19 +2309,24 @@ static int32_t resDataAscComparFn(const void *pLeft, const void *pRight) {
tValuePair
*
pLeftElem
=
*
(
tValuePair
**
)
pLeft
;
tValuePair
*
pRightElem
=
*
(
tValuePair
**
)
pRight
;
int32_t
type
=
pLeftElem
->
v
.
nType
;
if
(
type
==
TSDB_DATA_TYPE_FLOAT
||
type
==
TSDB_DATA_TYPE_DOUBLE
)
{
if
(
IS_FLOAT_TYPE
(
pLeftElem
->
v
.
nType
))
{
if
(
pLeftElem
->
v
.
dKey
==
pRightElem
->
v
.
dKey
)
{
return
0
;
}
else
{
return
pLeftElem
->
v
.
dKey
>
pRightElem
->
v
.
dKey
?
1
:
-
1
;
}
}
else
{
}
else
if
(
IS_SIGNED_NUMERIC_TYPE
(
pLeftElem
->
v
.
nType
))
{
if
(
pLeftElem
->
v
.
i64
==
pRightElem
->
v
.
i64
)
{
return
0
;
}
else
{
return
pLeftElem
->
v
.
i64
>
pRightElem
->
v
.
i64
?
1
:
-
1
;
}
}
else
{
if
(
pLeftElem
->
v
.
u64
==
pRightElem
->
v
.
u64
)
{
return
0
;
}
else
{
return
pLeftElem
->
v
.
u64
>
pRightElem
->
v
.
u64
?
1
:
-
1
;
}
}
}
...
...
@@ -3034,17 +3059,17 @@ static void leastsquares_function(SQLFunctionCtx *pCtx) {
numOfElem
++
;
}
break
;
}
;
}
case
TSDB_DATA_TYPE_BIGINT
:
{
int64_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
;
}
case
TSDB_DATA_TYPE_DOUBLE
:
{
double
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
;
}
case
TSDB_DATA_TYPE_FLOAT
:
{
float
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
...
...
@@ -3054,12 +3079,32 @@ static void leastsquares_function(SQLFunctionCtx *pCtx) {
int16_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
;
}
case
TSDB_DATA_TYPE_TINYINT
:
{
int8_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
};
}
case
TSDB_DATA_TYPE_UTINYINT
:
{
uint8_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
case
TSDB_DATA_TYPE_USMALLINT
:
{
uint16_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
case
TSDB_DATA_TYPE_UINT
:
{
uint32_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
case
TSDB_DATA_TYPE_UBIGINT
:
{
uint64_t
*
p
=
pData
;
LEASTSQR_CAL_LOOP
(
pCtx
,
param
,
x
,
p
,
pCtx
->
inputType
,
numOfElem
,
pCtx
->
param
[
1
].
dKey
);
break
;
}
}
pInfo
->
startVal
=
x
;
...
...
@@ -3956,6 +4001,58 @@ static int32_t twa_function_impl(SQLFunctionCtx* pCtx, int32_t index, int32_t si
}
break
;
}
case
TSDB_DATA_TYPE_UTINYINT
:
{
uint8_t
*
val
=
(
uint8_t
*
)
GET_INPUT_DATA
(
pCtx
,
0
);
for
(;
i
<
size
&&
i
>=
0
;
i
+=
step
)
{
if
(
pCtx
->
hasNull
&&
isNull
((
const
char
*
)
&
val
[
i
],
pCtx
->
inputType
))
{
continue
;
}
SPoint1
st
=
{.
key
=
tsList
[
i
],
.
val
=
val
[
i
]};
pInfo
->
dOutput
+=
twa_get_area
(
pInfo
->
p
,
st
);
pInfo
->
p
=
st
;
}
break
;
}
case
TSDB_DATA_TYPE_USMALLINT
:
{
uint16_t
*
val
=
(
uint16_t
*
)
GET_INPUT_DATA
(
pCtx
,
0
);
for
(;
i
<
size
&&
i
>=
0
;
i
+=
step
)
{
if
(
pCtx
->
hasNull
&&
isNull
((
const
char
*
)
&
val
[
i
],
pCtx
->
inputType
))
{
continue
;
}
SPoint1
st
=
{.
key
=
tsList
[
i
],
.
val
=
val
[
i
]};
pInfo
->
dOutput
+=
twa_get_area
(
pInfo
->
p
,
st
);
pInfo
->
p
=
st
;
}
break
;
}
case
TSDB_DATA_TYPE_UINT
:
{
uint32_t
*
val
=
(
uint32_t
*
)
GET_INPUT_DATA
(
pCtx
,
0
);
for
(;
i
<
size
&&
i
>=
0
;
i
+=
step
)
{
if
(
pCtx
->
hasNull
&&
isNull
((
const
char
*
)
&
val
[
i
],
pCtx
->
inputType
))
{
continue
;
}
SPoint1
st
=
{.
key
=
tsList
[
i
],
.
val
=
val
[
i
]};
pInfo
->
dOutput
+=
twa_get_area
(
pInfo
->
p
,
st
);
pInfo
->
p
=
st
;
}
break
;
}
case
TSDB_DATA_TYPE_UBIGINT
:
{
uint64_t
*
val
=
(
uint64_t
*
)
GET_INPUT_DATA
(
pCtx
,
0
);
for
(;
i
<
size
&&
i
>=
0
;
i
+=
step
)
{
if
(
pCtx
->
hasNull
&&
isNull
((
const
char
*
)
&
val
[
i
],
pCtx
->
inputType
))
{
continue
;
}
SPoint1
st
=
{.
key
=
tsList
[
i
],
.
val
=
(
double
)
val
[
i
]};
pInfo
->
dOutput
+=
twa_get_area
(
pInfo
->
p
,
st
);
pInfo
->
p
=
st
;
}
break
;
}
default:
assert
(
0
);
}
...
...
src/query/src/qParserImpl.c
浏览文件 @
f402c642
...
...
@@ -413,7 +413,55 @@ void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType)
}
else
{
pField
->
bytes
=
pType
->
bytes
;
}
}
static
int32_t
tryParseNameTwoParts
(
SStrToken
*
type
)
{
int32_t
t
=
-
1
;
char
*
str
=
strndup
(
type
->
z
,
type
->
n
);
if
(
str
==
NULL
)
{
return
t
;
}
char
*
p
=
strtok
(
str
,
" "
);
if
(
p
==
NULL
)
{
tfree
(
str
);
return
t
;
}
else
{
char
*
unsign
=
strtok
(
NULL
,
" "
);
if
(
unsign
==
NULL
)
{
tfree
(
str
);
return
t
;
}
if
(
strncasecmp
(
unsign
,
"UNSIGNED"
,
8
)
==
0
)
{
for
(
int32_t
j
=
TSDB_DATA_TYPE_TINYINT
;
j
<=
TSDB_DATA_TYPE_BIGINT
;
++
j
)
{
if
(
strcasecmp
(
p
,
tDataTypes
[
j
].
name
)
==
0
)
{
t
=
j
;
break
;
}
}
tfree
(
str
);
if
(
t
==
-
1
)
{
return
-
1
;
}
switch
(
t
)
{
case
TSDB_DATA_TYPE_TINYINT
:
return
TSDB_DATA_TYPE_UTINYINT
;
case
TSDB_DATA_TYPE_SMALLINT
:
return
TSDB_DATA_TYPE_USMALLINT
;
case
TSDB_DATA_TYPE_INT
:
return
TSDB_DATA_TYPE_UINT
;
case
TSDB_DATA_TYPE_BIGINT
:
return
TSDB_DATA_TYPE_UBIGINT
;
default:
return
-
1
;
}
}
else
{
tfree
(
str
);
return
-
1
;
}
}
}
void
tSqlSetColumnType
(
TAOS_FIELD
*
pField
,
SStrToken
*
type
)
{
...
...
@@ -431,8 +479,12 @@ void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
i
+=
1
;
}
// no qualified data type found, try unsigned data type
if
(
i
==
tListLen
(
tDataTypes
))
{
return
;
i
=
tryParseNameTwoParts
(
type
);
if
(
i
==
-
1
)
{
return
;
}
}
pField
->
type
=
i
;
...
...
src/util/src/tcompare.c
浏览文件 @
f402c642
...
...
@@ -297,32 +297,14 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
__compar_fn_t
comparFn
=
NULL
;
switch
(
type
)
{
case
TSDB_DATA_TYPE_SMALLINT
:
{
comparFn
=
compareInt16Val
;
break
;
}
case
TSDB_DATA_TYPE_INT
:
{
comparFn
=
compareInt32Val
;
break
;
}
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_TIMESTAMP
:
{
comparFn
=
compareInt64Val
;
break
;
}
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_TINYINT
:{
comparFn
=
compareInt8Val
;
break
;
}
case
TSDB_DATA_TYPE_FLOAT
:
{
comparFn
=
compareFloatVal
;
break
;
}
case
TSDB_DATA_TYPE_DOUBLE
:
{
comparFn
=
compareDoubleVal
;
break
;
}
case
TSDB_DATA_TYPE_TINYINT
:
comparFn
=
compareInt8Val
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
comparFn
=
compareInt16Val
;
break
;
case
TSDB_DATA_TYPE_INT
:
comparFn
=
compareInt32Val
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_TIMESTAMP
:
comparFn
=
compareInt64Val
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
comparFn
=
compareFloatVal
;
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
comparFn
=
compareDoubleVal
;
break
;
case
TSDB_DATA_TYPE_BINARY
:
{
if
(
optr
==
TSDB_RELATION_LIKE
)
{
/* wildcard query using like operator */
comparFn
=
compareStrPatternComp
;
...
...
@@ -341,10 +323,14 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
}
else
{
comparFn
=
compareLenPrefixedWStr
;
}
break
;
}
case
TSDB_DATA_TYPE_UTINYINT
:
comparFn
=
compareUint8Val
;
break
;
case
TSDB_DATA_TYPE_USMALLINT
:
comparFn
=
compareUint16Val
;
break
;
case
TSDB_DATA_TYPE_UINT
:
comparFn
=
compareUint32Val
;
break
;
case
TSDB_DATA_TYPE_UBIGINT
:
comparFn
=
compareUint64Val
;
break
;
default:
comparFn
=
compareInt32Val
;
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录