Skip to content

Commit 476e709

Browse files
committed
avoid multiple SQL joins to the same query
1 parent ff89f5b commit 476e709

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

contrib/ruby_event_store-rom/lib/ruby_event_store/rom/relations/stream_entries.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def by_event_id(event_id)
2323
end
2424

2525
def by_event_type(types)
26-
join(:events).where(event_type: types)
26+
join_events.where(event_type: types)
2727
end
2828

2929
def by_stream_and_event_id(stream, event_id)
@@ -35,19 +35,19 @@ def max_position(stream)
3535
end
3636

3737
def newer_than(time)
38-
join(:events).where { |r| r.events[:created_at] > time.localtime }
38+
join_events.where { |r| r.events[:created_at] > time.localtime }
3939
end
4040

4141
def newer_than_or_equal(time)
42-
join(:events).where { |r| r.events[:created_at] >= time.localtime }
42+
join_events.where { |r| r.events[:created_at] >= time.localtime }
4343
end
4444

4545
def older_than(time)
46-
join(:events).where { |r| r.events[:created_at] < time.localtime }
46+
join_events.where { |r| r.events[:created_at] < time.localtime }
4747
end
4848

4949
def older_than_or_equal(time)
50-
join(:events).where { |r| r.events[:created_at] <= time.localtime }
50+
join_events.where { |r| r.events[:created_at] <= time.localtime }
5151
end
5252

5353
DIRECTION_MAP = { forward: %i[asc > <], backward: %i[desc < >] }.freeze
@@ -74,7 +74,15 @@ def ordered(direction, stream, offset_entry_id = nil, stop_entry_id = nil, time_
7474
if event_order_columns.empty?
7575
query.order { |r| stream_order_columns.map { |c| r[:stream_entries][c].public_send(order) } }
7676
else
77-
query.join(:events).order { |r| event_order_columns.map { |c| r.events[c].public_send(order) } }
77+
query.join_events.order { |r| event_order_columns.map { |c| r.events[c].public_send(order) } }
78+
end
79+
end
80+
81+
def join_events
82+
if dataset.opts[:join]&.map(&:table)&.include?(events.dataset.first_source_table)
83+
self
84+
else
85+
join(:events)
7886
end
7987
end
8088
end

0 commit comments

Comments
 (0)