Skip to content

Commit 039abb8

Browse files
committed
Address feedback
1 parent 2f6c7ce commit 039abb8

File tree

3 files changed

+24
-33
lines changed

3 files changed

+24
-33
lines changed

cpp/turbodbc/Library/src/parameter_sets/set_field.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ namespace {
8585
auto micros = std::chrono::duration_cast<std::chrono::microseconds>(time_of_day);
8686

8787
auto destination = reinterpret_cast<SQL_TIMESTAMP_STRUCT *>(destination_.data_pointer);
88-
destination->year = static_cast<SQLSMALLINT>(int(ymd.year()));
89-
destination->month = static_cast<SQLUSMALLINT>(unsigned(ymd.month()));
90-
destination->day = static_cast<SQLUSMALLINT>(unsigned(ymd.day()));
88+
destination->year = static_cast<SQLSMALLINT>(ymd.year());
89+
destination->month = static_cast<SQLUSMALLINT>(ymd.month());
90+
destination->day = static_cast<SQLUSMALLINT>(ymd.day());
9191
destination->hour = static_cast<SQLUSMALLINT>(hrs.count());
9292
destination->minute = static_cast<SQLUSMALLINT>(mins.count());
9393
destination->second = static_cast<SQLUSMALLINT>(secs.count());
@@ -98,9 +98,9 @@ namespace {
9898
void operator()(std::chrono::year_month_day const & value)
9999
{
100100
auto destination = reinterpret_cast<SQL_DATE_STRUCT *>(destination_.data_pointer);
101-
destination->year = static_cast<SQLSMALLINT>(int(value.year()));
102-
destination->month = static_cast<SQLUSMALLINT>(unsigned(value.month()));
103-
destination->day = static_cast<SQLUSMALLINT>(unsigned(value.day()));
101+
destination->year = static_cast<SQLSMALLINT>(value.year());
102+
destination->month = static_cast<SQLUSMALLINT>(value.month());
103+
destination->day = static_cast<SQLUSMALLINT>(value.day());
104104
destination_.indicator = sizeof(SQL_DATE_STRUCT);
105105
}
106106

cpp/turbodbc/Library/src/time_helpers.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,8 @@ namespace turbodbc {
1313
using sys_time_us = std::chrono::time_point<std::chrono::system_clock, std::chrono::microseconds>;
1414

1515
// Define the epoch for timestamps and dates.
16-
constexpr sys_time_us timestamp_epoch =
17-
sys_time_us(std::chrono::time_point_cast<std::chrono::microseconds>(
18-
std::chrono::sys_days{std::chrono::year{1970}/1/1}
19-
));
20-
constexpr std::chrono::sys_days date_epoch = std::chrono::sys_days{std::chrono::year{1970}/1/1};
16+
constexpr sys_time_us timestamp_epoch{};
17+
constexpr std::chrono::sys_days date_epoch{};
2118

2219
int64_t timestamp_to_microseconds(char const * data_pointer)
2320
{
@@ -68,9 +65,9 @@ void microseconds_to_timestamp(int64_t microseconds, char * data_pointer)
6865

6966
// Fill the SQL_TIMESTAMP_STRUCT.
7067
auto & sql_ts = *reinterpret_cast<SQL_TIMESTAMP_STRUCT *>(data_pointer);
71-
sql_ts.year = static_cast<SQLSMALLINT>(int(ymd.year()));
72-
sql_ts.month = static_cast<SQLUSMALLINT>(unsigned(ymd.month()));
73-
sql_ts.day = static_cast<SQLUSMALLINT>(unsigned(ymd.day()));
68+
sql_ts.year = static_cast<SQLSMALLINT>(static_cast<int>(ymd.year()));
69+
sql_ts.month = static_cast<SQLUSMALLINT>(static_cast<unsigned>(ymd.month()));
70+
sql_ts.day = static_cast<SQLUSMALLINT>(static_cast<unsigned>(ymd.day()));
7471
sql_ts.hour = static_cast<SQLUSMALLINT>(hrs.count());
7572
sql_ts.minute = static_cast<SQLUSMALLINT>(mins.count());
7673
sql_ts.second = static_cast<SQLUSMALLINT>(secs.count());
@@ -80,9 +77,9 @@ void microseconds_to_timestamp(int64_t microseconds, char * data_pointer)
8077

8178
void nanoseconds_to_timestamp(int64_t nanoseconds, char * data_pointer)
8279
{
83-
// Determine the microsecond component.
84-
int64_t micros_part = nanoseconds / 1000;
85-
sys_time_us tp = timestamp_epoch + std::chrono::microseconds(micros_part);
80+
// Create a nanoseconds duration from the input.
81+
auto ns = std::chrono::nanoseconds(nanoseconds);
82+
sys_time_us tp = timestamp_epoch + std::chrono::duration_cast<std::chrono::microseconds>(ns);
8683

8784
auto dp = std::chrono::floor<std::chrono::days>(tp);
8885
std::chrono::year_month_day ymd{dp};
@@ -95,17 +92,17 @@ void nanoseconds_to_timestamp(int64_t nanoseconds, char * data_pointer)
9592
time_of_day -= secs;
9693
auto micros = std::chrono::duration_cast<std::chrono::microseconds>(time_of_day);
9794

98-
auto remainder_nanoseconds = nanoseconds % 1000;
95+
auto remainder = ns % std::chrono::nanoseconds(1000);
9996

10097
auto & sql_ts = *reinterpret_cast<SQL_TIMESTAMP_STRUCT *>(data_pointer);
101-
sql_ts.year = static_cast<SQLSMALLINT>(int(ymd.year()));
102-
sql_ts.month = static_cast<SQLUSMALLINT>(unsigned(ymd.month()));
103-
sql_ts.day = static_cast<SQLUSMALLINT>(unsigned(ymd.day()));
98+
sql_ts.year = static_cast<SQLSMALLINT>(static_cast<int>(ymd.year()));
99+
sql_ts.month = static_cast<SQLUSMALLINT>(static_cast<unsigned>(ymd.month()));
100+
sql_ts.day = static_cast<SQLUSMALLINT>(static_cast<unsigned>(ymd.day()));
104101
sql_ts.hour = static_cast<SQLUSMALLINT>(hrs.count());
105102
sql_ts.minute = static_cast<SQLUSMALLINT>(mins.count());
106103
sql_ts.second = static_cast<SQLUSMALLINT>(secs.count());
107104
// Combine the microsecond part (converted back to nanoseconds) with the remainder.
108-
sql_ts.fraction = static_cast<SQLUINTEGER>(micros.count() * 1000 + remainder_nanoseconds);
105+
sql_ts.fraction = static_cast<SQLUINTEGER>(micros.count() * 1000 + remainder.count());
109106
}
110107

111108

@@ -127,9 +124,9 @@ void days_to_date(int64_t days, char * data_pointer)
127124
std::chrono::year_month_day ymd{dp};
128125

129126
auto & sql_date = *reinterpret_cast<SQL_DATE_STRUCT *>(data_pointer);
130-
sql_date.year = static_cast<SQLSMALLINT>(int(ymd.year()));
131-
sql_date.month = static_cast<SQLUSMALLINT>(unsigned(ymd.month()));
132-
sql_date.day = static_cast<SQLUSMALLINT>(unsigned(ymd.day()));
127+
sql_date.year = static_cast<SQLSMALLINT>(static_cast<int>(ymd.year()));
128+
sql_date.month = static_cast<SQLUSMALLINT>(static_cast<unsigned>(ymd.month()));
129+
sql_date.day = static_cast<SQLUSMALLINT>(static_cast<unsigned>(ymd.day()));
133130
}
134131

135132

cpp/turbodbc_arrow/Test/tests/arrow_result_set_test.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -430,10 +430,7 @@ TEST_F(ArrowResultSetTest, MultiBatchConversionTimestamp)
430430
}
431431
} else {
432432
ASSERT_OK(builder.Append(i));
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-
};
433+
auto tp = std::chrono::system_clock::time_point{} + std::chrono::microseconds(i);
437434
SQL_TIMESTAMP_STRUCT* sql_ts;
438435
if (i < OUTPUT_SIZE) {
439436
sql_ts = reinterpret_cast<SQL_TIMESTAMP_STRUCT*>(buffer_1.data_pointer()) + i;
@@ -471,10 +468,7 @@ TEST_F(ArrowResultSetTest, MultiBatchConversionTimestamp)
471468
arrow::TimestampBuilder builder(arrow::timestamp(arrow::TimeUnit::MICRO), pool);
472469
for (int64_t i = 0; i < 2 * OUTPUT_SIZE; i++) {
473470
ASSERT_OK(builder.Append(i));
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-
};
471+
auto tp = std::chrono::system_clock::time_point{} + std::chrono::microseconds(i);
478472
SQL_TIMESTAMP_STRUCT* sql_ts;
479473
if (i < OUTPUT_SIZE) {
480474
sql_ts = reinterpret_cast<SQL_TIMESTAMP_STRUCT*>(buffer_2.data_pointer()) + i;

0 commit comments

Comments
 (0)