Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
671395e8
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,体验更适合开发者的 AI 搜索 >>
提交
671395e8
编写于
3月 15, 2021
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Most likely improve performance
上级
845f4afb
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
165 addition
and
141 deletion
+165
-141
base/common/DateLUTImpl.h
base/common/DateLUTImpl.h
+105
-42
base/common/LocalDate.h
base/common/LocalDate.h
+0
-20
base/common/LocalDateTime.h
base/common/LocalDateTime.h
+11
-48
programs/git-import/git-import.cpp
programs/git-import/git-import.cpp
+1
-1
src/DataStreams/PostgreSQLBlockInputStream.cpp
src/DataStreams/PostgreSQLBlockInputStream.cpp
+13
-2
src/Dictionaries/ClickHouseDictionarySource.cpp
src/Dictionaries/ClickHouseDictionarySource.cpp
+2
-3
src/Dictionaries/MySQLDictionarySource.cpp
src/Dictionaries/MySQLDictionarySource.cpp
+3
-4
src/Dictionaries/PostgreSQLDictionarySource.cpp
src/Dictionaries/PostgreSQLDictionarySource.cpp
+2
-3
src/Dictionaries/RedisBlockInputStream.cpp
src/Dictionaries/RedisBlockInputStream.cpp
+6
-1
src/Dictionaries/XDBCDictionarySource.cpp
src/Dictionaries/XDBCDictionarySource.cpp
+2
-3
src/Formats/MySQLBlockInputStream.cpp
src/Formats/MySQLBlockInputStream.cpp
+7
-1
src/IO/WriteHelpers.h
src/IO/WriteHelpers.h
+3
-9
src/Storages/MergeTree/MergeTreeMutationEntry.cpp
src/Storages/MergeTree/MergeTreeMutationEntry.cpp
+3
-1
src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp
src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp
+3
-1
src/Storages/MergeTree/ReplicatedMergeTreeMutationEntry.cpp
src/Storages/MergeTree/ReplicatedMergeTreeMutationEntry.cpp
+3
-1
src/Storages/StorageReplicatedMergeTree.cpp
src/Storages/StorageReplicatedMergeTree.cpp
+1
-1
未找到文件。
base/common/DateLUTImpl.h
浏览文件 @
671395e8
...
...
@@ -944,16 +944,70 @@ public:
}
struct
DateComponents
{
uint16_t
year
;
uint8_t
month
;
uint8_t
day
;
};
struct
TimeComponents
{
uint8_t
hour
;
uint8_t
minute
;
uint8_t
second
;
};
struct
DateTimeComponents
{
DateComponents
date
;
TimeComponents
time
;
};
inline
DateComponents
toDateComponents
(
time_t
t
)
const
{
const
Values
&
values
=
getValues
(
t
);
return
{
values
.
year
,
values
.
month
,
values
.
day_of_month
};
}
inline
DateTimeComponents
toDateTimeComponents
(
time_t
t
)
const
{
const
LUTIndex
index
=
findIndex
(
t
);
const
Values
&
values
=
lut
[
index
];
DateTimeComponents
res
;
res
.
date
.
year
=
values
.
year
;
res
.
date
.
month
=
values
.
month
;
res
.
date
.
day
=
values
.
day_of_month
;
time_t
time
=
t
-
values
.
date
;
if
(
time
>=
values
.
time_at_offset_change
())
time
+=
values
.
amount_of_offset_change
();
res
.
time
.
second
=
time
%
60
;
res
.
time
.
minute
=
time
/
60
%
60
;
res
.
time
.
hour
=
time
/
3600
;
/// In case time was changed backwards at the start of next day, we will repeat the hour 23.
if
(
unlikely
(
res
.
time
.
hour
>
23
))
res
.
time
.
hour
=
23
;
return
res
;
}
inline
UInt64
toNumYYYYMMDDhhmmss
(
time_t
t
)
const
{
const
Values
&
values
=
find
(
t
);
DateTimeComponents
components
=
toDateTimeComponents
(
t
);
return
toSecond
(
t
)
+
toMinute
(
t
)
*
100
+
toHour
(
t
)
*
10000
+
UInt64
(
values
.
day_of_month
)
*
1000000
+
UInt64
(
values
.
month
)
*
100000000
+
UInt64
(
values
.
year
)
*
10000000000
;
components
.
time
.
second
+
components
.
time
.
minute
*
100
+
components
.
time
.
hour
*
10000
+
UInt64
(
components
.
date
.
day
)
*
1000000
+
UInt64
(
components
.
date
.
month
)
*
100000000
+
UInt64
(
components
.
date
.
year
)
*
10000000000
;
}
inline
time_t
YYYYMMDDhhmmssToTime
(
UInt64
num
)
const
...
...
@@ -972,16 +1026,19 @@ public:
inline
NO_SANITIZE_UNDEFINED
time_t
addDays
(
time_t
t
,
Int64
delta
)
const
{
LUTIndex
index
=
findIndex
(
t
);
time_t
time_offset
=
toHour
(
t
)
*
3600
+
toMinute
(
t
)
*
60
+
toSecond
(
t
)
;
const
LUTIndex
index
=
findIndex
(
t
);
const
Values
&
values
=
lut
[
index
]
;
index
+=
delta
;
index
&=
date_lut_mask
;
time_t
time
=
t
-
values
.
date
;
if
(
time
>=
values
.
time_at_offset_change
())
time
+=
values
.
amount_of_offset_change
();
if
(
time_offset
>=
lut
[
index
].
time_at_offset_change
())
time_offset
-=
lut
[
index
].
amount_of_offset_change
();
const
LUTIndex
new_index
=
index
+
delta
;
return
lut
[
index
].
date
+
time_offset
;
if
(
time
>=
lut
[
new_index
].
time_at_offset_change
())
time
-=
lut
[
new_index
].
amount_of_offset_change
();
return
lut
[
new_index
].
date
+
time
;
}
inline
NO_SANITIZE_UNDEFINED
time_t
addWeeks
(
time_t
t
,
Int64
delta
)
const
...
...
@@ -1033,12 +1090,17 @@ public:
{
const
auto
result_day
=
addMonthsIndex
(
t
,
delta
);
time_t
time_offset
=
toHour
(
t
)
*
3600
+
toMinute
(
t
)
*
60
+
toSecond
(
t
);
const
LUTIndex
index
=
findIndex
(
t
);
const
Values
&
values
=
lut
[
index
];
time_t
time
=
t
-
values
.
date
;
if
(
time
>=
values
.
time_at_offset_change
())
time
+=
values
.
amount_of_offset_change
();
if
(
time
_offset
>=
lut
[
result_day
].
time_at_offset_change
())
time
_offset
-=
lut
[
result_day
].
amount_of_offset_change
();
if
(
time
>=
lut
[
result_day
].
time_at_offset_change
())
time
-=
lut
[
result_day
].
amount_of_offset_change
();
return
lut
[
result_day
].
date
+
time
_offset
;
return
lut
[
result_day
].
date
+
time
;
}
inline
ExtendedDayNum
NO_SANITIZE_UNDEFINED
addMonths
(
ExtendedDayNum
d
,
Int64
delta
)
const
...
...
@@ -1077,12 +1139,17 @@ public:
{
auto
result_day
=
addYearsIndex
(
t
,
delta
);
time_t
time_offset
=
toHour
(
t
)
*
3600
+
toMinute
(
t
)
*
60
+
toSecond
(
t
);
const
LUTIndex
index
=
findIndex
(
t
);
const
Values
&
values
=
lut
[
index
];
time_t
time
=
t
-
values
.
date
;
if
(
time
>=
values
.
time_at_offset_change
())
time
+=
values
.
amount_of_offset_change
();
if
(
time
_offset
>=
lut
[
result_day
].
time_at_offset_change
())
time
_offset
-=
lut
[
result_day
].
amount_of_offset_change
();
if
(
time
>=
lut
[
result_day
].
time_at_offset_change
())
time
-=
lut
[
result_day
].
amount_of_offset_change
();
return
lut
[
result_day
].
date
+
time
_offset
;
return
lut
[
result_day
].
date
+
time
;
}
inline
ExtendedDayNum
addYears
(
ExtendedDayNum
d
,
Int64
delta
)
const
...
...
@@ -1093,29 +1160,25 @@ public:
inline
std
::
string
timeToString
(
time_t
t
)
const
{
const
Values
&
values
=
getValue
s
(
t
);
DateTimeComponents
components
=
toDateTimeComponent
s
(
t
);
std
::
string
s
{
"0000-00-00 00:00:00"
};
s
[
0
]
+=
values
.
year
/
1000
;
s
[
1
]
+=
(
values
.
year
/
100
)
%
10
;
s
[
2
]
+=
(
values
.
year
/
10
)
%
10
;
s
[
3
]
+=
values
.
year
%
10
;
s
[
5
]
+=
values
.
month
/
10
;
s
[
6
]
+=
values
.
month
%
10
;
s
[
8
]
+=
values
.
day_of_month
/
10
;
s
[
9
]
+=
values
.
day_of_month
%
10
;
auto
hour
=
toHour
(
t
);
auto
minute
=
toMinute
(
t
);
auto
second
=
toSecond
(
t
);
s
[
11
]
+=
hour
/
10
;
s
[
12
]
+=
hour
%
10
;
s
[
14
]
+=
minute
/
10
;
s
[
15
]
+=
minute
%
10
;
s
[
17
]
+=
second
/
10
;
s
[
18
]
+=
second
%
10
;
s
[
0
]
+=
components
.
date
.
year
/
1000
;
s
[
1
]
+=
(
components
.
date
.
year
/
100
)
%
10
;
s
[
2
]
+=
(
components
.
date
.
year
/
10
)
%
10
;
s
[
3
]
+=
components
.
date
.
year
%
10
;
s
[
5
]
+=
components
.
date
.
month
/
10
;
s
[
6
]
+=
components
.
date
.
month
%
10
;
s
[
8
]
+=
components
.
date
.
day
/
10
;
s
[
9
]
+=
components
.
date
.
day
%
10
;
s
[
11
]
+=
components
.
time
.
hour
/
10
;
s
[
12
]
+=
components
.
time
.
hour
%
10
;
s
[
14
]
+=
components
.
time
.
minute
/
10
;
s
[
15
]
+=
components
.
time
.
minute
%
10
;
s
[
17
]
+=
components
.
time
.
second
/
10
;
s
[
18
]
+=
components
.
time
.
second
%
10
;
return
s
;
}
...
...
base/common/LocalDate.h
浏览文件 @
671395e8
...
...
@@ -92,17 +92,6 @@ public:
LocalDate
(
const
LocalDate
&
)
noexcept
=
default
;
LocalDate
&
operator
=
(
const
LocalDate
&
)
noexcept
=
default
;
LocalDate
&
operator
=
(
time_t
time
)
{
init
(
time
);
return
*
this
;
}
operator
time_t
()
const
{
return
DateLUT
::
instance
().
makeDate
(
m_year
,
m_month
,
m_day
);
}
DayNum
getDayNum
()
const
{
const
auto
&
lut
=
DateLUT
::
instance
();
...
...
@@ -167,12 +156,3 @@ public:
};
static_assert
(
sizeof
(
LocalDate
)
==
4
);
namespace
std
{
inline
string
to_string
(
const
LocalDate
&
date
)
{
return
date
.
toString
();
}
}
base/common/LocalDateTime.h
浏览文件 @
671395e8
...
...
@@ -29,29 +29,16 @@ private:
/// NOTE We may use attribute packed instead, but it is less portable.
unsigned
char
pad
=
0
;
void
init
(
time_t
time
)
void
init
(
time_t
time
,
const
DateLUTImpl
&
time_zone
)
{
if
(
unlikely
(
time
>
DATE_LUT_MAX
||
time
==
0
))
{
m_year
=
0
;
m_month
=
0
;
m_day
=
0
;
m_hour
=
0
;
m_minute
=
0
;
m_second
=
0
;
return
;
}
const
auto
&
date_lut
=
DateLUT
::
instance
();
const
auto
&
values
=
date_lut
.
getValues
(
time
);
m_year
=
values
.
year
;
m_month
=
values
.
month
;
m_day
=
values
.
day_of_month
;
m_hour
=
date_lut
.
toHour
(
time
);
m_minute
=
date_lut
.
toMinute
(
time
);
m_second
=
date_lut
.
toSecond
(
time
);
DateLUTImpl
::
DateTimeComponents
components
=
time_zone
.
toDateTimeComponents
(
time
);
m_year
=
components
.
date
.
year
;
m_month
=
components
.
date
.
month
;
m_day
=
components
.
date
.
day
;
m_hour
=
components
.
time
.
hour
;
m_minute
=
components
.
time
.
minute
;
m_second
=
components
.
time
.
second
;
(
void
)
pad
;
/// Suppress unused private field warning.
}
...
...
@@ -73,9 +60,9 @@ private:
}
public:
explicit
LocalDateTime
(
time_t
time
)
explicit
LocalDateTime
(
time_t
time
,
const
DateLUTImpl
&
time_zone
=
DateLUT
::
instance
()
)
{
init
(
time
);
init
(
time
,
time_zone
);
}
LocalDateTime
(
unsigned
short
year_
,
unsigned
char
month_
,
unsigned
char
day_
,
...
...
@@ -104,19 +91,6 @@ public:
LocalDateTime
(
const
LocalDateTime
&
)
noexcept
=
default
;
LocalDateTime
&
operator
=
(
const
LocalDateTime
&
)
noexcept
=
default
;
LocalDateTime
&
operator
=
(
time_t
time
)
{
init
(
time
);
return
*
this
;
}
operator
time_t
()
const
{
return
m_year
==
0
?
0
:
DateLUT
::
instance
().
makeDateTime
(
m_year
,
m_month
,
m_day
,
m_hour
,
m_minute
,
m_second
);
}
unsigned
short
year
()
const
{
return
m_year
;
}
unsigned
char
month
()
const
{
return
m_month
;
}
unsigned
char
day
()
const
{
return
m_day
;
}
...
...
@@ -167,14 +141,3 @@ public:
};
static_assert
(
sizeof
(
LocalDateTime
)
==
8
);
namespace
std
{
inline
string
to_string
(
const
LocalDateTime
&
datetime
)
{
stringstream
str
;
str
<<
datetime
;
return
str
.
str
();
}
}
programs/git-import/git-import.cpp
浏览文件 @
671395e8
...
...
@@ -1064,7 +1064,7 @@ void processCommit(
time_t
commit_time
;
readText
(
commit_time
,
in
);
commit
.
time
=
commit_time
;
commit
.
time
=
LocalDateTime
(
commit_time
)
;
assertChar
(
'\0'
,
in
);
readNullTerminated
(
commit
.
author
,
in
);
std
::
string
parent_hash
;
...
...
src/DataStreams/PostgreSQLBlockInputStream.cpp
浏览文件 @
671395e8
...
...
@@ -160,8 +160,13 @@ void PostgreSQLBlockInputStream::insertValue(IColumn & column, std::string_view
assert_cast
<
ColumnUInt16
&>
(
column
).
insertValue
(
UInt16
{
LocalDate
{
std
::
string
(
value
)}.
getDayNum
()});
break
;
case
ValueType
::
vtDateTime
:
assert_cast
<
ColumnUInt32
&>
(
column
).
insertValue
(
time_t
{
LocalDateTime
{
std
::
string
(
value
)}});
{
ReadBufferFromString
in
(
value
);
time_t
time
=
0
;
readDateTimeText
(
time
,
in
);
assert_cast
<
ColumnUInt32
&>
(
column
).
insertValue
(
time
);
break
;
}
case
ValueType
::
vtDateTime64
:[[
fallthrough
]];
case
ValueType
::
vtDecimal32
:
[[
fallthrough
]];
case
ValueType
::
vtDecimal64
:
[[
fallthrough
]];
...
...
@@ -257,7 +262,13 @@ void PostgreSQLBlockInputStream::prepareArrayInfo(size_t column_idx, const DataT
else
if
(
which
.
isDate
())
parser
=
[](
std
::
string
&
field
)
->
Field
{
return
UInt16
{
LocalDate
{
field
}.
getDayNum
()};
};
else
if
(
which
.
isDateTime
())
parser
=
[](
std
::
string
&
field
)
->
Field
{
return
time_t
{
LocalDateTime
{
field
}};
};
parser
=
[](
std
::
string
&
field
)
->
Field
{
ReadBufferFromString
in
(
field
);
time_t
time
=
0
;
readDateTimeText
(
time
,
in
);
return
time
;
};
else
if
(
which
.
isDecimal32
())
parser
=
[
nested
](
std
::
string
&
field
)
->
Field
{
...
...
src/Dictionaries/ClickHouseDictionarySource.cpp
浏览文件 @
671395e8
...
...
@@ -118,10 +118,9 @@ std::string ClickHouseDictionarySource::getUpdateFieldAndDate()
{
if
(
update_time
!=
std
::
chrono
::
system_clock
::
from_time_t
(
0
))
{
auto
tmp_time
=
update_time
;
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
update_time
)
-
1
;
std
::
string
str_time
=
DateLUT
::
instance
().
timeToString
(
hr_time
);
update_time
=
std
::
chrono
::
system_clock
::
now
();
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
tmp_time
)
-
1
;
std
::
string
str_time
=
std
::
to_string
(
LocalDateTime
(
hr_time
));
return
query_builder
.
composeUpdateQuery
(
update_field
,
str_time
);
}
else
...
...
src/Dictionaries/MySQLDictionarySource.cpp
浏览文件 @
671395e8
...
...
@@ -107,10 +107,9 @@ std::string MySQLDictionarySource::getUpdateFieldAndDate()
{
if
(
update_time
!=
std
::
chrono
::
system_clock
::
from_time_t
(
0
))
{
auto
tmp_time
=
update_time
;
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
update_time
)
-
1
;
std
::
string
str_time
=
DateLUT
::
instance
().
timeToString
(
hr_time
);
update_time
=
std
::
chrono
::
system_clock
::
now
();
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
tmp_time
)
-
1
;
std
::
string
str_time
=
std
::
to_string
(
LocalDateTime
(
hr_time
));
return
query_builder
.
composeUpdateQuery
(
update_field
,
str_time
);
}
else
...
...
@@ -262,7 +261,7 @@ LocalDateTime MySQLDictionarySource::getLastModification(mysqlxx::Pool::Entry &
if
(
!
update_time_value
.
isNull
())
{
modification_time
=
update_time_value
.
getDateTime
();
LOG_TRACE
(
log
,
"Got modification time: {}"
,
modification_time
);
LOG_TRACE
(
log
,
"Got modification time: {}"
,
update_time_value
.
getString
()
);
}
/// fetch remaining rows to avoid "commands out of sync" error
...
...
src/Dictionaries/PostgreSQLDictionarySource.cpp
浏览文件 @
671395e8
...
...
@@ -127,10 +127,9 @@ std::string PostgreSQLDictionarySource::getUpdateFieldAndDate()
{
if
(
update_time
!=
std
::
chrono
::
system_clock
::
from_time_t
(
0
))
{
auto
tmp_time
=
update_time
;
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
update_time
)
-
1
;
std
::
string
str_time
=
DateLUT
::
instance
().
timeToString
(
hr_time
);
update_time
=
std
::
chrono
::
system_clock
::
now
();
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
tmp_time
)
-
1
;
std
::
string
str_time
=
std
::
to_string
(
LocalDateTime
(
hr_time
));
return
query_builder
.
composeUpdateQuery
(
update_field
,
str_time
);
}
else
...
...
src/Dictionaries/RedisBlockInputStream.cpp
浏览文件 @
671395e8
...
...
@@ -99,8 +99,13 @@ namespace DB
assert_cast
<
ColumnUInt16
&>
(
column
).
insertValue
(
parse
<
LocalDate
>
(
string_value
).
getDayNum
());
break
;
case
ValueType
::
vtDateTime
:
assert_cast
<
ColumnUInt32
&>
(
column
).
insertValue
(
static_cast
<
UInt32
>
(
parse
<
LocalDateTime
>
(
string_value
)));
{
ReadBufferFromString
in
(
string_value
);
time_t
time
=
0
;
readDateTimeText
(
time
,
in
);
assert_cast
<
ColumnUInt32
&>
(
column
).
insertValue
(
time
);
break
;
}
case
ValueType
::
vtUUID
:
assert_cast
<
ColumnUInt128
&>
(
column
).
insertValue
(
parse
<
UUID
>
(
string_value
));
break
;
...
...
src/Dictionaries/XDBCDictionarySource.cpp
浏览文件 @
671395e8
...
...
@@ -156,10 +156,9 @@ std::string XDBCDictionarySource::getUpdateFieldAndDate()
{
if
(
update_time
!=
std
::
chrono
::
system_clock
::
from_time_t
(
0
))
{
auto
tmp_time
=
update_time
;
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
update_time
)
-
1
;
std
::
string
str_time
=
DateLUT
::
instance
().
timeToString
(
hr_time
);
update_time
=
std
::
chrono
::
system_clock
::
now
();
time_t
hr_time
=
std
::
chrono
::
system_clock
::
to_time_t
(
tmp_time
)
-
1
;
std
::
string
str_time
=
std
::
to_string
(
LocalDateTime
(
hr_time
));
return
query_builder
.
composeUpdateQuery
(
update_field
,
str_time
);
}
else
...
...
src/Formats/MySQLBlockInputStream.cpp
浏览文件 @
671395e8
...
...
@@ -11,6 +11,7 @@
# include <Columns/ColumnFixedString.h>
# include <DataTypes/IDataType.h>
# include <DataTypes/DataTypeNullable.h>
# include <IO/ReadBufferFromString.h>
# include <IO/ReadHelpers.h>
# include <IO/WriteHelpers.h>
# include <IO/Operators.h>
...
...
@@ -97,8 +98,13 @@ namespace
assert_cast
<
ColumnUInt16
&>
(
column
).
insertValue
(
UInt16
(
value
.
getDate
().
getDayNum
()));
break
;
case
ValueType
::
vtDateTime
:
assert_cast
<
ColumnUInt32
&>
(
column
).
insertValue
(
UInt32
(
value
.
getDateTime
()));
{
ReadBufferFromString
in
(
value
);
time_t
time
=
0
;
readDateTimeText
(
time
,
in
);
assert_cast
<
ColumnUInt32
&>
(
column
).
insertValue
(
time
);
break
;
}
case
ValueType
::
vtUUID
:
assert_cast
<
ColumnUInt128
&>
(
column
).
insert
(
parse
<
UUID
>
(
value
.
data
(),
value
.
size
()));
break
;
...
...
src/IO/WriteHelpers.h
浏览文件 @
671395e8
...
...
@@ -821,24 +821,18 @@ inline void writeDateTimeText(const LocalDateTime & datetime, WriteBuffer & buf)
template
<
char
date_delimeter
=
'-'
,
char
time_delimeter
=
':'
,
char
between_date_time_delimiter
=
' '
>
inline
void
writeDateTimeText
(
time_t
datetime
,
WriteBuffer
&
buf
,
const
DateLUTImpl
&
time_zone
=
DateLUT
::
instance
())
{
const
auto
&
values
=
time_zone
.
getValues
(
datetime
);
writeDateTimeText
<
date_delimeter
,
time_delimeter
,
between_date_time_delimiter
>
(
LocalDateTime
(
values
.
year
,
values
.
month
,
values
.
day_of_month
,
time_zone
.
toHour
(
datetime
),
time_zone
.
toMinute
(
datetime
),
time_zone
.
toSecond
(
datetime
)),
buf
);
writeDateTimeText
<
date_delimeter
,
time_delimeter
,
between_date_time_delimiter
>
(
LocalDateTime
(
datetime
,
time_zone
),
buf
);
}
/// In the format YYYY-MM-DD HH:MM:SS.NNNNNNNNN, according to the specified time zone.
template
<
char
date_delimeter
=
'-'
,
char
time_delimeter
=
':'
,
char
between_date_time_delimiter
=
' '
,
char
fractional_time_delimiter
=
'.'
>
inline
void
writeDateTimeText
(
DateTime64
datetime64
,
UInt32
scale
,
WriteBuffer
&
buf
,
const
DateLUTImpl
&
date_lut
=
DateLUT
::
instance
())
inline
void
writeDateTimeText
(
DateTime64
datetime64
,
UInt32
scale
,
WriteBuffer
&
buf
,
const
DateLUTImpl
&
time_zone
=
DateLUT
::
instance
())
{
static
constexpr
UInt32
MaxScale
=
DecimalUtils
::
max_precision
<
DateTime64
>
;
scale
=
scale
>
MaxScale
?
MaxScale
:
scale
;
auto
components
=
DecimalUtils
::
split
(
datetime64
,
scale
);
const
auto
&
values
=
date_lut
.
getValues
(
components
.
whole
);
writeDateTimeText
<
date_delimeter
,
time_delimeter
,
between_date_time_delimiter
>
(
LocalDateTime
(
values
.
year
,
values
.
month
,
values
.
day_of_month
,
date_lut
.
toHour
(
components
.
whole
),
date_lut
.
toMinute
(
components
.
whole
),
date_lut
.
toSecond
(
components
.
whole
)),
buf
);
writeDateTimeText
<
date_delimeter
,
time_delimeter
,
between_date_time_delimiter
>
(
LocalDateTime
(
components
.
whole
,
time_zone
),
buf
);
if
(
scale
>
0
)
{
...
...
src/Storages/MergeTree/MergeTreeMutationEntry.cpp
浏览文件 @
671395e8
...
...
@@ -75,7 +75,9 @@ MergeTreeMutationEntry::MergeTreeMutationEntry(DiskPtr disk_, const String & pat
LocalDateTime
create_time_dt
;
*
buf
>>
"create time: "
>>
create_time_dt
>>
"
\n
"
;
create_time
=
create_time_dt
;
create_time
=
DateLUT
::
instance
().
makeDateTime
(
create_time_dt
.
year
(),
create_time_dt
.
month
(),
create_time_dt
.
day
(),
create_time_dt
.
hour
(),
create_time_dt
.
minute
(),
create_time_dt
.
second
());
*
buf
>>
"commands: "
;
commands
.
readText
(
*
buf
);
...
...
src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp
浏览文件 @
671395e8
...
...
@@ -162,7 +162,9 @@ void ReplicatedMergeTreeLogEntryData::readText(ReadBuffer & in)
{
LocalDateTime
create_time_dt
;
in
>>
"create_time: "
>>
create_time_dt
>>
"
\n
"
;
create_time
=
create_time_dt
;
create_time
=
DateLUT
::
instance
().
makeDateTime
(
create_time_dt
.
year
(),
create_time_dt
.
month
(),
create_time_dt
.
day
(),
create_time_dt
.
hour
(),
create_time_dt
.
minute
(),
create_time_dt
.
second
());
}
in
>>
"source replica: "
>>
source_replica
>>
"
\n
"
;
...
...
src/Storages/MergeTree/ReplicatedMergeTreeMutationEntry.cpp
浏览文件 @
671395e8
...
...
@@ -37,7 +37,9 @@ void ReplicatedMergeTreeMutationEntry::readText(ReadBuffer & in)
LocalDateTime
create_time_dt
;
in
>>
"create time: "
>>
create_time_dt
>>
"
\n
"
;
create_time
=
create_time_dt
;
create_time
=
DateLUT
::
instance
().
makeDateTime
(
create_time_dt
.
year
(),
create_time_dt
.
month
(),
create_time_dt
.
day
(),
create_time_dt
.
hour
(),
create_time_dt
.
minute
(),
create_time_dt
.
second
());
in
>>
"source replica: "
>>
source_replica
>>
"
\n
"
;
...
...
src/Storages/StorageReplicatedMergeTree.cpp
浏览文件 @
671395e8
...
...
@@ -1450,7 +1450,7 @@ bool StorageReplicatedMergeTree::tryExecuteMerge(const LogEntry & entry)
{
LOG_INFO
(
log
,
"Will try to fetch part {} until '{}' because this part assigned to recompression merge. "
"Source replica {} will try to merge this part first"
,
entry
.
new_part_name
,
LocalDateTime
(
entry
.
create_time
+
storage_settings_ptr
->
try_fetch_recompressed_part_timeout
.
totalSeconds
()),
entry
.
source_replica
);
DateLUT
::
instance
().
timeToString
(
entry
.
create_time
+
storage_settings_ptr
->
try_fetch_recompressed_part_timeout
.
totalSeconds
()),
entry
.
source_replica
);
return
false
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录