Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e12ac1dd
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
e12ac1dd
编写于
9月 21, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more code
上级
f51c8643
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
155 addition
and
154 deletion
+155
-154
source/dnode/vnode/src/tsdb/tsdbDiskData.c
source/dnode/vnode/src/tsdb/tsdbDiskData.c
+155
-154
未找到文件。
source/dnode/vnode/src/tsdb/tsdbDiskData.c
浏览文件 @
e12ac1dd
...
@@ -16,10 +16,10 @@
...
@@ -16,10 +16,10 @@
#include "tsdb.h"
#include "tsdb.h"
typedef
struct
SDiskDataBuilder
SDiskDataBuilder
;
typedef
struct
SDiskDataBuilder
SDiskDataBuilder
;
typedef
struct
SDiskCol
SDiskCol
;
typedef
struct
SDiskCol
Builder
SDiskColBuilder
;
typedef
struct
SDiskData
SDiskData
;
typedef
struct
SDiskData
SDiskData
;
struct
SDiskCol
{
struct
SDiskCol
Builder
{
int16_t
cid
;
int16_t
cid
;
int8_t
type
;
int8_t
type
;
int8_t
flag
;
int8_t
flag
;
...
@@ -31,332 +31,332 @@ struct SDiskCol {
...
@@ -31,332 +31,332 @@ struct SDiskCol {
SCompressor
*
pValC
;
SCompressor
*
pValC
;
};
};
// SDiskCol ================================================
// SDiskCol
Builder
================================================
static
int32_t
tDiskColInit
(
SDiskCol
*
pDiskCol
,
int16_t
cid
,
int8_t
type
,
uint8_t
cmprAlg
)
{
static
int32_t
tDiskColInit
(
SDiskCol
Builder
*
pBuilder
,
int16_t
cid
,
int8_t
type
,
uint8_t
cmprAlg
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
p
DiskCol
->
cid
=
cid
;
p
Builder
->
cid
=
cid
;
p
DiskCol
->
type
=
type
;
p
Builder
->
type
=
type
;
p
DiskCol
->
flag
=
0
;
p
Builder
->
flag
=
0
;
p
DiskCol
->
cmprAlg
=
cmprAlg
;
p
Builder
->
cmprAlg
=
cmprAlg
;
p
DiskCol
->
nVal
=
0
;
p
Builder
->
nVal
=
0
;
p
DiskCol
->
offset
=
0
;
p
Builder
->
offset
=
0
;
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
p
DiskCol
->
pOffC
==
NULL
)
{
if
(
p
Builder
->
pOffC
==
NULL
)
{
code
=
tCompressorCreate
(
&
p
DiskCol
->
pOffC
);
code
=
tCompressorCreate
(
&
p
Builder
->
pOffC
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
}
}
code
=
tCompressorReset
(
p
DiskCol
->
pOffC
,
TSDB_DATA_TYPE_INT
,
cmprAlg
);
code
=
tCompressorReset
(
p
Builder
->
pOffC
,
TSDB_DATA_TYPE_INT
,
cmprAlg
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
}
}
if
(
p
DiskCol
->
pValC
==
NULL
)
{
if
(
p
Builder
->
pValC
==
NULL
)
{
code
=
tCompressorCreate
(
&
p
DiskCol
->
pValC
);
code
=
tCompressorCreate
(
&
p
Builder
->
pValC
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
}
}
code
=
tCompressorReset
(
p
DiskCol
->
pValC
,
type
,
cmprAlg
);
code
=
tCompressorReset
(
p
Builder
->
pValC
,
type
,
cmprAlg
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
return
code
;
return
code
;
}
}
static
int32_t
tDiskColClear
(
SDiskCol
*
pDiskCol
)
{
static
int32_t
tDiskColClear
(
SDiskCol
Builder
*
pBuilder
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
tFree
(
p
DiskCol
->
pBitMap
);
tFree
(
p
Builder
->
pBitMap
);
if
(
p
DiskCol
->
pOffC
)
tCompressorDestroy
(
pDiskCol
->
pOffC
);
if
(
p
Builder
->
pOffC
)
tCompressorDestroy
(
pBuilder
->
pOffC
);
if
(
p
DiskCol
->
pValC
)
tCompressorDestroy
(
pDiskCol
->
pValC
);
if
(
p
Builder
->
pValC
)
tCompressorDestroy
(
pBuilder
->
pValC
);
return
code
;
return
code
;
}
}
static
int32_t
t
DiskColToBinary
(
SDiskCol
*
pDiskCol
,
const
uint8_t
**
ppData
,
int32_t
*
n
Data
)
{
static
int32_t
t
GnrtDiskCol
(
SDiskColBuilder
*
pBuilder
,
SBlockCol
*
pBlockCol
,
const
uint8_t
**
pp
Data
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
ASSERT
(
p
DiskCol
->
flag
&&
pDiskCol
->
flag
!=
HAS_NONE
);
ASSERT
(
p
Builder
->
flag
&&
pBuilder
->
flag
!=
HAS_NONE
);
if
(
p
DiskCol
->
flag
==
HAS_NULL
)
{
if
(
p
Builder
->
flag
==
HAS_NULL
)
{
return
code
;
return
code
;
}
}
// bitmap (todo)
// bitmap (todo)
if
(
p
DiskCol
->
flag
!=
HAS_VALUE
)
{
if
(
p
Builder
->
flag
!=
HAS_VALUE
)
{
}
}
// offset (todo)
// offset (todo)
if
(
IS_VAR_DATA_TYPE
(
p
DiskCol
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
p
Builder
->
type
))
{
code
=
tCompGen
(
p
DiskCol
->
pOffC
,
NULL
/* todo */
,
NULL
/* todo */
);
code
=
tCompGen
(
p
Builder
->
pOffC
,
NULL
/* todo */
,
NULL
/* todo */
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
}
}
// value (todo)
// value (todo)
if
(
p
DiskCol
->
flag
!=
(
HAS_NULL
|
HAS_NONE
))
{
if
(
p
Builder
->
flag
!=
(
HAS_NULL
|
HAS_NONE
))
{
code
=
tCompGen
(
p
DiskCol
->
pValC
,
NULL
/* todo */
,
NULL
/* todo */
);
code
=
tCompGen
(
p
Builder
->
pValC
,
NULL
/* todo */
,
NULL
/* todo */
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
}
}
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddValue
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
static
int32_t
tDiskColAddValue
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
pColVal
->
type
))
{
code
=
tCompress
(
p
DiskCol
->
pOffC
,
&
pDiskCol
->
offset
,
sizeof
(
int32_t
));
code
=
tCompress
(
p
Builder
->
pOffC
,
&
pBuilder
->
offset
,
sizeof
(
int32_t
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
p
DiskCol
->
offset
+=
pColVal
->
value
.
nData
;
p
Builder
->
offset
+=
pColVal
->
value
.
nData
;
}
}
code
=
tCompress
(
p
DiskCol
->
pValC
,
pColVal
->
value
.
pData
,
pColVal
->
value
.
nData
/*TODO*/
);
code
=
tCompress
(
p
Builder
->
pValC
,
pColVal
->
value
.
pData
,
pColVal
->
value
.
nData
/*TODO*/
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal0
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// 0
static
int32_t
tDiskColAddVal0
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// 0
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
p
DiskCol
->
flag
=
HAS_NONE
;
p
Builder
->
flag
=
HAS_NONE
;
}
else
if
(
pColVal
->
isNull
)
{
}
else
if
(
pColVal
->
isNull
)
{
p
DiskCol
->
flag
=
HAS_NULL
;
p
Builder
->
flag
=
HAS_NULL
;
}
else
{
}
else
{
p
DiskCol
->
flag
=
HAS_VALUE
;
p
Builder
->
flag
=
HAS_VALUE
;
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal1
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_NONE
static
int32_t
tDiskColAddVal1
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_NONE
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
!
pColVal
->
isNone
)
{
if
(
!
pColVal
->
isNone
)
{
// bit map
// bit map
int32_t
nBit
=
BIT1_SIZE
(
p
DiskCol
->
nVal
+
1
);
int32_t
nBit
=
BIT1_SIZE
(
p
Builder
->
nVal
+
1
);
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
nBit
);
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
nBit
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
memset
(
p
DiskCol
->
pBitMap
,
0
,
nBit
);
memset
(
p
Builder
->
pBitMap
,
0
,
nBit
);
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
1
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
1
);
// value
// value
if
(
pColVal
->
isNull
)
{
if
(
pColVal
->
isNull
)
{
p
DiskCol
->
flag
|=
HAS_NULL
;
p
Builder
->
flag
|=
HAS_NULL
;
}
else
{
}
else
{
p
DiskCol
->
flag
|=
HAS_VALUE
;
p
Builder
->
flag
|=
HAS_VALUE
;
SColVal
cv
=
COL_VAL_VALUE
(
pColVal
->
cid
,
pColVal
->
type
,
(
SValue
){
0
});
SColVal
cv
=
COL_VAL_VALUE
(
pColVal
->
cid
,
pColVal
->
type
,
(
SValue
){
0
});
for
(
int32_t
iVal
=
0
;
iVal
<
p
DiskCol
->
nVal
;
iVal
++
)
{
for
(
int32_t
iVal
=
0
;
iVal
<
p
Builder
->
nVal
;
iVal
++
)
{
code
=
tDiskColAddValue
(
p
DiskCol
,
&
cv
);
code
=
tDiskColAddValue
(
p
Builder
,
&
cv
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
}
}
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal2
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_NULL
static
int32_t
tDiskColAddVal2
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_NULL
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
!
pColVal
->
isNull
)
{
if
(
!
pColVal
->
isNull
)
{
int32_t
nBit
=
BIT1_SIZE
(
p
DiskCol
->
nVal
+
1
);
int32_t
nBit
=
BIT1_SIZE
(
p
Builder
->
nVal
+
1
);
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
nBit
);
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
nBit
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
p
DiskCol
->
flag
|=
HAS_NONE
;
p
Builder
->
flag
|=
HAS_NONE
;
memset
(
p
DiskCol
->
pBitMap
,
255
,
nBit
);
memset
(
p
Builder
->
pBitMap
,
255
,
nBit
);
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
0
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
0
);
}
else
{
}
else
{
p
DiskCol
->
flag
|=
HAS_VALUE
;
p
Builder
->
flag
|=
HAS_VALUE
;
memset
(
p
DiskCol
->
pBitMap
,
0
,
nBit
);
memset
(
p
Builder
->
pBitMap
,
0
,
nBit
);
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
1
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
1
);
SColVal
cv
=
COL_VAL_VALUE
(
pColVal
->
cid
,
pColVal
->
type
,
(
SValue
){
0
});
SColVal
cv
=
COL_VAL_VALUE
(
pColVal
->
cid
,
pColVal
->
type
,
(
SValue
){
0
});
for
(
int32_t
iVal
=
0
;
iVal
<
p
DiskCol
->
nVal
;
iVal
++
)
{
for
(
int32_t
iVal
=
0
;
iVal
<
p
Builder
->
nVal
;
iVal
++
)
{
code
=
tDiskColAddValue
(
p
DiskCol
,
&
cv
);
code
=
tDiskColAddValue
(
p
Builder
,
&
cv
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
}
}
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal3
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_NULL|HAS_NONE
static
int32_t
tDiskColAddVal3
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_NULL|HAS_NONE
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
BIT1_SIZE
(
pDiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
BIT1_SIZE
(
pBuilder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
0
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
0
);
}
else
if
(
pColVal
->
isNull
)
{
}
else
if
(
pColVal
->
isNull
)
{
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
BIT1_SIZE
(
pDiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
BIT1_SIZE
(
pBuilder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
1
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
1
);
}
else
{
}
else
{
p
DiskCol
->
flag
|=
HAS_VALUE
;
p
Builder
->
flag
|=
HAS_VALUE
;
uint8_t
*
pBitMap
=
NULL
;
uint8_t
*
pBitMap
=
NULL
;
code
=
tRealloc
(
&
pBitMap
,
BIT2_SIZE
(
p
DiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
pBitMap
,
BIT2_SIZE
(
p
Builder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
for
(
int32_t
iVal
=
0
;
iVal
<
p
DiskCol
->
nVal
;
iVal
++
)
{
for
(
int32_t
iVal
=
0
;
iVal
<
p
Builder
->
nVal
;
iVal
++
)
{
SET_BIT2
(
pBitMap
,
iVal
,
GET_BIT1
(
p
DiskCol
->
pBitMap
,
iVal
));
SET_BIT2
(
pBitMap
,
iVal
,
GET_BIT1
(
p
Builder
->
pBitMap
,
iVal
));
}
}
SET_BIT2
(
pBitMap
,
p
DiskCol
->
nVal
,
2
);
SET_BIT2
(
pBitMap
,
p
Builder
->
nVal
,
2
);
tFree
(
p
DiskCol
->
pBitMap
);
tFree
(
p
Builder
->
pBitMap
);
p
DiskCol
->
pBitMap
=
pBitMap
;
p
Builder
->
pBitMap
=
pBitMap
;
SColVal
cv
=
COL_VAL_VALUE
(
pColVal
->
cid
,
pColVal
->
type
,
(
SValue
){
0
});
SColVal
cv
=
COL_VAL_VALUE
(
pColVal
->
cid
,
pColVal
->
type
,
(
SValue
){
0
});
for
(
int32_t
iVal
=
0
;
iVal
<
p
DiskCol
->
nVal
;
iVal
++
)
{
for
(
int32_t
iVal
=
0
;
iVal
<
p
Builder
->
nVal
;
iVal
++
)
{
code
=
tDiskColAddValue
(
p
DiskCol
,
&
cv
);
code
=
tDiskColAddValue
(
p
Builder
,
&
cv
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal4
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_VALUE
static
int32_t
tDiskColAddVal4
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_VALUE
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
pColVal
->
isNone
||
pColVal
->
isNull
)
{
if
(
pColVal
->
isNone
||
pColVal
->
isNull
)
{
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
p
DiskCol
->
flag
|=
HAS_NONE
;
p
Builder
->
flag
|=
HAS_NONE
;
}
else
{
}
else
{
p
DiskCol
->
flag
|=
HAS_NULL
;
p
Builder
->
flag
|=
HAS_NULL
;
}
}
int32_t
nBit
=
BIT1_SIZE
(
p
DiskCol
->
nVal
+
1
);
int32_t
nBit
=
BIT1_SIZE
(
p
Builder
->
nVal
+
1
);
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
nBit
);
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
nBit
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
memset
(
p
DiskCol
->
pBitMap
,
255
,
nBit
);
memset
(
p
Builder
->
pBitMap
,
255
,
nBit
);
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
0
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
0
);
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
else
{
}
else
{
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
}
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal5
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_VALUE|HAS_NONE
static
int32_t
tDiskColAddVal5
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_VALUE|HAS_NONE
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
pColVal
->
isNull
)
{
if
(
pColVal
->
isNull
)
{
p
DiskCol
->
flag
|=
HAS_NULL
;
p
Builder
->
flag
|=
HAS_NULL
;
uint8_t
*
pBitMap
=
NULL
;
uint8_t
*
pBitMap
=
NULL
;
code
=
tRealloc
(
&
pBitMap
,
BIT2_SIZE
(
p
DiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
pBitMap
,
BIT2_SIZE
(
p
Builder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
for
(
int32_t
iVal
=
0
;
iVal
<
p
DiskCol
->
nVal
;
iVal
++
)
{
for
(
int32_t
iVal
=
0
;
iVal
<
p
Builder
->
nVal
;
iVal
++
)
{
SET_BIT2
(
pBitMap
,
iVal
,
GET_BIT1
(
p
DiskCol
->
pBitMap
,
iVal
)
?
2
:
0
);
SET_BIT2
(
pBitMap
,
iVal
,
GET_BIT1
(
p
Builder
->
pBitMap
,
iVal
)
?
2
:
0
);
}
}
SET_BIT2
(
pBitMap
,
p
DiskCol
->
nVal
,
1
);
SET_BIT2
(
pBitMap
,
p
Builder
->
nVal
,
1
);
tFree
(
p
DiskCol
->
pBitMap
);
tFree
(
p
Builder
->
pBitMap
);
p
DiskCol
->
pBitMap
=
pBitMap
;
p
Builder
->
pBitMap
=
pBitMap
;
}
else
{
}
else
{
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
BIT1_SIZE
(
pDiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
BIT1_SIZE
(
pBuilder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
0
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
0
);
}
else
{
}
else
{
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
1
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
1
);
}
}
}
}
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal6
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_VALUE|HAS_NULL
static
int32_t
tDiskColAddVal6
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_VALUE|HAS_NULL
int32_t
code
=
0
;
int32_t
code
=
0
;
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
p
DiskCol
->
flag
|=
HAS_NONE
;
p
Builder
->
flag
|=
HAS_NONE
;
uint8_t
*
pBitMap
=
NULL
;
uint8_t
*
pBitMap
=
NULL
;
code
=
tRealloc
(
&
pBitMap
,
BIT2_SIZE
(
p
DiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
pBitMap
,
BIT2_SIZE
(
p
Builder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
for
(
int32_t
iVal
=
0
;
iVal
<
p
DiskCol
->
nVal
;
iVal
++
)
{
for
(
int32_t
iVal
=
0
;
iVal
<
p
Builder
->
nVal
;
iVal
++
)
{
SET_BIT2
(
pBitMap
,
iVal
,
GET_BIT1
(
p
DiskCol
->
pBitMap
,
iVal
)
?
2
:
1
);
SET_BIT2
(
pBitMap
,
iVal
,
GET_BIT1
(
p
Builder
->
pBitMap
,
iVal
)
?
2
:
1
);
}
}
SET_BIT2
(
pBitMap
,
p
DiskCol
->
nVal
,
0
);
SET_BIT2
(
pBitMap
,
p
Builder
->
nVal
,
0
);
tFree
(
p
DiskCol
->
pBitMap
);
tFree
(
p
Builder
->
pBitMap
);
p
DiskCol
->
pBitMap
=
pBitMap
;
p
Builder
->
pBitMap
=
pBitMap
;
}
else
{
}
else
{
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
BIT1_SIZE
(
pDiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
BIT1_SIZE
(
pBuilder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
if
(
pColVal
->
isNull
)
{
if
(
pColVal
->
isNull
)
{
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
0
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
0
);
}
else
{
}
else
{
SET_BIT1
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
1
);
SET_BIT1
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
1
);
}
}
}
}
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
tDiskColAddVal7
(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
{
// HAS_VALUE|HAS_NULL|HAS_NONE
static
int32_t
tDiskColAddVal7
(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
{
// HAS_VALUE|HAS_NULL|HAS_NONE
int32_t
code
=
0
;
int32_t
code
=
0
;
code
=
tRealloc
(
&
p
DiskCol
->
pBitMap
,
BIT2_SIZE
(
pDiskCol
->
nVal
+
1
));
code
=
tRealloc
(
&
p
Builder
->
pBitMap
,
BIT2_SIZE
(
pBuilder
->
nVal
+
1
));
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
if
(
pColVal
->
isNone
)
{
if
(
pColVal
->
isNone
)
{
SET_BIT2
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
0
);
SET_BIT2
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
0
);
}
else
if
(
pColVal
->
isNull
)
{
}
else
if
(
pColVal
->
isNull
)
{
SET_BIT2
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
1
);
SET_BIT2
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
1
);
}
else
{
}
else
{
SET_BIT2
(
p
DiskCol
->
pBitMap
,
pDiskCol
->
nVal
,
2
);
SET_BIT2
(
p
Builder
->
pBitMap
,
pBuilder
->
nVal
,
2
);
}
}
code
=
tDiskColAddValue
(
p
DiskCol
,
pColVal
);
code
=
tDiskColAddValue
(
p
Builder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
p
DiskCol
->
nVal
++
;
p
Builder
->
nVal
++
;
_exit:
_exit:
return
code
;
return
code
;
}
}
static
int32_t
(
*
tDiskColAddValImpl
[])(
SDiskCol
*
pDiskCol
,
SColVal
*
pColVal
)
=
{
static
int32_t
(
*
tDiskColAddValImpl
[])(
SDiskCol
Builder
*
pBuilder
,
SColVal
*
pColVal
)
=
{
tDiskColAddVal0
,
// 0
tDiskColAddVal0
,
// 0
tDiskColAddVal1
,
// HAS_NONE
tDiskColAddVal1
,
// HAS_NONE
tDiskColAddVal2
,
// HAS_NULL
tDiskColAddVal2
,
// HAS_NULL
...
@@ -377,7 +377,7 @@ struct SDiskDataBuilder {
...
@@ -377,7 +377,7 @@ struct SDiskDataBuilder {
SCompressor
*
pVerC
;
SCompressor
*
pVerC
;
SCompressor
*
pKeyC
;
SCompressor
*
pKeyC
;
int32_t
nDiskCol
;
int32_t
nDiskCol
;
SArray
*
aDiskCol
;
SArray
*
aDiskCol
Builder
;
uint8_t
*
aBuf
[
2
];
uint8_t
*
aBuf
[
2
];
};
};
...
@@ -410,9 +410,9 @@ int32_t tDiskDataBuilderInit(SDiskDataBuilder *pBuilder, STSchema *pTSchema, TAB
...
@@ -410,9 +410,9 @@ int32_t tDiskDataBuilderInit(SDiskDataBuilder *pBuilder, STSchema *pTSchema, TAB
code
=
tCompressorReset
(
pBuilder
->
pKeyC
,
TSDB_DATA_TYPE_TIMESTAMP
,
cmprAlg
);
code
=
tCompressorReset
(
pBuilder
->
pKeyC
,
TSDB_DATA_TYPE_TIMESTAMP
,
cmprAlg
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
if
(
pBuilder
->
aDiskCol
==
NULL
)
{
if
(
pBuilder
->
aDiskCol
Builder
==
NULL
)
{
pBuilder
->
aDiskCol
=
taosArrayInit
(
pTSchema
->
numOfCols
-
1
,
sizeof
(
SDiskCol
));
pBuilder
->
aDiskCol
Builder
=
taosArrayInit
(
pTSchema
->
numOfCols
-
1
,
sizeof
(
SDiskColBuilder
));
if
(
pBuilder
->
aDiskCol
==
NULL
)
{
if
(
pBuilder
->
aDiskCol
Builder
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
code
;
return
code
;
}
}
...
@@ -422,17 +422,17 @@ int32_t tDiskDataBuilderInit(SDiskDataBuilder *pBuilder, STSchema *pTSchema, TAB
...
@@ -422,17 +422,17 @@ int32_t tDiskDataBuilderInit(SDiskDataBuilder *pBuilder, STSchema *pTSchema, TAB
for
(
int32_t
iCol
=
1
;
iCol
<
pTSchema
->
numOfCols
;
iCol
++
)
{
for
(
int32_t
iCol
=
1
;
iCol
<
pTSchema
->
numOfCols
;
iCol
++
)
{
STColumn
*
pTColumn
=
&
pTSchema
->
columns
[
iCol
];
STColumn
*
pTColumn
=
&
pTSchema
->
columns
[
iCol
];
if
(
pBuilder
->
nDiskCol
>=
taosArrayGetSize
(
pBuilder
->
aDiskCol
))
{
if
(
pBuilder
->
nDiskCol
>=
taosArrayGetSize
(
pBuilder
->
aDiskCol
Builder
))
{
SDiskCol
dc
=
(
SDiskCol
){
0
};
SDiskCol
Builder
dc
=
(
SDiskColBuilder
){
0
};
if
(
taosArrayPush
(
pBuilder
->
aDiskCol
,
&
dc
)
==
NULL
)
{
if
(
taosArrayPush
(
pBuilder
->
aDiskCol
Builder
,
&
dc
)
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
code
;
return
code
;
}
}
}
}
SDiskCol
*
pDiskCol
=
(
SDiskCol
*
)
taosArrayGet
(
pBuilder
->
aDiskCol
,
pBuilder
->
nDiskCol
);
SDiskCol
Builder
*
pDiskColBuilder
=
(
SDiskColBuilder
*
)
taosArrayGet
(
pBuilder
->
aDiskColBuilder
,
pBuilder
->
nDiskCol
);
code
=
tDiskColInit
(
pDiskCol
,
pTColumn
->
colId
,
pTColumn
->
type
,
cmprAlg
);
code
=
tDiskColInit
(
pDiskCol
Builder
,
pTColumn
->
colId
,
pTColumn
->
type
,
cmprAlg
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
pBuilder
->
nDiskCol
++
;
pBuilder
->
nDiskCol
++
;
...
@@ -448,12 +448,13 @@ int32_t tDiskDataBuilderDestroy(SDiskDataBuilder *pBuilder) {
...
@@ -448,12 +448,13 @@ int32_t tDiskDataBuilderDestroy(SDiskDataBuilder *pBuilder) {
if
(
pBuilder
->
pVerC
)
tCompressorDestroy
(
pBuilder
->
pVerC
);
if
(
pBuilder
->
pVerC
)
tCompressorDestroy
(
pBuilder
->
pVerC
);
if
(
pBuilder
->
pKeyC
)
tCompressorDestroy
(
pBuilder
->
pKeyC
);
if
(
pBuilder
->
pKeyC
)
tCompressorDestroy
(
pBuilder
->
pKeyC
);
if
(
pBuilder
->
aDiskCol
)
{
if
(
pBuilder
->
aDiskColBuilder
)
{
for
(
int32_t
iDiskCol
=
0
;
iDiskCol
<
taosArrayGetSize
(
pBuilder
->
aDiskCol
);
iDiskCol
++
)
{
for
(
int32_t
iDiskColBuilder
=
0
;
iDiskColBuilder
<
taosArrayGetSize
(
pBuilder
->
aDiskColBuilder
);
SDiskCol
*
pDiskCol
=
(
SDiskCol
*
)
taosArrayGet
(
pBuilder
->
aDiskCol
,
iDiskCol
);
iDiskColBuilder
++
)
{
tDiskColClear
(
pDiskCol
);
SDiskColBuilder
*
pDiskColBuilder
=
(
SDiskColBuilder
*
)
taosArrayGet
(
pBuilder
->
aDiskColBuilder
,
iDiskColBuilder
);
tDiskColClear
(
pDiskColBuilder
);
}
}
taosArrayDestroy
(
pBuilder
->
aDiskCol
);
taosArrayDestroy
(
pBuilder
->
aDiskCol
Builder
);
}
}
for
(
int32_t
iBuf
=
0
;
iBuf
<
sizeof
(
pBuilder
->
aBuf
)
/
sizeof
(
pBuilder
->
aBuf
[
0
]);
iBuf
++
)
{
for
(
int32_t
iBuf
=
0
;
iBuf
<
sizeof
(
pBuilder
->
aBuf
)
/
sizeof
(
pBuilder
->
aBuf
[
0
]);
iBuf
++
)
{
tFree
(
pBuilder
->
aBuf
[
iBuf
]);
tFree
(
pBuilder
->
aBuf
[
iBuf
]);
...
@@ -494,19 +495,19 @@ int32_t tDiskDataBuilderAddRow(SDiskDataBuilder *pBuilder, TSDBROW *pRow, STSche
...
@@ -494,19 +495,19 @@ int32_t tDiskDataBuilderAddRow(SDiskDataBuilder *pBuilder, TSDBROW *pRow, STSche
tRowIterInit
(
&
iter
,
pRow
,
pTSchema
);
tRowIterInit
(
&
iter
,
pRow
,
pTSchema
);
SColVal
*
pColVal
=
tRowIterNext
(
&
iter
);
SColVal
*
pColVal
=
tRowIterNext
(
&
iter
);
for
(
int32_t
iDiskCol
=
0
;
iDiskCol
<
pBuilder
->
nDiskCol
;
iDiskCol
++
)
{
for
(
int32_t
iDiskCol
Builder
=
0
;
iDiskColBuilder
<
pBuilder
->
nDiskCol
;
iDiskColBuilder
++
)
{
SDiskCol
*
pDiskCol
=
(
SDiskCol
*
)
taosArrayGet
(
pBuilder
->
aDiskCol
,
iDiskCol
);
SDiskCol
Builder
*
pDiskColBuilder
=
(
SDiskColBuilder
*
)
taosArrayGet
(
pBuilder
->
aDiskColBuilder
,
iDiskColBuilder
);
while
(
pColVal
&&
pColVal
->
cid
<
pDiskCol
->
cid
)
{
while
(
pColVal
&&
pColVal
->
cid
<
pDiskCol
Builder
->
cid
)
{
pColVal
=
tRowIterNext
(
&
iter
);
pColVal
=
tRowIterNext
(
&
iter
);
}
}
if
(
pColVal
==
NULL
||
pColVal
->
cid
>
pDiskCol
->
cid
)
{
if
(
pColVal
==
NULL
||
pColVal
->
cid
>
pDiskCol
Builder
->
cid
)
{
SColVal
cv
=
COL_VAL_NONE
(
pDiskCol
->
cid
,
pDiskCol
->
type
);
SColVal
cv
=
COL_VAL_NONE
(
pDiskCol
Builder
->
cid
,
pDiskColBuilder
->
type
);
code
=
tDiskColAddValImpl
[
pDiskCol
->
flag
](
pDiskCol
,
&
cv
);
code
=
tDiskColAddValImpl
[
pDiskCol
Builder
->
flag
](
pDiskColBuilder
,
&
cv
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
}
else
{
}
else
{
code
=
tDiskColAddValImpl
[
pDiskCol
->
flag
](
pDiskCol
,
pColVal
);
code
=
tDiskColAddValImpl
[
pDiskCol
Builder
->
flag
](
pDiskColBuilder
,
pColVal
);
if
(
code
)
goto
_exit
;
if
(
code
)
goto
_exit
;
pColVal
=
tRowIterNext
(
&
iter
);
pColVal
=
tRowIterNext
(
&
iter
);
}
}
...
@@ -551,18 +552,18 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, SDiskData *pDiskData) {
...
@@ -551,18 +552,18 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, SDiskData *pDiskData) {
if
(
code
)
return
code
;
if
(
code
)
return
code
;
int32_t
offset
=
0
;
int32_t
offset
=
0
;
for
(
int32_t
iDiskCol
=
0
;
iDiskCol
<
pBuilder
->
nDiskCol
;
iDiskCol
++
)
{
for
(
int32_t
iDiskCol
Builder
=
0
;
iDiskColBuilder
<
pBuilder
->
nDiskCol
;
iDiskColBuilder
++
)
{
SDiskCol
*
pDiskCol
=
(
SDiskCol
*
)
taosArrayGet
(
pBuilder
->
aDiskCol
,
iDiskCol
);
SDiskCol
Builder
*
pDiskColBuilder
=
(
SDiskColBuilder
*
)
taosArrayGet
(
pBuilder
->
aDiskColBuilder
,
iDiskColBuilder
);
if
(
pDiskCol
->
flag
==
HAS_NONE
)
continue
;
if
(
pDiskCol
Builder
->
flag
==
HAS_NONE
)
continue
;
code
=
t
DiskColToBinary
(
pDiskCol
,
NULL
,
NULL
);
code
=
t
GnrtDiskCol
(
pDiskColBuilder
,
NULL
,
NULL
);
if
(
code
)
return
code
;
if
(
code
)
return
code
;
SBlockCol
bCol
=
{.
cid
=
pDiskCol
->
cid
,
SBlockCol
bCol
=
{.
cid
=
pDiskCol
Builder
->
cid
,
.
type
=
pDiskCol
->
type
,
.
type
=
pDiskCol
Builder
->
type
,
// .smaOn = ,
// .smaOn = ,
.
flag
=
pDiskCol
->
flag
,
.
flag
=
pDiskCol
Builder
->
flag
,
// .szOrigin =
// .szOrigin =
// .szBitmap =
// .szBitmap =
// .szOffset =
// .szOffset =
...
@@ -589,12 +590,12 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, SDiskData *pDiskData) {
...
@@ -589,12 +590,12 @@ int32_t tGnrtDiskData(SDiskDataBuilder *pBuilder, SDiskData *pDiskData) {
n += hdr.szVer;
n += hdr.szVer;
memcpy(pBuilder->aBuf[0] + n, pKey, hdr.szKey);
memcpy(pBuilder->aBuf[0] + n, pKey, hdr.szKey);
n += hdr.szKey;
n += hdr.szKey;
for (int32_t iDiskCol
= 0; iDiskCol < pBuilder->nDiskCol; iDiskCol
++) {
for (int32_t iDiskCol
Builder = 0; iDiskColBuilder < pBuilder->nDiskCol; iDiskColBuilder
++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol
, iDiskCol
);
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol
Builder, iDiskColBuilder
);
n += tPutBlockCol(pBuilder->aBuf[0] + n, NULL /*pDiskCol->bCol (todo) */);
n += tPutBlockCol(pBuilder->aBuf[0] + n, NULL /*pDiskCol->bCol (todo) */);
}
}
for (int32_t iDiskCol
= 0; iDiskCol < pBuilder->nDiskCol; iDiskCol
++) {
for (int32_t iDiskCol
Builder = 0; iDiskColBuilder < pBuilder->nDiskCol; iDiskColBuilder
++) {
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol
, iDiskCol
);
SDiskCol *pDiskCol = (SDiskCol *)taosArrayGet(pBuilder->aDiskCol
Builder, iDiskColBuilder
);
// memcpy(pDiskData->aBuf[0] + n, NULL, );
// memcpy(pDiskData->aBuf[0] + n, NULL, );
// n += 0;
// n += 0;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录