Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
b8061356
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b8061356
编写于
4月 15, 2020
作者:
A
Avogar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update parsing method in MsgPackRowInputFormat
上级
e46322fc
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
26 addition
and
20 deletion
+26
-20
src/Processors/Formats/Impl/MsgPackRowInputFormat.cpp
src/Processors/Formats/Impl/MsgPackRowInputFormat.cpp
+20
-19
src/Processors/Formats/Impl/MsgPackRowInputFormat.h
src/Processors/Formats/Impl/MsgPackRowInputFormat.h
+6
-1
未找到文件。
src/Processors/Formats/Impl/MsgPackRowInputFormat.cpp
浏览文件 @
b8061356
...
...
@@ -24,34 +24,35 @@ namespace ErrorCodes
}
MsgPackRowInputFormat
::
MsgPackRowInputFormat
(
const
Block
&
header_
,
ReadBuffer
&
in_
,
Params
params_
)
:
IRowInputFormat
(
header_
,
in_
,
std
::
move
(
params_
)),
buf
(
in_
),
data_types
(
header_
.
getDataTypes
())
{}
:
IRowInputFormat
(
header_
,
in_
,
std
::
move
(
params_
)),
buf
(
in
),
ctx
(
&
reference_func
,
nullptr
,
msgpack
::
unpack_limit
()),
data_types
(
header_
.
getDataTypes
())
{}
int
MsgPackRowInputFormat
::
unpack
(
msgpack
::
zone
&
zone
,
size_t
&
offset
)
{
offset
=
0
;
ctx
.
init
();
ctx
.
user
().
set_zone
(
zone
);
return
ctx
.
execute
(
buf
.
position
(),
buf
.
buffer
().
end
()
-
buf
.
position
(),
offset
);
}
bool
MsgPackRowInputFormat
::
readObject
()
{
if
(
buf
.
eof
())
return
false
;
PeekableReadBufferCheckpoint
checkpoint
{
buf
};
s
ize_t
offset
=
0
;
bool
need_more_data
=
true
;
while
(
need_more_data
)
s
td
::
unique_ptr
<
msgpack
::
zone
>
zone
(
new
msgpack
::
zone
)
;
size_t
offset
;
while
(
!
unpack
(
*
zone
,
offset
)
)
{
offset
=
0
;
try
{
object_handle
=
msgpack
::
unpack
(
buf
.
position
(),
buf
.
buffer
().
end
()
-
buf
.
position
(),
offset
);
need_more_data
=
false
;
}
catch
(
msgpack
::
insufficient_bytes
&
)
{
buf
.
position
()
=
buf
.
buffer
().
end
();
if
(
buf
.
eof
())
throw
Exception
(
"Unexpected end of file while parsing msgpack object."
,
ErrorCodes
::
INCORRECT_DATA
);
buf
.
position
()
=
buf
.
buffer
().
end
();
buf
.
makeContinuousMemoryFromCheckpointToPos
();
buf
.
rollbackToCheckpoint
();
}
buf
.
position
()
=
buf
.
buffer
().
end
();
if
(
buf
.
eof
())
throw
Exception
(
"Unexpected end of file while parsing msgpack object."
,
ErrorCodes
::
INCORRECT_DATA
);
buf
.
position
()
=
buf
.
buffer
().
end
();
buf
.
makeContinuousMemoryFromCheckpointToPos
();
buf
.
rollbackToCheckpoint
();
}
buf
.
position
()
+=
offset
;
object_handle
=
msgpack
::
object_handle
(
ctx
.
data
(),
std
::
move
(
zone
));
return
true
;
}
...
...
src/Processors/Formats/Impl/MsgPackRowInputFormat.h
浏览文件 @
b8061356
...
...
@@ -20,10 +20,15 @@ public:
private:
bool
readObject
();
void
insertObject
(
IColumn
&
column
,
DataTypePtr
type
,
const
msgpack
::
object
&
object
);
int
unpack
(
msgpack
::
zone
&
zone
,
size_t
&
offset
);
// msgpack makes a copy of object by default, this function tells unpacker not to copy.
static
bool
reference_func
(
msgpack
::
type
::
object_type
,
size_t
,
void
*
)
{
return
true
;
}
PeekableReadBuffer
buf
;
DataTypes
data_types
;
msgpack
::
object_handle
object_handle
;
msgpack
::
v1
::
detail
::
context
ctx
;
DataTypes
data_types
;
};
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录