Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f7325a99
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看板
提交
f7325a99
编写于
11月 27, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more code
上级
0fdf4193
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
125 addition
and
4 deletion
+125
-4
include/common/tdataformat.h
include/common/tdataformat.h
+1
-1
include/util/tarray.h
include/util/tarray.h
+7
-0
source/common/src/tdataformat.c
source/common/src/tdataformat.c
+103
-3
source/util/src/tarray.c
source/util/src/tarray.c
+14
-0
未找到文件。
include/common/tdataformat.h
浏览文件 @
f7325a99
...
...
@@ -87,7 +87,7 @@ int32_t tBufferReserve(SBuffer *pBuffer, int64_t nData, void **ppData);
int32_t
tRowBuild
(
SArray
*
aColVal
,
STSchema
*
pTSchema
,
SRow
**
ppRow
);
void
tRowGet
(
SRow
*
pRow
,
STSchema
*
pTSchema
,
int32_t
iCol
,
SColVal
*
pColVal
);
void
tRowDestroy
(
SRow
*
pRow
);
int32_t
tRowMergeSort
(
SArray
*
aRow
,
STSchema
*
pTSchema
);
int32_t
tRowMergeSort
(
SArray
*
aRow
P
,
STSchema
*
pTSchema
,
int8_t
flag
);
// SRowIter ================================
int32_t
tRowIterOpen
(
SRow
*
pRow
,
STSchema
*
pTSchema
,
SRowIter
**
ppIter
);
...
...
include/util/tarray.h
浏览文件 @
f7325a99
...
...
@@ -194,6 +194,13 @@ void taosArrayPopTailBatch(SArray* pArray, size_t cnt);
*/
void
taosArrayRemove
(
SArray
*
pArray
,
size_t
index
);
/**
* remove batch entry from the given index
* @param pArray
* @param index
*/
void
taosArrayRemoveBatch
(
SArray
*
pArray
,
size_t
index
,
size_t
num
,
FDelete
fp
);
/**
* copy the whole array from source to destination
* @param pDst
...
...
source/common/src/tdataformat.c
浏览文件 @
f7325a99
...
...
@@ -492,10 +492,109 @@ void tRowGet(SRow *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal) {
void
tRowDestroy
(
SRow
*
pRow
)
{
tFree
((
uint8_t
*
)
pRow
);
}
int32_t
tRowMergeSort
(
SArray
*
aRow
,
STSchema
*
pTSchema
)
{
// todo
static
int32_t
tRowPCmprFn
(
const
void
*
p1
,
const
void
*
p2
)
{
SRow
*
pRow1
=
*
(
SRow
**
)
p1
;
SRow
*
pRow2
=
*
(
SRow
**
)
p2
;
if
(
pRow1
->
ts
<
pRow2
->
ts
)
{
return
-
1
;
}
else
if
(
pRow1
->
ts
>
pRow2
->
ts
)
{
return
1
;
}
return
0
;
}
static
void
tRowPDestroy
(
SRow
**
ppRow
)
{
tFree
((
uint8_t
*
)
*
ppRow
);
}
static
int32_t
tRowMerge
(
SArray
*
aRowP
,
STSchema
*
pTSchema
,
int32_t
iStart
,
int32_t
iEnd
,
int8_t
flag
)
{
int32_t
code
=
0
;
int32_t
nRow
=
iEnd
-
iStart
;
SRowIter
**
aIter
=
NULL
;
SArray
*
aColVal
=
NULL
;
SRow
*
pRow
=
NULL
;
aIter
=
taosMemoryCalloc
(
nRow
,
sizeof
(
SRowIter
*
));
if
(
aIter
==
NULL
)
{
code
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_exit
;
}
for
(
int32_t
i
=
0
;
i
<
nRow
;
i
++
)
{
SRow
*
pRowT
=
taosArrayGetP
(
aRowP
,
iStart
+
i
);
code
=
tRowIterOpen
(
pRowT
,
pTSchema
,
&
aIter
[
i
]);
if
(
code
)
goto
_exit
;
}
// merge
aColVal
=
taosArrayInit
(
pTSchema
->
numOfCols
,
sizeof
(
SColVal
));
if
(
aColVal
==
NULL
)
{
code
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_exit
;
}
for
(
int32_t
iCol
=
0
;
iCol
<
pTSchema
->
numOfCols
;
iCol
++
)
{
SColVal
*
pColVal
=
NULL
;
for
(
int32_t
iRow
=
0
;
iRow
<
nRow
;
iRow
++
)
{
SColVal
*
pColValT
=
tRowIterNext
(
aIter
[
iRow
]);
// todo: take value according to flag
if
(
pColVal
==
NULL
||
COL_VAL_IS_VALUE
(
pColValT
))
{
pColVal
=
pColValT
;
}
}
taosArrayPush
(
aColVal
,
pColVal
);
}
// build
code
=
tRowBuild
(
aColVal
,
pTSchema
,
&
pRow
);
if
(
code
)
goto
_exit
;
taosArrayRemoveBatch
(
aRowP
,
iStart
,
nRow
,
(
FDelete
)
tRowPDestroy
);
taosArrayInsert
(
aRowP
,
iStart
,
&
pRow
);
_exit:
if
(
aIter
)
{
for
(
int32_t
i
=
0
;
i
<
nRow
;
i
++
)
{
tRowIterClose
(
&
aIter
[
i
]);
}
taosMemoryFree
(
aIter
);
}
if
(
aColVal
)
taosArrayDestroy
(
aColVal
);
if
(
code
)
tRowDestroy
(
pRow
);
return
code
;
}
int32_t
tRowMergeSort
(
SArray
*
aRowP
,
STSchema
*
pTSchema
,
int8_t
flag
)
{
int32_t
code
=
0
;
if
(
aRowP
->
size
<=
1
)
return
0
;
taosArraySort
(
aRowP
,
tRowPCmprFn
);
int32_t
iStart
=
0
;
while
(
iStart
<
aRowP
->
size
)
{
SRow
*
pRow
=
(
SRow
*
)
taosArrayGetP
(
aRowP
,
iStart
);
int32_t
iEnd
=
iStart
+
1
;
while
(
iEnd
<
aRowP
->
size
)
{
SRow
*
pRowT
=
(
SRow
*
)
taosArrayGetP
(
aRowP
,
iEnd
);
if
(
pRow
->
ts
!=
pRowT
->
ts
)
break
;
iEnd
++
;
}
if
(
iEnd
-
iStart
>
1
)
{
code
=
tRowMerge
(
aRowP
,
pTSchema
,
iStart
,
iEnd
,
flag
);
}
// the array is also changing, so the iStart just ++ instead of iEnd
iStart
++
;
}
return
code
;
}
// SRowIter ========================================
struct
SRowIter
{
...
...
@@ -1505,7 +1604,8 @@ static FORCE_INLINE void tColDataGetValue1(SColData *pColData, int32_t iVal, SCo
static
FORCE_INLINE
void
tColDataGetValue2
(
SColData
*
pColData
,
int32_t
iVal
,
SColVal
*
pColVal
)
{
// HAS_NULL
*
pColVal
=
COL_VAL_NULL
(
pColData
->
cid
,
pColData
->
type
);
}
static
FORCE_INLINE
void
tColDataGetValue3
(
SColData
*
pColData
,
int32_t
iVal
,
SColVal
*
pColVal
)
{
// HAS_NULL|HAS_NONE
static
FORCE_INLINE
void
tColDataGetValue3
(
SColData
*
pColData
,
int32_t
iVal
,
SColVal
*
pColVal
)
{
// HAS_NULL|HAS_NONE
switch
(
GET_BIT1
(
pColData
->
pBitMap
,
iVal
))
{
case
0
:
*
pColVal
=
COL_VAL_NONE
(
pColData
->
cid
,
pColData
->
type
);
...
...
source/util/src/tarray.c
浏览文件 @
f7325a99
...
...
@@ -290,6 +290,20 @@ void taosArrayRemove(SArray* pArray, size_t index) {
pArray
->
size
-=
1
;
}
void
taosArrayRemoveBatch
(
SArray
*
pArray
,
size_t
index
,
size_t
num
,
FDelete
fp
)
{
ASSERT
(
index
+
num
<=
pArray
->
size
);
if
(
fp
)
{
for
(
int32_t
i
=
0
;
i
<
num
;
i
++
)
{
fp
(
taosArrayGet
(
pArray
,
index
+
i
));
}
}
memmove
((
char
*
)
pArray
->
pData
+
index
*
pArray
->
elemSize
,
(
char
*
)
pArray
->
pData
+
(
index
+
num
)
*
pArray
->
elemSize
,
(
pArray
->
size
-
index
-
num
)
*
pArray
->
elemSize
);
pArray
->
size
-=
num
;
}
SArray
*
taosArrayFromList
(
const
void
*
src
,
size_t
size
,
size_t
elemSize
)
{
assert
(
src
!=
NULL
&&
elemSize
>
0
);
SArray
*
pDst
=
taosArrayInit
(
size
,
elemSize
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录