Skip to content

Commit 98b654d

Browse files
committed
Optimize valid_at
1 parent 5735136 commit 98b654d

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

contrib/ruby_event_store-sequel/lib/ruby_event_store/sequel/event_repository.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def append_to_stream(records, stream, expected_version)
2727
data: serialized_record.data,
2828
metadata: serialized_record.metadata,
2929
created_at: record.timestamp,
30-
valid_at: record.valid_at
30+
valid_at: optimize_timestamp(record.valid_at, record.timestamp)
3131
)
3232
unless stream.global?
3333
@db[:event_store_events_in_streams].insert(
@@ -102,7 +102,7 @@ def last_stream_event(stream)
102102
data: event[:data],
103103
metadata: event[:metadata],
104104
timestamp: event[:created_at].iso8601(TIMESTAMP_PRECISION),
105-
valid_at: event[:valid_at].iso8601(TIMESTAMP_PRECISION)
105+
valid_at: (event[:valid_at] || event[:created_at]).iso8601(TIMESTAMP_PRECISION)
106106
)
107107
.deserialize(@serializer)
108108
end
@@ -160,6 +160,10 @@ def streams_of(event_id)
160160

161161
private
162162

163+
def optimize_timestamp(valid_at, created_at)
164+
valid_at unless valid_at.eql?(created_at)
165+
end
166+
163167
def record(h)
164168
SerializedRecord
165169
.new(
@@ -304,7 +308,7 @@ def read_from_global_stream(specification)
304308
end
305309

306310
dataset = dataset.order(:created_at) if specification.time_sort_by_as_at?
307-
dataset = dataset.order(:valid_at) if specification.time_sort_by_as_of?
311+
dataset = dataset.order(::Sequel.lit(coalesced_date)) if specification.time_sort_by_as_of?
308312
dataset = dataset.limit(specification.limit) if specification.limit?
309313
dataset = dataset.order(::Sequel[:event_store_events][:id]) unless specification.time_sort_by
310314
dataset = dataset.reverse if specification.backward?

contrib/ruby_event_store-sequel/spec/event_repository_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,21 @@ module Sequel
9696
expect(record.valid_at).to eq(t)
9797
end
9898

99+
specify "valid-at storage optimization when same as created-at" do
100+
repository.append_to_stream(
101+
[SRecord.new(timestamp: time = with_precision(Time.at(0)))],
102+
Stream.new(GLOBAL_STREAM),
103+
ExpectedVersion.any
104+
)
105+
record = repository.read(specification.result).first
106+
expect(record.timestamp).to eq(time)
107+
expect(record.valid_at).to eq(time)
108+
109+
event_record = helper.sequel[:event_store_events].where(event_id: record.event_id).first
110+
expect(event_record[:created_at]).to eq(time)
111+
expect(event_record[:valid_at]).to be_nil
112+
end
113+
99114
private
100115

101116
def with_precision(time)

0 commit comments

Comments
 (0)