summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-09-20 13:36:18 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2017-09-20 13:40:25 +0200
commit9a3e4b8d1c197063bb832247657c8026f8ca307e (patch)
treee986421bf4de369cbff5f2e4bda71ec5b8afffcf
parenta09d032b2a64c7b6652dcd589de2d9bcba7d9613 (diff)
downloadgitlab-ce-events-redundant-where.tar.gz
Remove redundant WHERE from event queriesevents-redundant-where
The default scope in Event would add a "WHERE author_id IS NOT NULL" clause to every query. Now that "events.author_id" has a NOT NULL clause set this filter is redundant and we can safely remove it. In this commit we also add a validation on events.author_id (previously only defined in PushEvent) just in case something tries to create data without an author ID. This way we can present a nicer error message compared to PostgreSQL's foreign key error messages. Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/38129
-rw-r--r--app/models/event.rb8
-rw-r--r--app/models/push_event.rb6
-rw-r--r--changelogs/unreleased/events-redundant-where.yml5
3 files changed, 12 insertions, 7 deletions
diff --git a/app/models/event.rb b/app/models/event.rb
index 0b1f053a7e6..0997b056c6a 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -1,7 +1,7 @@
class Event < ActiveRecord::Base
include Sortable
include IgnorableColumn
- default_scope { reorder(nil).where.not(author_id: nil) }
+ default_scope { reorder(nil) }
CREATED = 1
UPDATED = 2
@@ -77,6 +77,12 @@ class Event < ActiveRecord::Base
scope :for_milestone_id, ->(milestone_id) { where(target_type: "Milestone", target_id: milestone_id) }
+ # Authors are required as they're used to display who pushed data.
+ #
+ # We're just validating the presence of the ID here as foreign key constraints
+ # should ensure the ID points to a valid user.
+ validates :author_id, presence: true
+
self.inheritance_column = 'action'
# "data" will be removed in 10.0 but it may be possible that JOINs happen that
diff --git a/app/models/push_event.rb b/app/models/push_event.rb
index 708513c7861..83ce9014094 100644
--- a/app/models/push_event.rb
+++ b/app/models/push_event.rb
@@ -3,12 +3,6 @@ class PushEvent < Event
# different "action" value.
validate :validate_push_action
- # Authors are required as they're used to display who pushed data.
- #
- # We're just validating the presence of the ID here as foreign key constraints
- # should ensure the ID points to a valid user.
- validates :author_id, presence: true
-
# The project is required to build links to commits, commit ranges, etc.
#
# We're just validating the presence of the ID here as foreign key constraints
diff --git a/changelogs/unreleased/events-redundant-where.yml b/changelogs/unreleased/events-redundant-where.yml
new file mode 100644
index 00000000000..a118a2e33e1
--- /dev/null
+++ b/changelogs/unreleased/events-redundant-where.yml
@@ -0,0 +1,5 @@
+---
+title: Remove redundant WHERE from event queries
+merge_request:
+author:
+type: other