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

Refactored first sql command.

kill me
This commit is contained in:
comraderat 2020-04-12 21:31:40 +02:00
parent a51c8e049c
commit 89e299da78
7 changed files with 218 additions and 82 deletions

65
devtools/dummydata.sql Normal file
View file

@ -0,0 +1,65 @@
--dummy data for postgres
INSERT INTO public.dbprefixsections (
name, abbreviation, "position", hidden) VALUES (
'ssss'::text, 'sss'::text, '0'::smallint, false::boolean)
returning id;
INSERT INTO public.dbprefixboards (
section_id, uri, dir, navbar_position, title, subtitle, description, max_file_size, max_threads, default_style, locked, force_anonymous, autosage_after, no_images_after, max_message_length, min_message_length, allow_embeds, redictect_to_thread, require_file, enable_catalog) VALUES (
'1'::bigint, 'drrr'::text, 'dr'::character varying(45), '0'::smallint, 'title'::character varying(45), 'subtitle'::character varying(64), 'descr'::character varying(64), '456456'::integer, '444'::smallint, 'idk'::character varying(45), false::boolean, true::boolean, '33'::smallint, '44'::smallint, '4435'::smallint, '23'::smallint, true::boolean, true::boolean, true::boolean, true::boolean)
returning id;
INSERT INTO public.dbprefixthreads (
board_id) VALUES (
'1'::bigint)
returning id;INSERT INTO public.dbprefixthreads (
board_id) VALUES (
'1'::bigint)
returning id;
INSERT INTO public.dbprefixposts (
thread_id, is_top_post, ip, message, message_raw, password, created_on) VALUES (
'1'::bigint, true::boolean, '1'::integer, 'ffff'::text, 'ddddd'::text, 'ffff'::text, '2020-04-12 20:51:25.438903')
returning id;
INSERT INTO public.dbprefixposts (
thread_id, ip, message, message_raw, password, created_on) VALUES (
'1'::bigint, '1'::integer, 'sss'::text, 'ssss'::text, 'ssss'::text, '2020-04-12 20:51:52.465178')
returning id;
INSERT INTO public.dbprefixposts (
thread_id, is_top_post, ip, message, message_raw, password, created_on) VALUES (
'2'::bigint, true::boolean, '1'::integer, 'ffff'::text, 'ddddd'::text, 'ffff'::text, '2020-03-12 20:51:25.438903')
returning id;
INSERT INTO public.dbprefixposts (
thread_id, ip, message, message_raw, password, created_on) VALUES (
'2'::bigint, '1'::integer, 'sss'::text, 'ssss'::text, 'ssss'::text, '2020-03-12 20:51:52.465178')
returning id;
INSERT INTO public.dbprefixfiles (
post_id, file_order, original_filename, filename, checksum, file_size, is_spoilered, thumbnail_width, thumbnail_height) VALUES (
'2'::bigint, '0'::integer, '2a'::character varying(255), '2a'::character varying(45), '1'::integer, '1'::integer, false::boolean, '5'::integer, '5'::integer)
returning id;
INSERT INTO public.dbprefixfiles (
post_id, file_order, original_filename, filename, checksum, file_size, is_spoilered, thumbnail_width, thumbnail_height) VALUES (
'1'::bigint, '0'::integer, '1a'::character varying(255), '1a'::character varying(45), '2'::integer, '2'::integer, false::boolean, '5'::integer, '5'::integer)
returning id;
INSERT INTO public.dbprefixfiles (
post_id, file_order, original_filename, filename, checksum, file_size, is_spoilered, thumbnail_width, thumbnail_height) VALUES (
'3'::bigint, '0'::integer, '3a'::character varying(255), '3a'::character varying(45), '3'::integer, '3'::integer, false::boolean, '5'::integer, '5'::integer)
returning id;
INSERT INTO public.dbprefixfiles (
post_id, file_order, original_filename, filename, checksum, file_size, is_spoilered, thumbnail_width, thumbnail_height) VALUES (
'2'::bigint, '1'::integer, '2b'::character varying(255), '2b'::character varying(45), '4'::integer, '4'::integer, false::boolean, '5'::integer, '5'::integer)
returning id;
INSERT INTO public.dbprefixfiles (
post_id, file_order, original_filename, filename, checksum, file_size, is_spoilered, thumbnail_width, thumbnail_height) VALUES (
'3'::bigint, '1'::integer, '3b'::character varying(255), '3b'::character varying(45), '5'::integer, '5'::integer, false::boolean, '55'::integer, '5'::integer)
returning id;

View file

@ -0,0 +1,20 @@
/*Gets post-id with thread top post id pairs*/
select
posts.id as selfid,
topposts.id as toppostid
from
dbprefixposts as posts
join dbprefixthreads as threads on threads.id = posts.thread_id
join dbprefixposts as topposts on threads.id = topposts.thread_id
where
topposts.is_top_post = TRUE
/*The top level files per post*/
SELECT files.post_id, filename
FROM dbprefixfiles as files
JOIN
(SELECT post_id, min(file_order) as file_order
FROM dbprefixfiles
GROUP BY post_id) as topfiles
ON files.post_id = topfiles.post_id AND files.file_order = topfiles.file_order

View file

@ -29,11 +29,11 @@ CREATE TABLE DBPREFIXboards(
title VARCHAR(45) NOT NULL,
subtitle VARCHAR(64) NOT NULL,
description VARCHAR(64) NOT NULL,
max_file_size SMALLINT NOT NULL,
max_file_size INT NOT NULL,
max_threads SMALLINT NOT NULL,
default_style VARCHAR(45) NOT NULL,
locked BOOL NOT NULL,
created_at TIMESTAMP NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
anonymous_name VARCHAR(45) NOT NULL DEFAULT 'Anonymous',
force_anonymous BOOL NOT NULL,
autosage_after SMALLINT NOT NULL,
@ -53,13 +53,13 @@ CREATE TABLE DBPREFIXboards(
CREATE TABLE DBPREFIXthreads(
id {serial pk},
board_id {fk to serial} NOT NULL,
locked BOOL NOT NULL,
stickied BOOL NOT NULL,
anchored BOOL NOT NULL,
cyclical BOOL NOT NULL,
last_bump TIMESTAMP NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
locked BOOL NOT NULL DEFAULT FALSE,
stickied BOOL NOT NULL DEFAULT FALSE,
anchored BOOL NOT NULL DEFAULT FALSE,
cyclical BOOL NOT NULL DEFAULT FALSE,
last_bump TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
FOREIGN KEY(board_id) REFERENCES DBPREFIXboards(id)
);
@ -68,19 +68,19 @@ CREATE INDEX thread_deleted_index ON DBPREFIXthreads(is_deleted);
CREATE TABLE DBPREFIXposts(
id {serial pk},
thread_id {fk to serial} NOT NULL,
is_top_post BOOL NOT NULL,
is_top_post BOOL NOT NULL DEFAULT FALSE,
ip INT NOT NULL,
created_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
name VARCHAR(50) NOT NULL,
tripcode VARCHAR(10) NOT NULL,
name VARCHAR(50) NOT NULL DEFAULT '',
tripcode VARCHAR(10) NOT NULL DEFAULT '',
is_role_signature BOOL NOT NULL DEFAULT FALSE,
email VARCHAR(50) NOT NULL,
subject VARCHAR(100) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT '',
subject VARCHAR(100) NOT NULL DEFAULT '',
message TEXT NOT NULL,
message_raw TEXT NOT NULL,
password TEXT NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
banned_message TEXT,
FOREIGN KEY(thread_id) REFERENCES DBPREFIXthreads(id)
);
@ -96,6 +96,8 @@ CREATE TABLE DBPREFIXfiles(
checksum INT NOT NULL,
file_size INT NOT NULL,
is_spoilered BOOL NOT NULL,
thumbnail_width INT NOT NULL,
thumbnail_height INT NOT NULL,
FOREIGN KEY(post_id) REFERENCES DBPREFIXposts(id),
UNIQUE(post_id, file_order)
);

View file

@ -29,11 +29,11 @@ CREATE TABLE DBPREFIXboards(
title VARCHAR(45) NOT NULL,
subtitle VARCHAR(64) NOT NULL,
description VARCHAR(64) NOT NULL,
max_file_size SMALLINT NOT NULL,
max_file_size INT NOT NULL,
max_threads SMALLINT NOT NULL,
default_style VARCHAR(45) NOT NULL,
locked BOOL NOT NULL,
created_at TIMESTAMP NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
anonymous_name VARCHAR(45) NOT NULL DEFAULT 'Anonymous',
force_anonymous BOOL NOT NULL,
autosage_after SMALLINT NOT NULL,
@ -53,13 +53,13 @@ CREATE TABLE DBPREFIXboards(
CREATE TABLE DBPREFIXthreads(
id BIGINT NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY,
board_id BIGINT NOT NULL,
locked BOOL NOT NULL,
stickied BOOL NOT NULL,
anchored BOOL NOT NULL,
cyclical BOOL NOT NULL,
last_bump TIMESTAMP NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
locked BOOL NOT NULL DEFAULT FALSE,
stickied BOOL NOT NULL DEFAULT FALSE,
anchored BOOL NOT NULL DEFAULT FALSE,
cyclical BOOL NOT NULL DEFAULT FALSE,
last_bump TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
FOREIGN KEY(board_id) REFERENCES DBPREFIXboards(id)
);
@ -68,19 +68,19 @@ CREATE INDEX thread_deleted_index ON DBPREFIXthreads(is_deleted);
CREATE TABLE DBPREFIXposts(
id BIGINT NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY,
thread_id BIGINT NOT NULL,
is_top_post BOOL NOT NULL,
is_top_post BOOL NOT NULL DEFAULT FALSE,
ip INT NOT NULL,
created_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
name VARCHAR(50) NOT NULL,
tripcode VARCHAR(10) NOT NULL,
name VARCHAR(50) NOT NULL DEFAULT '',
tripcode VARCHAR(10) NOT NULL DEFAULT '',
is_role_signature BOOL NOT NULL DEFAULT FALSE,
email VARCHAR(50) NOT NULL,
subject VARCHAR(100) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT '',
subject VARCHAR(100) NOT NULL DEFAULT '',
message TEXT NOT NULL,
message_raw TEXT NOT NULL,
password TEXT NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
banned_message TEXT,
FOREIGN KEY(thread_id) REFERENCES DBPREFIXthreads(id)
);
@ -96,6 +96,8 @@ CREATE TABLE DBPREFIXfiles(
checksum INT NOT NULL,
file_size INT NOT NULL,
is_spoilered BOOL NOT NULL,
thumbnail_width INT NOT NULL,
thumbnail_height INT NOT NULL,
FOREIGN KEY(post_id) REFERENCES DBPREFIXposts(id),
UNIQUE(post_id, file_order)
);

View file

@ -29,11 +29,11 @@ CREATE TABLE DBPREFIXboards(
title VARCHAR(45) NOT NULL,
subtitle VARCHAR(64) NOT NULL,
description VARCHAR(64) NOT NULL,
max_file_size SMALLINT NOT NULL,
max_file_size INT NOT NULL,
max_threads SMALLINT NOT NULL,
default_style VARCHAR(45) NOT NULL,
locked BOOL NOT NULL,
created_at TIMESTAMP NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
anonymous_name VARCHAR(45) NOT NULL DEFAULT 'Anonymous',
force_anonymous BOOL NOT NULL,
autosage_after SMALLINT NOT NULL,
@ -53,13 +53,13 @@ CREATE TABLE DBPREFIXboards(
CREATE TABLE DBPREFIXthreads(
id BIGSERIAL PRIMARY KEY,
board_id BIGINT NOT NULL,
locked BOOL NOT NULL,
stickied BOOL NOT NULL,
anchored BOOL NOT NULL,
cyclical BOOL NOT NULL,
last_bump TIMESTAMP NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
locked BOOL NOT NULL DEFAULT FALSE,
stickied BOOL NOT NULL DEFAULT FALSE,
anchored BOOL NOT NULL DEFAULT FALSE,
cyclical BOOL NOT NULL DEFAULT FALSE,
last_bump TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
FOREIGN KEY(board_id) REFERENCES DBPREFIXboards(id)
);
@ -68,19 +68,19 @@ CREATE INDEX thread_deleted_index ON DBPREFIXthreads(is_deleted);
CREATE TABLE DBPREFIXposts(
id BIGSERIAL PRIMARY KEY,
thread_id BIGINT NOT NULL,
is_top_post BOOL NOT NULL,
is_top_post BOOL NOT NULL DEFAULT FALSE,
ip INT NOT NULL,
created_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
name VARCHAR(50) NOT NULL,
tripcode VARCHAR(10) NOT NULL,
name VARCHAR(50) NOT NULL DEFAULT '',
tripcode VARCHAR(10) NOT NULL DEFAULT '',
is_role_signature BOOL NOT NULL DEFAULT FALSE,
email VARCHAR(50) NOT NULL,
subject VARCHAR(100) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT '',
subject VARCHAR(100) NOT NULL DEFAULT '',
message TEXT NOT NULL,
message_raw TEXT NOT NULL,
password TEXT NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
banned_message TEXT,
FOREIGN KEY(thread_id) REFERENCES DBPREFIXthreads(id)
);
@ -96,6 +96,8 @@ CREATE TABLE DBPREFIXfiles(
checksum INT NOT NULL,
file_size INT NOT NULL,
is_spoilered BOOL NOT NULL,
thumbnail_width INT NOT NULL,
thumbnail_height INT NOT NULL,
FOREIGN KEY(post_id) REFERENCES DBPREFIXposts(id),
UNIQUE(post_id, file_order)
);

View file

@ -29,11 +29,11 @@ CREATE TABLE DBPREFIXboards(
title VARCHAR(45) NOT NULL,
subtitle VARCHAR(64) NOT NULL,
description VARCHAR(64) NOT NULL,
max_file_size SMALLINT NOT NULL,
max_file_size INT NOT NULL,
max_threads SMALLINT NOT NULL,
default_style VARCHAR(45) NOT NULL,
locked BOOL NOT NULL,
created_at TIMESTAMP NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
anonymous_name VARCHAR(45) NOT NULL DEFAULT 'Anonymous',
force_anonymous BOOL NOT NULL,
autosage_after SMALLINT NOT NULL,
@ -53,13 +53,13 @@ CREATE TABLE DBPREFIXboards(
CREATE TABLE DBPREFIXthreads(
id INTEGER PRIMARY KEY AUTOINCREMENT,
board_id INTEGER NOT NULL,
locked BOOL NOT NULL,
stickied BOOL NOT NULL,
anchored BOOL NOT NULL,
cyclical BOOL NOT NULL,
last_bump TIMESTAMP NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
locked BOOL NOT NULL DEFAULT FALSE,
stickied BOOL NOT NULL DEFAULT FALSE,
anchored BOOL NOT NULL DEFAULT FALSE,
cyclical BOOL NOT NULL DEFAULT FALSE,
last_bump TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
FOREIGN KEY(board_id) REFERENCES DBPREFIXboards(id)
);
@ -68,19 +68,19 @@ CREATE INDEX thread_deleted_index ON DBPREFIXthreads(is_deleted);
CREATE TABLE DBPREFIXposts(
id INTEGER PRIMARY KEY AUTOINCREMENT,
thread_id INTEGER NOT NULL,
is_top_post BOOL NOT NULL,
is_top_post BOOL NOT NULL DEFAULT FALSE,
ip INT NOT NULL,
created_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
name VARCHAR(50) NOT NULL,
tripcode VARCHAR(10) NOT NULL,
name VARCHAR(50) NOT NULL DEFAULT '',
tripcode VARCHAR(10) NOT NULL DEFAULT '',
is_role_signature BOOL NOT NULL DEFAULT FALSE,
email VARCHAR(50) NOT NULL,
subject VARCHAR(100) NOT NULL,
email VARCHAR(50) NOT NULL DEFAULT '',
subject VARCHAR(100) NOT NULL DEFAULT '',
message TEXT NOT NULL,
message_raw TEXT NOT NULL,
password TEXT NOT NULL,
deleted_at TIMESTAMP NOT NULL,
is_deleted BOOL NOT NULL,
deleted_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOL NOT NULL DEFAULT FALSE,
banned_message TEXT,
FOREIGN KEY(thread_id) REFERENCES DBPREFIXthreads(id)
);
@ -96,6 +96,8 @@ CREATE TABLE DBPREFIXfiles(
checksum INT NOT NULL,
file_size INT NOT NULL,
is_spoilered BOOL NOT NULL,
thumbnail_width INT NOT NULL,
thumbnail_height INT NOT NULL,
FOREIGN KEY(post_id) REFERENCES DBPREFIXposts(id),
UNIQUE(post_id, file_order)
);

View file

@ -73,27 +73,70 @@ func buildFrontPage() string {
return gclog.Print(lErrorLog, "Failed opening front page for writing: ", err.Error()) + "<br />"
}
// get recent posts
recentQueryStr := "SELECT " +
"DBPREFIXposts.id, " +
"DBPREFIXposts.parentid, " +
"DBPREFIXboards.dir as boardname, " +
"DBPREFIXposts.boardid as boardid, " +
"DBPREFIXposts.name, " +
"DBPREFIXposts.tripcode, " +
"DBPREFIXposts.message, " +
"DBPREFIXposts.filename, " +
"DBPREFIXposts.thumb_w, " +
"DBPREFIXposts.thumb_h " +
"FROM DBPREFIXposts, DBPREFIXboards " +
"WHERE DBPREFIXposts.deleted_timestamp = ? "
//TODO: rework so it uses all features/better sql
//get recent posts
recentQueryStr := `
/*
recentposts = join all non-deleted posts with the post id of their thread and the board it belongs on, sort by date and grab top x posts
singlefiles = the top file per post id
Left join singlefiles on recentposts where recentposts.selfid = singlefiles.post_id
Coalesce filenames to "" (if filename = null -> "" else filename)
Query might benefit from [filter on posts with at least one file -> ] filter N most recent -> manually loop N results for file/board/parentthreadid
*/
Select
recentposts.selfid AS id,
recentposts.toppostid AS parentid,
recentposts.boardid,
recentposts.boardname,
recentposts.name,
recentposts.tripcode,
recentposts.message,
COALESCE(singlefiles.filename, '') as filename,
singlefiles.thumbnail_width as thumb_w,
singlefiles.thumbnail_height as thumb_h
FROM
(SELECT
posts.id AS selfid,
topposts.id AS toppostid,
boards.dir AS boardname,
boards.id AS boardid,
posts.name,
posts.tripcode,
posts.message,
posts.email,
posts.created_on
FROM
DBPREFIXposts AS posts
JOIN DBPREFIXthreads AS threads
ON threads.id = posts.thread_id
JOIN DBPREFIXposts AS topposts
ON threads.id = topposts.thread_id
JOIN DBPREFIXboards AS boards
ON threads.board_id = boards.id
WHERE
topposts.is_top_post = TRUE AND posts.is_deleted = FALSE
) as recentposts
LEFT JOIN
(SELECT files.post_id, filename, files.thumbnail_width, files.thumbnail_height
FROM DBPREFIXfiles as files
JOIN
(SELECT post_id, min(file_order) as file_order
FROM DBPREFIXfiles
GROUP BY post_id) as topfiles
ON files.post_id = topfiles.post_id AND files.file_order = topfiles.file_order
) AS singlefiles
ON recentposts.selfid = singlefiles.post_id`
if !config.RecentPostsWithNoFile {
recentQueryStr += "AND DBPREFIXposts.filename != '' AND DBPREFIXposts.filename != 'deleted' "
recentQueryStr += "WHERE singlefiles.filename IS NOT NULL"
}
recentQueryStr += "AND boardid = DBPREFIXboards.id ORDER BY timestamp DESC LIMIT ?"
recentQueryStr += "ORDER BY recentposts.created_on DESC LIMIT ?"
rows, err := querySQL(recentQueryStr, nilTimestamp, config.MaxRecentPosts)
rows, err := querySQL(recentQueryStr, config.MaxRecentPosts)
defer closeHandle(rows)
if err != nil {
return gclog.Print(lErrorLog, err.Error())