Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f9e305af
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看板
未验证
提交
f9e305af
编写于
3月 23, 2022
作者:
H
Haojun Liao
提交者:
GitHub
3月 23, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10945 from taosdata/feature/3.0_liaohj
[td-13039] fix null value retrieval.
上级
4d7bb97f
21aaecd0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
40 deletion
+23
-40
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+23
-40
未找到文件。
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
f9e305af
...
...
@@ -403,18 +403,12 @@ static STsdbReadHandle* tsdbQueryTablesImpl(STsdb* tsdb, STsdbQueryCond* pCond,
SColumnInfoData
colInfo
=
{{
0
},
0
};
colInfo
.
info
=
pCond
->
colList
[
i
];
colInfo
.
pData
=
calloc
(
1
,
EXTRA_BYTES
+
pReadHandle
->
outputCapacity
*
pCond
->
colList
[
i
].
bytes
);
if
(
!
IS_VAR_DATA_TYPE
(
colInfo
.
info
.
type
))
{
colInfo
.
nullbitmap
=
calloc
(
1
,
BitmapLen
(
pReadHandle
->
outputCapacity
));
}
if
(
colInfo
.
pData
==
NULL
||
(
colInfo
.
nullbitmap
==
NULL
&&
(
!
IS_VAR_DATA_TYPE
(
colInfo
.
info
.
type
))))
{
int32_t
code
=
blockDataEnsureColumnCapacity
(
&
colInfo
,
pReadHandle
->
outputCapacity
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_end
;
}
taosArrayPush
(
pReadHandle
->
pColumns
,
&
colInfo
);
pReadHandle
->
statis
[
i
].
colId
=
colInfo
.
info
.
colId
;
}
...
...
@@ -1418,34 +1412,37 @@ static int32_t doCopyRowsFromFileBlock(STsdbReadHandle* pTsdbReadHandle, int32_t
}
if
(
!
isAllRowsNull
(
src
)
&&
pColInfo
->
info
.
colId
==
src
->
colId
)
{
if
(
pColInfo
->
info
.
type
!=
TSDB_DATA_TYPE_BINARY
&&
pColInfo
->
info
.
type
!=
TSDB_DATA_TYPE_NCHAR
)
{
memmove
(
pData
,
(
char
*
)
src
->
pData
+
bytes
*
start
,
bytes
*
num
);
}
else
{
// handle the var-string
char
*
dst
=
pData
;
if
(
!
IS_VAR_DATA_TYPE
(
pColInfo
->
info
.
type
))
{
// todo opt performance
// memmove(pData, (char*)src->pData + bytes * start, bytes * num);
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
SCellVal
sVal
=
{
0
};
if
(
tdGetColDataOfRow
(
&
sVal
,
src
,
k
)
<
0
)
{
TASSERT
(
0
);
}
if
(
sVal
.
valType
==
TD_VTYPE_NULL
)
{
colDataAppend
(
pColInfo
,
k
,
NULL
,
true
);
}
else
{
colDataAppend
(
pColInfo
,
k
,
sVal
.
val
,
false
);
}
}
}
else
{
// handle the var-string
// todo refactor, only copy one-by-one
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
SCellVal
sVal
=
{
0
};
SCellVal
sVal
=
{
0
};
if
(
tdGetColDataOfRow
(
&
sVal
,
src
,
k
)
<
0
){
TASSERT
(
0
);
}
memcpy
(
dst
,
sVal
.
val
,
varDataTLen
(
sVal
.
val
));
dst
+=
bytes
;
colDataAppend
(
pColInfo
,
k
,
sVal
.
val
,
false
)
;
}
}
j
++
;
i
++
;
}
else
{
// pColInfo->info.colId < src->colId, it is a NULL data
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
char
*
dst
=
pData
;
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
setVardataNull
(
dst
,
pColInfo
->
info
.
type
);
dst
+=
bytes
;
}
}
else
{
setNullN
(
pData
,
pColInfo
->
info
.
type
,
pColInfo
->
info
.
bytes
,
num
);
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
// TODO opt performance
colDataAppend
(
pColInfo
,
k
,
NULL
,
true
);
}
i
++
;
}
...
...
@@ -1453,23 +1450,9 @@ static int32_t doCopyRowsFromFileBlock(STsdbReadHandle* pTsdbReadHandle, int32_t
while
(
i
<
requiredNumOfCols
)
{
// the remain columns are all null data
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pTsdbReadHandle
->
pColumns
,
i
);
if
(
ASCENDING_TRAVERSE
(
pTsdbReadHandle
->
order
))
{
pData
=
(
char
*
)
pColInfo
->
pData
+
numOfRows
*
pColInfo
->
info
.
bytes
;
}
else
{
pData
=
(
char
*
)
pColInfo
->
pData
+
(
capacity
-
numOfRows
-
num
)
*
pColInfo
->
info
.
bytes
;
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
colDataAppend
(
pColInfo
,
k
,
NULL
,
true
);
// TODO add a fast version to set a number of consecutive NULL value.
}
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
char
*
dst
=
pData
;
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
setVardataNull
(
dst
,
pColInfo
->
info
.
type
);
dst
+=
pColInfo
->
info
.
bytes
;
}
}
else
{
setNullN
(
pData
,
pColInfo
->
info
.
type
,
pColInfo
->
info
.
bytes
,
num
);
}
i
++
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录