diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-09-20 13:36:18 +0200 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-09-20 13:40:25 +0200 |
commit | 9a3e4b8d1c197063bb832247657c8026f8ca307e (patch) | |
tree | e986421bf4de369cbff5f2e4bda71ec5b8afffcf | |
parent | a09d032b2a64c7b6652dcd589de2d9bcba7d9613 (diff) | |
download | gitlab-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.rb | 8 | ||||
-rw-r--r-- | app/models/push_event.rb | 6 | ||||
-rw-r--r-- | changelogs/unreleased/events-redundant-where.yml | 5 |
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 |