Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
db34294b
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1191
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看板
提交
db34294b
编写于
6月 22, 2022
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
opt: filter by tag
上级
e7faf699
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
183 addition
and
154 deletion
+183
-154
include/common/tdatablock.h
include/common/tdatablock.h
+2
-1
include/common/tdataformat.h
include/common/tdataformat.h
+2
-0
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+2
-2
source/common/src/tdatablock.c
source/common/src/tdatablock.c
+1
-1
source/common/src/tdataformat.c
source/common/src/tdataformat.c
+12
-0
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+0
-3
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+2
-2
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+1
-0
source/libs/scalar/src/sclvector.c
source/libs/scalar/src/sclvector.c
+31
-9
tests/system-test/2-query/json_tag.py
tests/system-test/2-query/json_tag.py
+130
-136
未找到文件。
include/common/tdatablock.h
浏览文件 @
db34294b
...
@@ -71,7 +71,8 @@ SEpSet getEpSet_s(SCorEpSet* pEpSet);
...
@@ -71,7 +71,8 @@ SEpSet getEpSet_s(SCorEpSet* pEpSet);
#define colDataGetData(p1_, r_) \
#define colDataGetData(p1_, r_) \
((IS_VAR_DATA_TYPE((p1_)->info.type)) ? colDataGetVarData(p1_, r_) : colDataGetNumData(p1_, r_))
((IS_VAR_DATA_TYPE((p1_)->info.type)) ? colDataGetVarData(p1_, r_) : colDataGetNumData(p1_, r_))
#define IS_JSON_NULL(type, data) ((type) == TSDB_DATA_TYPE_JSON && *(data) == TSDB_DATA_TYPE_NULL)
#define IS_JSON_NULL(type, data) ((type) == TSDB_DATA_TYPE_JSON && \
(*(data) == TSDB_DATA_TYPE_NULL || tTagIsJsonNull(data)))
static
FORCE_INLINE
bool
colDataIsNull_s
(
const
SColumnInfoData
*
pColumnInfoData
,
uint32_t
row
)
{
static
FORCE_INLINE
bool
colDataIsNull_s
(
const
SColumnInfoData
*
pColumnInfoData
,
uint32_t
row
)
{
if
(
!
pColumnInfoData
->
hasNull
)
{
if
(
!
pColumnInfoData
->
hasNull
)
{
...
...
include/common/tdataformat.h
浏览文件 @
db34294b
...
@@ -70,6 +70,8 @@ int32_t tGetTSRow(uint8_t *p, STSRow2 *pRow);
...
@@ -70,6 +70,8 @@ int32_t tGetTSRow(uint8_t *p, STSRow2 *pRow);
// STag
// STag
int32_t
tTagNew
(
SArray
*
pArray
,
int32_t
version
,
int8_t
isJson
,
STag
**
ppTag
);
int32_t
tTagNew
(
SArray
*
pArray
,
int32_t
version
,
int8_t
isJson
,
STag
**
ppTag
);
void
tTagFree
(
STag
*
pTag
);
void
tTagFree
(
STag
*
pTag
);
bool
tTagIsJson
(
const
void
*
pTag
);
bool
tTagIsJsonNull
(
void
*
tagVal
);
bool
tTagGet
(
const
STag
*
pTag
,
STagVal
*
pTagVal
);
bool
tTagGet
(
const
STag
*
pTag
,
STagVal
*
pTagVal
);
char
*
tTagValToData
(
const
STagVal
*
pTagVal
,
bool
isJson
);
char
*
tTagValToData
(
const
STagVal
*
pTagVal
,
bool
isJson
);
int32_t
tEncodeTag
(
SEncoder
*
pEncoder
,
const
STag
*
pTag
);
int32_t
tEncodeTag
(
SEncoder
*
pEncoder
,
const
STag
*
pTag
);
...
...
source/client/src/clientImpl.c
浏览文件 @
db34294b
...
@@ -1581,7 +1581,7 @@ static int32_t estimateJsonLen(SReqResultInfo* pResultInfo, int32_t numOfCols, i
...
@@ -1581,7 +1581,7 @@ static int32_t estimateJsonLen(SReqResultInfo* pResultInfo, int32_t numOfCols, i
char
*
jsonInnerData
=
data
+
CHAR_BYTES
;
char
*
jsonInnerData
=
data
+
CHAR_BYTES
;
if
(
jsonInnerType
==
TSDB_DATA_TYPE_NULL
)
{
if
(
jsonInnerType
==
TSDB_DATA_TYPE_NULL
)
{
len
+=
(
VARSTR_HEADER_SIZE
+
strlen
(
TSDB_DATA_NULL_STR_L
));
len
+=
(
VARSTR_HEADER_SIZE
+
strlen
(
TSDB_DATA_NULL_STR_L
));
}
else
if
(
jsonInnerType
&
TD_TAG_JSON
)
{
}
else
if
(
tTagIsJson
(
data
)
)
{
len
+=
(
VARSTR_HEADER_SIZE
+
((
const
STag
*
)(
data
))
->
len
);
len
+=
(
VARSTR_HEADER_SIZE
+
((
const
STag
*
)(
data
))
->
len
);
}
else
if
(
jsonInnerType
==
TSDB_DATA_TYPE_NCHAR
)
{
// value -> "value"
}
else
if
(
jsonInnerType
==
TSDB_DATA_TYPE_NCHAR
)
{
// value -> "value"
len
+=
varDataTLen
(
jsonInnerData
)
+
CHAR_BYTES
*
2
;
len
+=
varDataTLen
(
jsonInnerData
)
+
CHAR_BYTES
*
2
;
...
@@ -1666,7 +1666,7 @@ static int32_t doConvertJson(SReqResultInfo* pResultInfo, int32_t numOfCols, int
...
@@ -1666,7 +1666,7 @@ static int32_t doConvertJson(SReqResultInfo* pResultInfo, int32_t numOfCols, int
if
(
jsonInnerType
==
TSDB_DATA_TYPE_NULL
)
{
if
(
jsonInnerType
==
TSDB_DATA_TYPE_NULL
)
{
sprintf
(
varDataVal
(
dst
),
"%s"
,
TSDB_DATA_NULL_STR_L
);
sprintf
(
varDataVal
(
dst
),
"%s"
,
TSDB_DATA_NULL_STR_L
);
varDataSetLen
(
dst
,
strlen
(
varDataVal
(
dst
)));
varDataSetLen
(
dst
,
strlen
(
varDataVal
(
dst
)));
}
else
if
(
jsonInnerType
&
TD_TAG_JSON
)
{
}
else
if
(
tTagIsJson
(
data
)
)
{
char
*
jsonString
=
parseTagDatatoJson
(
data
);
char
*
jsonString
=
parseTagDatatoJson
(
data
);
STR_TO_VARSTR
(
dst
,
jsonString
);
STR_TO_VARSTR
(
dst
,
jsonString
);
taosMemoryFree
(
jsonString
);
taosMemoryFree
(
jsonString
);
...
...
source/common/src/tdatablock.c
浏览文件 @
db34294b
...
@@ -110,7 +110,7 @@ int32_t getJsonValueLen(const char* data) {
...
@@ -110,7 +110,7 @@ int32_t getJsonValueLen(const char* data) {
dataLen
=
DOUBLE_BYTES
+
CHAR_BYTES
;
dataLen
=
DOUBLE_BYTES
+
CHAR_BYTES
;
}
else
if
(
*
data
==
TSDB_DATA_TYPE_BOOL
)
{
}
else
if
(
*
data
==
TSDB_DATA_TYPE_BOOL
)
{
dataLen
=
CHAR_BYTES
+
CHAR_BYTES
;
dataLen
=
CHAR_BYTES
+
CHAR_BYTES
;
}
else
if
(
*
data
&
TD_TAG_JSON
)
{
// json string
}
else
if
(
tTagIsJson
(
data
)
)
{
// json string
dataLen
=
((
STag
*
)(
data
))
->
len
;
dataLen
=
((
STag
*
)(
data
))
->
len
;
}
else
{
}
else
{
ASSERT
(
0
);
ASSERT
(
0
);
...
...
source/common/src/tdataformat.c
浏览文件 @
db34294b
...
@@ -924,6 +924,18 @@ static int32_t tGetTagVal(uint8_t *p, STagVal *pTagVal, int8_t isJson) {
...
@@ -924,6 +924,18 @@ static int32_t tGetTagVal(uint8_t *p, STagVal *pTagVal, int8_t isJson) {
return
n
;
return
n
;
}
}
bool
tTagIsJson
(
const
void
*
pTag
){
return
(((
const
STag
*
)
pTag
)
->
flags
&
TD_TAG_JSON
);
}
bool
tTagIsJsonNull
(
void
*
data
){
STag
*
pTag
=
(
STag
*
)
data
;
int8_t
isJson
=
tTagIsJson
(
pTag
);
if
(
!
isJson
)
return
false
;
return
((
STag
*
)
data
)
->
nTag
==
0
;
}
int32_t
tTagNew
(
SArray
*
pArray
,
int32_t
version
,
int8_t
isJson
,
STag
**
ppTag
)
{
int32_t
tTagNew
(
SArray
*
pArray
,
int32_t
version
,
int8_t
isJson
,
STag
**
ppTag
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
uint8_t
*
p
=
NULL
;
uint8_t
*
p
=
NULL
;
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
db34294b
...
@@ -613,9 +613,6 @@ const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *val) {
...
@@ -613,9 +613,6 @@ const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *val) {
ASSERT
(
pEntry
->
type
==
TSDB_CHILD_TABLE
);
ASSERT
(
pEntry
->
type
==
TSDB_CHILD_TABLE
);
STag
*
tag
=
(
STag
*
)
pEntry
->
ctbEntry
.
pTags
;
STag
*
tag
=
(
STag
*
)
pEntry
->
ctbEntry
.
pTags
;
if
(
type
==
TSDB_DATA_TYPE_JSON
)
{
if
(
type
==
TSDB_DATA_TYPE_JSON
)
{
if
(
tag
->
nTag
==
0
)
{
return
NULL
;
}
return
tag
;
return
tag
;
}
}
bool
find
=
tTagGet
(
tag
,
val
);
bool
find
=
tTagGet
(
tag
,
val
);
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
db34294b
...
@@ -337,7 +337,7 @@ void addTagPseudoColumnData(SReadHandle* pHandle, SExprInfo* pPseudoExpr, int32_
...
@@ -337,7 +337,7 @@ void addTagPseudoColumnData(SReadHandle* pHandle, SExprInfo* pPseudoExpr, int32_
}
}
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
colDataAppend
(
pColInfoData
,
i
,
data
,
(
data
==
NULL
));
colDataAppend
(
pColInfoData
,
i
,
data
,
(
data
==
NULL
)
||
(
pColInfoData
->
info
.
type
==
TSDB_DATA_TYPE_JSON
&&
tTagIsJsonNull
(
data
))
);
}
}
if
(
data
&&
(
pColInfoData
->
info
.
type
!=
TSDB_DATA_TYPE_JSON
)
&&
p
!=
NULL
&&
if
(
data
&&
(
pColInfoData
->
info
.
type
!=
TSDB_DATA_TYPE_JSON
)
&&
p
!=
NULL
&&
...
@@ -1824,7 +1824,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) {
...
@@ -1824,7 +1824,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) {
}
else
{
}
else
{
data
=
(
char
*
)
p
;
data
=
(
char
*
)
p
;
}
}
colDataAppend
(
pDst
,
count
,
data
,
(
data
==
NULL
));
colDataAppend
(
pDst
,
count
,
data
,
(
data
==
NULL
)
||
(
pDst
->
info
.
type
==
TSDB_DATA_TYPE_JSON
&&
tTagIsJsonNull
(
data
))
);
if
(
pDst
->
info
.
type
!=
TSDB_DATA_TYPE_JSON
&&
p
!=
NULL
&&
IS_VAR_DATA_TYPE
(((
const
STagVal
*
)
p
)
->
type
)
&&
if
(
pDst
->
info
.
type
!=
TSDB_DATA_TYPE_JSON
&&
p
!=
NULL
&&
IS_VAR_DATA_TYPE
(((
const
STagVal
*
)
p
)
->
type
)
&&
data
!=
NULL
)
{
data
!=
NULL
)
{
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
db34294b
...
@@ -1135,6 +1135,7 @@ void* nodesGetValueFromNode(SValueNode* pNode) {
...
@@ -1135,6 +1135,7 @@ void* nodesGetValueFromNode(SValueNode* pNode) {
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_JSON
:
return
(
void
*
)
pNode
->
datum
.
p
;
return
(
void
*
)
pNode
->
datum
.
p
;
default:
default:
break
;
break
;
...
...
source/libs/scalar/src/sclvector.c
浏览文件 @
db34294b
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include "sclvector.h"
#include "sclvector.h"
#include "tcompare.h"
#include "tcompare.h"
#include "tdatablock.h"
#include "tdatablock.h"
#include "tdataformat.h"
#include "ttypes.h"
#include "ttypes.h"
#include "ttime.h"
#include "ttime.h"
...
@@ -506,6 +507,16 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t
...
@@ -506,6 +507,16 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t
}
}
}
}
// if types can not comparable
if
((
IS_NUMERIC_TYPE
(
typeLeft
)
&&
!
IS_NUMERIC_TYPE
(
typeRight
))
||
(
IS_NUMERIC_TYPE
(
typeRight
)
&&
!
IS_NUMERIC_TYPE
(
typeLeft
))
||
(
IS_VAR_DATA_TYPE
(
typeLeft
)
&&
!
IS_VAR_DATA_TYPE
(
typeRight
))
||
(
IS_VAR_DATA_TYPE
(
typeRight
)
&&
!
IS_VAR_DATA_TYPE
(
typeLeft
))
||
((
typeLeft
==
TSDB_DATA_TYPE_BOOL
)
&&
(
typeRight
!=
TSDB_DATA_TYPE_BOOL
))
||
((
typeRight
==
TSDB_DATA_TYPE_BOOL
)
&&
(
typeLeft
!=
TSDB_DATA_TYPE_BOOL
)))
return
false
;
if
(
typeLeft
==
TSDB_DATA_TYPE_NULL
||
typeRight
==
TSDB_DATA_TYPE_NULL
){
if
(
typeLeft
==
TSDB_DATA_TYPE_NULL
||
typeRight
==
TSDB_DATA_TYPE_NULL
){
*
isNull
=
true
;
*
isNull
=
true
;
return
true
;
return
true
;
...
@@ -519,24 +530,28 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t
...
@@ -519,24 +530,28 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t
*
fp
=
filterGetCompFunc
(
type
,
optr
);
*
fp
=
filterGetCompFunc
(
type
,
optr
);
if
(
IS_NUMERIC_TYPE
(
type
)
||
IS_FLOAT_TYPE
(
type
)
){
if
(
IS_NUMERIC_TYPE
(
type
)){
if
(
typeLeft
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
typeLeft
==
TSDB_DATA_TYPE_NCHAR
)
{
convertNcharToDouble
(
*
pLeftData
,
pLeftOut
);
ASSERT
(
0
);
*
pLeftData
=
pLeftOut
;
// convertNcharToDouble(*pLeftData, pLeftOut);
// *pLeftData = pLeftOut;
}
else
if
(
typeLeft
==
TSDB_DATA_TYPE_BINARY
)
{
}
else
if
(
typeLeft
==
TSDB_DATA_TYPE_BINARY
)
{
convertBinaryToDouble
(
*
pLeftData
,
pLeftOut
);
ASSERT
(
0
);
*
pLeftData
=
pLeftOut
;
// convertBinaryToDouble(*pLeftData, pLeftOut);
// *pLeftData = pLeftOut;
}
else
if
(
typeLeft
!=
type
)
{
}
else
if
(
typeLeft
!=
type
)
{
convertNumberToNumber
(
*
pLeftData
,
pLeftOut
,
typeLeft
,
type
);
convertNumberToNumber
(
*
pLeftData
,
pLeftOut
,
typeLeft
,
type
);
*
pLeftData
=
pLeftOut
;
*
pLeftData
=
pLeftOut
;
}
}
if
(
typeRight
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
typeRight
==
TSDB_DATA_TYPE_NCHAR
)
{
convertNcharToDouble
(
*
pRightData
,
pRightOut
);
ASSERT
(
0
);
*
pRightData
=
pRightOut
;
// convertNcharToDouble(*pRightData, pRightOut);
// *pRightData = pRightOut;
}
else
if
(
typeRight
==
TSDB_DATA_TYPE_BINARY
)
{
}
else
if
(
typeRight
==
TSDB_DATA_TYPE_BINARY
)
{
convertBinaryToDouble
(
*
pRightData
,
pRightOut
);
ASSERT
(
0
);
*
pRightData
=
pRightOut
;
// convertBinaryToDouble(*pRightData, pRightOut);
// *pRightData = pRightOut;
}
else
if
(
typeRight
!=
type
)
{
}
else
if
(
typeRight
!=
type
)
{
convertNumberToNumber
(
*
pRightData
,
pRightOut
,
typeRight
,
type
);
convertNumberToNumber
(
*
pRightData
,
pRightOut
,
typeRight
,
type
);
*
pRightData
=
pRightOut
;
*
pRightData
=
pRightOut
;
...
@@ -1693,6 +1708,13 @@ void vectorIsTrue(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut,
...
@@ -1693,6 +1708,13 @@ void vectorIsTrue(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut,
STagVal
getJsonValue
(
char
*
json
,
char
*
key
,
bool
*
isExist
)
{
STagVal
getJsonValue
(
char
*
json
,
char
*
key
,
bool
*
isExist
)
{
STagVal
val
=
{.
pKey
=
key
};
STagVal
val
=
{.
pKey
=
key
};
if
(
tTagIsJson
((
const
STag
*
)
json
)
==
false
){
if
(
isExist
){
*
isExist
=
false
;
}
return
val
;
}
bool
find
=
tTagGet
(((
const
STag
*
)
json
),
&
val
);
// json value is null and not exist is different
bool
find
=
tTagGet
(((
const
STag
*
)
json
),
&
val
);
// json value is null and not exist is different
if
(
isExist
){
if
(
isExist
){
*
isExist
=
find
;
*
isExist
=
find
;
...
...
tests/system-test/2-query/json_tag.py
浏览文件 @
db34294b
...
@@ -68,7 +68,7 @@ class TDTestCase:
...
@@ -68,7 +68,7 @@ class TDTestCase:
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('[1,true]')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('[1,true]')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{222}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{222}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
fe
\"
}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
fe
\"
}')"
)
#
# test invalidate json key, key must can be printed assic char
# test invalidate json key, key must can be printed assic char
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
tag1
\"
:[1,true]}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
tag1
\"
:[1,true]}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
tag1
\"
:{}}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
tag1
\"
:{}}')"
)
...
@@ -79,7 +79,7 @@ class TDTestCase:
...
@@ -79,7 +79,7 @@ class TDTestCase:
# test invalidate json value, value number can not be inf,nan TD-12166
# test invalidate json value, value number can not be inf,nan TD-12166
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
k
\"
:1.8e308}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
k
\"
:1.8e308}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
k
\"
:-1.8e308}')"
)
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_14 using jsons1 tags('{
\"
k
\"
:-1.8e308}')"
)
#
#test length limit
#test length limit
char1
=
''
.
join
([
'abcd'
]
*
64
)
char1
=
''
.
join
([
'abcd'
]
*
64
)
char3
=
''
.
join
([
'abcd'
]
*
1021
)
char3
=
''
.
join
([
'abcd'
]
*
1021
)
...
@@ -87,15 +87,15 @@ class TDTestCase:
...
@@ -87,15 +87,15 @@ class TDTestCase:
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_15 using jsons1 tags('{
\"
%s1
\"
:5}')"
%
char1
)
# len(key)=257
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_15 using jsons1 tags('{
\"
%s1
\"
:5}')"
%
char1
)
# len(key)=257
tdSql
.
execute
(
"CREATE TABLE if not exists jsons1_15 using jsons1 tags('{
\"
%s
\"
:5}')"
%
char1
)
# len(key)=256
tdSql
.
execute
(
"CREATE TABLE if not exists jsons1_15 using jsons1 tags('{
\"
%s
\"
:5}')"
%
char1
)
# len(key)=256
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_16 using jsons1 tags('{
\"
TSSSS
\"
:
\"
%s
\"
}')"
%
char3
)
# len(object)=4096
tdSql
.
error
(
"CREATE TABLE if not exists jsons1_16 using jsons1 tags('{
\"
TSSSS
\"
:
\"
%s
\"
}')"
%
char3
)
# len(object)=4096
#
tdSql.execute("CREATE TABLE if not exists jsons1_16 using jsons1 tags('{\"TSSS\":\"%s\"}')" % char3) # len(object)=4095
tdSql
.
execute
(
"CREATE TABLE if not exists jsons1_16 using jsons1 tags('{
\"
TSSS
\"
:
\"
%s
\"
}')"
%
char3
)
# len(object)=4095
tdSql
.
execute
(
"drop table if exists jsons1_15"
)
tdSql
.
execute
(
"drop table if exists jsons1_15"
)
tdSql
.
execute
(
"drop table if exists jsons1_16"
)
tdSql
.
execute
(
"drop table if exists jsons1_16"
)
#
print
(
"============== STEP 2 ===== alter table json tag"
)
print
(
"============== STEP 2 ===== alter table json tag"
)
tdSql
.
error
(
"ALTER STABLE jsons1 add tag tag2 nchar(20)"
)
tdSql
.
error
(
"ALTER STABLE jsons1 add tag tag2 nchar(20)"
)
tdSql
.
error
(
"ALTER STABLE jsons1 drop tag jtag"
)
tdSql
.
error
(
"ALTER STABLE jsons1 drop tag jtag"
)
tdSql
.
error
(
"ALTER TABLE jsons1 MODIFY TAG jtag nchar(128)"
)
tdSql
.
error
(
"ALTER TABLE jsons1 MODIFY TAG jtag nchar(128)"
)
#
tdSql
.
execute
(
"ALTER TABLE jsons1_1 SET TAG jtag='{
\"
tag1
\"
:
\"
femail
\"
,
\"
tag2
\"
:35,
\"
tag3
\"
:true}'"
)
tdSql
.
execute
(
"ALTER TABLE jsons1_1 SET TAG jtag='{
\"
tag1
\"
:
\"
femail
\"
,
\"
tag2
\"
:35,
\"
tag3
\"
:true}'"
)
tdSql
.
query
(
"select jtag from jsons1_1"
)
tdSql
.
query
(
"select jtag from jsons1_1"
)
tdSql
.
checkData
(
0
,
0
,
'{"tag1":"femail","tag2":35,"tag3":true}'
)
tdSql
.
checkData
(
0
,
0
,
'{"tag1":"femail","tag2":35,"tag3":true}'
)
...
@@ -105,9 +105,9 @@ class TDTestCase:
...
@@ -105,9 +105,9 @@ class TDTestCase:
tdSql
.
execute
(
"create table st(ts timestamp, i int) tags(t int)"
)
tdSql
.
execute
(
"create table st(ts timestamp, i int) tags(t int)"
)
tdSql
.
error
(
"ALTER STABLE st add tag jtag json"
)
tdSql
.
error
(
"ALTER STABLE st add tag jtag json"
)
tdSql
.
error
(
"ALTER STABLE st add column jtag json"
)
tdSql
.
error
(
"ALTER STABLE st add column jtag json"
)
#
#
print("============== STEP 3 ===== query table")
print
(
"============== STEP 3 ===== query table"
)
#
#
test error syntax
# test error syntax
tdSql
.
error
(
"select * from jsons1 where jtag->tag1='beijing'"
)
tdSql
.
error
(
"select * from jsons1 where jtag->tag1='beijing'"
)
tdSql
.
error
(
"select -> from jsons1"
)
tdSql
.
error
(
"select -> from jsons1"
)
tdSql
.
error
(
"select * from jsons1 where contains"
)
tdSql
.
error
(
"select * from jsons1 where contains"
)
...
@@ -115,17 +115,17 @@ class TDTestCase:
...
@@ -115,17 +115,17 @@ class TDTestCase:
tdSql
.
error
(
"select jtag->location from jsons1"
)
tdSql
.
error
(
"select jtag->location from jsons1"
)
tdSql
.
error
(
"select jtag contains location from jsons1"
)
tdSql
.
error
(
"select jtag contains location from jsons1"
)
tdSql
.
error
(
"select * from jsons1 where jtag contains location"
)
tdSql
.
error
(
"select * from jsons1 where jtag contains location"
)
#tdSql.error
("select * from jsons1 where jtag contains''")
tdSql
.
query
(
"select * from jsons1 where jtag contains''"
)
tdSql
.
error
(
"select * from jsons1 where jtag contains 'location'='beijing'"
)
tdSql
.
error
(
"select * from jsons1 where jtag contains 'location'='beijing'"
)
#
#
#
test function error
# test function error
tdSql
.
error
(
"select avg(jtag->'tag1') from jsons1"
)
tdSql
.
error
(
"select avg(jtag->'tag1') from jsons1"
)
tdSql
.
error
(
"select avg(jtag) from jsons1"
)
tdSql
.
error
(
"select avg(jtag) from jsons1"
)
tdSql
.
error
(
"select min(jtag->'tag1') from jsons1"
)
tdSql
.
error
(
"select min(jtag->'tag1') from jsons1"
)
tdSql
.
error
(
"select min(jtag) from jsons1"
)
tdSql
.
error
(
"select min(jtag) from jsons1"
)
tdSql
.
error
(
"select ceil(jtag->'tag1') from jsons1"
)
tdSql
.
error
(
"select ceil(jtag->'tag1') from jsons1"
)
tdSql
.
error
(
"select ceil(jtag) from jsons1"
)
tdSql
.
error
(
"select ceil(jtag) from jsons1"
)
#
#test scalar operation
#test scalar operation
tdSql
.
query
(
"select jtag contains 'tag1',jtag->'tag1' from jsons1 order by jtag->'tag1'"
)
tdSql
.
query
(
"select jtag contains 'tag1',jtag->'tag1' from jsons1 order by jtag->'tag1'"
)
...
@@ -158,10 +158,11 @@ class TDTestCase:
...
@@ -158,10 +158,11 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
0
,
1
,
False
)
tdSql
.
checkData
(
0
,
1
,
False
)
tdSql
.
checkData
(
7
,
0
,
"false"
)
tdSql
.
checkData
(
7
,
0
,
"false"
)
tdSql
.
checkData
(
7
,
1
,
True
)
tdSql
.
checkData
(
7
,
1
,
False
)
tdSql
.
checkData
(
8
,
1
,
False
)
tdSql
.
checkData
(
12
,
1
,
True
)
tdSql
.
checkData
(
12
,
1
,
True
)
#
#
test select normal column
# test select normal column
tdSql
.
query
(
"select dataint from jsons1 order by dataint"
)
tdSql
.
query
(
"select dataint from jsons1 order by dataint"
)
tdSql
.
checkRows
(
9
)
tdSql
.
checkRows
(
9
)
tdSql
.
checkData
(
1
,
0
,
1
)
tdSql
.
checkData
(
1
,
0
,
1
)
...
@@ -180,7 +181,7 @@ class TDTestCase:
...
@@ -180,7 +181,7 @@ class TDTestCase:
tdSql
.
query
(
"select jtag from jsons1_9"
)
tdSql
.
query
(
"select jtag from jsons1_9"
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
0
,
0
,
None
)
#
#
test select json tag->'key', value is string
# test select json tag->'key', value is string
tdSql
.
query
(
"select jtag->'tag1' from jsons1_1"
)
tdSql
.
query
(
"select jtag->'tag1' from jsons1_1"
)
tdSql
.
checkData
(
0
,
0
,
'"femail"'
)
tdSql
.
checkData
(
0
,
0
,
'"femail"'
)
tdSql
.
query
(
"select jtag->'tag2' from jsons1_6"
)
tdSql
.
query
(
"select jtag->'tag2' from jsons1_6"
)
...
@@ -200,7 +201,7 @@ class TDTestCase:
...
@@ -200,7 +201,7 @@ class TDTestCase:
# test select json tag->'key', key is not exist
# test select json tag->'key', key is not exist
tdSql
.
query
(
"select jtag->'tag10' from jsons1_4"
)
tdSql
.
query
(
"select jtag->'tag10' from jsons1_4"
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
0
,
0
,
None
)
#
tdSql
.
query
(
"select jtag->'tag1' from jsons1"
)
tdSql
.
query
(
"select jtag->'tag1' from jsons1"
)
tdSql
.
checkRows
(
13
)
tdSql
.
checkRows
(
13
)
# test header name
# test header name
...
@@ -210,24 +211,25 @@ class TDTestCase:
...
@@ -210,24 +211,25 @@ class TDTestCase:
tdSql
.
checkColNameList
(
res
,
cname_list
)
tdSql
.
checkColNameList
(
res
,
cname_list
)
#
#
test where with json tag
# test where with json tag
tdSql
.
query
(
"select * from jsons1_1 where jtag is not null"
)
tdSql
.
query
(
"select * from jsons1_1 where jtag is not null"
)
# tdSql.
error
("select * from jsons1 where jtag='{\"tag1\":11,\"tag2\":\"\"}'")
# tdSql.
query
("select * from jsons1 where jtag='{\"tag1\":11,\"tag2\":\"\"}'")
#
tdSql.error("select * from jsons1 where jtag->'tag1'={}")
tdSql
.
error
(
"select * from jsons1 where jtag->'tag1'={}"
)
#
#
#
where json value is string
# where json value is string
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'='beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'='beijing'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select dataint,tbname,jtag->'tag1',jtag from jsons1 where jtag->'tag2'='beijing'"
)
tdSql
.
query
(
"select dataint,tbname,jtag->'tag1',jtag from jsons1 where jtag->'tag2'='beijing'
order by dataint
"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
# out of order, cannot compare value
tdSql
.
checkData
(
0
,
0
,
2
)
#tdSql.checkData(0, 0, 2)
tdSql
.
checkData
(
0
,
1
,
'jsons1_2'
)
#tdSql.checkData(0, 1, 'jsons1_2')
tdSql
.
checkData
(
0
,
2
,
"5.000000000"
)
#tdSql.checkData(0, 2, 5)
tdSql
.
checkData
(
0
,
3
,
'{"tag1":5,"tag2":"beijing"}'
)
#tdSql.checkData(0, 3, '{"tag1":5,"tag2":"beijing"}')
tdSql
.
checkData
(
1
,
0
,
3
)
#tdSql.checkData(1, 0, 3)
tdSql
.
checkData
(
1
,
1
,
'jsons1_3'
)
#tdSql.checkData(1, 1, 'jsons1_3')
tdSql
.
checkData
(
1
,
2
,
'false'
)
#tdSql.checkData(1, 2, 'false')
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'='beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'='beijing'"
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'='收到货'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'='收到货'"
)
...
@@ -236,72 +238,73 @@ class TDTestCase:
...
@@ -236,72 +238,73 @@ class TDTestCase:
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'>='beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'>='beijing'"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
# open
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'<'beijing'"
)
#tdSql.query("select * from jsons1 where jtag->'tag2'<'beijing'")
#tdSql.checkRows(2)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'<='beijing'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'<='beijing'"
)
tdSql
.
checkRows
(
4
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'!='beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'!='beijing'"
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'=''"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2'=''"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
#
#
#
where json value is int
# where json value is int
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=5"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=5"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
1
,
2
)
tdSql
.
checkData
(
0
,
1
,
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=10"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=10"
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<54"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<54"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<=11"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<=11"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>4"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>4"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>=5"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>=5"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=5"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=5"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=55"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=55"
)
tdSql
.
checkRows
(
7
)
tdSql
.
checkRows
(
3
)
#
#
#
where json value is double
# where json value is double
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=1.232"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=1.232"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<1.232"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<1.232"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<=1.232"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'<=1.232"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>1.23"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>1.23"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>=1.232"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>=1.232"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=1.232"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=1.232"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=3.232"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=3.232"
)
tdSql
.
checkRows
(
7
)
tdSql
.
checkRows
(
3
)
#tdSql.error("select * from jsons1 where jtag->'tag1'/0=3")
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'/0=3"
)
#tdSql.error("select * from jsons1 where jtag->'tag1'/5=1")
tdSql
.
checkRows
(
0
)
#
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'/5=1"
)
# # where json value is bool
tdSql
.
checkRows
(
1
)
# where json value is bool
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=true"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=true"
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
#
tdSql.query("select * from jsons1 where jtag->'tag1'=false")
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=false"
)
#
tdSql.checkRows(1)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=false"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'!=false"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
0
)
#tdSql.error
("select * from jsons1 where jtag->'tag1'>false")
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'>false"
)
#
tdSql
.
checkRows
(
0
)
# # where json value is null
# open
# where json value is null
#tdSql.query("select * from jsons1 where jtag->'tag1'=null") # only json suport =null. This synatx will change later.
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=null"
)
#tdSql.checkRows(1
)
tdSql
.
checkRows
(
0
)
#
#
#
where json key is null
# where json key is null
tdSql
.
query
(
"select * from jsons1 where jtag->'tag_no_exist'=3"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag_no_exist'=3"
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
#
#
#
where json value is not exist
# where json value is not exist
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' is null"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' is null"
)
tdSql
.
checkData
(
0
,
0
,
'jsons1_9'
)
tdSql
.
checkData
(
0
,
0
,
'jsons1_9'
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
...
@@ -309,16 +312,16 @@ class TDTestCase:
...
@@ -309,16 +312,16 @@ class TDTestCase:
tdSql
.
checkRows
(
9
)
tdSql
.
checkRows
(
9
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag3' is not null"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag3' is not null"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
#
#
#
test contains
# test contains
tdSql
.
query
(
"select * from jsons1 where jtag contains 'tag1'"
)
tdSql
.
query
(
"select * from jsons1 where jtag contains 'tag1'"
)
tdSql
.
checkRows
(
7
)
tdSql
.
checkRows
(
8
)
tdSql
.
query
(
"select * from jsons1 where jtag contains 'tag3'"
)
tdSql
.
query
(
"select * from jsons1 where jtag contains 'tag3'"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
4
)
tdSql
.
query
(
"select * from jsons1 where jtag contains 'tag_no_exist'"
)
tdSql
.
query
(
"select * from jsons1 where jtag contains 'tag_no_exist'"
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
#
#
#
test json tag in where condition with and/or
# test json tag in where condition with and/or
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=false and jtag->'tag2'='beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=false and jtag->'tag2'='beijing'"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=false or jtag->'tag2'='beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'=false or jtag->'tag2'='beijing'"
)
...
@@ -335,15 +338,15 @@ class TDTestCase:
...
@@ -335,15 +338,15 @@ class TDTestCase:
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'='femail' and jtag contains 'tag3'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1'='femail' and jtag contains 'tag3'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
#
#
#
#
test with between and
# test with between and
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' between 1 and 30"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' between 1 and 30"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' between 'femail' and 'beijing'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' between 'femail' and 'beijing'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
#
#
#
test with tbname/normal column
# test with tbname/normal column
tdSql
.
query
(
"select * from jsons1 where tbname = 'jsons1_1'"
)
tdSql
.
query
(
"select * from jsons1 where tbname = 'jsons1_1'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where tbname = 'jsons1_1' and jtag contains 'tag3'"
)
tdSql
.
query
(
"select * from jsons1 where tbname = 'jsons1_1' and jtag contains 'tag3'"
)
...
@@ -352,20 +355,18 @@ class TDTestCase:
...
@@ -352,20 +355,18 @@ class TDTestCase:
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from jsons1 where tbname = 'jsons1_1' and jtag contains 'tag3' and dataint=23"
)
tdSql
.
query
(
"select * from jsons1 where tbname = 'jsons1_1' and jtag contains 'tag3' and dataint=23"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
#
#
# # test where condition like
# test where condition like
# open
tdSql
.
query
(
"select * from jsons1 where jtag->'tag2' like 'bei%'"
)
# syntax error
tdSql
.
checkRows
(
2
)
#tdSql.query("select *,tbname from jsons1 where jtag->'tag2' like 'bei%'")
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' like 'fe%' and jtag->'tag2' is not null"
)
#tdSql.checkRows(2)
tdSql
.
checkRows
(
2
)
#tdSql.query("select *,tbname from jsons1 where jtag->'tag1' like 'fe%' and jtag->'tag2' is not null")
#tdSql.checkRows(2)
# test where condition in no support in
#
# # test where condition in no support in
# tdSql.error("select * from jsons1 where jtag->'tag1' in ('beijing')")
# tdSql.error("select * from jsons1 where jtag->'tag1' in ('beijing')")
#
#
#
test where condition match/nmath
# test where condition match/nmath
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' match 'ma'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' match 'ma'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' match 'ma$'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' match 'ma$'"
)
...
@@ -376,23 +377,22 @@ class TDTestCase:
...
@@ -376,23 +377,22 @@ class TDTestCase:
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' nmatch 'ma'"
)
tdSql
.
query
(
"select * from jsons1 where jtag->'tag1' nmatch 'ma'"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
#
#
#
test distinct
# test distinct
tdSql
.
execute
(
"insert into jsons1_14 using jsons1 tags('{
\"
tag1
\"
:
\"
收到货
\"
,
\"
tag2
\"
:
\"\"
,
\"
tag3
\"
:null}') values(1591062628000, 2, NULL, '你就会', 'dws')"
)
tdSql
.
execute
(
"insert into jsons1_14 using jsons1 tags('{
\"
tag1
\"
:
\"
收到货
\"
,
\"
tag2
\"
:
\"\"
,
\"
tag3
\"
:null}') values(1591062628000, 2, NULL, '你就会', 'dws')"
)
tdSql
.
query
(
"select distinct jtag->'tag1' from jsons1"
)
tdSql
.
query
(
"select distinct jtag->'tag1' from jsons1"
)
tdSql
.
checkRows
(
8
)
tdSql
.
checkRows
(
8
)
tdSql
.
query
(
"select distinct jtag from jsons1"
)
tdSql
.
query
(
"select distinct jtag from jsons1"
)
tdSql
.
checkRows
(
9
)
tdSql
.
checkRows
(
9
)
#
#
#
test dumplicate key with normal colomn
#test dumplicate key with normal colomn
tdSql
.
execute
(
"INSERT INTO jsons1_15 using jsons1 tags('{
\"
tbname
\"
:
\"
tt
\"
,
\"
databool
\"
:true,
\"
datastr
\"
:
\"
是是是
\"
}') values(1591060828000, 4, false, 'jjsf',
\"
你就会
\"
)"
)
tdSql
.
execute
(
"INSERT INTO jsons1_15 using jsons1 tags('{
\"
tbname
\"
:
\"
tt
\"
,
\"
databool
\"
:true,
\"
datastr
\"
:
\"
是是是
\"
}') values(1591060828000, 4, false, 'jjsf',
\"
你就会
\"
)"
)
#tdSql.query("select *,tbname,jtag from jsons1 where jtag->'datastr' match '是' and datastr match 'js'")
tdSql
.
query
(
"select * from jsons1 where jtag->'datastr' match '是' and datastr match 'js'"
)
#tdSql.checkRows(1)
tdSql
.
checkRows
(
1
)
# open
# tdSql.query("select tbname,jtag->'tbname' from jsons1 where jtag->'tbname'='tt' and tbname='jsons1_14'")
#tdSql.query("select tbname,jtag->'tbname' from jsons1 where jtag->'tbname'='tt' and tbname='jsons1_14'")
# tdSql.checkRows(1)
#tdSql.checkRows(0)
#
# test join
# # test join
tdSql
.
execute
(
"create table if not exists jsons2(ts timestamp, dataInt int, dataBool bool, dataStr nchar(50), dataStrBin binary(150)) tags(jtag json)"
)
tdSql
.
execute
(
"create table if not exists jsons2(ts timestamp, dataInt int, dataBool bool, dataStr nchar(50), dataStrBin binary(150)) tags(jtag json)"
)
tdSql
.
execute
(
"insert into jsons2_1 using jsons2 tags('{
\"
tag1
\"
:
\"
fff
\"
,
\"
tag2
\"
:5,
\"
tag3
\"
:true}') values(1591060618000, 2, false, 'json2', '你是2')"
)
tdSql
.
execute
(
"insert into jsons2_1 using jsons2 tags('{
\"
tag1
\"
:
\"
fff
\"
,
\"
tag2
\"
:5,
\"
tag3
\"
:true}') values(1591060618000, 2, false, 'json2', '你是2')"
)
tdSql
.
execute
(
"insert into jsons2_2 using jsons2 tags('{
\"
tag1
\"
:5,
\"
tag2
\"
:null}') values (1591060628000, 2, true, 'json2', 'sss')"
)
tdSql
.
execute
(
"insert into jsons2_2 using jsons2 tags('{
\"
tag1
\"
:5,
\"
tag2
\"
:null}') values (1591060628000, 2, true, 'json2', 'sss')"
)
...
@@ -460,19 +460,18 @@ class TDTestCase:
...
@@ -460,19 +460,18 @@ class TDTestCase:
tdSql
.
checkColNameList
(
res
,
cname_list
)
tdSql
.
checkColNameList
(
res
,
cname_list
)
# test top/bottom with group by json tag
# test top/bottom with group by json tag
# random failure
# tdSql.query("select top(dataint,2),jtag->'tag1' from jsons1 group by jtag->'tag1' order by jtag->'tag1'")
#tdSql.query("select top(dataint,2),jtag->'tag1' from jsons1 group by jtag->'tag1' order by jtag->'tag1'")
# tdSql.checkRows(11)
#tdSql.checkRows(11)
# tdSql.checkData(0, 1, None)
#tdSql.checkData(0, 1, None)
# tdSql.checkData(2, 0, 4)
#tdSql.checkData(2, 0, 4)
# tdSql.checkData(3, 0, 3)
#tdSql.checkData(3, 0, 3)
# tdSql.checkData(3, 1, "false")
#tdSql.checkData(3, 1, "false")
# tdSql.checkData(8, 0, 2)
#tdSql.checkData(10, 0, 23)
# tdSql.checkData(10, 1, '"femail"')
#tdSql.checkData(10, 1, '"femail"')
# test having
# test having
#
tdSql.query("select count(*),jtag->'tag1' from jsons1 group by jtag->'tag1' having count(*) > 1")
tdSql
.
query
(
"select count(*),jtag->'tag1' from jsons1 group by jtag->'tag1' having count(*) > 1"
)
#
tdSql.checkRows(3)
tdSql
.
checkRows
(
3
)
# subquery with json tag
# subquery with json tag
tdSql
.
query
(
"select * from (select jtag, dataint from jsons1) order by dataint"
)
tdSql
.
query
(
"select * from (select jtag, dataint from jsons1) order by dataint"
)
...
@@ -480,22 +479,13 @@ class TDTestCase:
...
@@ -480,22 +479,13 @@ class TDTestCase:
tdSql
.
checkData
(
1
,
1
,
1
)
tdSql
.
checkData
(
1
,
1
,
1
)
tdSql
.
checkData
(
5
,
0
,
'{"tag1":false,"tag2":"beijing"}'
)
tdSql
.
checkData
(
5
,
0
,
'{"tag1":false,"tag2":"beijing"}'
)
# tdSql.query("select jtag->'tag1' from (select jtag->'tag1', dataint from jsons1)")
tdSql
.
error
(
"select jtag->'tag1' from (select jtag->'tag1', dataint from jsons1)"
)
# tdSql.checkRows(11)
# tdSql.query("select ts,jtag->'tag1' from (select jtag->'tag1',tbname,ts from jsons1 order by ts)")
# tdSql.checkData(1, 0, '"femail"')
# tdSql.checkData(2, 0, 5)
#
# res = tdSql.getColNameList("select jtag->'tag1' from (select jtag->'tag1', dataint from jsons1)")
# cname_list = []
# cname_list.append("jtag->'tag1'")
# tdSql.checkColNameList(res, cname_list)
#
# tdSql.query("select ts,tbname,jtag->'tag1' from (select jtag->'tag1',tbname,ts from jsons1 order by ts)")
# tdSql.checkRows(11)
# tdSql.checkRows(11)
# tdSql.checkData(1, 1, "jsons1_1")
# tdSql.checkData(1, 1, "jsons1_1")
# tdSql.checkData(1, 2, '"femail"')
# tdSql.checkData(1, 2, '"femail"')
#
#
#
union all
# union all
tdSql
.
query
(
"select jtag->'tag1' from jsons1 union all select jtag->'tag2' from jsons2"
)
tdSql
.
query
(
"select jtag->'tag1' from jsons1 union all select jtag->'tag2' from jsons2"
)
tdSql
.
checkRows
(
17
)
tdSql
.
checkRows
(
17
)
tdSql
.
query
(
"select jtag->'tag1' from jsons1_1 union all select jtag->'tag2' from jsons2_1"
)
tdSql
.
query
(
"select jtag->'tag1' from jsons1_1 union all select jtag->'tag2' from jsons2_1"
)
...
@@ -517,15 +507,16 @@ class TDTestCase:
...
@@ -517,15 +507,16 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
query
(
"select avg(dataint) from jsons1 where jtag is not null"
)
tdSql
.
query
(
"select avg(dataint) from jsons1 where jtag is not null"
)
tdSql
.
checkData
(
0
,
0
,
5.3
)
tdSql
.
checkData
(
0
,
0
,
5.3
)
#tdSql.error("select twa(dataint) from jsons1 where jtag is not null")
# tdSql.query("select twa(dataint) from jsons1 where jtag is not null")
# tdSql.checkData(0, 0, 36)
tdSql
.
error
(
"select irate(dataint) from jsons1 where jtag is not null"
)
tdSql
.
error
(
"select irate(dataint) from jsons1 where jtag is not null"
)
#
tdSql.query("select sum(dataint) from jsons1 where jtag->'tag1' is not null")
tdSql
.
query
(
"select sum(dataint) from jsons1 where jtag->'tag1' is not null"
)
#tdSql.checkData(0, 0, 49
)
tdSql
.
checkData
(
0
,
0
,
45
)
tdSql
.
query
(
"select stddev(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select stddev(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
checkData
(
0
,
0
,
4.496912521
)
tdSql
.
checkData
(
0
,
0
,
4.496912521
)
#tdSql.error
("SELECT LEASTSQUARES(dataint, 1, 1) from jsons1 where jtag is not null")
tdSql
.
query
(
"SELECT LEASTSQUARES(dataint, 1, 1) from jsons1 where jtag is not null"
)
#
#
#
test selection function:min/max/first/last/top/bottom/percentile/apercentile/last_row/interp
#test selection function:min/max/first/last/top/bottom/percentile/apercentile/last_row/interp
tdSql
.
query
(
"select min(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select min(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
checkData
(
0
,
0
,
1
)
tdSql
.
checkData
(
0
,
0
,
1
)
tdSql
.
query
(
"select max(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select max(dataint) from jsons1 where jtag->'tag1'>1"
)
...
@@ -541,13 +532,16 @@ class TDTestCase:
...
@@ -541,13 +532,16 @@ class TDTestCase:
tdSql
.
query
(
"select percentile(dataint,20) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select percentile(dataint,20) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select apercentile(dataint, 50) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select apercentile(dataint, 50) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
checkData
(
0
,
0
,
1.5
)
tdSql
.
checkData
(
0
,
0
,
1.5
)
#tdSql.query("select last_row(dataint) from jsons1 where jtag->'tag1'>1")
# tdSql.query("select last_row(dataint) from jsons1 where jtag->'tag1'>1")
#tdSql.checkData(0, 0, 11)
# tdSql.query("select interp(dataint) from jsons1 where ts = '2020-06-02 09:17:08.000' and jtag->'tag1'>1")
#tdSql.error("select interp(dataint) from jsons1 where ts = '2020-06-02 09:17:08.000' and jtag->'tag1'>1")
#
#test calculation function:diff/derivative/spread/ceil/floor/round/
# #test calculation function:diff/derivative/spread/ceil/floor/round/
tdSql
.
query
(
"select diff(dataint) from jsons1 where jtag->'tag1'>1"
)
#tdSql.error("select diff(dataint) from jsons1 where jtag->'tag1'>1")
# tdSql.checkRows(2)
#tdSql.error("select derivative(dataint, 10m, 0) from jsons1 where jtag->'tag1'>1")
# tdSql.checkData(0, 0, -1)
# tdSql.checkData(1, 0, 10)
tdSql
.
query
(
"select derivative(dataint, 10m, 0) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
checkData
(
0
,
0
,
-
2
)
tdSql
.
query
(
"select spread(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select spread(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
query
(
"select ceil(dataint) from jsons1 where jtag->'tag1'>1"
)
tdSql
.
query
(
"select ceil(dataint) from jsons1 where jtag->'tag1'>1"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录