Skip to content

Commit 2f6c7ce

Browse files
committed
Convert missing file
1 parent 007868c commit 2f6c7ce

File tree

1 file changed

+54
-22
lines changed

1 file changed

+54
-22
lines changed

cpp/turbodbc_arrow/Test/tests/arrow_result_set_test.cpp

Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ class ArrowResultSetTest : public ::testing::Test {
7171
size_t bytes_per_value = std::dynamic_pointer_cast<arrow::FixedWidthType>(array->type())->bit_width() / 8;
7272
auto typed_array = std::dynamic_pointer_cast<arrow::PrimitiveArray>(array);
7373
buffers.emplace_back(cpp_odbc::multi_value_buffer(bytes_per_value, size));
74-
memcpy(buffers.back().data_pointer(), typed_array->values()->data() + (bytes_per_value * offset), bytes_per_value * size);
74+
memcpy(buffers.back().data_pointer(),
75+
typed_array->values()->data() + (bytes_per_value * offset),
76+
bytes_per_value * size);
7577
for (size_t i = 0; i < size; i++) {
7678
if (array->IsNull(i + offset)) {
7779
buffers.back().indicator_pointer()[i] = SQL_NULL_DATA;
@@ -84,15 +86,21 @@ class ArrowResultSetTest : public ::testing::Test {
8486
{
8587
testing::InSequence sequence;
8688
for (auto&& buffers: buffers_vec) {
87-
EXPECT_CALL(rs, do_get_buffers()).WillOnce(testing::Return(buffers)).RetiresOnSaturation();
89+
EXPECT_CALL(rs, do_get_buffers())
90+
.WillOnce(testing::Return(buffers))
91+
.RetiresOnSaturation();
8892
}
8993
}
9094
{
9195
testing::InSequence sequence;
9296
for (auto&& buffers: buffers_vec) {
93-
EXPECT_CALL(rs, do_fetch_next_batch()).WillOnce(testing::Return(buffers[0].get().number_of_elements())).RetiresOnSaturation();
97+
EXPECT_CALL(rs, do_fetch_next_batch())
98+
.WillOnce(testing::Return(buffers[0].get().number_of_elements()))
99+
.RetiresOnSaturation();
94100
}
95-
EXPECT_CALL(rs, do_fetch_next_batch()).WillOnce(testing::Return(0)).RetiresOnSaturation();
101+
EXPECT_CALL(rs, do_fetch_next_batch())
102+
.WillOnce(testing::Return(0))
103+
.RetiresOnSaturation();
96104
}
97105
}
98106

@@ -422,21 +430,33 @@ TEST_F(ArrowResultSetTest, MultiBatchConversionTimestamp)
422430
}
423431
} else {
424432
ASSERT_OK(builder.Append(i));
425-
auto td = boost::posix_time::microseconds(i);
426-
auto ts = boost::posix_time::ptime(boost::gregorian::date(1970, 1, 1), td);
433+
auto tp = std::chrono::system_clock::time_point{
434+
std::chrono::sys_days{std::chrono::year{1970}/std::chrono::month{1}/std::chrono::day{1}} +
435+
std::chrono::microseconds(i)
436+
};
427437
SQL_TIMESTAMP_STRUCT* sql_ts;
428438
if (i < OUTPUT_SIZE) {
429439
sql_ts = reinterpret_cast<SQL_TIMESTAMP_STRUCT*>(buffer_1.data_pointer()) + i;
430440
} else {
431441
sql_ts = reinterpret_cast<SQL_TIMESTAMP_STRUCT*>(buffer_1_2.data_pointer()) + (i - OUTPUT_SIZE);
432442
}
433-
sql_ts->year = ts.date().year();
434-
sql_ts->month = ts.date().month();
435-
sql_ts->day = ts.date().day();
436-
sql_ts->hour = ts.time_of_day().hours();
437-
sql_ts->minute = ts.time_of_day().minutes();
438-
sql_ts->second = ts.time_of_day().seconds();
439-
sql_ts->fraction = ts.time_of_day().fractional_seconds() * 1000;
443+
auto dp = std::chrono::floor<std::chrono::days>(tp);
444+
std::chrono::year_month_day ymd{dp};
445+
auto tod = tp - dp;
446+
auto hrs = std::chrono::duration_cast<std::chrono::hours>(tod);
447+
tod -= hrs;
448+
auto mins = std::chrono::duration_cast<std::chrono::minutes>(tod);
449+
tod -= mins;
450+
auto secs = std::chrono::duration_cast<std::chrono::seconds>(tod);
451+
tod -= secs;
452+
auto micros = std::chrono::duration_cast<std::chrono::microseconds>(tod);
453+
sql_ts->year = static_cast<SQLSMALLINT>(int(ymd.year()));
454+
sql_ts->month = static_cast<SQLUSMALLINT>(unsigned(ymd.month()));
455+
sql_ts->day = static_cast<SQLUSMALLINT>(unsigned(ymd.day()));
456+
sql_ts->hour = static_cast<SQLUSMALLINT>(hrs.count());
457+
sql_ts->minute = static_cast<SQLUSMALLINT>(mins.count());
458+
sql_ts->second = static_cast<SQLUSMALLINT>(secs.count());
459+
sql_ts->fraction = static_cast<SQLUINTEGER>(micros.count() * 1000);
440460
}
441461
}
442462
ASSERT_OK(builder.Finish(&array));
@@ -451,21 +471,33 @@ TEST_F(ArrowResultSetTest, MultiBatchConversionTimestamp)
451471
arrow::TimestampBuilder builder(arrow::timestamp(arrow::TimeUnit::MICRO), pool);
452472
for (int64_t i = 0; i < 2 * OUTPUT_SIZE; i++) {
453473
ASSERT_OK(builder.Append(i));
454-
auto td = boost::posix_time::microseconds(i);
455-
auto ts = boost::posix_time::ptime(boost::gregorian::date(1970, 1, 1), td);
474+
auto tp = std::chrono::system_clock::time_point{
475+
std::chrono::sys_days{std::chrono::year{1970}/std::chrono::month{1}/std::chrono::day{1}} +
476+
std::chrono::microseconds(i)
477+
};
456478
SQL_TIMESTAMP_STRUCT* sql_ts;
457479
if (i < OUTPUT_SIZE) {
458480
sql_ts = reinterpret_cast<SQL_TIMESTAMP_STRUCT*>(buffer_2.data_pointer()) + i;
459481
} else {
460482
sql_ts = reinterpret_cast<SQL_TIMESTAMP_STRUCT*>(buffer_2_2.data_pointer()) + (i - OUTPUT_SIZE);
461483
}
462-
sql_ts->year = ts.date().year();
463-
sql_ts->month = ts.date().month();
464-
sql_ts->day = ts.date().day();
465-
sql_ts->hour = ts.time_of_day().hours();
466-
sql_ts->minute = ts.time_of_day().minutes();
467-
sql_ts->second = ts.time_of_day().seconds();
468-
sql_ts->fraction = ts.time_of_day().fractional_seconds() * 1000;
484+
auto dp = std::chrono::floor<std::chrono::days>(tp);
485+
std::chrono::year_month_day ymd{dp};
486+
auto tod = tp - dp;
487+
auto hrs = std::chrono::duration_cast<std::chrono::hours>(tod);
488+
tod -= hrs;
489+
auto mins = std::chrono::duration_cast<std::chrono::minutes>(tod);
490+
tod -= mins;
491+
auto secs = std::chrono::duration_cast<std::chrono::seconds>(tod);
492+
tod -= secs;
493+
auto micros = std::chrono::duration_cast<std::chrono::microseconds>(tod);
494+
sql_ts->year = static_cast<SQLSMALLINT>(int(ymd.year()));
495+
sql_ts->month = static_cast<SQLUSMALLINT>(unsigned(ymd.month()));
496+
sql_ts->day = static_cast<SQLUSMALLINT>(unsigned(ymd.day()));
497+
sql_ts->hour = static_cast<SQLUSMALLINT>(hrs.count());
498+
sql_ts->minute = static_cast<SQLUSMALLINT>(mins.count());
499+
sql_ts->second = static_cast<SQLUSMALLINT>(secs.count());
500+
sql_ts->fraction = static_cast<SQLUINTEGER>(micros.count() * 1000);
469501
}
470502
ASSERT_OK(builder.Finish(&nonnull_array));
471503
}

0 commit comments

Comments
 (0)