Use subqueries to find nested members more efficiently

This commit is contained in:
Tom Hughes 2025-02-09 15:40:49 +00:00
parent 974e404a6e
commit ba481319f4
4 changed files with 23 additions and 24 deletions

View file

@ -6,13 +6,12 @@ module Api
before_action :set_request_formats before_action :set_request_formats
def index def index
relation_ids = RelationMember.where(:member_type => "Node", :member_id => params[:node_id]).collect(&:relation_id).uniq @relations = Relation
.visible
@relations = [] .where(:id => RelationMember.where(
:member_type => "Node",
Relation.find(relation_ids).each do |relation| :member_id => params[:node_id]
@relations << relation if relation.visible ).select(:relation_id))
end
# Render the result # Render the result
respond_to do |format| respond_to do |format|

View file

@ -10,9 +10,11 @@ module Api
# :node_id parameter. note that this used to return deleted ways as well, but # :node_id parameter. note that this used to return deleted ways as well, but
# this seemed not to be the expected behaviour, so it was removed. # this seemed not to be the expected behaviour, so it was removed.
def index def index
way_ids = WayNode.where(:node_id => params[:node_id]).collect { |ws| ws.id[0] }.uniq @ways = Way
.visible
@ways = Way.where(:id => way_ids, :visible => true) .where(:id => WayNode.where(
:node_id => params[:node_id]
).select(:way_id))
# Render the result # Render the result
respond_to do |format| respond_to do |format|

View file

@ -6,13 +6,12 @@ module Api
before_action :set_request_formats before_action :set_request_formats
def index def index
relation_ids = RelationMember.where(:member_type => "Relation", :member_id => params[:relation_id]).collect(&:relation_id).uniq @relations = Relation
.visible
@relations = [] .where(:id => RelationMember.where(
:member_type => "Relation",
Relation.find(relation_ids).each do |relation| :member_id => params[:relation_id]
@relations << relation if relation.visible ).select(:relation_id))
end
# Render the result # Render the result
respond_to do |format| respond_to do |format|

View file

@ -6,13 +6,12 @@ module Api
before_action :set_request_formats before_action :set_request_formats
def index def index
relation_ids = RelationMember.where(:member_type => "Way", :member_id => params[:way_id]).collect(&:relation_id).uniq @relations = Relation
.visible
@relations = [] .where(:id => RelationMember.where(
:member_type => "Way",
Relation.find(relation_ids).each do |relation| :member_id => params[:way_id]
@relations << relation if relation.visible ).select(:relation_id))
end
# Render the result # Render the result
respond_to do |format| respond_to do |format|