1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-18 07:36:24 -07:00

Add more views

This commit is contained in:
Eggbertx 2024-10-15 09:55:41 -07:00
parent 82cd5a338a
commit 018c1eef96
3 changed files with 49 additions and 30 deletions

View file

@ -113,24 +113,16 @@ func getAllPostsToDelete(postIDs []any, fileOnly bool) ([]delPost, []any, error)
setPart += "?)"
}
}
query := `SELECT p.id AS postid, (
SELECT op.id AS opid FROM DBPREFIXposts op
WHERE op.thread_id = p.thread_id AND is_top_post LIMIT 1
) as opid, is_top_post, COALESCE(filename, "") AS filename, dir
FROM DBPREFIXboards b
LEFT JOIN DBPREFIXthreads t ON t.board_id = b.id
LEFT JOIN DBPREFIXposts p ON p.thread_id = t.id
LEFT JOIN DBPREFIXfiles f ON f.post_id = p.id
WHERE p.id IN ` + setPart
var query string
params := postIDs
if fileOnly {
// only deleting this post's file, not subfiles if it's an OP
query += " AND filename IS NOT NULL"
query = "SELECT * FROM DBPREFIXv_posts_to_delete_file_only WHERE p.id IN " + setPart
} else {
// deleting everything, including subfiles
params = append(params, postIDs...)
query += ` OR p.thread_id IN (
SELECT thread_id from DBPREFIXposts op WHERE op.id IN ` + setPart + ` AND is_top_post)`
query = "SELECT * FROM DBPREFIXv_posts_to_delete WHERE p.id IN " + setPart +
` OR p.thread_id IN (SELECT thread_id from DBPREFIXposts op WHERE op.id IN ` + setPart + ` AND is_top_post)`
}
rows, err := gcsql.QuerySQL(query, params...)
if err != nil {

View file

@ -32,19 +32,15 @@ type frontPagePost struct {
func getFrontPagePosts() ([]frontPagePost, error) {
siteCfg := config.GetSiteConfig()
query := `SELECT
DBPREFIXposts.id, DBPREFIXposts.message_raw,
(SELECT dir FROM DBPREFIXboards WHERE id = t.board_id),
COALESCE(f.filename, ''), op.id
FROM DBPREFIXposts
LEFT JOIN (SELECT id, board_id FROM DBPREFIXthreads) t ON t.id = DBPREFIXposts.thread_id
LEFT JOIN (SELECT post_id, filename FROM DBPREFIXfiles) f on f.post_id = DBPREFIXposts.id
INNER JOIN (SELECT id, thread_id FROM DBPREFIXposts WHERE is_top_post) op ON op.thread_id = DBPREFIXposts.thread_id
WHERE DBPREFIXposts.is_deleted = FALSE`
if !siteCfg.RecentPostsWithNoFile {
query += " AND f.filename IS NOT NULL AND f.filename != '' AND f.filename != 'deleted'"
var query string
if siteCfg.RecentPostsWithNoFile {
// get recent posts, including those with no file
query = "SELECT * FROM DBPREFIXv_front_page_posts"
} else {
query = "SELECT * FROM DBPREFIXv_front_page_posts_with_file"
}
query += " ORDER BY DBPREFIXposts.id DESC LIMIT " + strconv.Itoa(siteCfg.MaxRecentPosts)
query += " ORDER BY id DESC LIMIT " + strconv.Itoa(siteCfg.MaxRecentPosts)
rows, cancel, err := gcsql.QueryTimeoutSQL(nil, query)
defer cancel()

View file

@ -1,12 +1,14 @@
-- SQL views for simplifying queries in gochan
-- First drop views if they exist in reverse order to avoid dependency issues
DROP VIEW IF EXISTS DBPREFIXv_front_page_posts_with_file;
DROP VIEW IF EXISTS DBPREFIXv_front_page_posts;
DROP VIEW IF EXISTS DBPREFIXv_posts_to_delete_file_only;
DROP VIEW IF EXISTS DBPREFIXv_posts_to_delete;
DROP VIEW IF EXISTS DBPREFIXv_recent_posts;
DROP VIEW IF EXISTS DBPREFIXv_board_top_posts;
DROP VIEW IF EXISTS DBPREFIXv_building_posts;
DROP VIEW IF EXISTS DBPREFIXv_top_posts;
-- create views
CREATE VIEW DBPREFIXv_top_posts AS
SELECT id, thread_id FROM DBPREFIXposts WHERE is_top_post;
@ -37,10 +39,39 @@ LEFT JOIN (
INNER JOIN DBPREFIXv_top_posts p ON p.thread_id = DBPREFIXposts.thread_id
WHERE is_deleted = FALSE;
CREATE VIEW DBPREFIXv_board_top_posts AS
SELECT * FROM DBPREFIXv_building_posts
WHERE id = parent_id AND ORDER BY t.stickied DESC, last_bump DESC
CREATE VIEW DBPREFIXv_recent_posts AS
SELECT * FROM DBPREFIXv_building_posts
ORDER BY id DESC;
ORDER BY id DESC;
CREATE VIEW DBPREFIXv_posts_to_delete AS
SELECT p.id AS postid, (
SELECT op.id AS opid FROM DBPREFIXposts op
WHERE op.thread_id = p.thread_id AND is_top_post LIMIT 1
) as opid, is_top_post, COALESCE(filename, "") AS filename, dir
FROM DBPREFIXboards b
LEFT JOIN DBPREFIXthreads t ON t.board_id = b.id
LEFT JOIN DBPREFIXposts p ON p.thread_id = t.id
LEFT JOIN DBPREFIXfiles f ON f.post_id = p.id;
CREATE VIEW DBPREFIXv_posts_to_delete_file_only AS
SELECT * FROM DBPREFIXv_posts_to_delete
WHERE filename IS NOT NULL;
CREATE VIEW DBPREFIXv_front_page_posts AS
SELECT DBPREFIXposts.id, DBPREFIXposts.message_raw,
(SELECT dir FROM DBPREFIXboards WHERE id = t.board_id) as dir,
COALESCE(f.filename, '') as filename, op.id as opid
FROM DBPREFIXposts
LEFT JOIN (SELECT id, board_id FROM DBPREFIXthreads) t ON t.id = DBPREFIXposts.thread_id
LEFT JOIN (SELECT post_id, filename FROM DBPREFIXfiles) f on f.post_id = DBPREFIXposts.id
INNER JOIN (SELECT id, thread_id FROM DBPREFIXposts WHERE is_top_post) op ON op.thread_id = DBPREFIXposts.thread_id
WHERE DBPREFIXposts.is_deleted = FALSE;
CREATE VIEW DBPREFIXv_front_page_posts_with_file AS
SELECT * FROM DBPREFIXv_front_page_posts
WHERE filename IS NOT NULL AND filename != '' AND filename != 'deleted';