From 99ef17f820473769d7d11d9e915904a25868e63e Mon Sep 17 00:00:00 2001 From: Alessio Date: Fri, 13 Oct 2023 17:55:40 -0300 Subject: [PATCH] Fix likes 'sort_order' being unique when '-1' is used as 'unknown' value --- pkg/persistence/schema.sql | 2 +- pkg/persistence/versions.go | 18 ++++++++++++++++++ sample_data/seed_data.sql | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pkg/persistence/schema.sql b/pkg/persistence/schema.sql index b3b7f54..3818ae1 100644 --- a/pkg/persistence/schema.sql +++ b/pkg/persistence/schema.sql @@ -191,7 +191,7 @@ create table hashtags (rowid integer primary key, ); create table likes(rowid integer primary key, - sort_order integer unique not null, + sort_order integer not null, -- Can't be unique because "-1" is used as "unknown" value user_id integer not null, tweet_id integer not null, unique(user_id, tweet_id) diff --git a/pkg/persistence/versions.go b/pkg/persistence/versions.go index 23f05d6..687abf7 100644 --- a/pkg/persistence/versions.go +++ b/pkg/persistence/versions.go @@ -131,6 +131,24 @@ var MIGRATIONS = []string{ update spaces set started_at = started_at/1000 where started_at > strftime("%s")*500; update spaces set created_at = created_at/1000 where created_at > strftime("%s")*500;`, `alter table users add column is_deleted boolean default 0`, + `begin transaction; + alter table likes rename to likes_old; + + create table likes(rowid integer primary key, + sort_order integer not null, + user_id integer not null, + tweet_id integer not null, + unique(user_id, tweet_id) + foreign key(user_id) references users(id) + foreign key(tweet_id) references tweets(id) + ); + + create index if not exists index_likes_user_id on likes (user_id); + create index if not exists index_likes_tweet_id on likes (tweet_id); + insert into likes select * from likes_old; + drop table likes_old; + commit; + vacuum;`, } var ENGINE_DATABASE_VERSION = len(MIGRATIONS) diff --git a/sample_data/seed_data.sql b/sample_data/seed_data.sql index 7a8cdfe..1f25f5b 100644 --- a/sample_data/seed_data.sql +++ b/sample_data/seed_data.sql @@ -299,7 +299,7 @@ CREATE TABLE hashtags (rowid integer primary key, ); create table likes(rowid integer primary key, - sort_order integer unique not null, + sort_order integer not null, user_id integer not null, tweet_id integer not null, unique(user_id, tweet_id)