Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
af22a928
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22017
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
af22a928
编写于
8月 19, 2022
作者:
H
Hui Li
提交者:
GitHub
8月 19, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16223 from taosdata/fix/3.0_bugfix_wxy
fix: escape character problem in auto create table insert
上级
806ee542
390c2aa3
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
122 addition
and
111 deletion
+122
-111
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+3
-3
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+3
-0
include/util/tdef.h
include/util/tdef.h
+9
-7
source/common/src/systable.c
source/common/src/systable.c
+1
-1
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+2
-2
source/libs/executor/src/executor.c
source/libs/executor/src/executor.c
+8
-8
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+2
-2
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+0
-1
source/libs/nodes/src/nodesToSQLFuncs.c
source/libs/nodes/src/nodesToSQLFuncs.c
+85
-37
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+2
-2
source/libs/scalar/inc/filterInt.h
source/libs/scalar/inc/filterInt.h
+0
-1
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+3
-43
source/libs/scalar/test/scalar/scalarTests.cpp
source/libs/scalar/test/scalar/scalarTests.cpp
+3
-3
tests/system-test/1-insert/time_range_wise.py
tests/system-test/1-insert/time_range_wise.py
+1
-1
未找到文件。
include/libs/nodes/nodes.h
浏览文件 @
af22a928
...
...
@@ -105,7 +105,7 @@ typedef enum ENodeType {
QUERY_NODE_COLUMN_REF
,
// Statement nodes are used in parser and planner module.
QUERY_NODE_SET_OPERATOR
,
QUERY_NODE_SET_OPERATOR
=
100
,
QUERY_NODE_SELECT_STMT
,
QUERY_NODE_VNODE_MODIF_STMT
,
QUERY_NODE_CREATE_DATABASE_STMT
,
...
...
@@ -198,7 +198,7 @@ typedef enum ENodeType {
QUERY_NODE_QUERY
,
// logic plan node
QUERY_NODE_LOGIC_PLAN_SCAN
,
QUERY_NODE_LOGIC_PLAN_SCAN
=
1000
,
QUERY_NODE_LOGIC_PLAN_JOIN
,
QUERY_NODE_LOGIC_PLAN_AGG
,
QUERY_NODE_LOGIC_PLAN_PROJECT
,
...
...
@@ -215,7 +215,7 @@ typedef enum ENodeType {
QUERY_NODE_LOGIC_PLAN
,
// physical plan node
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
=
1100
,
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
,
...
...
include/libs/nodes/querynodes.h
浏览文件 @
af22a928
...
...
@@ -428,6 +428,9 @@ void nodesValueNodeToVariant(const SValueNode* pNode, SVariant* pVal);
char
*
nodesGetFillModeString
(
EFillMode
mode
);
int32_t
nodesMergeConds
(
SNode
**
pDst
,
SNodeList
**
pSrc
);
const
char
*
operatorTypeStr
(
EOperatorType
type
);
const
char
*
logicConditionTypeStr
(
ELogicConditionType
type
);
#ifdef __cplusplus
}
#endif
...
...
include/util/tdef.h
浏览文件 @
af22a928
...
...
@@ -132,15 +132,14 @@ typedef enum EOperatorType {
OP_TYPE_DIV
,
OP_TYPE_REM
,
// unary arithmetic operator
OP_TYPE_MINUS
,
OP_TYPE_ASSIGN
,
OP_TYPE_MINUS
=
20
,
// bitwise operator
OP_TYPE_BIT_AND
,
OP_TYPE_BIT_AND
=
30
,
OP_TYPE_BIT_OR
,
// binary comparison operator
OP_TYPE_GREATER_THAN
,
OP_TYPE_GREATER_THAN
=
40
,
OP_TYPE_GREATER_EQUAL
,
OP_TYPE_LOWER_THAN
,
OP_TYPE_LOWER_EQUAL
,
...
...
@@ -153,7 +152,7 @@ typedef enum EOperatorType {
OP_TYPE_MATCH
,
OP_TYPE_NMATCH
,
// unary comparison operator
OP_TYPE_IS_NULL
,
OP_TYPE_IS_NULL
=
100
,
OP_TYPE_IS_NOT_NULL
,
OP_TYPE_IS_TRUE
,
OP_TYPE_IS_FALSE
,
...
...
@@ -163,8 +162,11 @@ typedef enum EOperatorType {
OP_TYPE_IS_NOT_UNKNOWN
,
// json operator
OP_TYPE_JSON_GET_VALUE
,
OP_TYPE_JSON_CONTAINS
OP_TYPE_JSON_GET_VALUE
=
150
,
OP_TYPE_JSON_CONTAINS
,
// internal operator
OP_TYPE_ASSIGN
=
200
}
EOperatorType
;
#define OP_TYPE_CALC_MAX OP_TYPE_BIT_OR
...
...
source/common/src/systable.c
浏览文件 @
af22a928
...
...
@@ -88,7 +88,7 @@ static const SSysDbTableSchema userDBSchema[] = {
{.
name
=
"comp"
,
.
bytes
=
1
,
.
type
=
TSDB_DATA_TYPE_TINYINT
},
{.
name
=
"precision"
,
.
bytes
=
2
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"status"
,
.
bytes
=
10
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"retention"
,
.
bytes
=
60
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"retention
s
"
,
.
bytes
=
60
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"single_stable"
,
.
bytes
=
1
,
.
type
=
TSDB_DATA_TYPE_BOOL
},
{.
name
=
"cachemodel"
,
.
bytes
=
TSDB_CACHE_MODEL_STR_LEN
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"cachesize"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_INT
},
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
af22a928
...
...
@@ -205,7 +205,7 @@ typedef struct SExprSupp {
}
SExprSupp
;
typedef
struct
SOperatorInfo
{
uint
8_t
operatorType
;
uint
16_t
operatorType
;
bool
blocking
;
// block operator or not
uint8_t
status
;
// denote if current operator is completed
char
*
name
;
// name, for debug purpose
...
...
@@ -434,7 +434,7 @@ typedef struct SStreamAggSupporter {
typedef
struct
SessionWindowSupporter
{
SStreamAggSupporter
*
pStreamAggSup
;
int64_t
gap
;
uint
8_t
parentType
;
uint
16_t
parentType
;
SAggSupporter
*
pIntervalAggSup
;
}
SessionWindowSupporter
;
...
...
source/libs/executor/src/executor.c
浏览文件 @
af22a928
...
...
@@ -348,7 +348,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId,
taosThreadOnce
(
&
initPoolOnce
,
initRefPool
);
atexit
(
cleanupRefPool
);
qDebug
(
"start to create subplan task, TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
taskId
,
pSubplan
->
id
.
queryId
);
qDebug
(
"start to create subplan task, TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
taskId
,
pSubplan
->
id
.
queryId
);
int32_t
code
=
createExecTaskInfoImpl
(
pSubplan
,
pTask
,
readHandle
,
taskId
,
sql
,
model
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -374,7 +374,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId,
}
}
qDebug
(
"subplan task create completed, TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
taskId
,
pSubplan
->
id
.
queryId
);
qDebug
(
"subplan task create completed, TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
taskId
,
pSubplan
->
id
.
queryId
);
_error:
// if failed to add ref for all tables in this query, abort current query
...
...
@@ -427,7 +427,7 @@ int waitMoment(SQInfo* pQInfo) {
#endif
static
void
freeBlock
(
void
*
param
)
{
SSDataBlock
*
pBlock
=
*
(
SSDataBlock
**
)
param
;
SSDataBlock
*
pBlock
=
*
(
SSDataBlock
**
)
param
;
blockDataDestroy
(
pBlock
);
}
...
...
@@ -467,12 +467,12 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds) {
qDebug
(
"%s execTask is launched"
,
GET_TASKID
(
pTaskInfo
));
int32_t
current
=
0
;
int32_t
current
=
0
;
SSDataBlock
*
pRes
=
NULL
;
int64_t
st
=
taosGetTimestampUs
();
while
((
pRes
=
pTaskInfo
->
pRoot
->
fpSet
.
getNextFn
(
pTaskInfo
->
pRoot
))
!=
NULL
)
{
while
((
pRes
=
pTaskInfo
->
pRoot
->
fpSet
.
getNextFn
(
pTaskInfo
->
pRoot
))
!=
NULL
)
{
SSDataBlock
*
p
=
createOneDataBlock
(
pRes
,
true
);
current
+=
p
->
info
.
rows
;
ASSERT
(
p
->
info
.
rows
>
0
);
...
...
@@ -494,7 +494,7 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds) {
uint64_t
total
=
pTaskInfo
->
pRoot
->
resultInfo
.
totalRows
;
qDebug
(
"%s task suspended, %d rows in %d blocks returned, total:%"
PRId64
" rows, in sinkNode:%d, elapsed:%.2f ms"
,
GET_TASKID
(
pTaskInfo
),
current
,
(
int32_t
)
taosArrayGetSize
(
pResList
),
total
,
0
,
el
/
1000
.
0
);
GET_TASKID
(
pTaskInfo
),
current
,
(
int32_t
)
taosArrayGetSize
(
pResList
),
total
,
0
,
el
/
1000
.
0
);
atomic_store_64
(
&
pTaskInfo
->
owner
,
0
);
return
pTaskInfo
->
code
;
...
...
@@ -632,7 +632,7 @@ int32_t qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner) {
SOperatorInfo
*
pOperator
=
pTaskInfo
->
pRoot
;
while
(
1
)
{
uint
8
_t
type
=
pOperator
->
operatorType
;
uint
16
_t
type
=
pOperator
->
operatorType
;
if
(
type
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
*
scanner
=
pOperator
->
info
;
return
0
;
...
...
@@ -691,7 +691,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, const STqOffsetVal* pOffset) {
pTaskInfo
->
streamInfo
.
prepareStatus
=
*
pOffset
;
if
(
!
tOffsetEqual
(
pOffset
,
&
pTaskInfo
->
streamInfo
.
lastStatus
))
{
while
(
1
)
{
uint
8
_t
type
=
pOperator
->
operatorType
;
uint
16
_t
type
=
pOperator
->
operatorType
;
pOperator
->
status
=
OP_OPENED
;
// TODO add more check
if
(
type
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
af22a928
...
...
@@ -1785,7 +1785,7 @@ void increaseTs(SqlFunctionCtx* pCtx) {
}
}
void
initIntervalDownStream
(
SOperatorInfo
*
downstream
,
uint
8
_t
type
,
SAggSupporter
*
pSup
)
{
void
initIntervalDownStream
(
SOperatorInfo
*
downstream
,
uint
16
_t
type
,
SAggSupporter
*
pSup
)
{
if
(
downstream
->
operatorType
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
// Todo(liuyao) support partition by column
return
;
...
...
@@ -3546,7 +3546,7 @@ void initDummyFunction(SqlFunctionCtx* pDummy, SqlFunctionCtx* pCtx, int32_t num
}
void
initDownStream
(
SOperatorInfo
*
downstream
,
SStreamAggSupporter
*
pAggSup
,
int64_t
gap
,
int64_t
waterMark
,
uint
8
_t
type
)
{
uint
16
_t
type
)
{
ASSERT
(
downstream
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
);
SStreamScanInfo
*
pScanInfo
=
downstream
->
info
;
pScanInfo
->
sessionSup
=
(
SessionWindowSupporter
){.
pStreamAggSup
=
pAggSup
,
.
gap
=
gap
,
.
parentType
=
type
};
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
af22a928
...
...
@@ -4673,7 +4673,6 @@ static int32_t jsonToNode(const SJson* pJson, void* pObj) {
int32_t
code
;
tjsonGetNumberValue
(
pJson
,
jkNodeType
,
pNode
->
type
,
code
);
;
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonToObject
(
pJson
,
nodesNodeName
(
pNode
->
type
),
jsonToSpecificNode
,
pNode
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
...
...
source/libs/nodes/src/nodesToSQLFuncs.c
浏览文件 @
af22a928
...
...
@@ -21,36 +21,89 @@
#include "taoserror.h"
#include "thash.h"
char
*
gOperatorStr
[]
=
{
NULL
,
"+"
,
"-"
,
"*"
,
"/"
,
"%"
,
"-"
,
"&"
,
"|"
,
">"
,
">="
,
"<"
,
"<="
,
"="
,
"<>"
,
"IN"
,
"NOT IN"
,
"LIKE"
,
"NOT LIKE"
,
"MATCH"
,
"NMATCH"
,
"IS NULL"
,
"IS NOT NULL"
,
"IS TRUE"
,
"IS FALSE"
,
"IS UNKNOWN"
,
"IS NOT TRUE"
,
"IS NOT FALSE"
,
"IS NOT UNKNOWN"
};
char
*
gLogicConditionStr
[]
=
{
"AND"
,
"OR"
,
"NOT"
};
const
char
*
operatorTypeStr
(
EOperatorType
type
)
{
switch
(
type
)
{
case
OP_TYPE_ADD
:
return
"+"
;
case
OP_TYPE_SUB
:
return
"-"
;
case
OP_TYPE_MULTI
:
return
"*"
;
case
OP_TYPE_DIV
:
return
"/"
;
case
OP_TYPE_REM
:
return
"%"
;
case
OP_TYPE_MINUS
:
return
"-"
;
case
OP_TYPE_BIT_AND
:
return
"&"
;
case
OP_TYPE_BIT_OR
:
return
"|"
;
case
OP_TYPE_GREATER_THAN
:
return
">"
;
case
OP_TYPE_GREATER_EQUAL
:
return
">="
;
case
OP_TYPE_LOWER_THAN
:
return
"<"
;
case
OP_TYPE_LOWER_EQUAL
:
return
"<="
;
case
OP_TYPE_EQUAL
:
return
"="
;
case
OP_TYPE_NOT_EQUAL
:
return
"<>"
;
case
OP_TYPE_IN
:
return
"IN"
;
case
OP_TYPE_NOT_IN
:
return
"NOT IN"
;
case
OP_TYPE_LIKE
:
return
"LIKE"
;
case
OP_TYPE_NOT_LIKE
:
return
"NOT LIKE"
;
case
OP_TYPE_MATCH
:
return
"MATCH"
;
case
OP_TYPE_NMATCH
:
return
"NMATCH"
;
case
OP_TYPE_IS_NULL
:
return
"IS NULL"
;
case
OP_TYPE_IS_NOT_NULL
:
return
"IS NOT NULL"
;
case
OP_TYPE_IS_TRUE
:
return
"IS TRUE"
;
case
OP_TYPE_IS_FALSE
:
return
"IS FALSE"
;
case
OP_TYPE_IS_UNKNOWN
:
return
"IS UNKNOWN"
;
case
OP_TYPE_IS_NOT_TRUE
:
return
"IS NOT TRUE"
;
case
OP_TYPE_IS_NOT_FALSE
:
return
"IS NOT FALSE"
;
case
OP_TYPE_IS_NOT_UNKNOWN
:
return
"IS NOT UNKNOWN"
;
case
OP_TYPE_JSON_GET_VALUE
:
return
"=>"
;
case
OP_TYPE_JSON_CONTAINS
:
return
"CONTAINS"
;
case
OP_TYPE_ASSIGN
:
return
"="
;
default:
break
;
}
return
"UNKNOWN"
;
}
const
char
*
logicConditionTypeStr
(
ELogicConditionType
type
)
{
switch
(
type
)
{
case
LOGIC_COND_TYPE_AND
:
return
"AND"
;
case
LOGIC_COND_TYPE_OR
:
return
"OR"
;
case
LOGIC_COND_TYPE_NOT
:
return
"NOT"
;
default:
break
;
}
return
"UNKNOWN"
;
}
int32_t
nodesNodeToSQL
(
SNode
*
pNode
,
char
*
buf
,
int32_t
bufSize
,
int32_t
*
len
)
{
switch
(
pNode
->
type
)
{
...
...
@@ -94,12 +147,7 @@ int32_t nodesNodeToSQL(SNode *pNode, char *buf, int32_t bufSize, int32_t *len) {
NODES_ERR_RET
(
nodesNodeToSQL
(
pOpNode
->
pLeft
,
buf
,
bufSize
,
len
));
}
if
(
pOpNode
->
opType
>=
(
sizeof
(
gOperatorStr
)
/
sizeof
(
gOperatorStr
[
0
])))
{
nodesError
(
"unknown operation type:%d"
,
pOpNode
->
opType
);
NODES_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
" %s "
,
gOperatorStr
[
pOpNode
->
opType
]);
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
" %s "
,
operatorTypeStr
(
pOpNode
->
opType
));
if
(
pOpNode
->
pRight
)
{
NODES_ERR_RET
(
nodesNodeToSQL
(
pOpNode
->
pRight
,
buf
,
bufSize
,
len
));
...
...
@@ -118,7 +166,7 @@ int32_t nodesNodeToSQL(SNode *pNode, char *buf, int32_t bufSize, int32_t *len) {
FOREACH
(
node
,
pLogicNode
->
pParameterList
)
{
if
(
!
first
)
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
" %s "
,
gLogicConditionStr
[
pLogicNode
->
condType
]
);
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
" %s "
,
logicConditionTypeStr
(
pLogicNode
->
condType
)
);
}
NODES_ERR_RET
(
nodesNodeToSQL
(
node
,
buf
,
bufSize
,
len
));
first
=
false
;
...
...
source/libs/parser/src/parInsert.c
浏览文件 @
af22a928
...
...
@@ -143,9 +143,9 @@ static int32_t createSName(SName* pName, SToken* pTableName, int32_t acctId, con
}
char
name
[
TSDB_DB_FNAME_LEN
]
=
{
0
};
strncpy
(
name
,
pTableName
->
z
,
dbLen
);
d
bLen
=
strdequote
(
name
);
int32_t
actualD
bLen
=
strdequote
(
name
);
code
=
tNameSetDbName
(
pName
,
acctId
,
name
,
d
bLen
);
code
=
tNameSetDbName
(
pName
,
acctId
,
name
,
actualD
bLen
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
buildInvalidOperationMsg
(
pMsgBuf
,
msg1
);
}
...
...
source/libs/scalar/inc/filterInt.h
浏览文件 @
af22a928
...
...
@@ -350,7 +350,6 @@ struct SFilterInfo {
extern
bool
filterDoCompare
(
__compar_fn_t
func
,
uint8_t
optr
,
void
*
left
,
void
*
right
);
extern
__compar_fn_t
filterGetCompFunc
(
int32_t
type
,
int32_t
optr
);
extern
OptrStr
gOptrStr
[];
#ifdef __cplusplus
}
...
...
source/libs/scalar/src/filter.c
浏览文件 @
af22a928
...
...
@@ -24,46 +24,6 @@
#include "ttime.h"
#include "functionMgt.h"
OptrStr
gOptrStr
[]
=
{
{
0
,
"invalid"
},
{
OP_TYPE_ADD
,
"+"
},
{
OP_TYPE_SUB
,
"-"
},
{
OP_TYPE_MULTI
,
"*"
},
{
OP_TYPE_DIV
,
"/"
},
{
OP_TYPE_REM
,
"%"
},
{
OP_TYPE_MINUS
,
"minus"
},
{
OP_TYPE_ASSIGN
,
"assign"
},
// bit operator
{
OP_TYPE_BIT_AND
,
"&"
},
{
OP_TYPE_BIT_OR
,
"|"
},
// comparison operator
{
OP_TYPE_GREATER_THAN
,
">"
},
{
OP_TYPE_GREATER_EQUAL
,
">="
},
{
OP_TYPE_LOWER_THAN
,
"<"
},
{
OP_TYPE_LOWER_EQUAL
,
"<="
},
{
OP_TYPE_EQUAL
,
"=="
},
{
OP_TYPE_NOT_EQUAL
,
"!="
},
{
OP_TYPE_IN
,
"in"
},
{
OP_TYPE_NOT_IN
,
"not in"
},
{
OP_TYPE_LIKE
,
"like"
},
{
OP_TYPE_NOT_LIKE
,
"not like"
},
{
OP_TYPE_MATCH
,
"match"
},
{
OP_TYPE_NMATCH
,
"nmatch"
},
{
OP_TYPE_IS_NULL
,
"is null"
},
{
OP_TYPE_IS_NOT_NULL
,
"not null"
},
{
OP_TYPE_IS_TRUE
,
"is true"
},
{
OP_TYPE_IS_FALSE
,
"is false"
},
{
OP_TYPE_IS_UNKNOWN
,
"is unknown"
},
{
OP_TYPE_IS_NOT_TRUE
,
"not true"
},
{
OP_TYPE_IS_NOT_FALSE
,
"not false"
},
{
OP_TYPE_IS_NOT_UNKNOWN
,
"not unknown"
},
// json operator
{
OP_TYPE_JSON_GET_VALUE
,
"->"
},
{
OP_TYPE_JSON_CONTAINS
,
"json contains"
}
};
bool
filterRangeCompGi
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
int32_t
result
=
cfunc
(
maxv
,
minr
);
return
result
>=
0
;
...
...
@@ -986,7 +946,7 @@ int32_t filterAddUnit(SFilterInfo *info, uint8_t optr, SFilterFieldId *left, SFi
}
else
{
int32_t
paramNum
=
scalarGetOperatorParamNum
(
optr
);
if
(
1
!=
paramNum
)
{
fltError
(
"invalid right field in unit, operator:%s, rightType:%d"
,
gOptrStr
[
optr
].
str
,
u
->
right
.
type
);
fltError
(
"invalid right field in unit, operator:%s, rightType:%d"
,
operatorTypeStr
(
optr
)
,
u
->
right
.
type
);
return
TSDB_CODE_QRY_APP_ERROR
;
}
}
...
...
@@ -1517,7 +1477,7 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options)
SFilterField
*
left
=
FILTER_UNIT_LEFT_FIELD
(
info
,
unit
);
SColumnNode
*
refNode
=
(
SColumnNode
*
)
left
->
desc
;
if
(
unit
->
compare
.
optr
>=
0
&&
unit
->
compare
.
optr
<=
OP_TYPE_JSON_CONTAINS
){
len
=
sprintf
(
str
,
"UNIT[%d] => [%d][%d] %s ["
,
i
,
refNode
->
dataBlockId
,
refNode
->
slotId
,
gOptrStr
[
unit
->
compare
.
optr
].
str
);
len
=
sprintf
(
str
,
"UNIT[%d] => [%d][%d] %s ["
,
i
,
refNode
->
dataBlockId
,
refNode
->
slotId
,
operatorTypeStr
(
unit
->
compare
.
optr
)
);
}
if
(
unit
->
right
.
type
==
FLD_TYPE_VALUE
&&
FILTER_UNIT_OPTR
(
unit
)
!=
OP_TYPE_IN
)
{
...
...
@@ -1536,7 +1496,7 @@ void filterDumpInfoToString(SFilterInfo *info, const char *msg, int32_t options)
if
(
unit
->
compare
.
optr2
)
{
strcat
(
str
,
" && "
);
if
(
unit
->
compare
.
optr2
>=
0
&&
unit
->
compare
.
optr2
<=
OP_TYPE_JSON_CONTAINS
){
sprintf
(
str
+
strlen
(
str
),
"[%d][%d] %s ["
,
refNode
->
dataBlockId
,
refNode
->
slotId
,
gOptrStr
[
unit
->
compare
.
optr2
].
str
);
sprintf
(
str
+
strlen
(
str
),
"[%d][%d] %s ["
,
refNode
->
dataBlockId
,
refNode
->
slotId
,
operatorTypeStr
(
unit
->
compare
.
optr2
)
);
}
if
(
unit
->
right2
.
type
==
FLD_TYPE_VALUE
&&
FILTER_UNIT_OPTR
(
unit
)
!=
OP_TYPE_IN
)
{
...
...
source/libs/scalar/test/scalar/scalarTests.cpp
浏览文件 @
af22a928
...
...
@@ -1089,16 +1089,16 @@ void makeCalculate(void *json, void *key, int32_t rightType, void *rightData, do
}
else
if
(
opType
==
OP_TYPE_ADD
||
opType
==
OP_TYPE_SUB
||
opType
==
OP_TYPE_MULTI
||
opType
==
OP_TYPE_DIV
||
opType
==
OP_TYPE_REM
||
opType
==
OP_TYPE_MINUS
){
printf
(
"op:%s,1result:%f,except:%f
\n
"
,
gOptrStr
[
opType
].
str
,
*
((
double
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
printf
(
"op:%s,1result:%f,except:%f
\n
"
,
operatorTypeStr
(
opType
)
,
*
((
double
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
ASSERT_TRUE
(
fabs
(
*
((
double
*
)
colDataGetData
(
column
,
0
))
-
exceptValue
)
<
0.0001
);
}
else
if
(
opType
==
OP_TYPE_BIT_AND
||
opType
==
OP_TYPE_BIT_OR
){
printf
(
"op:%s,2result:%"
PRId64
",except:%f
\n
"
,
gOptrStr
[
opType
].
str
,
*
((
int64_t
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
printf
(
"op:%s,2result:%"
PRId64
",except:%f
\n
"
,
operatorTypeStr
(
opType
)
,
*
((
int64_t
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
ASSERT_EQ
(
*
((
int64_t
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
}
else
if
(
opType
==
OP_TYPE_GREATER_THAN
||
opType
==
OP_TYPE_GREATER_EQUAL
||
opType
==
OP_TYPE_LOWER_THAN
||
opType
==
OP_TYPE_LOWER_EQUAL
||
opType
==
OP_TYPE_EQUAL
||
opType
==
OP_TYPE_NOT_EQUAL
||
opType
==
OP_TYPE_IS_NULL
||
opType
==
OP_TYPE_IS_NOT_NULL
||
opType
==
OP_TYPE_IS_TRUE
||
opType
==
OP_TYPE_LIKE
||
opType
==
OP_TYPE_NOT_LIKE
||
opType
==
OP_TYPE_MATCH
||
opType
==
OP_TYPE_NMATCH
){
printf
(
"op:%s,3result:%d,except:%f
\n
"
,
gOptrStr
[
opType
].
str
,
*
((
bool
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
printf
(
"op:%s,3result:%d,except:%f
\n
"
,
operatorTypeStr
(
opType
)
,
*
((
bool
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
ASSERT_EQ
(
*
((
bool
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
}
...
...
tests/system-test/1-insert/time_range_wise.py
浏览文件 @
af22a928
...
...
@@ -293,7 +293,7 @@ class TDTestCase:
dbname
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
query
(
"select * from information_schema.ins_databases"
)
for
index
,
value
in
enumerate
(
tdSql
.
cursor
.
description
):
if
value
[
0
]
==
"retention"
:
if
value
[
0
]
==
"retention
s
"
:
r_index
=
index
break
for
row
in
tdSql
.
queryResult
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录