Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e1c9534c
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e1c9534c
编写于
2月 03, 2022
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support STSRow
上级
7a2e667a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
21 deletion
+20
-21
include/common/trow.h
include/common/trow.h
+12
-12
source/common/src/trow.c
source/common/src/trow.c
+8
-9
未找到文件。
include/common/trow.h
浏览文件 @
e1c9534c
...
...
@@ -98,7 +98,7 @@ typedef struct {
#pragma pack(push, 1)
typedef
struct
{
col_id_t
c
i
d
;
col_id_t
c
olI
d
;
uint32_t
offset
;
}
SKvRowIdx
;
#pragma pack(pop)
...
...
@@ -485,7 +485,7 @@ static FORCE_INLINE int32_t tdAppendColValToTpRow(STSRow *row, void *pBitmap, TD
// 1. No need to set flen part for Null/None, just use bitmap. When upsert for the same primary TS key, the bitmap should
// be updated simultaneously if Norm val overwrite Null/None cols.
// 2. When consume STSRow in memory by taos client/tq, the output of Null/None cols should both be Null.
if
(
tdValIsNorm
(
valType
))
{
if
(
tdValIsNorm
(
valType
,
val
,
colType
))
{
//TODO: The layout of new data types imported since 3.0 like blob/medium blob is the same with binary/nchar.
if
(
IS_VAR_DATA_TYPE
(
colType
))
{
// ts key stored in STSRow.ts
...
...
@@ -502,7 +502,7 @@ static FORCE_INLINE int32_t tdAppendColValToTpRow(STSRow *row, void *pBitmap, TD
// NULL/None value
else
{
//TODO: Null value for new data types imported since 3.0 need to be defined.
void
*
nullVal
=
getNullValue
(
colType
);
const
void
*
nullVal
=
getNullValue
(
colType
);
if
(
IS_VAR_DATA_TYPE
(
colType
))
{
// ts key stored in STSRow.ts
*
(
VarDataOffsetT
*
)
POINTER_SHIFT
(
row
->
data
,
offset
)
=
TD_ROW_LEN
(
row
);
...
...
@@ -540,7 +540,7 @@ static FORCE_INLINE int32_t tdAppendColValToKvRow(STSRow *row, void *pBitmap, T
#endif
// No need to store None/Null values.
if
(
tdValIsNorm
(
valType
))
{
if
(
tdValIsNorm
(
valType
,
val
,
colType
))
{
// ts key stored in STSRow.ts
SKvRowIdx
*
pColIdx
=
(
SKvRowIdx
*
)
POINTER_SHIFT
(
row
->
data
,
offset
);
char
*
ptr
=
(
char
*
)
POINTER_SHIFT
(
row
,
TD_ROW_LEN
(
row
));
...
...
@@ -548,7 +548,7 @@ static FORCE_INLINE int32_t tdAppendColValToKvRow(STSRow *row, void *pBitmap, T
pColIdx
->
offset
=
TD_ROW_LEN
(
row
);
// the offset include the TD_ROW_HEAD_LEN
if
(
IS_VAR_DATA_TYPE
(
colType
))
{
if
(
isCopyVa
l
Data
)
{
if
(
isCopyVa
r
Data
)
{
memcpy
(
ptr
,
val
,
varDataTLen
(
val
));
}
TD_ROW_LEN
(
row
)
+=
varDataTLen
(
val
);
...
...
@@ -564,10 +564,10 @@ static FORCE_INLINE int32_t tdAppendColValToKvRow(STSRow *row, void *pBitmap, T
char
*
ptr
=
(
char
*
)
POINTER_SHIFT
(
row
,
TD_ROW_LEN
(
row
));
pColIdx
->
colId
=
colId
;
pColIdx
->
offset
=
TD_ROW_LEN
(
row
);
// the offset include the TD_ROW_HEAD_LEN
void
*
nullVal
=
getNullValue
(
colType
);
const
void
*
nullVal
=
getNullValue
(
colType
);
if
(
IS_VAR_DATA_TYPE
(
colType
))
{
if
(
isCopyVa
l
Data
)
{
if
(
isCopyVa
r
Data
)
{
memcpy
(
ptr
,
nullVal
,
varDataTLen
(
nullVal
));
}
TD_ROW_LEN
(
row
)
+=
varDataTLen
(
nullVal
);
...
...
@@ -626,9 +626,9 @@ static FORCE_INLINE int32_t tdAppendColValToRow(SRowBuilder *pBuilder, int16_t c
// const void *val, int8_t valType, int32_t tOffset, int16_t
// colIdx);
if
(
TD_IS_TP_ROW
(
pRow
))
{
tdAppendColValToTpRow
(
pRow
,
pBitmap
,
val
,
true
,
colType
,
va
lType
,
colIdx
,
offset
);
tdAppendColValToTpRow
(
pRow
,
pBitmap
,
val
Type
,
val
,
true
,
co
lType
,
colIdx
,
offset
);
}
else
{
tdAppendColValToKvRow
(
pRow
,
pBitmap
,
val
,
true
,
colType
,
va
lType
,
colIdx
,
offset
,
colId
);
tdAppendColValToKvRow
(
pRow
,
pBitmap
,
val
Type
,
val
,
true
,
co
lType
,
colIdx
,
offset
,
colId
);
}
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -819,13 +819,13 @@ static FORCE_INLINE bool tdGetKvRowValOfColEx(STSRowIter *pIter, col_id_t colId,
SKvRowIdx
*
pKvIdx
=
NULL
;
bool
colFound
=
false
;
while
(
*
nIdx
<
pRow
->
ncols
)
{
pKvIdx
=
POINTER_SHIFT
(
pRow
->
data
,
*
nIdx
*
sizeof
(
SKvRowIdx
));
if
(
pKvIdx
->
c
i
d
==
colId
)
{
pKvIdx
=
(
SKvRowIdx
*
)
POINTER_SHIFT
(
pRow
->
data
,
*
nIdx
*
sizeof
(
SKvRowIdx
));
if
(
pKvIdx
->
c
olI
d
==
colId
)
{
++
(
*
nIdx
);
pVal
->
val
=
POINTER_SHIFT
(
pRow
,
pKvIdx
->
offset
);
colFound
=
true
;
break
;
}
else
if
(
pKvIdx
->
c
i
d
>
colId
)
{
}
else
if
(
pKvIdx
->
c
olI
d
>
colId
)
{
pVal
->
valType
=
TD_VTYPE_NONE
;
return
true
;
}
else
{
...
...
source/common/src/trow.c
浏览文件 @
e1c9534c
...
...
@@ -22,9 +22,8 @@ const uint8_t tdVTypeByte[3] = {
};
static
void
dataColSetNEleNull
(
SDataCol
*
pCol
,
int
nEle
);
static
void
tdMergeTwoDat
6
z
,
z
,
zaCols
(
SDataCols
*
target
,
SDataCols
*
src1
,
int
*
iter1
,
int
limit1
,
SDataCols
*
src2
,
int
*
iter2
,
int
limit2
,
int
tRows
,
bool
forceSetNull
);
static
void
tdMergeTwoDataCols
(
SDataCols
*
target
,
SDataCols
*
src1
,
int
*
iter1
,
int
limit1
,
SDataCols
*
src2
,
int
*
iter2
,
int
limit2
,
int
tRows
,
bool
forceSetNull
);
static
FORCE_INLINE
void
dataColSetNullAt
(
SDataCol
*
pCol
,
int
index
)
{
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
...
...
@@ -560,14 +559,14 @@ static int32_t tdAppendTpRowToDataCol(STSRow *pRow, STSchema *pSchema, SDataCols
return
TSDB_CODE_SUCCESS
;
}
// internal
static
void
tdAppendKvRowToDataCol
(
STSRow
*
pRow
,
STSchema
*
pSchema
,
SDataCols
*
pCols
)
{
static
int32_t
tdAppendKvRowToDataCol
(
STSRow
*
pRow
,
STSchema
*
pSchema
,
SDataCols
*
pCols
)
{
ASSERT
(
pCols
->
numOfRows
==
0
||
dataColsKeyLast
(
pCols
)
<
TD_ROW_TSKEY
(
pRow
));
int
rcol
=
0
;
int
dcol
=
1
;
int
tRowCols
=
TD_ROW_NCOLS
(
pRow
)
-
1
;
// the primary TS key not included in kvRowColIdx part
int
tSchemaCols
=
schemaNCols
(
pSchema
)
-
1
;
void
*
pBitmap
=
tdGetBitmapAddrKv
(
pRow
,
nRowCols
);
void
*
pBitmap
=
tdGetBitmapAddrKv
(
pRow
,
TD_ROW_NCOLS
(
pRow
)
);
SDataCol
*
pDataCol
=
&
(
pCols
->
cols
[
0
]);
if
(
pDataCol
->
colId
==
PRIMARYKEY_TIMESTAMP_COL_ID
)
{
...
...
@@ -615,17 +614,17 @@ static void tdAppendKvRowToDataCol(STSRow *pRow, STSchema *pSchema, SDataCols *p
* @param pCols
* @param forceSetNull
*/
void
tdAppendSTSRowToDataCol
(
STSRow
*
pRow
,
STSchema
*
pSchema
,
SDataCols
*
pCols
,
bool
forceSetNull
)
{
int32_t
tdAppendSTSRowToDataCol
(
STSRow
*
pRow
,
STSchema
*
pSchema
,
SDataCols
*
pCols
,
bool
forceSetNull
)
{
if
(
TD_IS_TP_ROW
(
pRow
))
{
tdAppendTpRowToDataCol
(
pRow
,
pSchema
,
pCols
);
return
tdAppendTpRowToDataCol
(
pRow
,
pSchema
,
pCols
);
}
else
if
(
TD_IS_KV_ROW
(
pRow
))
{
tdAppendKvRowToDataCol
(
pRow
,
pSchema
,
pCols
);
return
tdAppendKvRowToDataCol
(
pRow
,
pSchema
,
pCols
);
}
else
{
ASSERT
(
0
);
}
return
TSDB_CODE_SUCCESS
;
}
#if 0
int tdMergeDataCols(SDataCols *target, SDataCols *source, int rowsToMerge, int *pOffset, bool forceSetNull) {
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录