|
4 | 4 | #include "common/types/blob.h" |
5 | 5 | #include "common/types/value/nested.h" |
6 | 6 | #include "common/types/value/node.h" |
| 7 | +#include "common/types/value/rdf_variant.h" |
7 | 8 | #include "common/types/value/recursive_rel.h" |
8 | 9 | #include "common/types/value/rel.h" |
9 | 10 | #include "common/types/value/value.h" |
10 | 11 |
|
11 | 12 | Napi::Value ConvertRdfVariantToNapiObject(const Value& value, Napi::Env env) { |
12 | | - auto typeVal = NestedVal::getChildVal(&value, 0); |
13 | | - auto type = static_cast<LogicalTypeID>(typeVal->getValue<uint8_t>()); |
14 | | - auto blobData = NestedVal::getChildVal(&value, 1)->strVal.data(); |
| 13 | + auto type = RdfVariant::getLogicalTypeID(&value); |
15 | 14 | switch (type) { |
16 | 15 | case LogicalTypeID::STRING: { |
17 | | - auto str = NestedVal::getChildVal(&value, 1)->strVal; |
| 16 | + auto str = RdfVariant::getValue<std::string>(&value); |
18 | 17 | return Napi::String::New(env, str.data(), str.size()); |
19 | 18 | } |
20 | 19 | case LogicalTypeID::BLOB: { |
21 | | - auto blobStr = Blob::getValue<blob_t>(blobData).value.getAsString(); |
| 20 | + auto blobStr = RdfVariant::getValue<blob_t>(&value).value.getAsString(); |
22 | 21 | return Napi::Buffer<char>::Copy(env, blobStr.c_str(), blobStr.size()); |
23 | 22 | } |
24 | 23 | case LogicalTypeID::INT64: { |
25 | | - return Napi::Number::New(env, Blob::getValue<int64_t>(blobData)); |
| 24 | + return Napi::Number::New(env, RdfVariant::getValue<int64_t>(&value)); |
26 | 25 | } |
27 | 26 | case LogicalTypeID::INT32: { |
28 | | - return Napi::Number::New(env, Blob::getValue<int32_t>(blobData)); |
| 27 | + return Napi::Number::New(env, RdfVariant::getValue<int32_t>(&value)); |
29 | 28 | } |
30 | 29 | case LogicalTypeID::INT16: { |
31 | | - return Napi::Number::New(env, Blob::getValue<int16_t>(blobData)); |
| 30 | + return Napi::Number::New(env, RdfVariant::getValue<int16_t>(&value)); |
32 | 31 | } |
33 | 32 | case LogicalTypeID::INT8: { |
34 | | - return Napi::Number::New(env, Blob::getValue<int8_t>(blobData)); |
| 33 | + return Napi::Number::New(env, RdfVariant::getValue<int8_t>(&value)); |
35 | 34 | } |
36 | 35 | case LogicalTypeID::UINT64: { |
37 | | - return Napi::Number::New(env, Blob::getValue<uint64_t>(blobData)); |
| 36 | + return Napi::Number::New(env, RdfVariant::getValue<uint64_t>(&value)); |
38 | 37 | } |
39 | 38 | case LogicalTypeID::UINT32: { |
40 | | - return Napi::Number::New(env, Blob::getValue<uint32_t>(blobData)); |
| 39 | + return Napi::Number::New(env, RdfVariant::getValue<uint32_t>(&value)); |
41 | 40 | } |
42 | 41 | case LogicalTypeID::UINT16: { |
43 | | - return Napi::Number::New(env, Blob::getValue<uint16_t>(blobData)); |
| 42 | + return Napi::Number::New(env, RdfVariant::getValue<uint16_t>(&value)); |
44 | 43 | } |
45 | 44 | case LogicalTypeID::UINT8: { |
46 | | - return Napi::Number::New(env, Blob::getValue<uint8_t>(blobData)); |
| 45 | + return Napi::Number::New(env, RdfVariant::getValue<uint8_t>(&value)); |
47 | 46 | } |
48 | 47 | case LogicalTypeID::DOUBLE: { |
49 | | - return Napi::Number::New(env, Blob::getValue<double>(blobData)); |
| 48 | + return Napi::Number::New(env, RdfVariant::getValue<double>(&value)); |
50 | 49 | } |
51 | 50 | case LogicalTypeID::FLOAT: { |
52 | | - return Napi::Number::New(env, Blob::getValue<float>(blobData)); |
| 51 | + return Napi::Number::New(env, RdfVariant::getValue<float>(&value)); |
53 | 52 | } |
54 | 53 | case LogicalTypeID::BOOL: { |
55 | | - return Napi::Boolean::New(env, Blob::getValue<bool>(blobData)); |
| 54 | + return Napi::Boolean::New(env, RdfVariant::getValue<bool>(&value)); |
56 | 55 | } |
57 | 56 | case LogicalTypeID::DATE: { |
58 | | - auto dateVal = Blob::getValue<date_t>(blobData); |
| 57 | + auto dateVal = RdfVariant::getValue<date_t>(&value); |
59 | 58 | // Javascript Date type contains both date and time information. This returns the Date at |
60 | 59 | // 00:00:00 in UTC timezone. |
61 | 60 | auto milliseconds = Date::getEpochNanoSeconds(dateVal) / Interval::NANOS_PER_MICRO / |
62 | 61 | Interval::MICROS_PER_MSEC; |
63 | 62 | return Napi::Date::New(env, milliseconds); |
64 | 63 | } |
65 | 64 | case LogicalTypeID::TIMESTAMP: { |
66 | | - auto timestampVal = Blob::getValue<timestamp_t>(blobData); |
| 65 | + auto timestampVal = RdfVariant::getValue<timestamp_t>(&value); |
67 | 66 | auto milliseconds = timestampVal.value / Interval::MICROS_PER_MSEC; |
68 | 67 | return Napi::Date::New(env, milliseconds); |
69 | 68 | } |
70 | 69 | case LogicalTypeID::INTERVAL: { |
71 | | - auto intervalVal = Blob::getValue<interval_t>(blobData); |
| 70 | + auto intervalVal = RdfVariant::getValue<interval_t>(&value); |
72 | 71 | // TODO: By default, Node.js returns the difference in milliseconds between two dates, so we |
73 | 72 | // follow the convention here, but it might not be the best choice in terms of usability. |
74 | 73 | auto microseconds = intervalVal.micros; |
|
0 commit comments