Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f266d517
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
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看板
提交
f266d517
编写于
8月 16, 2023
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:support varbinary type
上级
7441801e
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
234 addition
and
48 deletion
+234
-48
include/common/ttypes.h
include/common/ttypes.h
+1
-1
include/os/osString.h
include/os/osString.h
+3
-0
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+1
-1
source/client/src/clientRawBlockWrite.c
source/client/src/clientRawBlockWrite.c
+12
-2
source/client/src/clientSml.c
source/client/src/clientSml.c
+1
-1
source/common/src/tdatablock.c
source/common/src/tdatablock.c
+2
-1
source/common/src/tdataformat.c
source/common/src/tdataformat.c
+1
-0
source/common/src/trow.c
source/common/src/trow.c
+1
-1
source/common/src/ttypes.c
source/common/src/ttypes.c
+1
-1
source/libs/command/src/command.c
source/libs/command/src/command.c
+2
-2
source/libs/executor/src/dataInserter.c
source/libs/executor/src/dataInserter.c
+1
-1
source/libs/index/src/indexComm.c
source/libs/index/src/indexComm.c
+2
-11
source/libs/parser/src/parInsertSql.c
source/libs/parser/src/parInsertSql.c
+47
-10
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+6
-0
source/libs/qcom/src/queryUtil.c
source/libs/qcom/src/queryUtil.c
+17
-2
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+10
-2
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+8
-1
source/libs/scalar/src/sclvector.c
source/libs/scalar/src/sclvector.c
+1
-3
source/os/src/osString.c
source/os/src/osString.c
+92
-0
source/util/src/tcompare.c
source/util/src/tcompare.c
+9
-2
tools/shell/src/shellEngine.c
tools/shell/src/shellEngine.c
+16
-6
未找到文件。
include/common/ttypes.h
浏览文件 @
f266d517
...
...
@@ -269,7 +269,7 @@ typedef struct {
(IS_NUMERIC_TYPE(_t) || (_t) == (TSDB_DATA_TYPE_BOOL) || (_t) == (TSDB_DATA_TYPE_TIMESTAMP))
#define IS_VAR_DATA_TYPE(t) \
(((t) == TSDB_DATA_TYPE_VARCHAR) || (
t) == TSDB_DATA_TYPE_VARBINARY
|| ((t) == TSDB_DATA_TYPE_NCHAR) || ((t) == TSDB_DATA_TYPE_JSON) || ((t) == TSDB_DATA_TYPE_GEOMETRY))
(((t) == TSDB_DATA_TYPE_VARCHAR) || (
(t) == TSDB_DATA_TYPE_VARBINARY)
|| ((t) == TSDB_DATA_TYPE_NCHAR) || ((t) == TSDB_DATA_TYPE_JSON) || ((t) == TSDB_DATA_TYPE_GEOMETRY))
#define IS_STR_DATA_TYPE(t) (((t) == TSDB_DATA_TYPE_VARCHAR) || ((t) == TSDB_DATA_TYPE_VARBINARY) || ((t) == TSDB_DATA_TYPE_NCHAR))
#define IS_VALID_TINYINT(_t) ((_t) >= INT8_MIN && (_t) <= INT8_MAX)
...
...
include/os/osString.h
浏览文件 @
f266d517
...
...
@@ -90,6 +90,9 @@ int8_t taosStr2Int8(const char *str, char **pEnd, int32_t radix);
uint8_t
taosStr2UInt8
(
const
char
*
str
,
char
**
pEnd
,
int32_t
radix
);
double
taosStr2Double
(
const
char
*
str
,
char
**
pEnd
);
float
taosStr2Float
(
const
char
*
str
,
char
**
pEnd
);
int32_t
taosHex2Ascii
(
const
char
*
z
,
uint32_t
n
,
void
**
data
,
uint32_t
*
size
);
int32_t
taosAscii2Hex
(
const
char
*
z
,
uint32_t
n
,
void
**
data
,
uint32_t
*
size
);
int32_t
taosBin2Ascii
(
const
char
*
z
,
uint32_t
n
,
void
**
data
,
uint32_t
*
size
);
#ifdef __cplusplus
}
...
...
source/client/src/clientImpl.c
浏览文件 @
f266d517
...
...
@@ -503,7 +503,7 @@ void setResSchemaInfo(SReqResultInfo* pResInfo, const SSchema* pSchema, int32_t
pResInfo
->
userFields
[
i
].
bytes
=
pSchema
[
i
].
bytes
;
pResInfo
->
userFields
[
i
].
type
=
pSchema
[
i
].
type
;
if
(
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_VARCHAR
||
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_GEOMETRY
)
{
if
(
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_VARCHAR
||
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_
VARBINARY
||
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_
GEOMETRY
)
{
pResInfo
->
userFields
[
i
].
bytes
-=
VARSTR_HEADER_SIZE
;
}
else
if
(
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_NCHAR
||
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_JSON
)
{
pResInfo
->
userFields
[
i
].
bytes
=
(
pResInfo
->
userFields
[
i
].
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
...
...
source/client/src/clientRawBlockWrite.c
浏览文件 @
f266d517
...
...
@@ -292,7 +292,13 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) {
cJSON
*
tvalue
=
NULL
;
if
(
IS_VAR_DATA_TYPE
(
pTagVal
->
type
))
{
char
*
buf
=
taosMemoryCalloc
(
pTagVal
->
nData
+
3
,
1
);
char
*
buf
=
NULL
;
if
(
pTagVal
->
type
==
TSDB_DATA_TYPE_VARBINARY
){
buf
=
taosMemoryCalloc
(
pTagVal
->
nData
*
2
+
2
+
3
,
1
);
}
else
{
buf
=
taosMemoryCalloc
(
pTagVal
->
nData
+
3
,
1
);
}
if
(
!
buf
)
goto
end
;
dataConverToStr
(
buf
,
pTagVal
->
type
,
pTagVal
->
pData
,
pTagVal
->
nData
,
NULL
);
tvalue
=
cJSON_CreateString
(
buf
);
...
...
@@ -515,7 +521,11 @@ static char* processAlterTable(SMqMetaRsp* metaRsp) {
}
buf
=
parseTagDatatoJson
(
vAlterTbReq
.
pTagVal
);
}
else
{
buf
=
taosMemoryCalloc
(
vAlterTbReq
.
nTagVal
+
1
,
1
);
if
(
vAlterTbReq
.
tagType
==
TSDB_DATA_TYPE_VARBINARY
){
buf
=
taosMemoryCalloc
(
vAlterTbReq
.
nTagVal
+
1
,
1
);
}
else
{
buf
=
taosMemoryCalloc
(
vAlterTbReq
.
nTagVal
+
1
,
1
);
}
dataConverToStr
(
buf
,
vAlterTbReq
.
tagType
,
vAlterTbReq
.
pTagVal
,
vAlterTbReq
.
nTagVal
,
NULL
);
}
...
...
source/client/src/clientSml.c
浏览文件 @
f266d517
...
...
@@ -596,7 +596,7 @@ static int32_t smlGenerateSchemaAction(SSchema *colField, SHashObj *colHash, SSm
return
TSDB_CODE_SML_INVALID_DATA
;
}
if
(((
colField
[
*
index
].
type
==
TSDB_DATA_TYPE_VARCHAR
||
colField
[
*
index
].
type
==
TSDB_DATA_TYPE_GEOMETRY
)
&&
if
(((
colField
[
*
index
].
type
==
TSDB_DATA_TYPE_VARCHAR
||
colField
[
*
index
].
type
==
TSDB_DATA_TYPE_VARCHAR
||
colField
[
*
index
].
type
==
TSDB_DATA_TYPE_GEOMETRY
)
&&
(
colField
[
*
index
].
bytes
-
VARSTR_HEADER_SIZE
)
<
kv
->
length
)
||
(
colField
[
*
index
].
type
==
TSDB_DATA_TYPE_NCHAR
&&
((
colField
[
*
index
].
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
<
kv
->
length
)))
{
...
...
source/common/src/tdatablock.c
浏览文件 @
f266d517
...
...
@@ -1852,6 +1852,7 @@ char* dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf)
if
(
len
>=
size
-
1
)
return
dumpBuf
;
break
;
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_GEOMETRY
:
{
memset
(
pBuf
,
0
,
sizeof
(
pBuf
));
char
*
pData
=
colDataGetVarData
(
pColInfoData
,
j
);
...
...
@@ -1951,6 +1952,7 @@ int32_t buildSubmitReqFromDataBlock(SSubmitReq2** ppReq, const SSDataBlock* pDat
}
break
;
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_VARCHAR
:
{
// TSDB_DATA_TYPE_BINARY
ASSERT
(
pColInfoData
->
info
.
type
==
pCol
->
type
);
if
(
colDataIsNull_s
(
pColInfoData
,
j
))
{
...
...
@@ -1964,7 +1966,6 @@ int32_t buildSubmitReqFromDataBlock(SSubmitReq2** ppReq, const SSDataBlock* pDat
}
break
;
}
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_DECIMAL
:
case
TSDB_DATA_TYPE_BLOB
:
case
TSDB_DATA_TYPE_JSON
:
...
...
source/common/src/tdataformat.c
浏览文件 @
f266d517
...
...
@@ -1146,6 +1146,7 @@ static int tTagValJsonCmprFn(const void *p1, const void *p2) {
static
void
debugPrintTagVal
(
int8_t
type
,
const
void
*
val
,
int32_t
vlen
,
const
char
*
tag
,
int32_t
ln
)
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_JSON
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_NCHAR
:
...
...
source/common/src/trow.c
浏览文件 @
f266d517
...
...
@@ -356,7 +356,7 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow) {
}
}
else
{
varDataLen
+=
sizeof
(
VarDataLenT
);
if
(
pTColumn
->
type
==
TSDB_DATA_TYPE_VARCHAR
||
pTColumn
->
type
==
TSDB_DATA_TYPE_GEOMETRY
)
{
if
(
pTColumn
->
type
==
TSDB_DATA_TYPE_VARCHAR
||
pTColumn
->
type
==
TSDB_DATA_TYPE_
VARBINARY
||
pTColumn
->
type
==
TSDB_DATA_TYPE_
GEOMETRY
)
{
varDataLen
+=
CHAR_BYTES
;
if
(
maxVarDataLen
<
CHAR_BYTES
+
sizeof
(
VarDataLenT
))
{
maxVarDataLen
=
CHAR_BYTES
+
sizeof
(
VarDataLenT
);
...
...
source/common/src/ttypes.c
浏览文件 @
f266d517
...
...
@@ -61,7 +61,7 @@ tDataTypeDescriptor tDataTypes[TSDB_DATA_TYPE_MAX] = {
{
TSDB_DATA_TYPE_UINT
,
12
,
INT_BYTES
,
"INT UNSIGNED"
,
0
,
UINT32_MAX
,
tsCompressInt
,
tsDecompressInt
},
{
TSDB_DATA_TYPE_UBIGINT
,
15
,
LONG_BYTES
,
"BIGINT UNSIGNED"
,
0
,
UINT64_MAX
,
tsCompressBigint
,
tsDecompressBigint
},
{
TSDB_DATA_TYPE_JSON
,
4
,
TSDB_MAX_JSON_TAG_LEN
,
"JSON"
,
0
,
0
,
tsCompressString
,
tsDecompressString
},
{
TSDB_DATA_TYPE_VARBINARY
,
9
,
1
,
"VARBINARY"
,
0
,
0
,
NULL
,
NULL
},
// placeholder, not implemented
{
TSDB_DATA_TYPE_VARBINARY
,
9
,
1
,
"VARBINARY"
,
0
,
0
,
tsCompressString
,
tsDecompressString
},
// placeholder, not implemented
{
TSDB_DATA_TYPE_DECIMAL
,
7
,
1
,
"DECIMAL"
,
0
,
0
,
NULL
,
NULL
},
// placeholder, not implemented
{
TSDB_DATA_TYPE_BLOB
,
4
,
1
,
"BLOB"
,
0
,
0
,
NULL
,
NULL
},
// placeholder, not implemented
{
TSDB_DATA_TYPE_MEDIUMBLOB
,
10
,
1
,
"MEDIUMBLOB"
,
0
,
0
,
NULL
,
NULL
},
// placeholder, not implemented
...
...
source/libs/command/src/command.c
浏览文件 @
f266d517
...
...
@@ -458,7 +458,7 @@ void appendColumnFields(char* buf, int32_t* len, STableCfg* pCfg) {
SSchema
*
pSchema
=
pCfg
->
pSchemas
+
i
;
char
type
[
32
];
sprintf
(
type
,
"%s"
,
tDataTypes
[
pSchema
->
type
].
name
);
if
(
TSDB_DATA_TYPE_VARCHAR
==
pSchema
->
type
||
TSDB_DATA_TYPE_GEOMETRY
==
pSchema
->
type
)
{
if
(
TSDB_DATA_TYPE_VARCHAR
==
pSchema
->
type
||
TSDB_DATA_TYPE_
VARBINARY
==
pSchema
->
type
||
TSDB_DATA_TYPE_
GEOMETRY
==
pSchema
->
type
)
{
sprintf
(
type
+
strlen
(
type
),
"(%d)"
,
(
int32_t
)(
pSchema
->
bytes
-
VARSTR_HEADER_SIZE
));
}
else
if
(
TSDB_DATA_TYPE_NCHAR
==
pSchema
->
type
)
{
sprintf
(
type
+
strlen
(
type
),
"(%d)"
,
(
int32_t
)((
pSchema
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
));
...
...
@@ -473,7 +473,7 @@ void appendTagFields(char* buf, int32_t* len, STableCfg* pCfg) {
SSchema
*
pSchema
=
pCfg
->
pSchemas
+
pCfg
->
numOfColumns
+
i
;
char
type
[
32
];
sprintf
(
type
,
"%s"
,
tDataTypes
[
pSchema
->
type
].
name
);
if
(
TSDB_DATA_TYPE_VARCHAR
==
pSchema
->
type
||
TSDB_DATA_TYPE_GEOMETRY
==
pSchema
->
type
)
{
if
(
TSDB_DATA_TYPE_VARCHAR
==
pSchema
->
type
||
TSDB_DATA_TYPE_
VARBINARY
==
pSchema
->
type
||
TSDB_DATA_TYPE_
GEOMETRY
==
pSchema
->
type
)
{
sprintf
(
type
+
strlen
(
type
),
"(%d)"
,
(
int32_t
)(
pSchema
->
bytes
-
VARSTR_HEADER_SIZE
));
}
else
if
(
TSDB_DATA_TYPE_NCHAR
==
pSchema
->
type
)
{
sprintf
(
type
+
strlen
(
type
),
"(%d)"
,
(
int32_t
)((
pSchema
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
));
...
...
source/libs/executor/src/dataInserter.c
浏览文件 @
f266d517
...
...
@@ -213,6 +213,7 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp
switch
(
pColInfoData
->
info
.
type
)
{
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_VARCHAR
:
{
// TSDB_DATA_TYPE_BINARY
ASSERT
(
pColInfoData
->
info
.
type
==
pCol
->
type
);
if
(
colDataIsNull_s
(
pColInfoData
,
j
))
{
...
...
@@ -226,7 +227,6 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp
}
break
;
}
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_DECIMAL
:
case
TSDB_DATA_TYPE_BLOB
:
case
TSDB_DATA_TYPE_JSON
:
...
...
source/libs/index/src/indexComm.c
浏览文件 @
f266d517
...
...
@@ -357,17 +357,13 @@ int32_t idxConvertData(void* src, int8_t type, void** dst) {
break
;
}
case
TSDB_DATA_TYPE_VARCHAR
:
// TSDB_DATA_TYPE_BINARY
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_GEOMETRY
:
{
tlen
=
taosEncodeBinary
(
NULL
,
src
,
strlen
(
src
));
*
dst
=
taosMemoryCalloc
(
1
,
tlen
+
1
);
tlen
=
taosEncodeBinary
(
dst
,
src
,
strlen
(
src
));
break
;
}
case
TSDB_DATA_TYPE_VARBINARY
:
tlen
=
taosEncodeBinary
(
NULL
,
src
,
strlen
(
src
));
*
dst
=
taosMemoryCalloc
(
1
,
tlen
+
1
);
tlen
=
taosEncodeBinary
(
dst
,
src
,
strlen
(
src
));
break
;
default:
ASSERTS
(
0
,
"index invalid input type"
);
break
;
...
...
@@ -448,6 +444,7 @@ int32_t idxConvertDataToStr(void* src, int8_t type, void** dst) {
break
;
}
case
TSDB_DATA_TYPE_VARCHAR
:
// TSDB_DATA_TYPE_BINARY
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_GEOMETRY
:
{
tlen
=
taosEncodeBinary
(
NULL
,
varDataVal
(
src
),
varDataLen
(
src
));
*
dst
=
taosMemoryCalloc
(
1
,
tlen
+
1
);
...
...
@@ -455,12 +452,6 @@ int32_t idxConvertDataToStr(void* src, int8_t type, void** dst) {
*
dst
=
(
char
*
)
*
dst
-
tlen
;
break
;
}
case
TSDB_DATA_TYPE_VARBINARY
:
tlen
=
taosEncodeBinary
(
NULL
,
varDataVal
(
src
),
varDataLen
(
src
));
*
dst
=
taosMemoryCalloc
(
1
,
tlen
+
1
);
tlen
=
taosEncodeBinary
(
dst
,
varDataVal
(
src
),
varDataLen
(
src
));
*
dst
=
(
char
*
)
*
dst
-
tlen
;
break
;
default:
ASSERTS
(
0
,
"index invalid input type"
);
break
;
...
...
source/libs/parser/src/parInsertSql.c
浏览文件 @
f266d517
...
...
@@ -479,11 +479,32 @@ static int32_t parseTagToken(const char** end, SToken* pToken, SSchema* pSchema,
}
case
TSDB_DATA_TYPE_VARBINARY
:
{
// Too long values will raise the invalid sql error message
if
(
pToken
->
n
+
VARSTR_HEADER_SIZE
>
pSchema
->
bytes
)
{
// Too long values will raise the invalid sql error message
void
*
data
=
NULL
;
uint32_t
size
=
0
;
if
(
pToken
->
type
==
TK_NK_HEX
){
if
(
taosHex2Ascii
(
pToken
->
z
,
pToken
->
n
,
&
data
,
&
size
)
<
0
){
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
else
if
(
pToken
->
type
==
TK_NK_BIN
){
if
(
taosBin2Ascii
(
pToken
->
z
,
pToken
->
n
,
&
data
,
&
size
)
<
0
){
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
else
{
size
=
pToken
->
n
;
}
if
(
size
+
VARSTR_HEADER_SIZE
>
pSchema
->
bytes
)
{
if
(
pToken
->
type
==
TK_NK_HEX
||
pToken
->
type
==
TK_NK_BIN
){
taosMemoryFree
(
data
);
}
return
generateSyntaxErrMsg
(
pMsgBuf
,
TSDB_CODE_PAR_VALUE_TOO_LONG
,
pSchema
->
name
);
}
val
->
pData
=
taosStrdup
(
pToken
->
z
)
val
->
nData
=
pToken
->
n
;
if
(
pToken
->
type
==
TK_NK_HEX
||
pToken
->
type
==
TK_NK_BIN
){
val
->
pData
=
data
;
}
else
{
val
->
pData
=
taosStrdup
(
pToken
->
z
);
}
val
->
nData
=
size
;
break
;
}
case
TSDB_DATA_TYPE_GEOMETRY
:
{
...
...
@@ -667,6 +688,7 @@ static int32_t rewriteTagCondColumnImpl(STagVal* pVal, SNode** pNode) {
*
(
double
*
)
&
pValue
->
typeData
=
pValue
->
datum
.
d
;
break
;
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
pValue
->
datum
.
p
=
taosMemoryCalloc
(
1
,
pVal
->
nData
+
VARSTR_HEADER_SIZE
);
if
(
NULL
==
pValue
->
datum
.
p
)
{
...
...
@@ -696,7 +718,6 @@ static int32_t rewriteTagCondColumnImpl(STagVal* pVal, SNode** pNode) {
*
(
uint64_t
*
)
&
pValue
->
typeData
=
pValue
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_JSON
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_DECIMAL
:
case
TSDB_DATA_TYPE_BLOB
:
case
TSDB_DATA_TYPE_MEDIUMBLOB
:
...
...
@@ -1374,15 +1395,31 @@ static int32_t parseValueTokenImpl(SInsertParseContext* pCxt, const char** pSql,
}
case
TSDB_DATA_TYPE_VARBINARY
:
{
// Too long values will raise the invalid sql error message
if
(
pToken
->
n
+
VARSTR_HEADER_SIZE
>
pSchema
->
bytes
)
{
void
*
data
=
NULL
;
uint32_t
size
=
0
;
if
(
pToken
->
type
==
TK_NK_HEX
){
if
(
taosHex2Ascii
(
pToken
->
z
,
pToken
->
n
,
&
data
,
&
size
)
<
0
){
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
else
if
(
pToken
->
type
==
TK_NK_BIN
){
if
(
taosBin2Ascii
(
pToken
->
z
,
pToken
->
n
,
&
data
,
&
size
)
<
0
){
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
else
{
size
=
pToken
->
n
;
}
if
(
size
+
VARSTR_HEADER_SIZE
>
pSchema
->
bytes
)
{
if
(
pToken
->
type
==
TK_NK_HEX
||
pToken
->
type
==
TK_NK_BIN
){
taosMemoryFree
(
data
);
}
return
generateSyntaxErrMsg
(
&
pCxt
->
msg
,
TSDB_CODE_PAR_VALUE_TOO_LONG
,
pSchema
->
name
);
}
pVal
->
value
.
pData
=
taosMemoryMalloc
(
pToken
->
n
);
if
(
NULL
==
pVal
->
value
.
pData
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
if
(
pToken
->
type
==
TK_NK_HEX
||
pToken
->
type
==
TK_NK_BIN
){
pVal
->
value
.
pData
=
data
;
}
else
{
pVal
->
value
.
pData
=
taosStrdup
(
pToken
->
z
);
}
memcpy
(
pVal
->
value
.
pData
,
pToken
->
z
,
pToken
->
n
);
pVal
->
value
.
nData
=
pToken
->
n
pVal
->
value
.
nData
=
size
;
break
;
}
case
TSDB_DATA_TYPE_NCHAR
:
{
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
f266d517
...
...
@@ -4784,6 +4784,7 @@ static int32_t checkTableTagsSchema(STranslateContext* pCxt, SHashObj* pHash, SN
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_TAGS_LEN
)
||
(
TSDB_DATA_TYPE_VARBINARY
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_TAGS_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_TAGS_LEN
)
||
(
TSDB_DATA_TYPE_GEOMETRY
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_TAGS_LEN
))
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
...
...
@@ -4836,6 +4837,7 @@ static int32_t checkTableColsSchema(STranslateContext* pCxt, SHashObj* pHash, in
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_VARBINARY
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
)
||
(
TSDB_DATA_TYPE_GEOMETRY
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_GEOMETRY_LEN
))
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
...
...
@@ -5532,6 +5534,7 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
if
(
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
==
pStmt
->
alterType
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_VARBINARY
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
@@ -5558,6 +5561,7 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
}
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_VARBINARY
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
@@ -8841,6 +8845,7 @@ static int32_t buildAddColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt, S
}
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_VARBINARY
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
@@ -8898,6 +8903,7 @@ static int32_t buildUpdateColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt
}
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_VARBINARY
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
source/libs/qcom/src/queryUtil.c
浏览文件 @
f266d517
...
...
@@ -300,8 +300,23 @@ int32_t dataConverToStr(char* str, int type, void* buf, int32_t bufSize, int32_t
n
=
sprintf
(
str
,
"%e"
,
GET_DOUBLE_VAL
(
buf
));
break
;
case
TSDB_DATA_TYPE_VARBINARY
:
sd
;
case
TSDB_DATA_TYPE_VARBINARY
:{
if
(
bufSize
<
0
)
{
// tscError("invalid buf size");
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
void
*
data
=
NULL
;
uint32_t
size
=
0
;
if
(
taosAscii2Hex
(
buf
,
bufSize
,
&
data
,
&
size
)
<
0
){
return
TSDB_CODE_OUT_OF_MEMORY
;
}
*
str
=
'"'
;
memcpy
(
str
+
1
,
data
,
size
);
*
(
str
+
size
+
1
)
=
'"'
;
n
=
size
+
2
;
taosMemoryFree
(
data
);
break
;
}
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_GEOMETRY
:
if
(
bufSize
<
0
)
{
...
...
source/libs/scalar/src/filter.c
浏览文件 @
f266d517
...
...
@@ -207,7 +207,7 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
}
}
if
(
optr
==
OP_TYPE_NOT_IN
&&
(
type
!=
TSDB_DATA_TYPE_BINARY
&&
type
!=
TSDB_DATA_TYPE_NCHAR
&&
type
!=
TSDB_DATA_TYPE_GEOMETRY
))
{
if
(
optr
==
OP_TYPE_NOT_IN
&&
(
type
!=
TSDB_DATA_TYPE_BINARY
&&
type
!=
TSDB_DATA_TYPE_
VARBINARY
&&
type
!=
TSDB_DATA_TYPE_
NCHAR
&&
type
!=
TSDB_DATA_TYPE_GEOMETRY
))
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_TINYINT
:
...
...
@@ -258,7 +258,15 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
case
TSDB_DATA_TYPE_DOUBLE
:
comparFn
=
5
;
break
;
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_VARBINARY
:{
if
(
optr
==
OP_TYPE_IN
)
{
comparFn
=
8
;
}
else
if
(
optr
==
OP_TYPE_NOT_IN
)
{
comparFn
=
25
;
}
else
{
/* normal relational comparFn */
comparFn
=
30
;
}
}
case
TSDB_DATA_TYPE_BINARY
:
{
if
(
optr
==
OP_TYPE_MATCH
)
{
comparFn
=
19
;
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
f266d517
...
...
@@ -1594,6 +1594,8 @@ static int32_t sclGetMathOperatorResType(SOperatorNode *pOp) {
SDataType
rdt
=
((
SExprNode
*
)(
pOp
->
pRight
))
->
resType
;
if
((
TSDB_DATA_TYPE_TIMESTAMP
==
ldt
.
type
&&
TSDB_DATA_TYPE_TIMESTAMP
==
rdt
.
type
)
||
TSDB_DATA_TYPE_VARBINARY
==
ldt
.
type
||
TSDB_DATA_TYPE_VARBINARY
==
rdt
.
type
||
(
TSDB_DATA_TYPE_TIMESTAMP
==
ldt
.
type
&&
(
IS_VAR_DATA_TYPE
(
rdt
.
type
)
||
IS_FLOAT_TYPE
(
rdt
.
type
)))
||
(
TSDB_DATA_TYPE_TIMESTAMP
==
rdt
.
type
&&
(
IS_VAR_DATA_TYPE
(
ldt
.
type
)
||
IS_FLOAT_TYPE
(
ldt
.
type
))))
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
...
...
@@ -1629,7 +1631,7 @@ static int32_t sclGetCompOperatorResType(SOperatorNode *pOp) {
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
SDataType
rdt
=
((
SExprNode
*
)(
pOp
->
pRight
))
->
resType
;
if
(
!
IS_VAR_DATA_TYPE
(
ldt
.
type
)
||
QUERY_NODE_VALUE
!=
nodeType
(
pOp
->
pRight
)
||
if
(
ldt
.
type
==
TSDB_DATA_TYPE_VARBINARY
||
!
IS_VAR_DATA_TYPE
(
ldt
.
type
)
||
QUERY_NODE_VALUE
!=
nodeType
(
pOp
->
pRight
)
||
(
!
IS_STR_DATA_TYPE
(
rdt
.
type
)
&&
(
rdt
.
type
!=
TSDB_DATA_TYPE_NULL
)))
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
...
...
@@ -1660,6 +1662,11 @@ static int32_t sclGetJsonOperatorResType(SOperatorNode *pOp) {
}
static
int32_t
sclGetBitwiseOperatorResType
(
SOperatorNode
*
pOp
)
{
SDataType
ldt
=
((
SExprNode
*
)(
pOp
->
pLeft
))
->
resType
;
SDataType
rdt
=
((
SExprNode
*
)(
pOp
->
pRight
))
->
resType
;
if
(
TSDB_DATA_TYPE_VARBINARY
==
ldt
.
type
||
TSDB_DATA_TYPE_VARBINARY
==
rdt
.
type
){
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
pOp
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BIGINT
;
pOp
->
node
.
resType
.
bytes
=
tDataTypes
[
TSDB_DATA_TYPE_BIGINT
].
bytes
;
return
TSDB_CODE_SUCCESS
;
...
...
source/libs/scalar/src/sclvector.c
浏览文件 @
f266d517
...
...
@@ -588,7 +588,6 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t
if
(
typeRight
==
TSDB_DATA_TYPE_NCHAR
||
typeRight
==
TSDB_DATA_TYPE_VARCHAR
||
typeRight
==
TSDB_DATA_TYPE_VARBINARY
||
typeRight
==
TSDB_DATA_TYPE_GEOMETRY
)
{
return
false
;
}
else
if
(
typeRight
!=
type
)
{
...
...
@@ -596,7 +595,6 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t
*
pRightData
=
pRightOut
;
}
}
else
if
(
type
==
TSDB_DATA_TYPE_BINARY
||
type
==
TSDB_DATA_TYPE_VARBINARY
||
type
==
TSDB_DATA_TYPE_GEOMETRY
)
{
if
(
typeLeft
==
TSDB_DATA_TYPE_NCHAR
)
{
*
pLeftData
=
ncharTobinary
(
*
pLeftData
);
...
...
@@ -1078,7 +1076,7 @@ static SColumnInfoData *vectorConvertVarToDouble(SScalarParam *pInput, int32_t *
SScalarParam
output
=
{
0
};
SColumnInfoData
*
pCol
=
pInput
->
columnData
;
if
(
IS_VAR_DATA_TYPE
(
pCol
->
info
.
type
)
&&
pCol
->
info
.
type
!=
TSDB_DATA_TYPE_JSON
)
{
if
(
IS_VAR_DATA_TYPE
(
pCol
->
info
.
type
)
&&
pCol
->
info
.
type
!=
TSDB_DATA_TYPE_JSON
&&
pCol
->
info
.
type
!=
TSDB_DATA_TYPE_VARBINARY
)
{
int32_t
code
=
vectorConvertSingleCol
(
pInput
,
&
output
,
TSDB_DATA_TYPE_DOUBLE
,
-
1
,
-
1
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
code
;
...
...
source/os/src/osString.c
浏览文件 @
f266d517
...
...
@@ -468,3 +468,95 @@ float taosStr2Float(const char *str, char **pEnd) {
#endif
return
tmp
;
}
int32_t
taosHex2Ascii
(
const
char
*
z
,
uint32_t
n
,
void
**
data
,
uint32_t
*
size
){
n
-=
2
;
// remove 0x
z
+=
2
;
*
size
=
n
%
2
==
0
?
n
/
2
:
n
/
2
+
1
;
uint8_t
*
tmp
=
(
uint8_t
*
)
taosMemoryCalloc
(
*
size
,
1
);
if
(
tmp
==
NULL
)
return
-
1
;
int8_t
num
=
0
;
uint8_t
*
byte
=
tmp
+
*
size
-
1
;
for
(
int
i
=
n
-
1
;
i
>=
0
;
i
--
)
{
if
(
z
[
i
]
>=
'a'
)
{
*
byte
|=
((
uint8_t
)(
10
+
(
z
[
i
]
-
'a'
))
<<
(
num
*
4
));
}
else
if
(
z
[
i
]
>=
'A'
)
{
*
byte
|=
((
uint8_t
)(
10
+
(
z
[
i
]
-
'A'
))
<<
(
num
*
4
));
}
else
{
*
byte
|=
((
uint8_t
)(
z
[
i
]
-
'0'
)
<<
(
num
*
4
));
}
if
(
num
==
1
)
{
byte
--
;
num
=
0
;
}
else
{
num
++
;
}
}
*
data
=
tmp
;
return
0
;
}
int32_t
taosBin2Ascii
(
const
char
*
z
,
uint32_t
n
,
void
**
data
,
uint32_t
*
size
){
n
-=
2
;
// remove 0b
z
+=
2
;
*
size
=
n
%
8
==
0
?
n
/
8
:
n
/
8
+
1
;
uint8_t
*
tmp
=
(
uint8_t
*
)
taosMemoryCalloc
(
*
size
,
1
);
if
(
tmp
==
NULL
)
return
-
1
;
int8_t
num
=
0
;
uint8_t
*
byte
=
tmp
+
*
size
-
1
;
for
(
int
i
=
n
-
1
;
i
>=
0
;
i
--
)
{
*
byte
|=
((
uint8_t
)(
z
[
i
]
-
'0'
)
<<
num
);
if
(
num
==
8
)
{
byte
--
;
num
=
0
;
}
else
{
num
++
;
}
}
*
data
=
tmp
;
return
0
;
}
static
char
valueOf
(
uint8_t
symbol
)
{
switch
(
symbol
)
{
case
0
:
return
'0'
;
case
1
:
return
'1'
;
case
2
:
return
'2'
;
case
3
:
return
'3'
;
case
4
:
return
'4'
;
case
5
:
return
'5'
;
case
6
:
return
'6'
;
case
7
:
return
'7'
;
case
8
:
return
'8'
;
case
9
:
return
'9'
;
case
10
:
return
'A'
;
case
11
:
return
'B'
;
case
12
:
return
'C'
;
case
13
:
return
'D'
;
case
14
:
return
'E'
;
case
15
:
return
'F'
;
default:
{
return
-
1
;
}
}
}
int32_t
taosAscii2Hex
(
const
char
*
z
,
uint32_t
n
,
void
**
data
,
uint32_t
*
size
){
*
size
=
n
*
2
+
2
;
uint8_t
*
tmp
=
(
uint8_t
*
)
taosMemoryCalloc
(
*
size
,
1
);
if
(
tmp
==
NULL
)
return
-
1
;
*
data
=
tmp
;
*
(
tmp
++
)
=
'0'
;
*
(
tmp
++
)
=
'X'
;
for
(
int
i
=
0
;
i
<
n
;
i
++
){
uint8_t
val
=
z
[
i
];
tmp
[
i
*
2
]
=
valueOf
(
val
>>
4
);
tmp
[
i
*
2
+
1
]
=
valueOf
(
val
&
0x0F
);
}
return
0
;
}
source/util/src/tcompare.c
浏览文件 @
f266d517
...
...
@@ -1370,8 +1370,16 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
case
TSDB_DATA_TYPE_DOUBLE
:
comparFn
=
compareDoubleVal
;
break
;
case
TSDB_DATA_TYPE_VARBINARY
:
if
(
optr
==
OP_TYPE_IN
)
{
comparFn
=
compareChkInString
;
}
else
if
(
optr
==
OP_TYPE_NOT_IN
)
{
comparFn
=
compareChkNotInString
;
}
else
{
/* normal relational comparFn */
comparFn
=
compareLenBinaryVal
;
}
break
;
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_VARBINARY
case
TSDB_DATA_TYPE_GEOMETRY
:
{
if
(
optr
==
OP_TYPE_MATCH
)
{
comparFn
=
comparestrRegexMatch
;
...
...
@@ -1457,7 +1465,6 @@ __compar_fn_t getKeyComparFunc(int32_t keyType, int32_t order) {
case
TSDB_DATA_TYPE_UBIGINT
:
return
(
order
==
TSDB_ORDER_ASC
)
?
compareUint64Val
:
compareUint64ValDesc
;
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_VARBINARY
case
TSDB_DATA_TYPE_GEOMETRY
:
return
(
order
==
TSDB_ORDER_ASC
)
?
compareLenPrefixedStr
:
compareLenPrefixedStrDesc
;
case
TSDB_DATA_TYPE_NCHAR
:
...
...
tools/shell/src/shellEngine.c
浏览文件 @
f266d517
...
...
@@ -581,8 +581,9 @@ void shellPrintField(const char *val, TAOS_FIELD *field, int32_t width, int32_t
return
;
}
int
n
;
char
buf
[
TSDB_MAX_BYTES_PER_ROW
];
int
n
=
0
;
#define LENGTH 64
char
buf
[
LENGTH
]
=
{
0
}
;
switch
(
field
->
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
shellPrintString
(((((
int32_t
)(
*
((
char
*
)
val
)))
==
1
)
?
"true"
:
"false"
),
width
);
...
...
@@ -615,7 +616,7 @@ void shellPrintField(const char *val, TAOS_FIELD *field, int32_t width, int32_t
if
(
tsEnableScience
)
{
printf
(
"%*.7e"
,
width
,
GET_FLOAT_VAL
(
val
));
}
else
{
n
=
snprintf
(
buf
,
TSDB_MAX_BYTES_PER_ROW
,
"%*.7f"
,
width
,
GET_FLOAT_VAL
(
val
));
n
=
snprintf
(
buf
,
LENGTH
,
"%*.7f"
,
width
,
GET_FLOAT_VAL
(
val
));
if
(
n
>
SHELL_FLOAT_WIDTH
)
{
printf
(
"%*.7e"
,
width
,
GET_FLOAT_VAL
(
val
));
...
...
@@ -626,10 +627,10 @@ void shellPrintField(const char *val, TAOS_FIELD *field, int32_t width, int32_t
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
if
(
tsEnableScience
)
{
snprintf
(
buf
,
TSDB_MAX_BYTES_PER_ROW
,
"%*.15e"
,
width
,
GET_DOUBLE_VAL
(
val
));
snprintf
(
buf
,
LENGTH
,
"%*.15e"
,
width
,
GET_DOUBLE_VAL
(
val
));
printf
(
"%s"
,
buf
);
}
else
{
n
=
snprintf
(
buf
,
TSDB_MAX_BYTES_PER_ROW
,
"%*.15f"
,
width
,
GET_DOUBLE_VAL
(
val
));
n
=
snprintf
(
buf
,
LENGTH
,
"%*.15f"
,
width
,
GET_DOUBLE_VAL
(
val
));
if
(
n
>
SHELL_DOUBLE_WIDTH
)
{
printf
(
"%*.15e"
,
width
,
GET_DOUBLE_VAL
(
val
));
}
else
{
...
...
@@ -637,8 +638,17 @@ void shellPrintField(const char *val, TAOS_FIELD *field, int32_t width, int32_t
}
}
break
;
case
TSDB_DATA_TYPE_VARBINARY
:{
void
*
data
=
NULL
;
uint32_t
size
=
0
;
if
(
taosAscii2Hex
(
val
,
length
,
&
data
,
&
size
)
<
0
){
break
;
}
shellPrintNChar
(
data
,
size
,
width
);
taosMemoryFree
(
data
);
break
;
}
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_VARBINARY
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_JSON
:
shellPrintNChar
(
val
,
length
,
width
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录