diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Multi/API.pm | 15 | ||||
-rw-r--r-- | lib/Multi/RG.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/DB/ULists.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/DB/VN.pm | 6 | ||||
-rw-r--r-- | lib/VNDB/Util/BrowseHTML.pm | 2 |
5 files changed, 14 insertions, 15 deletions
diff --git a/lib/Multi/API.pm b/lib/Multi/API.pm index b6100dfa..be1191c6 100644 --- a/lib/Multi/API.pm +++ b/lib/Multi/API.pm @@ -108,7 +108,7 @@ sub filtertosql { # get the type that matches $t = (grep +( # wrong operator? don't even look further! - !$_->[2]{$op} ? 0 + !defined($_->[2]{$op}) ? 0 # undef : !defined($_->[0]) ? !defined($value) # int @@ -423,7 +423,7 @@ sub get_vn { for (grep !/^(basic|details|anime|relations)$/, @{$get->{info}}); my $select = 'v.id, v.latest'; - $select .= ', vr.title, vr.original, v.c_released, v.c_languages, v.c_platforms' if grep /basic/, @{$get->{info}}; + $select .= ', vr.title, vr.original, v.c_released, v.c_languages::text[], v.c_platforms' if grep /basic/, @{$get->{info}}; $select .= ', vr.alias AS aliases, vr.length, vr.desc AS description, vr.l_wp, vr.l_encubed, vr.l_renai' if grep /details/, @{$get->{info}}; my @placeholders; @@ -446,11 +446,10 @@ sub get_vn { [ str => 'v.c_platforms :op: :value:', {'=' => 'LIKE', '!=' => 'NOT LIKE'}, process => \'like' ], [ stra => '(:value:)', {'=', 1}, join => ' OR ', serialize => 'v.c_platforms LIKE :value:', \'like' ], [ stra => '(:value:)', {'!=',1}, join => ' AND ', serialize => 'v.c_platforms NOT LIKE :value:', \'like' ], - ], [ 'languages', # rather similar to platforms - [ undef, "v.c_languages :op: ''", {qw|= = != <>|} ], - [ str => 'v.c_languages :op: :value:', {'=' => 'LIKE', '!=' => 'NOT LIKE'}, process => \'like' ], - [ stra => '(:value:)', {'=', 1}, join => ' OR ', serialize => 'v.c_languages LIKE :value:', process => \'like' ], - [ stra => '(:value:)', {'!=',1}, join => ' AND ', serialize => 'v.c_languages NOT LIKE :value:', process => \'like' ], + ], [ 'languages', + [ undef, "v.c_languages :op: '{}'", {qw|= = != <>|} ], + [ str => ':op: (v.c_languages && ARRAY[:value:]::language[])', {'=' => '', '!=' => 'NOT'} ], + [ stra => ':op: (v.c_languages && ARRAY[:value:]::language[])', {'=' => '', '!=' => 'NOT'}, join => ',' ], ], [ 'search', [ str => '(vr.title ILIKE :value: OR vr.alias ILIKE :value: OR v.id IN( SELECT rv.vid FROM releases r JOIN releases_rev rr ON rr.id = r.latest JOIN releases_vn rv ON rv.rid = rr.id @@ -484,7 +483,7 @@ sub get_vn_res { if(grep /basic/, @{$get->{info}}) { $_->{original} ||= undef; $_->{platforms} = [ split /\//, delete $_->{c_platforms} ]; - $_->{languages} = [ split /\//, delete $_->{c_languages} ]; + $_->{languages} = delete $_->{c_languages}; $_->{released} = formatdate delete $_->{c_released}; } if(grep /details/, @{$get->{info}}) { diff --git a/lib/Multi/RG.pm b/lib/Multi/RG.pm index 76408d92..d72bb516 100644 --- a/lib/Multi/RG.pm +++ b/lib/Multi/RG.pm @@ -97,7 +97,7 @@ sub getrel { # num, res, id if(!grep !$_, values %{$_[HEAP]{nodes}}) { my $ids = join(', ', map '?', keys %{$_[HEAP]{nodes}}); $_[KERNEL]->post(pg => query => $_[HEAP]{type} eq 'v' - ? "SELECT v.id, vr.title, v.c_released AS date, v.c_languages AS lang FROM vn v JOIN vn_rev vr ON vr.id = v.latest WHERE v.id IN($ids) ORDER BY v.c_released" + ? "SELECT v.id, vr.title, v.c_released AS date, v.c_languages::text[] AS lang FROM vn v JOIN vn_rev vr ON vr.id = v.latest WHERE v.id IN($ids) ORDER BY v.c_released" : "SELECT p.id, pr.name, pr.lang, pr.type FROM producers p JOIN producers_rev pr ON pr.id = p.latest WHERE p.id IN($ids) ORDER BY pr.name", [ keys %{$_[HEAP]{nodes}} ], 'builddot'); } @@ -252,7 +252,7 @@ sub _vnnode { q|<TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="2"><FONT POINT-SIZE="%d"> %s </FONT></TD></TR>|. q|<TR><TD> %s </TD><TD> %s </TD></TR>|. qq|</TABLE>> ]\n|, - $_->{id}, encode_utf8($tooltip), $heap->{fsize}[2], encode_utf8($title), $date, $n->{lang}||'N/A'; + $_->{id}, encode_utf8($tooltip), $heap->{fsize}[2], encode_utf8($title), $date, join('/', @{$n->{lang}})||'N/A'; } diff --git a/lib/VNDB/DB/ULists.pm b/lib/VNDB/DB/ULists.pm index 28c4d572..19831593 100644 --- a/lib/VNDB/DB/ULists.pm +++ b/lib/VNDB/DB/ULists.pm @@ -65,7 +65,7 @@ sub dbVNListList { # execute query my($r, $np) = $self->dbPage(\%o, qq| - SELECT vr.vid, vr.title, vr.original, v.c_released, v.c_languages, v.c_platforms, COALESCE(vo.vote, 0) AS vote + SELECT vr.vid, vr.title, vr.original, COALESCE(vo.vote, 0) AS vote FROM vn v JOIN vn_rev vr ON vr.id = v.latest !s JOIN votes vo ON vo.vid = v.id AND vo.uid = ? diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm index 166f4bbe..a29870a1 100644 --- a/lib/VNDB/DB/VN.pm +++ b/lib/VNDB/DB/VN.pm @@ -29,7 +29,7 @@ sub dbVNGet { defined $o{char} && !$o{char} ? ( '(ASCII(vr.title) < 97 OR ASCII(vr.title) > 122) AND (ASCII(vr.title) < 65 OR ASCII(vr.title) > 90)' => 1 ) : (), $o{lang} && @{$o{lang}} ? ( - '('.join(' OR ', map "v.c_languages ILIKE '%%$_%%'", @{$o{lang}}).')' => 1 ) : (), + 'v.c_languages && ARRAY[!l]::language[]' => [ $o{lang} ]) : (), $o{platform} && @{$o{platform}} ? ( '('.join(' OR ', map "v.c_platforms ILIKE '%%$_%%'", @{$o{platform}}).')' => 1 ) : (), $o{tags_include} && @{$o{tags_include}} ? ( @@ -81,8 +81,8 @@ sub dbVNGet { ); my $tag_ids = $o{tags_include} && join ',', @{$o{tags_include}[1]}; - my @select = ( - qw|v.id v.locked v.hidden v.c_released v.c_languages v.c_platforms vr.title vr.original v.rgraph|, 'vr.id AS cid', + my @select = ( # see https://rt.cpan.org/Ticket/Display.html?id=54224 for the cast on c_languages + qw|v.id v.locked v.hidden v.c_released v.c_languages::text[] v.c_platforms vr.title vr.original v.rgraph|, 'vr.id AS cid', $o{what} =~ /extended/ ? ( qw|vr.alias vr.image vr.img_nsfw vr.length vr.desc vr.l_wp vr.l_encubed vr.l_renai vr.l_vnn| ) : (), $o{what} =~ /changes/ ? ( diff --git a/lib/VNDB/Util/BrowseHTML.pm b/lib/VNDB/Util/BrowseHTML.pm index e9812f36..cc296cc7 100644 --- a/lib/VNDB/Util/BrowseHTML.pm +++ b/lib/VNDB/Util/BrowseHTML.pm @@ -184,7 +184,7 @@ sub htmlBrowseVN { end; td class => 'tc3'; cssicon "lang $_", mt "_lang_$_" - for (reverse sort split /\//, $l->{c_languages}); + for (reverse sort @{$l->{c_languages}}); end; td class => 'tc4'; lit $self->{l10n}->datestr($l->{c_released}); |