Merge pull request #3094 from evazion/fix-null-source

Posts: redefine source column to be non-NULL (fixes #3090).
This commit is contained in:
Albert Yi
2017-05-30 11:10:46 -07:00
committed by GitHub
5 changed files with 25 additions and 8 deletions

View File

@@ -175,7 +175,7 @@ class PostQueryBuilder
# URLs unchanged. This is to ease database load for Pixiv source searches. # URLs unchanged. This is to ease database load for Pixiv source searches.
if q[:source] if q[:source]
if q[:source] == "none%" if q[:source] == "none%"
relation = relation.where("(posts.source = '' OR posts.source IS NULL)") relation = relation.where("posts.source = ''")
elsif q[:source] == "http%" elsif q[:source] == "http%"
relation = relation.where("(lower(posts.source) like ?)", "http%") relation = relation.where("(lower(posts.source) like ?)", "http%")
elsif q[:source] =~ /^(?:https?:\/\/)?%\.?pixiv(?:\.net(?:\/img)?)?(?:%\/img\/|%\/|(?=%$))(.+)$/i elsif q[:source] =~ /^(?:https?:\/\/)?%\.?pixiv(?:\.net(?:\/img)?)?(?:%\/img\/|%\/|(?=%$))(.+)$/i
@@ -189,7 +189,7 @@ class PostQueryBuilder
if q[:source_neg] if q[:source_neg]
if q[:source_neg] == "none%" if q[:source_neg] == "none%"
relation = relation.where("(posts.source != '' AND posts.source IS NOT NULL)") relation = relation.where("posts.source != ''")
elsif q[:source_neg] == "http%" elsif q[:source_neg] == "http%"
relation = relation.where("(lower(posts.source) not like ?)", "http%") relation = relation.where("(lower(posts.source) not like ?)", "http%")
elsif q[:source_neg] =~ /^(?:https?:\/\/)?%\.?pixiv(?:\.net(?:\/img)?)?(?:%\/img\/|%\/|(?=%$))(.+)$/i elsif q[:source_neg] =~ /^(?:https?:\/\/)?%\.?pixiv(?:\.net(?:\/img)?)?(?:%\/img\/|%\/|(?=%$))(.+)$/i

View File

@@ -818,7 +818,7 @@ class Post < ActiveRecord::Base
end end
when /^source:none$/i when /^source:none$/i
self.source = nil self.source = ""
when /^source:"(.*)"$/i when /^source:"(.*)"$/i
self.source = $1 self.source = $1

View File

@@ -0,0 +1,15 @@
class ChangeSourceToNonNullOnPosts < ActiveRecord::Migration
def up
Post.without_timeout do
change_column_null(:posts, :source, false, "")
change_column_default(:posts, :source, "")
end
end
def down
Post.without_timeout do
change_column_null(:posts, :source, true)
change_column_default(:posts, :source, nil)
end
end
end

View File

@@ -2773,7 +2773,7 @@ CREATE TABLE posts (
up_score integer DEFAULT 0 NOT NULL, up_score integer DEFAULT 0 NOT NULL,
down_score integer DEFAULT 0 NOT NULL, down_score integer DEFAULT 0 NOT NULL,
score integer DEFAULT 0 NOT NULL, score integer DEFAULT 0 NOT NULL,
source character varying, source character varying DEFAULT ''::character varying NOT NULL,
md5 character varying NOT NULL, md5 character varying NOT NULL,
rating character(1) DEFAULT 'q'::bpchar NOT NULL, rating character(1) DEFAULT 'q'::bpchar NOT NULL,
is_note_locked boolean DEFAULT false NOT NULL, is_note_locked boolean DEFAULT false NOT NULL,
@@ -7547,3 +7547,5 @@ INSERT INTO schema_migrations (version) VALUES ('20170515235205');
INSERT INTO schema_migrations (version) VALUES ('20170519204506'); INSERT INTO schema_migrations (version) VALUES ('20170519204506');
INSERT INTO schema_migrations (version) VALUES ('20170526183928');

View File

@@ -848,7 +848,7 @@ class PostTest < ActiveSupport::TestCase
should "clear the source with source:none" do should "clear the source with source:none" do
@post.update(:source => "foobar") @post.update(:source => "foobar")
@post.update(:tag_string => "source:none") @post.update(:tag_string => "source:none")
assert_nil(@post.source) assert_equal("", @post.source)
end end
should "set the pixiv id with source:https://img18.pixiv.net/img/evazion/14901720.png" do should "set the pixiv id with source:https://img18.pixiv.net/img/evazion/14901720.png" do
@@ -1204,7 +1204,7 @@ class PostTest < ActiveSupport::TestCase
end end
should "merge any parent, source, and rating changes that were made after loading the initial set" do should "merge any parent, source, and rating changes that were made after loading the initial set" do
post = FactoryGirl.create(:post, :parent => nil, :source => nil, :rating => "q") post = FactoryGirl.create(:post, :parent => nil, :source => "", :rating => "q")
parent_post = FactoryGirl.create(:post) parent_post = FactoryGirl.create(:post)
# user a changes rating to safe, adds parent # user a changes rating to safe, adds parent
@@ -2349,7 +2349,7 @@ class PostTest < ActiveSupport::TestCase
context "a post that has been updated" do context "a post that has been updated" do
setup do setup do
PostArchive.sqs_service.stubs(:merge?).returns(false) PostArchive.sqs_service.stubs(:merge?).returns(false)
@post = FactoryGirl.create(:post, :rating => "q", :tag_string => "aaa", :source => nil) @post = FactoryGirl.create(:post, :rating => "q", :tag_string => "aaa", :source => "")
@post.update_attributes(:tag_string => "aaa bbb ccc ddd") @post.update_attributes(:tag_string => "aaa bbb ccc ddd")
@post.update_attributes(:tag_string => "bbb xxx yyy", :source => "xyz") @post.update_attributes(:tag_string => "bbb xxx yyy", :source => "xyz")
@post.update_attributes(:tag_string => "bbb mmm yyy", :source => "abc") @post.update_attributes(:tag_string => "bbb mmm yyy", :source => "abc")
@@ -2362,7 +2362,7 @@ class PostTest < ActiveSupport::TestCase
should "correctly revert all fields" do should "correctly revert all fields" do
assert_equal("aaa bbb ccc ddd", @post.tag_string) assert_equal("aaa bbb ccc ddd", @post.tag_string)
assert_nil(@post.source) assert_equal("", @post.source)
assert_equal("q", @post.rating) assert_equal("q", @post.rating)
end end
end end