szurubooru/server
rr- 06ab98fa70 server/search: fix sort:random breaking tags
Using sqlalchemy's subqueryload to fetch tags works like this:

1. Get basic info about posts with query X
2. Copy query X
3. SELECT all tags WHERE post_id IN (SELECT post_ids FROM query X)
4. Associate the resulting tags with the posts

When original query contains .order_by(func.random()), it looks like
this:

1. SELECT post.* FROM post ORDER BY random() LIMIT 10
2. Copy "ORDER BY random() LIMIT 10"
3. SELECT tag.* FROM tag WHERE tag.post_id IN (
       SELECT id FROM post ORDER BY random() LIMIT 10)
4. Disaster! Each post now has completely arbitrary tags!

To circumvent this, we replace eager loading with lazy loading. This
generates one extra query for each result row, but it has no chance of
producing such anomalies. This behavior is activated only for
queries containing "sort:random" and derivatives so it shouldn't hit
performance too much.
2016-08-27 01:21:59 +02:00
..
szurubooru server/search: fix sort:random breaking tags 2016-08-27 01:21:59 +02:00
.pylintrc server/general: embrace most of PEP8 2016-08-14 16:44:03 +02:00
alembic.ini client+server/general: fix config references 2016-04-10 16:23:35 +02:00
generate-thumb server/tools: add generate-thumb 2016-06-02 13:58:08 +02:00
host-waitress server/general: ditch falcon for in-house WSGI app 2016-08-14 16:43:35 +02:00
lint server/tools: add lint script 2016-08-14 16:46:50 +02:00
migrate-v1 server/snapshots: rewrite 2016-08-16 21:51:25 +02:00
requirements.txt server/tools: add lint script 2016-08-14 16:46:50 +02:00
test server/tests: change test runner 2016-04-16 11:03:48 +02:00