2023-09-06 17:43:27 +00:00
|
|
|
DROP FUNCTION scaled_rank;
|
|
|
|
|
|
|
|
ALTER TABLE community_aggregates
|
|
|
|
ALTER COLUMN hot_rank TYPE integer,
|
|
|
|
ALTER COLUMN hot_rank SET DEFAULT 1728;
|
|
|
|
|
|
|
|
ALTER TABLE comment_aggregates
|
|
|
|
ALTER COLUMN hot_rank TYPE integer,
|
|
|
|
ALTER COLUMN hot_rank SET DEFAULT 1728;
|
|
|
|
|
|
|
|
ALTER TABLE post_aggregates
|
|
|
|
ALTER COLUMN hot_rank TYPE integer,
|
|
|
|
ALTER COLUMN hot_rank SET DEFAULT 1728,
|
|
|
|
ALTER COLUMN hot_rank_active TYPE integer,
|
|
|
|
ALTER COLUMN hot_rank_active SET DEFAULT 1728;
|
|
|
|
|
|
|
|
-- Change back to integer version
|
|
|
|
DROP FUNCTION hot_rank (numeric, published timestamp with time zone);
|
|
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION hot_rank (score numeric, published timestamp with time zone)
|
|
|
|
RETURNS integer
|
|
|
|
AS $$
|
|
|
|
DECLARE
|
|
|
|
hours_diff numeric := EXTRACT(EPOCH FROM (now() - published)) / 3600;
|
|
|
|
BEGIN
|
|
|
|
IF (hours_diff > 0) THEN
|
|
|
|
RETURN floor(10000 * log(greatest (1, score + 3)) / power((hours_diff + 2), 1.8))::integer;
|
|
|
|
ELSE
|
|
|
|
-- if the post is from the future, set hot score to 0. otherwise you can game the post to
|
|
|
|
-- always be on top even with only 1 vote by setting it to the future
|
|
|
|
RETURN 0;
|
|
|
|
END IF;
|
|
|
|
END;
|
|
|
|
$$
|
|
|
|
LANGUAGE plpgsql
|
|
|
|
IMMUTABLE PARALLEL SAFE;
|
|
|
|
|
|
|
|
ALTER TABLE post_aggregates
|
|
|
|
DROP COLUMN scaled_rank;
|
|
|
|
|
|
|
|
-- The following code is necessary because postgres can't remove
|
|
|
|
-- a single enum value.
|
|
|
|
ALTER TABLE local_user
|
|
|
|
ALTER default_sort_type DROP DEFAULT;
|
|
|
|
|
|
|
|
UPDATE
|
|
|
|
local_user
|
|
|
|
SET
|
|
|
|
default_sort_type = 'Hot'
|
|
|
|
WHERE
|
|
|
|
default_sort_type = 'Scaled';
|
|
|
|
|
|
|
|
-- rename the old enum
|
|
|
|
ALTER TYPE sort_type_enum RENAME TO sort_type_enum__;
|
|
|
|
|
|
|
|
-- create the new enum
|
|
|
|
CREATE TYPE sort_type_enum AS ENUM (
|
|
|
|
'Active',
|
|
|
|
'Hot',
|
|
|
|
'New',
|
|
|
|
'Old',
|
|
|
|
'TopDay',
|
|
|
|
'TopWeek',
|
|
|
|
'TopMonth',
|
|
|
|
'TopYear',
|
|
|
|
'TopAll',
|
|
|
|
'MostComments',
|
|
|
|
'NewComments',
|
|
|
|
'TopHour',
|
|
|
|
'TopSixHour',
|
|
|
|
'TopTwelveHour',
|
|
|
|
'TopThreeMonths',
|
|
|
|
'TopSixMonths',
|
|
|
|
'TopNineMonths'
|
|
|
|
);
|
|
|
|
|
|
|
|
-- alter all your enum columns
|
|
|
|
ALTER TABLE local_user
|
|
|
|
ALTER COLUMN default_sort_type TYPE sort_type_enum
|
|
|
|
USING default_sort_type::text::sort_type_enum;
|
|
|
|
|
|
|
|
ALTER TABLE local_user
|
|
|
|
ALTER default_sort_type SET DEFAULT 'Active';
|
|
|
|
|
|
|
|
-- drop the old enum
|
|
|
|
DROP TYPE sort_type_enum__;
|
|
|
|
|
2024-05-20 02:23:56 +00:00
|
|
|
-- Remove int to float conversions that were automatically added to index filters
|
2024-05-22 20:34:35 +00:00
|
|
|
DROP INDEX idx_comment_aggregates_nonzero_hotrank, idx_community_aggregates_nonzero_hotrank, idx_post_aggregates_nonzero_hotrank;
|
2024-05-20 02:23:56 +00:00
|
|
|
|
|
|
|
CREATE INDEX idx_community_aggregates_nonzero_hotrank ON community_aggregates (published)
|
|
|
|
WHERE
|
|
|
|
hot_rank != 0;
|
|
|
|
|
|
|
|
CREATE INDEX idx_comment_aggregates_nonzero_hotrank ON comment_aggregates (published)
|
|
|
|
WHERE
|
|
|
|
hot_rank != 0;
|
|
|
|
|
|
|
|
CREATE INDEX idx_post_aggregates_nonzero_hotrank ON post_aggregates (published DESC)
|
|
|
|
WHERE
|
|
|
|
hot_rank != 0 OR hot_rank_active != 0;
|
|
|
|
|