Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
331f2a1f
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
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看板
提交
331f2a1f
编写于
11月 19, 2021
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
change json output format
上级
9060898a
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
43 addition
and
37 deletion
+43
-37
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+9
-2
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+8
-28
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+26
-7
未找到文件。
src/client/src/tscSubquery.c
浏览文件 @
331f2a1f
...
...
@@ -2494,7 +2494,7 @@ int32_t tscHandleFirstRoundStableQuery(SSqlObj *pSql) {
SExprInfo
*
p
=
tscAddFuncInSelectClause
(
pNewQueryInfo
,
index
++
,
TSDB_FUNC_TAG
,
&
colIndex
,
schema
,
TSDB_COL_TAG
,
getNewResColId
(
pCmd
));
if
(
schema
->
type
==
TSDB_DATA_TYPE_JSON
){
p
->
base
.
numOfParams
=
pExpr
->
base
.
numOfParams
;
p
->
base
.
param
[
0
]
=
pExpr
->
base
.
param
[
0
]
;
tVariantAssign
(
&
p
->
base
.
param
[
0
],
&
pExpr
->
base
.
param
[
0
])
;
}
p
->
base
.
resColId
=
pExpr
->
base
.
resColId
;
}
else
if
(
pExpr
->
base
.
functionId
==
TSDB_FUNC_PRJ
)
{
...
...
@@ -3687,7 +3687,14 @@ TAOS_ROW doSetResultRowData(SSqlObj *pSql) {
int32_t
type
=
pInfo
->
field
.
type
;
int32_t
bytes
=
pInfo
->
field
.
bytes
;
if
(
!
IS_VAR_DATA_TYPE
(
type
)
&&
type
!=
TSDB_DATA_TYPE_JSON
)
{
if
(
type
==
TSDB_DATA_TYPE_JSON
){
char
*
p
=
pRes
->
urow
[
i
];
if
(
*
p
==
TSDB_DATA_TYPE_NCHAR
&&
isNull
(
POINTER_SHIFT
(
p
,
CHAR_BYTES
),
type
))
{
pRes
->
tsrow
[
j
]
=
NULL
;
}
else
{
pRes
->
tsrow
[
j
]
=
pRes
->
urow
[
i
];
}
}
else
if
(
!
IS_VAR_DATA_TYPE
(
type
))
{
pRes
->
tsrow
[
j
]
=
isNull
(
pRes
->
urow
[
i
],
type
)
?
NULL
:
pRes
->
urow
[
i
];
}
else
{
pRes
->
tsrow
[
j
]
=
isNull
(
pRes
->
urow
[
i
],
type
)
?
NULL
:
varDataVal
(
pRes
->
urow
[
i
]);
...
...
src/client/src/tscUtil.c
浏览文件 @
331f2a1f
...
...
@@ -750,7 +750,7 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo
p
+=
pInfo
->
field
.
bytes
;
}
memcpy
(
pRes
->
urow
[
i
],
pRes
->
buffer
[
i
],
pInfo
->
field
.
bytes
*
pRes
->
numOfRows
);
}
else
if
(
pInfo
->
field
.
type
==
TSDB_DATA_TYPE_JSON
)
{
}
else
if
(
convertNchar
&&
pInfo
->
field
.
type
==
TSDB_DATA_TYPE_JSON
&&
*
(
char
*
)(
pRes
->
urow
[
i
])
==
TSDB_DATA_TYPE_NCHAR
)
{
// convert unicode to native code in a temporary buffer extra one byte for terminated symbol
char
*
buffer
=
realloc
(
pRes
->
buffer
[
i
],
pInfo
->
field
.
bytes
*
pRes
->
numOfRows
);
if
(
buffer
==
NULL
)
return
;
...
...
@@ -761,35 +761,15 @@ static void setResRawPtrImpl(SSqlRes* pRes, SInternalField* pInfo, int32_t i, bo
char
*
p
=
pRes
->
urow
[
i
];
for
(
int32_t
k
=
0
;
k
<
pRes
->
numOfRows
;
++
k
)
{
char
*
dst
=
pRes
->
buffer
[
i
]
+
k
*
pInfo
->
field
.
bytes
;
char
type
=
*
p
;
char
*
realData
=
p
+
CHAR_BYTES
;
if
(
type
==
TSDB_DATA_TYPE_NCHAR
&&
isNull
(
realData
,
TSDB_DATA_TYPE_NCHAR
))
{
memcpy
(
dst
,
realData
,
varDataTLen
(
realData
));
}
else
if
(
type
==
TSDB_DATA_TYPE_BINARY
)
{
assert
(
*
(
uint32_t
*
)
varDataVal
(
realData
)
==
TSDB_DATA_JSON_null
);
// json null value
assert
(
varDataLen
(
realData
)
==
INT_BYTES
);
sprintf
(
varDataVal
(
dst
),
"%s"
,
"null"
);
varDataSetLen
(
dst
,
strlen
(
varDataVal
(
dst
)));
}
else
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
*
dst
=
*
p
;
dst
+=
CHAR_BYTES
;
int32_t
length
=
taosUcs4ToMbs
(
varDataVal
(
realData
),
varDataLen
(
realData
),
varDataVal
(
dst
));
varDataSetLen
(
dst
,
length
);
if
(
length
==
0
)
{
tscError
(
"charset:%s to %s. val:%s convert failed."
,
DEFAULT_UNICODE_ENCODEC
,
tsCharset
,
(
char
*
)
p
);
}
}
else
if
(
type
==
TSDB_DATA_TYPE_DOUBLE
)
{
double
jsonVd
=
*
(
double
*
)(
realData
);
sprintf
(
varDataVal
(
dst
),
"%.9lf"
,
jsonVd
);
varDataSetLen
(
dst
,
strlen
(
varDataVal
(
dst
)));
}
else
if
(
type
==
TSDB_DATA_TYPE_BIGINT
)
{
int64_t
jsonVd
=
*
(
int64_t
*
)(
realData
);
sprintf
(
varDataVal
(
dst
),
"%"
PRId64
,
jsonVd
);
varDataSetLen
(
dst
,
strlen
(
varDataVal
(
dst
)));
}
else
if
(
type
==
TSDB_DATA_TYPE_BOOL
)
{
sprintf
(
varDataVal
(
dst
),
"%s"
,
(
*
((
char
*
)
realData
)
==
1
)
?
"true"
:
"false"
);
varDataSetLen
(
dst
,
strlen
(
varDataVal
(
dst
)));
}
else
{
assert
(
0
);
}
p
+=
pInfo
->
field
.
bytes
;
}
...
...
src/kit/shell/src/shellEngine.c
浏览文件 @
331f2a1f
...
...
@@ -470,12 +470,22 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) {
}
static
void
dumpFieldToFile
(
FILE
*
fp
,
c
onst
c
har
*
val
,
TAOS_FIELD
*
field
,
int32_t
length
,
int
precision
)
{
static
void
dumpFieldToFile
(
FILE
*
fp
,
char
*
val
,
TAOS_FIELD
*
field
,
int32_t
length
,
int
precision
)
{
if
(
val
==
NULL
)
{
fprintf
(
fp
,
"%s"
,
TSDB_DATA_NULL_STR
);
return
;
}
uint8_t
type
=
field
->
type
;
if
(
type
==
TSDB_DATA_TYPE_JSON
){
char
*
p
=
val
;
type
=
*
p
;
val
+=
CHAR_BYTES
;
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
length
=
varDataLen
(
val
);
}
}
char
buf
[
TSDB_MAX_BYTES_PER_ROW
];
switch
(
field
->
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
...
...
@@ -556,7 +566,7 @@ static int dumpResultToFile(const char* fname, TAOS_RES* tres) {
if
(
i
>
0
)
{
fputc
(
','
,
fp
);
}
dumpFieldToFile
(
fp
,
(
const
char
*
)
row
[
i
],
fields
+
i
,
length
[
i
],
precision
);
dumpFieldToFile
(
fp
,
row
[
i
],
fields
+
i
,
length
[
i
],
precision
);
}
fputc
(
'\n'
,
fp
);
...
...
@@ -635,7 +645,7 @@ static void shellPrintNChar(const char *str, int length, int width) {
}
static
void
printField
(
c
onst
c
har
*
val
,
TAOS_FIELD
*
field
,
int
width
,
int32_t
length
,
int
precision
)
{
static
void
printField
(
char
*
val
,
TAOS_FIELD
*
field
,
int
width
,
int32_t
length
,
int
precision
)
{
if
(
val
==
NULL
)
{
int
w
=
width
;
if
(
field
->
type
<
TSDB_DATA_TYPE_TINYINT
||
field
->
type
>
TSDB_DATA_TYPE_DOUBLE
)
{
...
...
@@ -648,8 +658,18 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le
return
;
}
uint8_t
type
=
field
->
type
;
if
(
type
==
TSDB_DATA_TYPE_JSON
){
char
*
p
=
val
;
type
=
*
p
;
val
+=
CHAR_BYTES
;
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
length
=
varDataLen
(
val
);
}
}
char
buf
[
TSDB_MAX_BYTES_PER_ROW
];
switch
(
field
->
type
)
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
printf
(
"%*s"
,
width
,
((((
int32_t
)(
*
((
char
*
)
val
)))
==
1
)
?
"true"
:
"false"
));
break
;
...
...
@@ -685,7 +705,6 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le
break
;
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_JSON
:
shellPrintNChar
(
val
,
length
,
width
);
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
...
...
@@ -747,7 +766,7 @@ static int verticalPrintResult(TAOS_RES* tres) {
int
padding
=
(
int
)(
maxColNameLen
-
strlen
(
field
->
name
));
printf
(
"%*.s%s: "
,
padding
,
" "
,
field
->
name
);
printField
(
(
const
char
*
)
row
[
i
],
field
,
0
,
length
[
i
],
precision
);
printField
(
row
[
i
],
field
,
0
,
length
[
i
],
precision
);
putchar
(
'\n'
);
}
}
else
if
(
showMore
)
{
...
...
@@ -877,7 +896,7 @@ static int horizontalPrintResult(TAOS_RES* tres) {
if
(
numOfRows
<
resShowMaxNum
)
{
for
(
int
i
=
0
;
i
<
num_fields
;
i
++
)
{
putchar
(
' '
);
printField
(
(
const
char
*
)
row
[
i
],
fields
+
i
,
width
[
i
],
length
[
i
],
precision
);
printField
(
row
[
i
],
fields
+
i
,
width
[
i
],
length
[
i
],
precision
);
putchar
(
' '
);
putchar
(
'|'
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录