Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
1e7a231c
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,发现更多精彩内容 >>
提交
1e7a231c
编写于
1月 23, 2019
作者:
V
Vitaly Baranov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implemented main class for writing protobufs.
上级
42d9d4e8
变更
3
展开全部
显示空白变更内容
内联
并排
Showing
3 changed file
with
914 addition
and
0 deletion
+914
-0
dbms/src/Common/ErrorCodes.cpp
dbms/src/Common/ErrorCodes.cpp
+3
-0
dbms/src/Formats/ProtobufWriter.cpp
dbms/src/Formats/ProtobufWriter.cpp
+809
-0
dbms/src/Formats/ProtobufWriter.h
dbms/src/Formats/ProtobufWriter.h
+102
-0
未找到文件。
dbms/src/Common/ErrorCodes.cpp
浏览文件 @
1e7a231c
...
@@ -409,6 +409,9 @@ namespace ErrorCodes
...
@@ -409,6 +409,9 @@ namespace ErrorCodes
extern
const
int
UNKNOWN_CODEC
=
432
;
extern
const
int
UNKNOWN_CODEC
=
432
;
extern
const
int
ILLEGAL_CODEC_PARAMETER
=
433
;
extern
const
int
ILLEGAL_CODEC_PARAMETER
=
433
;
extern
const
int
CANNOT_PARSE_PROTOBUF_SCHEMA
=
434
;
extern
const
int
CANNOT_PARSE_PROTOBUF_SCHEMA
=
434
;
extern
const
int
NO_DATA_FOR_REQUIRED_PROTOBUF_FIELD
=
435
;
extern
const
int
CANNOT_CONVERT_TO_PROTOBUF_TYPE
=
436
;
extern
const
int
PROTOBUF_FIELD_NOT_REPEATED
=
437
;
extern
const
int
KEEPER_EXCEPTION
=
999
;
extern
const
int
KEEPER_EXCEPTION
=
999
;
extern
const
int
POCO_EXCEPTION
=
1000
;
extern
const
int
POCO_EXCEPTION
=
1000
;
...
...
dbms/src/Formats/ProtobufWriter.cpp
0 → 100644
浏览文件 @
1e7a231c
此差异已折叠。
点击以展开。
dbms/src/Formats/ProtobufWriter.h
0 → 100644
浏览文件 @
1e7a231c
#pragma once
#include <Core/UUID.h>
#include <Formats/ProtobufSimpleWriter.h>
#include <boost/noncopyable.hpp>
#include <Common/PODArray.h>
#include <Common/UInt128.h>
#include <common/DayNum.h>
namespace
google
{
namespace
protobuf
{
class
Descriptor
;
class
FieldDescriptor
;
}
}
namespace
DB
{
class
IAggregateFunction
;
using
AggregateFunctionPtr
=
std
::
shared_ptr
<
IAggregateFunction
>
;
using
ConstAggregateDataPtr
=
const
char
*
;
/** Serializes a protobuf, tries to cast types if necessarily.
*/
class
ProtobufWriter
:
private
boost
::
noncopyable
{
public:
ProtobufWriter
(
WriteBuffer
&
out
,
const
google
::
protobuf
::
Descriptor
*
message_type
);
~
ProtobufWriter
();
/// Returns fields of the protobuf schema sorted by their numbers.
const
std
::
vector
<
const
google
::
protobuf
::
FieldDescriptor
*>
&
fieldsInWriteOrder
()
const
;
/// Should be called when we start writing a new message.
void
newMessage
();
/// Should be called when we start writing a new field.
/// Returns false if there is no more fields in the message type.
bool
nextField
();
/// Returns the current field of the message type.
/// The value returned by this function changes after calling nextField() or newMessage().
const
google
::
protobuf
::
FieldDescriptor
*
currentField
()
const
{
return
current_field
;
}
void
writeNumber
(
Int8
value
);
void
writeNumber
(
UInt8
value
);
void
writeNumber
(
Int16
value
);
void
writeNumber
(
UInt16
value
);
void
writeNumber
(
Int32
value
);
void
writeNumber
(
UInt32
value
);
void
writeNumber
(
Int64
value
);
void
writeNumber
(
UInt64
value
);
void
writeNumber
(
UInt128
value
);
void
writeNumber
(
Float32
value
);
void
writeNumber
(
Float64
value
);
void
writeString
(
const
StringRef
&
value
);
void
prepareEnumMapping
(
const
std
::
vector
<
std
::
pair
<
std
::
string
,
Int8
>>
&
name_value_pairs
);
void
prepareEnumMapping
(
const
std
::
vector
<
std
::
pair
<
std
::
string
,
Int16
>>
&
name_value_pairs
);
void
writeEnum
(
Int8
value
);
void
writeEnum
(
Int16
value
);
void
writeUUID
(
const
UUID
&
value
);
void
writeDate
(
DayNum
date
);
void
writeDateTime
(
time_t
tm
);
void
writeDecimal
(
Decimal32
decimal
,
UInt32
scale
);
void
writeDecimal
(
Decimal64
decimal
,
UInt32
scale
);
void
writeDecimal
(
const
Decimal128
&
decimal
,
UInt32
scale
);
void
writeAggregateFunction
(
const
AggregateFunctionPtr
&
function
,
ConstAggregateDataPtr
place
);
private:
void
enumerateFieldsInWriteOrder
(
const
google
::
protobuf
::
Descriptor
*
message_type
);
void
createConverters
();
void
finishCurrentMessage
();
void
finishCurrentField
();
ProtobufSimpleWriter
simple_writer
;
std
::
vector
<
const
google
::
protobuf
::
FieldDescriptor
*>
fields_in_write_order
;
size_t
current_field_index
=
-
1
;
const
google
::
protobuf
::
FieldDescriptor
*
current_field
=
nullptr
;
class
Converter
;
class
ToStringConverter
;
template
<
typename
T
>
class
ToNumberConverter
;
class
ToBoolConverter
;
class
ToEnumConverter
;
std
::
vector
<
std
::
unique_ptr
<
Converter
>>
converters
;
Converter
*
current_converter
=
nullptr
;
};
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录