Add support for printing out in the ast temporal data values (#227)

This commit is contained in:
Kostas Kyrimis 2021-09-16 15:45:35 +03:00 committed by Antonio Andelic
parent 738b5fb8d8
commit da68f86fc9
3 changed files with 26 additions and 3 deletions

View File

@ -142,8 +142,8 @@ void PrintObject(std::ostream *out, const storage::PropertyValue &value) {
PrintObject(out, value.ValueMap()); PrintObject(out, value.ValueMap());
break; break;
case storage::PropertyValue::Type::TemporalData: case storage::PropertyValue::Type::TemporalData:
// TODO(antonio2368): Print out the temporal data based on the type PrintObject(out, value.ValueTemporalData());
LOG_FATAL("Not implemented!"); break;
} }
} }

View File

@ -1,7 +1,10 @@
#pragma once #pragma once
#include <cstdint> #include <cstdint>
#include <iostream>
#include <string_view> #include <string_view>
#include "utils/temporal.hpp"
namespace storage { namespace storage {
enum class TemporalType : uint8_t { Date = 0, LocalTime, LocalDateTime, Duration }; enum class TemporalType : uint8_t { Date = 0, LocalTime, LocalDateTime, Duration };
@ -23,7 +26,18 @@ struct TemporalData {
explicit TemporalData(TemporalType type, int64_t microseconds); explicit TemporalData(TemporalType type, int64_t microseconds);
auto operator<=>(const TemporalData &) const = default; auto operator<=>(const TemporalData &) const = default;
friend std::ostream &operator<<(std::ostream &os, const TemporalData &t) {
switch (t.type) {
case TemporalType::Date:
return os << "DATE(\"" << utils::Date(t.microseconds) << "\")";
case TemporalType::LocalTime:
return os << "LOCALTIME(\"" << utils::LocalTime(t.microseconds) << "\")";
case TemporalType::LocalDateTime:
return os << "LOCALDATETIME(\"" << utils::LocalDateTime(t.microseconds) << "\")";
case TemporalType::Duration:
return os << "DURATION(\"" << utils::Duration(t.microseconds) << "\")";
}
}
TemporalType type; TemporalType type;
int64_t microseconds; int64_t microseconds;
}; };

View File

@ -47,6 +47,15 @@ TEST_F(ExpressionPrettyPrinterTest, Literals) {
std::map<std::string, storage::PropertyValue> map{{"hello", storage::PropertyValue(1)}, std::map<std::string, storage::PropertyValue> map{{"hello", storage::PropertyValue(1)},
{"there", storage::PropertyValue(2)}}; {"there", storage::PropertyValue(2)}};
EXPECT_EQ(ToString(LITERAL(storage::PropertyValue(map))), "{\"hello\": 1, \"there\": 2}"); EXPECT_EQ(ToString(LITERAL(storage::PropertyValue(map))), "{\"hello\": 1, \"there\": 2}");
std::vector<storage::PropertyValue> tt_vec{
storage::PropertyValue(storage::TemporalData(storage::TemporalType::Duration, 1)),
storage::PropertyValue(storage::TemporalData(storage::TemporalType::LocalTime, 2)),
storage::PropertyValue(storage::TemporalData(storage::TemporalType::LocalDateTime, 3)),
storage::PropertyValue(storage::TemporalData(storage::TemporalType::Date, 4))};
EXPECT_EQ(ToString(LITERAL(storage::PropertyValue(tt_vec))),
"[DURATION(\"P0000-00-00T00:00:00.000001\"), LOCALTIME(\"00:00:00.000002\"), "
"LOCALDATETIME(\"1970-01-01T00:00:00.000003\"), DATE(\"1970-01-01\")]");
} }
TEST_F(ExpressionPrettyPrinterTest, Identifiers) { TEST_F(ExpressionPrettyPrinterTest, Identifiers) {