Skip to content

Commit 8e7df4a

Browse files
committed
fix: add time type to timestamp_converter
1 parent 8fd7b4e commit 8e7df4a

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

lib/embulk/output/bigquery/value_converter_factory.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,11 @@ def timestamp_converter
285285
next nil if val.nil?
286286
val.localtime(zone_offset).strftime("%Y-%m-%d %H:%M:%S.%6N")
287287
}
288+
when 'TIME'
289+
Proc.new {|val|
290+
next nil if val.nil?
291+
val.localtime(zone_offset).strftime("%H:%M:%S.%6N")
292+
}
288293
else
289294
raise NotSupportedType, "cannot take column type #{type} for timestamp column"
290295
end

test/test_value_converter_factory.rb

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -263,16 +263,16 @@ def test_datetime
263263
end
264264

265265
def test_time
266-
converter = ValueConverterFactory.new(
267-
SCHEMA_TYPE, 'TIME',
268-
timestamp_format: '%H:%M:%S'
269-
).create_converter
266+
converter = ValueConverterFactory.new(SCHEMA_TYPE, 'TIME').create_converter
270267
assert_equal nil, converter.call(nil)
271268
assert_equal "00:03:22.000000", converter.call("00:03:22")
272269
assert_equal "15:22:00.000000", converter.call("3:22 PM")
273270
assert_equal "03:22:00.000000", converter.call("3:22 AM")
274-
assert_equal "15:22:00.000000", converter.call("15:22")
275-
assert_equal "10:00:00.000000", converter.call("2024-07-24 10:00")
271+
272+
# Users must care of BQ datetime format by themselves with no timestamp_format
273+
converter = ValueConverterFactory.new(SCHEMA_TYPE, 'TIME').create_converter
274+
assert_equal nil, converter.call(nil)
275+
assert_equal "00:00:00.000000", converter.call("2016-02-26 00:00:00")
276276
end
277277

278278
def test_record
@@ -363,6 +363,24 @@ def test_datetime
363363
assert_raise { converter.call('foo') }
364364
end
365365

366+
def test_time
367+
converter = ValueConverterFactory.new(SCHEMA_TYPE, 'TIME').create_converter
368+
assert_equal nil, converter.call(nil)
369+
timestamp = Time.parse("2016-02-26 00:00:00.500000 +00:00")
370+
expected = "00:00:00.500000"
371+
assert_equal expected, converter.call(timestamp)
372+
373+
converter = ValueConverterFactory.new(
374+
SCHEMA_TYPE, 'TIME', timezone: 'Asia/Tokyo'
375+
).create_converter
376+
assert_equal nil, converter.call(nil)
377+
timestamp = Time.parse("2016-02-25 15:00:00.500000 +00:00")
378+
expected = "00:00:00.500000"
379+
assert_equal expected, converter.call(timestamp)
380+
381+
assert_raise { converter.call('foo') }
382+
end
383+
366384
def test_record
367385
assert_raise { ValueConverterFactory.new(SCHEMA_TYPE, 'RECORD').create_converter }
368386
end

0 commit comments

Comments
 (0)