Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
455737f2
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
455737f2
编写于
5月 05, 2022
作者:
G
Ganlin Zhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(query): add hex encoding/decoding for transmitting nchar constant
from client to server in JSON
上级
45e8eeb9
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
65 addition
and
3 deletion
+65
-3
include/os/osString.h
include/os/osString.h
+2
-0
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+33
-3
source/os/src/osString.c
source/os/src/osString.c
+30
-0
未找到文件。
include/os/osString.h
浏览文件 @
455737f2
...
...
@@ -59,6 +59,8 @@ bool taosMbsToUcs4(const char *mbs, size_t mbs_len, TdUcs4 *ucs4, int32_t ucs
int32_t
tasoUcs4Compare
(
TdUcs4
*
f1_ucs4
,
TdUcs4
*
f2_ucs4
,
int32_t
bytes
);
TdUcs4
*
tasoUcs4Copy
(
TdUcs4
*
target_ucs4
,
TdUcs4
*
source_ucs4
,
int32_t
len_ucs4
);
bool
taosValidateEncodec
(
const
char
*
encodec
);
int32_t
taosHexEncode
(
const
char
*
src
,
char
*
dst
,
int32_t
len
);
int32_t
taosHexDecode
(
const
char
*
src
,
char
*
dst
,
int32_t
len
);
int32_t
taosWcharWidth
(
TdWchar
wchar
);
int32_t
taosWcharsWidth
(
TdWchar
*
pWchar
,
int32_t
size
);
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
455737f2
...
...
@@ -1699,7 +1699,18 @@ static int32_t datumToJson(const void* pObj, SJson* pJson) {
case
TSDB_DATA_TYPE_DOUBLE
:
code
=
tjsonAddDoubleToObject
(
pJson
,
jkValueDatum
,
pNode
->
datum
.
d
);
break
;
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_NCHAR
:
{
//cJSON only support utf-8 encoding. Convert memory content to hex string.
char
*
buf
=
taosMemoryCalloc
(
varDataLen
(
pNode
->
datum
.
p
)
*
2
+
1
,
sizeof
(
char
));
code
=
taosHexEncode
(
varDataVal
(
pNode
->
datum
.
p
),
buf
,
varDataLen
(
pNode
->
datum
.
p
));
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosMemoryFree
(
buf
);
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
code
=
tjsonAddStringToObject
(
pJson
,
jkValueDatum
,
buf
);
taosMemoryFree
(
buf
);
break
;
}
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
code
=
tjsonAddStringToObject
(
pJson
,
jkValueDatum
,
varDataVal
(
pNode
->
datum
.
p
));
...
...
@@ -1773,8 +1784,27 @@ static int32_t jsonToDatum(const SJson* pJson, void* pObj) {
code
=
TSDB_CODE_OUT_OF_MEMORY
;
break
;
}
varDataSetLen
(
pNode
->
datum
.
p
,
pNode
->
node
.
resType
.
bytes
);
code
=
tjsonGetStringValue
(
pJson
,
jkValueDatum
,
varDataVal
(
pNode
->
datum
.
p
));
varDataSetLen
(
pNode
->
datum
.
p
,
pNode
->
node
.
resType
.
bytes
-
VARSTR_HEADER_SIZE
);
if
(
TSDB_DATA_TYPE_NCHAR
==
pNode
->
node
.
resType
.
type
)
{
char
*
buf
=
taosMemoryCalloc
(
1
,
pNode
->
node
.
resType
.
bytes
*
2
+
VARSTR_HEADER_SIZE
+
1
);
if
(
NULL
==
buf
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
break
;
}
code
=
tjsonGetStringValue
(
pJson
,
jkValueDatum
,
buf
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosMemoryFree
(
buf
);
break
;
}
code
=
taosHexDecode
(
buf
,
varDataVal
(
pNode
->
datum
.
p
),
pNode
->
node
.
resType
.
bytes
-
VARSTR_HEADER_SIZE
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosMemoryFree
(
buf
);
break
;
}
taosMemoryFree
(
buf
);
}
else
{
code
=
tjsonGetStringValue
(
pJson
,
jkValueDatum
,
varDataVal
(
pNode
->
datum
.
p
));
}
break
;
}
case
TSDB_DATA_TYPE_JSON
:
...
...
source/os/src/osString.c
浏览文件 @
455737f2
...
...
@@ -195,6 +195,36 @@ int32_t taosUcs4len(TdUcs4 *ucs4) {
return
n
;
}
//dst buffer size should be at least 2*len + 1
int32_t
taosHexEncode
(
const
char
*
src
,
char
*
dst
,
int32_t
len
)
{
if
(
!
dst
)
{
return
-
1
;
}
for
(
int32_t
i
=
0
;
i
<
len
;
++
i
)
{
sprintf
(
dst
+
i
*
2
,
"%02x"
,
src
[
i
]
&
0xff
);
}
return
0
;
}
int32_t
taosHexDecode
(
const
char
*
src
,
char
*
dst
,
int32_t
len
)
{
if
(
!
dst
)
{
return
-
1
;
}
uint16_t
hn
,
ln
,
out
;
for
(
int
i
=
0
,
j
=
0
;
i
<
len
*
2
;
i
+=
2
,
++
j
)
{
hn
=
src
[
i
]
>
'9'
?
src
[
i
]
-
'A'
+
10
:
src
[
i
]
-
'0'
;
ln
=
src
[
i
+
1
]
>
'9'
?
src
[
i
+
1
]
-
'A'
+
10
:
src
[
i
+
1
]
-
'0'
;
out
=
(
hn
<<
4
)
|
ln
;
memcpy
(
dst
+
j
,
&
out
,
1
);
}
return
0
;
}
int32_t
taosWcharWidth
(
TdWchar
wchar
)
{
return
wcwidth
(
wchar
);
}
int32_t
taosWcharsWidth
(
TdWchar
*
pWchar
,
int32_t
size
)
{
return
wcswidth
(
pWchar
,
size
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录