Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
04252283
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看板
提交
04252283
编写于
11月 21, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more code
上级
c0a4340d
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
107 addition
and
227 deletion
+107
-227
include/common/tdataformat.h
include/common/tdataformat.h
+4
-0
source/common/src/tdataformat.c
source/common/src/tdataformat.c
+103
-227
未找到文件。
include/common/tdataformat.h
浏览文件 @
04252283
...
...
@@ -93,6 +93,10 @@ void tRowGet(SRow *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal);
int32_t
tRowToArr
(
SRow
*
pRow
,
STSchema
*
pTSchema
,
SArray
**
aColValP
);
// SRowIter ================================
int32_t
tRowIterOpen
(
SRow
*
pRow
,
STSchema
*
pTSchema
,
SRowIter
**
ppIter
);
void
tRowIterClose
(
SRowIter
**
ppIter
);
SColVal
*
tRowIterNext
(
SRowIter
*
pIter
);
SColVal
*
tRowIterNextNotNone
(
SRowIter
*
pIter
);
// STag ================================
int32_t
tTagNew
(
SArray
*
pArray
,
int32_t
version
,
int8_t
isJson
,
STag
**
ppTag
);
...
...
source/common/src/tdataformat.c
浏览文件 @
04252283
...
...
@@ -56,7 +56,7 @@ static int32_t tGetTagVal(uint8_t *p, STagVal *pTagVal, int8_t isJson);
#pragma pack(push, 1)
typedef
struct
{
int8_t
kvType
;
int16_t
n
idx
;
int16_t
n
Col
;
char
idx
[];
}
SKVIdx
;
#pragma pack(pop)
...
...
@@ -251,230 +251,6 @@ int32_t tRowBuild(SArray *aColVal, STSchema *pTSchema, SBuffer *pBuffer) {
}
}
#if 0
// decide
uint32_t nData = 0;
uint32_t nDataT = 0;
uint32_t nDataK = 0;
if (flags == TSROW_HAS_NONE || flags == TSROW_HAS_NULL) {
nData = 0;
} else {
switch (flags) {
case TSROW_HAS_VAL:
nDataT = pTSchema->flen + ntv;
break;
case TSROW_HAS_NULL | TSROW_HAS_NONE:
nDataT = BIT1_SIZE(pTSchema->numOfCols - 1);
break;
case TSROW_HAS_VAL | TSROW_HAS_NONE:
case TSROW_HAS_VAL | TSROW_HAS_NULL:
nDataT = BIT1_SIZE(pTSchema->numOfCols - 1) + pTSchema->flen + ntv;
break;
case TSROW_HAS_VAL | TSROW_HAS_NULL | TSROW_HAS_NONE:
nDataT = BIT2_SIZE(pTSchema->numOfCols - 1) + pTSchema->flen + ntv;
break;
default:
break;
ASSERT(0);
}
uint8_t tflags = 0;
if (maxIdx <= UINT8_MAX) {
nDataK = sizeof(STSKVRow) + sizeof(uint8_t) * nTag + nkv;
tflags |= TSROW_KV_SMALL;
} else if (maxIdx <= UINT16_MAX) {
nDataK = sizeof(STSKVRow) + sizeof(uint16_t) * nTag + nkv;
tflags |= TSROW_KV_MID;
} else {
nDataK = sizeof(STSKVRow) + sizeof(uint32_t) * nTag + nkv;
tflags |= TSROW_KV_BIG;
}
if (nDataT <= nDataK) {
nData = nDataT;
} else {
nData = nDataK;
flags |= tflags;
}
}
// alloc
if (pBuilder) {
// create from a builder
if (nData == 0) {
pBuilder->tsRow.nData = 0;
pBuilder->tsRow.pData = NULL;
} else {
if (pBuilder->szBuf < nData) {
uint8_t *p = taosMemoryRealloc(pBuilder->pBuf, nData);
if (p == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
pBuilder->pBuf = p;
pBuilder->szBuf = nData;
}
pBuilder->tsRow.nData = nData;
pBuilder->tsRow.pData = pBuilder->pBuf;
}
*ppRow = &pBuilder->tsRow;
} else {
// create a new one
*ppRow = (SRow *)taosMemoryMalloc(sizeof(SRow));
if (*ppRow == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
if (nData == 0) {
(*ppRow)->nData = 0;
(*ppRow)->pData = NULL;
} else {
(*ppRow)->nData = nData;
(*ppRow)->pData = taosMemoryMalloc(nData);
if ((*ppRow)->pData == NULL) {
taosMemoryFree(*ppRow);
code = TSDB_CODE_OUT_OF_MEMORY;
goto _exit;
}
}
}
// build
(*ppRow)->flags = flags;
(*ppRow)->sver = pTSchema->version;
pColVal = (SColVal *)taosArrayGet(pArray, 0);
(*ppRow)->ts = pColVal->value.ts;
if ((*ppRow)->pData) {
STSKVRow *pTSKVRow = NULL;
uint8_t *pidx = NULL;
uint8_t *pkv = NULL;
uint8_t *pb = NULL;
uint8_t *pf = NULL;
uint8_t *ptv = NULL;
nkv = 0;
ntv = 0;
iColVal = 1;
if ((flags & 0xf0) == 0) {
switch (flags & 0xf) {
case TSROW_HAS_VAL:
pf = (*ppRow)->pData;
ptv = pf + pTSchema->flen;
break;
case TSROW_HAS_NULL | TSROW_HAS_NONE:
pb = (*ppRow)->pData;
break;
case TSROW_HAS_VAL | TSROW_HAS_NONE:
case TSROW_HAS_VAL | TSROW_HAS_NULL:
pb = (*ppRow)->pData;
pf = pb + BIT1_SIZE(pTSchema->numOfCols - 1);
ptv = pf + pTSchema->flen;
break;
case TSROW_HAS_VAL | TSROW_HAS_NULL | TSROW_HAS_NONE:
pb = (*ppRow)->pData;
pf = pb + BIT2_SIZE(pTSchema->numOfCols - 1);
ptv = pf + pTSchema->flen;
break;
default:
ASSERT(0);
break;
}
} else {
pTSKVRow = (STSKVRow *)(*ppRow)->pData;
pTSKVRow->nCols = 0;
pidx = pTSKVRow->idx;
if (flags & TSROW_KV_SMALL) {
pkv = pidx + sizeof(uint8_t) * nTag;
} else if (flags & TSROW_KV_MID) {
pkv = pidx + sizeof(uint16_t) * nTag;
} else {
pkv = pidx + sizeof(uint32_t) * nTag;
}
}
for (int32_t iColumn = 1; iColumn < pTSchema->numOfCols; iColumn++) {
pTColumn = &pTSchema->columns[iColumn];
if (iColVal < nColVal) {
pColVal = (SColVal *)taosArrayGet(pArray, iColVal);
} else {
pColVal = NULL;
}
if (pColVal) {
if (pColVal->cid == pTColumn->colId) {
iColVal++;
if (COL_VAL_IS_NONE(pColVal)) {
goto _set_none;
} else if (COL_VAL_IS_NULL(pColVal)) {
goto _set_null;
} else {
goto _set_value;
}
} else if (pColVal->cid > pTColumn->colId) {
goto _set_none;
} else {
ASSERT(0);
}
} else {
goto _set_none;
}
_set_none:
if ((flags & 0xf0) == 0) {
setBitMap(pb, 0, iColumn - 1, flags);
if (flags & TSROW_HAS_VAL) { // set 0
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
*(VarDataOffsetT *)(pf + pTColumn->offset) = 0;
} else {
tPutValue(pf + pTColumn->offset, &((SValue){0}), pTColumn->type);
}
}
}
continue;
_set_null:
if ((flags & 0xf0) == 0) {
setBitMap(pb, 1, iColumn - 1, flags);
if (flags & TSROW_HAS_VAL) { // set 0
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
*(VarDataOffsetT *)(pf + pTColumn->offset) = 0;
} else {
tPutValue(pf + pTColumn->offset, &((SValue){0}), pTColumn->type);
}
}
} else {
SET_IDX(pidx, pTSKVRow->nCols, nkv, flags);
pTSKVRow->nCols++;
nkv += tPutI16v(pkv + nkv, -pTColumn->colId);
}
continue;
_set_value:
if ((flags & 0xf0) == 0) {
setBitMap(pb, 2, iColumn - 1, flags);
if (IS_VAR_DATA_TYPE(pTColumn->type)) {
*(VarDataOffsetT *)(pf + pTColumn->offset) = ntv;
ntv += tPutValue(ptv + ntv, &pColVal->value, pTColumn->type);
} else {
tPutValue(pf + pTColumn->offset, &pColVal->value, pTColumn->type);
}
} else {
SET_IDX(pidx, pTSKVRow->nCols, nkv, flags);
pTSKVRow->nCols++;
nkv += tPutI16v(pkv + nkv, pColVal->cid);
nkv += tPutValue(pkv + nkv, &pColVal->value, pTColumn->type);
}
continue;
}
}
#endif
_exit:
return
code
;
}
...
...
@@ -504,10 +280,10 @@ void tRowGet(SRow *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal) {
if
(
pRow
->
flag
&
ROW_FLG_KV
)
{
// KV Row
SKVIdx
*
pIdx
=
(
SKVIdx
*
)
pRow
->
data
;
uint8_t
*
pv
=
pRow
->
data
+
sizeof
(
*
pIdx
)
+
sizeof
(
int32_t
)
*
pIdx
->
n
idx
;
uint8_t
*
pv
=
pRow
->
data
+
sizeof
(
*
pIdx
)
+
sizeof
(
int32_t
)
*
pIdx
->
n
Col
;
int16_t
lidx
=
0
;
int16_t
ridx
=
pIdx
->
n
idx
-
1
;
int16_t
ridx
=
pIdx
->
n
Col
-
1
;
while
(
lidx
<=
ridx
)
{
int16_t
mid
=
(
lidx
+
ridx
)
>>
1
;
uint8_t
*
pData
=
pv
+
pIdx
->
idx
[
mid
];
// todo
...
...
@@ -553,6 +329,106 @@ void tRowGet(SRow *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal) {
int32_t
tRowToArr
(
SRow
*
pRow
,
STSchema
*
pTSchema
,
SArray
**
aColValP
)
{
return
0
;
}
// SRowIter ========================================
struct
SRowIter
{
SRow
*
pRow
;
STSchema
*
pTSchema
;
int32_t
iTColumn
;
union
{
struct
{
// kv
int32_t
iCol
;
uint8_t
*
pv
;
};
struct
{
// tupl
// todo
};
};
SColVal
cv
;
};
int32_t
tRowIterOpen
(
SRow
*
pRow
,
STSchema
*
pTSchema
,
SRowIter
**
ppIter
)
{
int32_t
code
=
0
;
SRowIter
*
pIter
=
taosMemoryCalloc
(
1
,
sizeof
(
*
pIter
));
if
(
pIter
==
NULL
)
{
code
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_exit
;
}
pIter
->
pRow
=
pRow
;
pIter
->
pTSchema
=
pTSchema
;
_exit:
if
(
code
)
{
*
ppIter
=
NULL
;
if
(
pIter
)
taosMemoryFree
(
pIter
);
}
else
{
*
ppIter
=
pIter
;
}
return
code
;
}
void
tRowIterClose
(
SRowIter
**
ppIter
)
{
SRowIter
*
pIter
=
*
ppIter
;
if
(
pIter
)
{
taosMemoryFree
(
pIter
);
}
*
ppIter
=
NULL
;
}
SColVal
*
tRowIterNext
(
SRowIter
*
pIter
)
{
if
(
pIter
->
iTColumn
>=
pIter
->
pTSchema
->
numOfCols
)
{
return
NULL
;
}
STColumn
*
pTColumn
=
pIter
->
pTSchema
->
columns
+
pIter
->
iTColumn
;
// timestamp
if
(
0
==
pIter
->
iTColumn
)
{
pIter
->
cv
.
cid
=
pTColumn
->
colId
;
pIter
->
cv
.
type
=
pTColumn
->
type
;
pIter
->
cv
.
flag
=
CV_FLAG_VALUE
;
memcpy
(
&
pIter
->
cv
.
value
.
val
,
&
pIter
->
pRow
->
ts
,
sizeof
(
TSKEY
));
goto
_exit
;
}
if
(
pIter
->
pRow
->
flag
==
HAS_NONE
)
{
pIter
->
cv
=
COL_VAL_NONE
(
pTColumn
->
colId
,
pTColumn
->
type
);
goto
_exit
;
}
if
(
pIter
->
pRow
->
flag
==
HAS_NULL
)
{
pIter
->
cv
=
COL_VAL_NULL
(
pTColumn
->
type
,
pTColumn
->
colId
);
goto
_exit
;
}
if
(
pIter
->
pRow
->
flag
&
ROW_FLG_KV
)
{
// KV
SKVIdx
*
pIdx
=
(
SKVIdx
*
)
pIter
->
pRow
->
data
;
while
(
pIter
->
iCol
<
pIdx
->
nCol
)
{
/* code */
}
// if (pIter->iIdx >= pIdx->nidx) {
// pIter->cv = COL_VAL_NONE(pTColumn->colId, pTColumn->type);
// goto _exit;
// }
}
else
{
// Tuple
// todo
}
_exit:
pIter
->
iTColumn
++
;
return
&
pIter
->
cv
;
}
SColVal
*
tRowIterNextNotNone
(
SRowIter
*
pIter
)
{
// todo
return
NULL
;
}
#if 0
static void setBitMap(uint8_t *pb, uint8_t v, int32_t idx, uint8_t flags) {
if (pb) {
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录