Skip to content

Commit 37c2faa

Browse files
authored
Merge 7a93a51 into 7a36d05
2 parents 7a36d05 + 7a93a51 commit 37c2faa

File tree

3 files changed

+24
-59
lines changed

3 files changed

+24
-59
lines changed

ydb/core/tablet_flat/flat_cxx_database.h

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
#include <ydb/core/tablet_flat/flat_database.h>
44
#include <ydb/core/util/tuples.h>
5-
#include <ydb/core/util/templates.h>
65
#include <ydb/core/base/blobstorage_common.h>
76

87
#include <util/system/type_name.h>
98
#include <util/system/unaligned_mem.h>
109
#include <library/cpp/containers/stack_vector/stack_vec.h>
10+
#include <type_traits>
1111
#include <utility>
1212

1313
// https://wiki.yandex-team.ru/kikimr/techdoc/db/cxxapi/nicedb/
@@ -647,6 +647,18 @@ enum class EMaterializationMode {
647647
NonExisting,
648648
};
649649

650+
namespace NDetail {
651+
template <typename T>
652+
class HasDefault
653+
{
654+
private:
655+
template <typename C> static std::true_type test(decltype(C::Default)) ;
656+
template <typename C> static std::false_type test(...);
657+
public:
658+
static constexpr bool value = decltype(test<T>(0))::value;
659+
};
660+
}
661+
650662
struct Schema {
651663
template <typename T>
652664
struct Precharger {
@@ -1437,7 +1449,7 @@ struct Schema {
14371449
}
14381450

14391451
template <typename ColumnType>
1440-
auto GetValueOrDefault(typename ColumnType::Type defaultValue = GetDefaultValue<ColumnType>(SFINAE::special())) const {
1452+
auto GetValueOrDefault(typename ColumnType::Type defaultValue = GetDefaultValue<ColumnType>()) const {
14411453
Y_DEBUG_ABORT_UNLESS(IsReady(), "Rowset is not ready");
14421454
Y_DEBUG_ABORT_UNLESS(IsValid(), "Rowset is not valid");
14431455
typename ColumnType::Type value(HaveValue<ColumnType>() ? GetColumnValue<ColumnType>() : defaultValue);
@@ -1462,24 +1474,19 @@ struct Schema {
14621474
return DbgPrintTuple(Iterator.GetKey(), typeRegistry) + " -> " + DbgPrintTuple(Iterator.GetValues(), typeRegistry);
14631475
}
14641476

1465-
template <typename ColumnType, typename SFINAE::type_check<decltype(ColumnType::Default)>::type = 0>
1466-
static decltype(ColumnType::Default) GetNullValue(SFINAE::special) {
1467-
return ColumnType::Default;
1468-
}
1469-
14701477
template <typename ColumnType>
1471-
static typename ColumnType::Type GetNullValue(SFINAE::general) {
1472-
return typename ColumnType::Type();
1473-
}
1474-
1475-
template <typename ColumnType, typename SFINAE::type_check<decltype(ColumnType::Default)>::type = 0>
1476-
static decltype(ColumnType::Default) GetDefaultValue(SFINAE::special) {
1477-
return ColumnType::Default;
1478+
static typename ColumnType::Type GetNullValue() {
1479+
return GetDefaultValue<ColumnType>();
14781480
}
14791481

14801482
template <typename ColumnType>
1481-
static typename ColumnType::Type GetDefaultValue(SFINAE::general) {
1482-
return typename ColumnType::Type();
1483+
static typename ColumnType::Type GetDefaultValue() {
1484+
if constexpr (NDetail::HasDefault<ColumnType>::value) {
1485+
return ColumnType::Default;
1486+
}
1487+
else {
1488+
return typename ColumnType::Type();
1489+
}
14831490
}
14841491

14851492
NTable::TIteratorStats* Stats() const {
@@ -1499,7 +1506,7 @@ struct Schema {
14991506
auto& cell = tuple.Columns[index];
15001507
auto type = tuple.Types[index];
15011508
if (cell.IsNull())
1502-
return GetNullValue<ColumnType>(SFINAE::special());
1509+
return GetNullValue<ColumnType>();
15031510
return TConvert<ColumnType, typename ColumnType::Type>::Convert(TRawTypeValue(cell.Data(), cell.Size(), type));
15041511
}
15051512

ydb/core/util/templates.h

Lines changed: 0 additions & 41 deletions
This file was deleted.

ydb/core/util/ya.make

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ SRCS(
4646
single_thread_ic_mock.h
4747
stlog.cpp
4848
stlog.h
49-
templates.h
5049
testactorsys.cpp
5150
testactorsys.h
5251
text.cpp

0 commit comments

Comments
 (0)