Go to the documentation of this file.
15 #ifndef UTILS_ARROW_UTILS_H_
16 #define UTILS_ARROW_UTILS_H_
18 #include <arrow/api.h>
19 #include <arrow/util/value_parsing.h>
22 #include "glog/logging.h"
34 bool operator()(
const char* s,
size_t length, arrow::TimeUnit::type out_unit,
36 bool* out_zone_offset_present = NULLPTR)
const override {
37 using seconds_type = std::chrono::duration<arrow::TimestampType::c_type>;
62 if (ARROW_PREDICT_FALSE(length < 10))
65 seconds_type seconds_since_epoch;
66 #if defined(ARROW_VERSION) && ARROW_VERSION < 15000000
67 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseYYYY_MM_DD(
68 s, &seconds_since_epoch))) {
70 if (ARROW_PREDICT_FALSE(
71 !arrow::internal::ParseYYYY_MM_DD(s, &seconds_since_epoch))) {
78 arrow::util::CastSecondsToUnit(out_unit, seconds_since_epoch.count());
82 if (ARROW_PREDICT_FALSE(s[10] !=
' ') &&
83 ARROW_PREDICT_FALSE(s[10] !=
'T')) {
103 seconds_type zone_offset(0);
104 if (s[length - 1] ==
'Z') {
108 }
else if (s[length - 3] ==
'+' || s[length - 3] ==
'-') {
111 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseHH(
112 s + length + 1, &zone_offset))) {
115 if (s[length] ==
'+')
119 }
else if (s[length - 5] ==
'+' || s[length - 5] ==
'-') {
122 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseHHMM(
123 s + length + 1, &zone_offset))) {
126 if (s[length] ==
'+')
130 }
else if ((s[length - 6] ==
'+' || s[length - 6] ==
'-') &&
131 (s[length - 3] ==
':')) {
134 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseHH_MM(
135 s + length + 1, &zone_offset))) {
138 if (s[length] ==
'+')
144 seconds_type seconds_since_midnight;
147 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseHH(
148 s + 11, &seconds_since_midnight))) {
153 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseHH_MM(
154 s + 11, &seconds_since_midnight))) {
168 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseHH_MM_SS(
169 s + 11, &seconds_since_midnight))) {
174 LOG(ERROR) <<
"unsupported length: " << length;
178 seconds_since_epoch += seconds_since_midnight;
179 seconds_since_epoch += zone_offset;
183 arrow::util::CastSecondsToUnit(out_unit, seconds_since_epoch.count());
187 if (ARROW_PREDICT_FALSE(s[19] !=
'.')) {
191 uint32_t subseconds = 0;
192 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseSubSeconds(
193 s + 20, length - 20, out_unit, &subseconds))) {
198 arrow::util::CastSecondsToUnit(out_unit, seconds_since_epoch.count()) +
203 const char*
kind()
const override {
return "LDBC timestamp parser"; }
205 const char*
format()
const override {
return "EmptyFormat"; }
210 using seconds_type = std::chrono::duration<arrow::TimestampType::c_type>;
215 bool operator()(
const char* s,
size_t length, arrow::TimeUnit::type out_unit,
217 bool* out_zone_offset_present = NULLPTR)
const override {
220 if (ARROW_PREDICT_FALSE(
221 !arrow::internal::ParseUnsigned(s, length - 3, &seconds))) {
225 uint32_t subseconds = 0;
226 if (ARROW_PREDICT_FALSE(!arrow::internal::detail::ParseSubSeconds(
227 s + length - 3, 3, out_unit, &subseconds))) {
231 *out = arrow::util::CastSecondsToUnit(out_unit, seconds) + subseconds;
235 const char*
kind()
const override {
return "LDBC timestamp parser"; }
237 const char*
format()
const override {
return "LongDateFormat"; }
241 template <
typename T>
250 return arrow::boolean();
260 return arrow::int32();
270 return arrow::uint32();
280 return arrow::int64();
290 return arrow::uint64();
300 return arrow::float64();
310 return arrow::float32();
319 return arrow::large_utf8();
329 return arrow::large_utf8();
339 return arrow::timestamp(arrow::TimeUnit::MILLI);
349 return arrow::timestamp(arrow::TimeUnit::MILLI);
356 #endif // UTILS_ARROW_UTILS_H_
static const PropertyType kFloat
Definition: types.h:139
static PropertyType property_type()
Definition: arrow_utils.h:266
const char * format() const override
Definition: arrow_utils.h:237
~LDBCLongDateParser() override
Definition: arrow_utils.h:213
std::chrono::duration< arrow::TimestampType::c_type > seconds_type
Definition: arrow_utils.h:210
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:328
arrow::BooleanType ArrowType
Definition: arrow_utils.h:247
arrow::TimestampArray ArrowArrayType
Definition: arrow_utils.h:337
static PropertyType property_type()
Definition: arrow_utils.h:256
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:249
arrow::LargeStringType ArrowType
Definition: arrow_utils.h:316
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:299
static PropertyType property_type()
Definition: arrow_utils.h:246
std::shared_ptr< arrow::DataType > PropertyTypeToArrowType(PropertyType type)
Definition: arrow_utils.cc:18
arrow::UInt64Array ArrowArrayType
Definition: arrow_utils.h:288
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:309
LDBCTimeStampParser()=default
Definition: arrow_utils.h:28
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:289
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:348
static PropertyType property_type()
Definition: arrow_utils.h:286
static const PropertyType kDay
Definition: types.h:144
arrow::TimestampType ArrowType
Definition: arrow_utils.h:336
arrow::DoubleType ArrowType
Definition: arrow_utils.h:297
static const PropertyType kDate
Definition: types.h:143
Definition: adj_list.h:23
arrow::BooleanArray ArrowArrayType
Definition: arrow_utils.h:248
static const PropertyType kUInt64
Definition: types.h:141
arrow::Int32Type ArrowType
Definition: arrow_utils.h:257
arrow::FloatType ArrowType
Definition: arrow_utils.h:307
static PropertyType property_type()
Definition: arrow_utils.h:306
arrow::FloatArray ArrowArrayType
Definition: arrow_utils.h:308
arrow::Int32Array ArrowArrayType
Definition: arrow_utils.h:258
static PropertyType property_type()
Definition: arrow_utils.h:325
static const PropertyType kStringView
Definition: types.h:145
Definition: arrow_utils.h:208
Definition: arrow_utils.h:242
static PropertyType property_type()
Definition: arrow_utils.h:335
const char * kind() const override
Definition: arrow_utils.h:235
static const PropertyType kUInt32
Definition: types.h:138
arrow::LargeStringArray ArrowArrayType
Definition: arrow_utils.h:317
static const PropertyType kDouble
Definition: types.h:142
const char * format() const override
Definition: arrow_utils.h:205
arrow::DoubleArray ArrowArrayType
Definition: arrow_utils.h:298
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:318
static PropertyType property_type()
Definition: arrow_utils.h:315
static const PropertyType kInt64
Definition: types.h:140
arrow::UInt32Type ArrowType
Definition: arrow_utils.h:267
arrow::LargeStringArray ArrowArrayType
Definition: arrow_utils.h:327
static PropertyType property_type()
Definition: arrow_utils.h:296
arrow::Int64Type ArrowType
Definition: arrow_utils.h:277
~LDBCTimeStampParser() override
Definition: arrow_utils.h:32
Definition: loading_config.h:232
arrow::TimestampType ArrowType
Definition: arrow_utils.h:346
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:259
arrow::Int64Array ArrowArrayType
Definition: arrow_utils.h:278
bool operator()(const char *s, size_t length, arrow::TimeUnit::type out_unit, int64_t *out, bool *out_zone_offset_present=NULLPTR) const override
Definition: arrow_utils.h:34
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:279
arrow::LargeStringType ArrowType
Definition: arrow_utils.h:326
static PropertyType property_type()
Definition: arrow_utils.h:345
static const PropertyType kBool
Definition: types.h:134
arrow::TimestampArray ArrowArrayType
Definition: arrow_utils.h:347
bool operator()(const char *s, size_t length, arrow::TimeUnit::type out_unit, int64_t *out, bool *out_zone_offset_present=NULLPTR) const override
Definition: arrow_utils.h:215
arrow::UInt32Array ArrowArrayType
Definition: arrow_utils.h:268
static const PropertyType kInt32
Definition: types.h:137
arrow::UInt64Type ArrowType
Definition: arrow_utils.h:287
const char * kind() const override
Definition: arrow_utils.h:203
static PropertyType property_type()
Definition: arrow_utils.h:276
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:269
static std::shared_ptr< arrow::DataType > ArrowTypeValue()
Definition: arrow_utils.h:338