Skip to content

Commit 2927f3d

Browse files
committed
fix: resolved timestamp formatting issue in REST flow
1 parent 7283cf3 commit 2927f3d

5 files changed

Lines changed: 15 additions & 14 deletions

File tree

google/cloud/odbc/bq_driver/internal/odbc_internal_commons.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,8 @@ inline std::string FormatDatetimeToString(
309309
const SQL_TIMESTAMP_STRUCT& datetime) {
310310
char buffer[30];
311311
auto const* datetime_format = (datetime.fraction == 0)
312-
? "%04d-%02d-%02dT%02d:%02d:%02d"
313-
: "%04d-%02d-%02dT%02d:%02d:%02d.%06d";
312+
? "%04d-%02d-%02d %02d:%02d:%02d"
313+
: "%04d-%02d-%02d %02d:%02d:%02d.%06d";
314314
snprintf(buffer, sizeof(buffer), datetime_format, datetime.year,
315315
datetime.month, datetime.day, datetime.hour, datetime.minute,
316316
datetime.second, datetime.fraction);

google/cloud/odbc/bq_driver/internal/odbc_internal_commons_test.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ TEST(FormatDatetimeToString, DatetimeStringWithZeros) {
269269

270270
std::string datetime_string = FormatDatetimeToString(datetime);
271271

272-
std::string expected_string = "2020-01-10T00:05:03";
272+
std::string expected_string = "2020-01-10 00:05:03";
273273
EXPECT_EQ(datetime_string, expected_string);
274274
}
275275

@@ -285,7 +285,7 @@ TEST(FormatDatetimeToString, DatetimeString) {
285285

286286
std::string datetime_string = FormatDatetimeToString(datetime);
287287

288-
std::string expected_string = "2020-01-10T01:59:43.123456";
288+
std::string expected_string = "2020-01-10 01:59:43.123456";
289289
EXPECT_EQ(datetime_string, expected_string);
290290
}
291291

google/cloud/odbc/bq_driver/internal/odbc_sql_execute_utils.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,9 +306,16 @@ StatusRecordOr<std::shared_ptr<arrow::Schema>> GetArrowSchema(
306306
case arrow::Type::BOOL:
307307
col_schema.col_type = BQDataType::kBool;
308308
break;
309-
case arrow::Type::TIMESTAMP:
310-
col_schema.col_type = BQDataType::kTimeStamp;
309+
case arrow::Type::TIMESTAMP: {
310+
auto ts_type =
311+
std::static_pointer_cast<arrow::TimestampType>(field->type());
312+
if (ts_type->timezone().empty()) {
313+
col_schema.col_type = BQDataType::kDatetime;
314+
} else {
315+
col_schema.col_type = BQDataType::kTimeStamp;
316+
}
311317
break;
318+
}
312319
case arrow::Type::TIME64:
313320
col_schema.col_type = BQDataType::kTime;
314321
break;

google/cloud/odbc/integration_tests/odbc_driver_tests/data_translation_test.cc

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2486,19 +2486,13 @@ void TestTranslationsFromDateTime(std::shared_ptr<ODBCHandles> conn,
24862486
switch (expected.target_c_type) {
24872487
case SQL_C_CHAR: {
24882488
std::string returned_val = reinterpret_cast<char*>(data);
2489-
if (kIsBqDriver) {
2490-
expected_val = FormatToGoogleDatetimeStr(expected_val);
2491-
}
24922489
EXPECT_EQ(returned_val, expected_val);
24932490
break;
24942491
}
24952492
case SQL_C_WCHAR: {
24962493
SQLINTEGER length = strlen_or_ind / sizeof(SQLWCHAR);
24972494
std::string returned_val =
24982495
ConvertSQLWCHARToString(reinterpret_cast<SQLWCHAR*>(data), length);
2499-
if (kIsBqDriver) {
2500-
expected_val = FormatToGoogleDatetimeStr(expected_val);
2501-
}
25022496
EXPECT_STREQ(returned_val.data(), expected_val.data());
25032497
break;
25042498
}

google/cloud/odbc/integration_tests/odbc_driver_tests/statement_test.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,11 +529,11 @@ static RowWiseResults const kBasicTypesExpected{
529529
{7, "2025-11-12 23:22:27.500000"},
530530
{8, kIsBqDriver ? "12:34:56" : "12:34:56.000000"},
531531
{9, kIsBqDriver
532-
? (kIsWin32 ? "2024-05-01T08:00:00" : "2024-05-01 08:00:00")
532+
? "2024-05-01 08:00:00"
533533
: "2024-05-01 08:00:00.000000"},
534534
{10, "2023-04-01"},
535535
{11, kIsBqDriver
536-
? (kIsWin32 ? "[\"3\",\"4\",\"5\"]" : "[3, 4, 5]")
536+
? "[\"3\",\"4\",\"5\"]"
537537
: "{\"v\":[{\"v\":\"3\"},{\"v\":\"4\"},{\"v\":\"5\"}]}"},
538538
}},
539539
};

0 commit comments

Comments
 (0)