Skip to content

Commit

Permalink
feat: introduce representation of BLOB types.
Browse files Browse the repository at this point in the history
  • Loading branch information
ashigeru committed Jan 14, 2025
1 parent 8b38e46 commit 6503678
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 3 deletions.
3 changes: 3 additions & 0 deletions include/takatori/type/blob.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#include <takatori/type/lob.h>
3 changes: 3 additions & 0 deletions include/takatori/type/clob.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#include <takatori/type/lob.h>
3 changes: 3 additions & 0 deletions include/takatori/type/dispatch.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "time_of_day.h"
#include "time_point.h"
#include "datetime_interval.h"
#include "lob.h"
// #include "array.h"
// #include "record.h"
// #include "row_reference.h"
Expand Down Expand Up @@ -58,6 +59,8 @@ inline auto dispatch(Callback&& callback, data const& object, Args&&... args) {
case time_of_day::tag: return util::polymorphic_callback<time_of_day>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
case time_point::tag: return util::polymorphic_callback<time_point>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
case datetime_interval::tag: return util::polymorphic_callback<datetime_interval>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
case blob::tag: return util::polymorphic_callback<blob>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
case clob::tag: return util::polymorphic_callback<clob>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
// case array::tag: return util::polymorphic_callback<array>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
// case record::tag: return util::polymorphic_callback<record>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
case unknown::tag: return util::polymorphic_callback<unknown>(std::forward<Callback>(callback), object, std::forward<Args>(args)...);
Expand Down
30 changes: 30 additions & 0 deletions include/takatori/type/lob.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#pragma once

#include "type_kind.h"
#include "simple_type.h"

#include <takatori/util/meta_type.h>

namespace takatori::type {

/**
* @brief binary large object type.
*/
using blob = simple_type<type_kind::blob>;

/**
* @brief character large object type.
*/
using clob = simple_type<type_kind::clob>;

/**
* @brief type_of for blob.
*/
template<> struct type_of<blob::tag> : util::meta_type<blob> {};

/**
* @brief type_of for clob.
*/
template<> struct type_of<clob::tag> : util::meta_type<clob> {};

} // namespace takatori::type
8 changes: 8 additions & 0 deletions include/takatori/type/type_kind.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ enum class type_kind {
/// @brief date-time interval type.
datetime_interval,

// large objects
/// @brief binary large object type.
blob,
/// @brief character large object type.
clob,

// complex types

/// @brief array type.
Expand Down Expand Up @@ -116,6 +122,8 @@ constexpr inline std::string_view to_string_view(type_kind value) noexcept {
case kind::time_of_day: return "time_of_day"sv;
case kind::time_point: return "time_point"sv;
case kind::datetime_interval: return "datetime_interval"sv;
case kind::blob: return "blob"sv;
case kind::clob: return "clob"sv;
case kind::array: return "array"sv;
case kind::record: return "record"sv;
case kind::unknown: return "unknown"sv;
Expand Down
12 changes: 9 additions & 3 deletions src/takatori/serializer/details/type_property_scanner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ namespace takatori::serializer::details {

using namespace std::string_view_literals;

type_property_scanner::type_property_scanner(object_scanner const& scanner, object_acceptor& acceptor) noexcept
: scanner_(scanner)
, acceptor_(acceptor)
type_property_scanner::type_property_scanner(
object_scanner const& scanner,
object_acceptor& acceptor) noexcept :
scanner_ { scanner },
acceptor_ { acceptor }
{}

void type_property_scanner::operator()(type::boolean const&) {}
Expand Down Expand Up @@ -91,6 +93,10 @@ void type_property_scanner::operator()(type::time_point const& element) {

void type_property_scanner::operator()(type::datetime_interval const&) {}

void type_property_scanner::operator()(type::blob const&) {}

void type_property_scanner::operator()(type::clob const&) {}

void type_property_scanner::operator()(type::unknown const&) {}

void type_property_scanner::operator()(type::row_id const& element) {
Expand Down
3 changes: 3 additions & 0 deletions src/takatori/serializer/details/type_property_scanner.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <takatori/type/time_of_day.h>
#include <takatori/type/time_point.h>
#include <takatori/type/datetime_interval.h>
#include <takatori/type/lob.h>
#include <takatori/type/row_id.h>
#include <takatori/type/declared.h>
#include <takatori/type/extension.h>
Expand Down Expand Up @@ -37,6 +38,8 @@ class type_property_scanner {
void operator()(type::time_of_day const& element);
void operator()(type::time_point const& element);
void operator()(type::datetime_interval const& element);
void operator()(type::blob const& element);
void operator()(type::clob const& element);
void operator()(type::unknown const& element);
void operator()(type::row_id const& element);
void operator()(type::declared const& element);
Expand Down
9 changes: 9 additions & 0 deletions test/takatori/serializer/object_scanner_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <takatori/type/time_of_day.h>
#include <takatori/type/time_point.h>
#include <takatori/type/datetime_interval.h>
#include <takatori/type/lob.h>
#include <takatori/type/row_id.h>
#include <takatori/type/declared.h>
#include <takatori/type/extension.h>
Expand Down Expand Up @@ -288,6 +289,14 @@ TEST_F(object_scanner_test, type_datetime_interval) {
print(type::datetime_interval {});
}

TEST_F(object_scanner_test, type_blob) {
print(type::blob {});
}

TEST_F(object_scanner_test, type_clob) {
print(type::clob {});
}

TEST_F(object_scanner_test, type_unknown) {
print(type::unknown {});
}
Expand Down

0 comments on commit 6503678

Please sign in to comment.