2021-06-27 13:31:30 -07:00
PRAGMA foreign_keys = on ;
create table users ( rowid integer primary key ,
2021-07-24 21:52:39 -07:00
id integer unique not null check ( typeof ( id ) = ' integer ' ) ,
2021-06-27 13:31:30 -07:00
display_name text not null ,
handle text unique not null ,
bio text ,
2021-07-24 21:52:39 -07:00
following_count integer ,
followers_count integer ,
2021-06-27 13:31:30 -07:00
location text ,
website text ,
join_date integer ,
is_private boolean default 0 ,
is_verified boolean default 0 ,
2022-01-07 12:38:56 -05:00
is_banned boolean default 0 ,
2021-06-27 13:31:30 -07:00
profile_image_url text ,
2021-08-10 20:51:42 -07:00
profile_image_local_path text ,
2021-06-27 13:31:30 -07:00
banner_image_url text ,
2021-08-10 20:51:42 -07:00
banner_image_local_path text ,
2021-07-25 15:42:43 -07:00
pinned_tweet_id integer check ( typeof ( pinned_tweet_id ) = ' integer ' or pinned_tweet_id = ' ' ) ,
2022-02-26 15:58:30 -08:00
is_followed boolean default 0 ,
2022-02-26 22:09:27 -08:00
is_id_fake boolean default 0 ,
2021-07-25 15:42:43 -07:00
is_content_downloaded boolean default 0
2021-11-06 13:37:46 -07:00
) ;
2021-07-24 10:19:05 -07:00
2021-11-06 13:37:46 -07:00
create table tombstone_types ( rowid integer primary key ,
short_name text not null unique ,
tombstone_text text not null unique
2021-06-27 13:31:30 -07:00
) ;
2021-11-06 13:37:46 -07:00
insert into tombstone_types ( rowid , short_name , tombstone_text ) values
( 1 , ' deleted ' , ' This Tweet was deleted by the Tweet author ' ) ,
2021-12-21 16:05:51 -05:00
( 2 , ' suspended ' , ' This Tweet is from a suspended account ' ) ,
2021-11-06 13:37:46 -07:00
( 3 , ' hidden ' , ' You’ re unable to view this Tweet because this account owner limits who can view their Tweets ' ) ,
2021-12-21 16:05:51 -05:00
( 4 , ' unavailable ' , ' This Tweet is unavailable ' ) ,
( 5 , ' violated ' , ' This Tweet violated the Twitter Rules ' ) ,
2022-02-14 17:15:01 -08:00
( 6 , ' no longer exists ' , ' This Tweet is from an account that no longer exists ' ) ,
( 7 , ' age-restricted ' , ' Age-restricted adult content. This content might not be appropriate for people under 18 years old. To view this media, you’ ll need to log in to Twitter ' ) ;
2021-06-27 13:31:30 -07:00
create table tweets ( rowid integer primary key ,
2021-07-24 21:52:39 -07:00
id integer unique not null check ( typeof ( id ) = ' integer ' ) ,
2021-07-25 15:42:43 -07:00
user_id integer not null check ( typeof ( user_id ) = ' integer ' ) ,
2021-06-27 13:31:30 -07:00
text text not null ,
2023-06-08 18:51:50 -03:00
is_expandable bool not null default 0 ,
2021-06-27 13:31:30 -07:00
posted_at integer ,
num_likes integer ,
num_retweets integer ,
num_replies integer ,
num_quote_tweets integer ,
2021-11-22 14:56:57 -08:00
in_reply_to_id integer ,
quoted_tweet_id integer ,
2021-09-27 18:29:55 -07:00
mentions text , -- comma-separated
reply_mentions text , -- comma-separated
hashtags text , -- comma-separated
2022-05-14 16:36:03 -07:00
space_id text ,
2021-11-06 13:37:46 -07:00
tombstone_type integer default 0 ,
is_stub boolean default 0 ,
2021-06-27 13:31:30 -07:00
2021-07-25 15:42:43 -07:00
is_content_downloaded boolean default 0 ,
2021-12-20 14:07:20 -05:00
is_conversation_scraped boolean default 0 ,
last_scraped_at integer not null default 0 ,
2021-07-24 10:19:05 -07:00
foreign key ( user_id ) references users ( id )
2022-05-14 16:36:03 -07:00
foreign key ( space_id ) references spaces ( id )
2021-06-27 13:31:30 -07:00
) ;
2022-12-24 13:47:43 -05:00
create index if not exists index_tweets_in_reply_to_id on tweets ( in_reply_to_id ) ;
2022-12-26 13:08:25 -05:00
create index if not exists index_tweets_user_id on tweets ( user_id ) ;
2022-12-24 13:47:43 -05:00
2021-06-27 13:31:30 -07:00
create table retweets ( rowid integer primary key ,
2021-08-16 20:37:35 -07:00
retweet_id integer not null unique ,
2021-06-27 13:31:30 -07:00
tweet_id integer not null ,
retweeted_by integer not null ,
retweeted_at integer not null ,
foreign key ( tweet_id ) references tweets ( id )
foreign key ( retweeted_by ) references users ( id )
) ;
create table urls ( rowid integer primary key ,
tweet_id integer not null ,
2021-09-17 18:04:12 -07:00
domain text ,
2021-06-27 13:31:30 -07:00
text text not null ,
2022-02-01 15:48:43 -08:00
short_text text not null default " " ,
2021-09-17 18:04:12 -07:00
title text ,
description text ,
creator_id integer ,
site_id integer ,
2021-10-10 16:06:47 -07:00
thumbnail_width integer not null ,
thumbnail_height integer not null ,
2021-09-17 18:04:12 -07:00
thumbnail_remote_url text ,
thumbnail_local_path text ,
has_card boolean ,
2021-09-17 20:50:28 -07:00
has_thumbnail boolean ,
2021-09-17 18:04:12 -07:00
is_content_downloaded boolean default 0 ,
2021-06-27 13:31:30 -07:00
unique ( tweet_id , text )
foreign key ( tweet_id ) references tweets ( id )
) ;
2022-12-24 13:47:43 -05:00
create index if not exists index_urls_tweet_id on urls ( tweet_id ) ;
2021-06-27 13:31:30 -07:00
2021-12-12 16:42:32 -08:00
create table polls ( rowid integer primary key ,
2021-12-12 18:42:27 -08:00
id integer unique not null check ( typeof ( id ) = ' integer ' ) ,
2021-12-12 16:42:32 -08:00
tweet_id integer not null ,
num_choices integer not null ,
choice1 text ,
choice1_votes integer ,
choice2 text ,
choice2_votes integer ,
choice3 text ,
choice3_votes integer ,
choice4 text ,
choice4_votes integer ,
voting_duration integer not null , -- in seconds
voting_ends_at integer not null ,
last_scraped_at integer not null ,
foreign key ( tweet_id ) references tweets ( id )
) ;
2022-12-24 13:47:43 -05:00
create index if not exists index_polls_tweet_id on polls ( tweet_id ) ;
2021-12-12 16:42:32 -08:00
2022-05-14 16:04:09 -07:00
create table spaces ( rowid integer primary key ,
id text unique not null ,
2022-11-24 19:08:00 -05:00
created_by_id integer ,
short_url text not null ,
state text not null ,
title text not null ,
created_at integer not null ,
started_at integer not null ,
ended_at integer not null ,
updated_at integer not null ,
is_available_for_replay boolean not null ,
replay_watch_count integer ,
live_listeners_count integer ,
is_details_fetched boolean not null default 0 ,
foreign key ( created_by_id ) references users ( id )
) ;
create table space_participants ( rowid integer primary key ,
user_id integer not null ,
space_id not null ,
2023-06-25 22:53:49 -03:00
unique ( user_id , space_id )
2022-11-24 19:08:00 -05:00
foreign key ( space_id ) references spaces ( id )
-- No foreign key for users, since they may not be downloaded yet and I don't want to
-- download every user who joins a space
2022-05-14 16:04:09 -07:00
) ;
2021-06-27 13:31:30 -07:00
create table images ( rowid integer primary key ,
2021-08-04 01:27:14 -07:00
id integer unique not null check ( typeof ( id ) = ' integer ' ) ,
2021-06-27 13:31:30 -07:00
tweet_id integer not null ,
2021-10-10 16:06:47 -07:00
width integer not null ,
height integer not null ,
2021-08-05 14:22:16 -07:00
remote_url text not null unique ,
local_filename text not null unique ,
2021-07-26 17:26:39 -07:00
is_downloaded boolean default 0 ,
2021-07-25 15:42:43 -07:00
foreign key ( tweet_id ) references tweets ( id )
) ;
2022-12-24 13:47:43 -05:00
create index if not exists index_images_tweet_id on images ( tweet_id ) ;
2021-07-25 15:42:43 -07:00
create table videos ( rowid integer primary key ,
2021-08-04 23:41:58 -07:00
id integer unique not null check ( typeof ( id ) = ' integer ' ) ,
2021-07-25 15:42:43 -07:00
tweet_id integer not null ,
2021-10-10 16:06:47 -07:00
width integer not null ,
height integer not null ,
2021-08-05 14:10:46 -07:00
remote_url text not null unique ,
local_filename text not null unique ,
2021-12-23 15:36:14 -05:00
thumbnail_remote_url text not null default " missing " ,
thumbnail_local_filename text not null default " missing " ,
2021-12-24 16:26:34 -05:00
duration integer not null default 0 ,
view_count integer not null default 0 ,
2021-10-04 21:06:53 -07:00
is_gif boolean default 0 ,
2021-07-26 17:26:39 -07:00
is_downloaded boolean default 0 ,
2022-12-02 20:33:54 -05:00
is_blocked_by_dmca boolean not null default 0 ,
2021-06-27 13:31:30 -07:00
foreign key ( tweet_id ) references tweets ( id )
) ;
2022-12-24 13:47:43 -05:00
create index if not exists index_videos_tweet_id on videos ( tweet_id ) ;
2021-06-27 13:31:30 -07:00
create table hashtags ( rowid integer primary key ,
tweet_id integer not null ,
text text not null ,
unique ( tweet_id , text )
foreign key ( tweet_id ) references tweets ( id )
) ;
2021-11-22 16:55:27 -08:00
create table database_version ( rowid integer primary key ,
version_number integer not null unique
) ;
2022-02-26 22:09:27 -08:00
2023-06-26 13:16:22 -03:00
create table likes ( rowid integer primary key ,
sort_order integer unique 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 )
) ;
2022-02-26 22:09:27 -08:00
create table fake_user_sequence ( latest_fake_id integer not null ) ;
insert into fake_user_sequence values ( 0 x4000000000000000 ) ;