Skip to content

Commit 76ef886

Browse files
committed
Add support for timestamp
1 parent 5a9747a commit 76ef886

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

lib/activerecord_adbc_adapter/result.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def attach_model(model)
3535
when :datetime
3636
case field.data_type
3737
when Arrow::StringDataType
38-
casted_type = Arrow::TimestampDataType.new(:micro)
38+
casted_type = Arrow::TimestampDataType.new(:nano)
3939
end
4040
end
4141
if casted_type
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
module ActiveRecordADBCAdapter
22
class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition
3+
private
4+
def aliased_types(name, fallback)
5+
fallback
6+
end
37
end
48
end

test/test_type.rb

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,12 @@ def test_datetime_arrow
181181
end
182182
datetime = DateTime.new(2025, 7, 20, 20, 40, 23)
183183
User.create!(datetime: datetime)
184-
array = Arrow::TimestampArray.new(:micro, [datetime.localtime])
184+
if sqlite?
185+
unit = :nano
186+
else
187+
unit = :micro
188+
end
189+
array = Arrow::TimestampArray.new(unit, [datetime.localtime])
185190
assert_equal(Arrow::Table.new(id: Arrow::Int64Array.new([1]),
186191
datetime: array),
187192
User.to_arrow)
@@ -211,4 +216,31 @@ def test_time_arrow
211216
time: array),
212217
User.to_arrow)
213218
end
219+
220+
def test_timestamp_active_record
221+
ActiveRecord::Base.connection.create_table("users") do |table|
222+
table.timestamp :timestamp
223+
end
224+
timestamp = Time.new(2025, 7, 20, 20, 40, 23)
225+
User.create!(timestamp: timestamp)
226+
assert_equal(User.new(id: 1, timestamp: timestamp),
227+
User.first)
228+
end
229+
230+
def test_timestamp_arrow
231+
ActiveRecord::Base.connection.create_table("users") do |table|
232+
table.timestamp :timestamp
233+
end
234+
timestamp = Time.new(2025, 7, 20, 20, 40, 23)
235+
User.create!(timestamp: timestamp)
236+
if sqlite?
237+
unit = :nano
238+
else
239+
unit = :micro
240+
end
241+
array = Arrow::TimestampArray.new(unit, [timestamp])
242+
assert_equal(Arrow::Table.new(id: Arrow::Int64Array.new([1]),
243+
timestamp: array),
244+
User.to_arrow)
245+
end
214246
end

0 commit comments

Comments
 (0)