]> git.openstreetmap.org Git - rails.git/commitdiff
Use subqueries to find nested members more efficiently
authorTom Hughes <tom@compton.nu>
Sun, 9 Feb 2025 15:40:49 +0000 (15:40 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 9 Feb 2025 15:40:49 +0000 (15:40 +0000)
app/controllers/api/nodes/relations_controller.rb
app/controllers/api/nodes/ways_controller.rb
app/controllers/api/relations/relations_controller.rb
app/controllers/api/ways/relations_controller.rb

index 0f0409e1927a735213acac2dd1f1841365d9b0c4..c6b33eab81242767bfd6eb6a0f9df849a4bfd623 100644 (file)
@@ -6,13 +6,12 @@ module Api
       before_action :set_request_formats
 
       def index
-        relation_ids = RelationMember.where(:member_type => "Node", :member_id => params[:node_id]).collect(&:relation_id).uniq
-
-        @relations = []
-
-        Relation.find(relation_ids).each do |relation|
-          @relations << relation if relation.visible
-        end
+        @relations = Relation
+                     .visible
+                     .where(:id => RelationMember.where(
+                       :member_type => "Node",
+                       :member_id => params[:node_id]
+                     ).select(:relation_id))
 
         # Render the result
         respond_to do |format|
index 2a71f1903956e001d893487c8d635c7c47152e66..cdbdc07d0becd36fdd0311b00d6fdb832efa8ccc 100644 (file)
@@ -10,9 +10,11 @@ module Api
       # :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.
       def index
-        way_ids = WayNode.where(:node_id => params[:node_id]).collect { |ws| ws.id[0] }.uniq
-
-        @ways = Way.where(:id => way_ids, :visible => true)
+        @ways = Way
+                .visible
+                .where(:id => WayNode.where(
+                  :node_id => params[:node_id]
+                ).select(:way_id))
 
         # Render the result
         respond_to do |format|
index 1769e1396ace5bda28da782864c0bf0acec6f261..9b829252645aa26a9528270e1726dcd3f31f14da 100644 (file)
@@ -6,13 +6,12 @@ module Api
       before_action :set_request_formats
 
       def index
-        relation_ids = RelationMember.where(:member_type => "Relation", :member_id => params[:relation_id]).collect(&:relation_id).uniq
-
-        @relations = []
-
-        Relation.find(relation_ids).each do |relation|
-          @relations << relation if relation.visible
-        end
+        @relations = Relation
+                     .visible
+                     .where(:id => RelationMember.where(
+                       :member_type => "Relation",
+                       :member_id => params[:relation_id]
+                     ).select(:relation_id))
 
         # Render the result
         respond_to do |format|
index fcd8b40dd03ab714257c4bc93b22762069026cd2..4188dfe4eceb637d9107cd7a73ee12372424e098 100644 (file)
@@ -6,13 +6,12 @@ module Api
       before_action :set_request_formats
 
       def index
-        relation_ids = RelationMember.where(:member_type => "Way", :member_id => params[:way_id]).collect(&:relation_id).uniq
-
-        @relations = []
-
-        Relation.find(relation_ids).each do |relation|
-          @relations << relation if relation.visible
-        end
+        @relations = Relation
+                     .visible
+                     .where(:id => RelationMember.where(
+                       :member_type => "Way",
+                       :member_id => params[:way_id]
+                     ).select(:relation_id))
 
         # Render the result
         respond_to do |format|