summaryrefslogtreecommitdiffstats
path: root/server/src/db
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/db')
-rw-r--r--server/src/db/code_migrations.rs4
-rw-r--r--server/src/db/comment_view.rs33
-rw-r--r--server/src/db/community_view.rs16
-rw-r--r--server/src/db/post_view.rs76
-rw-r--r--server/src/db/private_message_view.rs31
-rw-r--r--server/src/db/user_mention_view.rs16
-rw-r--r--server/src/db/user_view.rs26
7 files changed, 88 insertions, 114 deletions
diff --git a/server/src/db/code_migrations.rs b/server/src/db/code_migrations.rs
index 67e0c4dc..1810fae2 100644
--- a/server/src/db/code_migrations.rs
+++ b/server/src/db/code_migrations.rs
@@ -179,14 +179,10 @@ fn private_message_updates_2020_05_05(conn: &PgConnection) -> Result<(), LemmyEr
.filter(local.eq(true))
.load::<PrivateMessage>(conn)?;
- sql_query("alter table private_message disable trigger refresh_private_message").execute(conn)?;
-
for cpm in &incorrect_pms {
PrivateMessage::update_ap_id(&conn, cpm.id)?;
}
- sql_query("alter table private_message enable trigger refresh_private_message").execute(conn)?;
-
info!("{} private message rows updated.", incorrect_pms.len());
Ok(())
diff --git a/server/src/db/comment_view.rs b/server/src/db/comment_view.rs
index a37cdbcd..d1b27a3c 100644
--- a/server/src/db/comment_view.rs
+++ b/server/src/db/comment_view.rs
@@ -1,3 +1,4 @@
+// TODO, remove the cross join here, just join to user directly
use crate::db::{fuzzy_search, limit_and_offset, ListingType, MaybeOptional, SortType};
use diesel::{dsl::*, pg::Pg, result::Error, *};
use serde::{Deserialize, Serialize};
@@ -39,7 +40,7 @@ table! {
}
table! {
- comment_mview (id) {
+ comment_fast_view (id) {
id -> Int4,
creator_id -> Int4,
post_id -> Int4,
@@ -76,7 +77,7 @@ table! {
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
-#[table_name = "comment_view"]
+#[table_name = "comment_fast_view"]
pub struct CommentView {
pub id: i32,
pub creator_id: i32,
@@ -112,7 +113,7 @@ pub struct CommentView {
pub struct CommentQueryBuilder<'a> {
conn: &'a PgConnection,
- query: super::comment_view::comment_mview::BoxedQuery<'a, Pg>,
+ query: super::comment_view::comment_fast_view::BoxedQuery<'a, Pg>,
listing_type: ListingType,
sort: &'a SortType,
for_community_id: Option<i32>,
@@ -127,9 +128,9 @@ pub struct CommentQueryBuilder<'a> {
impl<'a> CommentQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection) -> Self {
- use super::comment_view::comment_mview::dsl::*;
+ use super::comment_view::comment_fast_view::dsl::*;
- let query = comment_mview.into_boxed();
+ let query = comment_fast_view.into_boxed();
CommentQueryBuilder {
conn,
@@ -198,7 +199,7 @@ impl<'a> CommentQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<CommentView>, Error> {
- use super::comment_view::comment_mview::dsl::*;
+ use super::comment_view::comment_fast_view::dsl::*;
let mut query = self.query;
@@ -270,8 +271,8 @@ impl CommentView {
from_comment_id: i32,
my_user_id: Option<i32>,
) -> Result<Self, Error> {
- use super::comment_view::comment_mview::dsl::*;
- let mut query = comment_mview.into_boxed();
+ use super::comment_view::comment_fast_view::dsl::*;
+ let mut query = comment_fast_view.into_boxed();
// The view lets you pass a null user_id, if you're not logged in
if let Some(my_user_id) = my_user_id {
@@ -290,7 +291,7 @@ impl CommentView {
// The faked schema since diesel doesn't do views
table! {
- reply_view (id) {
+ reply_fast_view (id) {
id -> Int4,
creator_id -> Int4,
post_id -> Int4,
@@ -328,7 +329,7 @@ table! {
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
-#[table_name = "reply_view"]
+#[table_name = "reply_fast_view"]
pub struct ReplyView {
pub id: i32,
pub creator_id: i32,
@@ -365,7 +366,7 @@ pub struct ReplyView {
pub struct ReplyQueryBuilder<'a> {
conn: &'a PgConnection,
- query: super::comment_view::reply_view::BoxedQuery<'a, Pg>,
+ query: super::comment_view::reply_fast_view::BoxedQuery<'a, Pg>,
for_user_id: i32,
sort: &'a SortType,
unread_only: bool,
@@ -375,9 +376,9 @@ pub struct ReplyQueryBuilder<'a> {
impl<'a> ReplyQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection, for_user_id: i32) -> Self {
- use super::comment_view::reply_view::dsl::*;
+ use super::comment_view::reply_fast_view::dsl::*;
- let query = reply_view.into_boxed();
+ let query = reply_fast_view.into_boxed();
ReplyQueryBuilder {
conn,
@@ -411,7 +412,7 @@ impl<'a> ReplyQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<ReplyView>, Error> {
- use super::comment_view::reply_view::dsl::*;
+ use super::comment_view::reply_fast_view::dsl::*;
let mut query = self.query;
@@ -615,8 +616,8 @@ mod tests {
upvotes: 1,
user_id: Some(inserted_user.id),
my_vote: Some(1),
- subscribed: None,
- saved: None,
+ subscribed: Some(false),
+ saved: Some(false),
ap_id: "http://fake.com".to_string(),
local: true,
community_actor_id: inserted_community.actor_id.to_owned(),
diff --git a/server/src/db/community_view.rs b/server/src/db/community_view.rs
index ea7b2a7c..4ec839ac 100644
--- a/server/src/db/community_view.rs
+++ b/server/src/db/community_view.rs
@@ -1,4 +1,4 @@
-use super::community_view::community_mview::BoxedQuery;
+use super::community_view::community_fast_view::BoxedQuery;
use crate::db::{fuzzy_search, limit_and_offset, MaybeOptional, SortType};
use diesel::{pg::Pg, result::Error, *};
use serde::{Deserialize, Serialize};
@@ -34,7 +34,7 @@ table! {
}
table! {
- community_mview (id) {
+ community_fast_view (id) {
id -> Int4,
name -> Varchar,
title -> Varchar,
@@ -114,7 +114,7 @@ table! {
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
-#[table_name = "community_view"]
+#[table_name = "community_fast_view"]
pub struct CommunityView {
pub id: i32,
pub name: String,
@@ -156,9 +156,9 @@ pub struct CommunityQueryBuilder<'a> {
impl<'a> CommunityQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection) -> Self {
- use super::community_view::community_mview::dsl::*;
+ use super::community_view::community_fast_view::dsl::*;
- let query = community_mview.into_boxed();
+ let query = community_fast_view.into_boxed();
CommunityQueryBuilder {
conn,
@@ -203,7 +203,7 @@ impl<'a> CommunityQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<CommunityView>, Error> {
- use super::community_view::community_mview::dsl::*;
+ use super::community_view::community_fast_view::dsl::*;
let mut query = self.query;
@@ -259,9 +259,9 @@ impl CommunityView {
from_community_id: i32,
from_user_id: Option<i32>,
) -> Result<Self, Error> {
- use super::community_view::community_mview::dsl::*;
+ use super::community_view::community_fast_view::dsl::*;
- let mut query = community_mview.into_boxed();
+ let mut query = community_fast_view.into_boxed();
query = query.filter(id.eq(from_community_id));
diff --git a/server/src/db/post_view.rs b/server/src/db/post_view.rs
index fbbf658d..808cf28c 100644
--- a/server/src/db/post_view.rs
+++ b/server/src/db/post_view.rs
@@ -1,4 +1,4 @@
-use super::post_view::post_mview::BoxedQuery;
+use super::post_view::post_fast_view::BoxedQuery;
use crate::db::{fuzzy_search, limit_and_offset, ListingType, MaybeOptional, SortType};
use diesel::{dsl::*, pg::Pg, result::Error, *};
use serde::{Deserialize, Serialize};
@@ -25,12 +25,12 @@ table! {
thumbnail_url -> Nullable<Text>,
ap_id -> Text,
local -> Bool,
- banned -> Bool,
- banned_from_community -> Bool,
creator_actor_id -> Text,
creator_local -> Bool,
creator_name -> Varchar,
creator_avatar -> Nullable<Text>,
+ banned -> Bool,
+ banned_from_community -> Bool,
community_actor_id -> Text,
community_local -> Bool,
community_name -> Varchar,
@@ -52,7 +52,7 @@ table! {
}
table! {
- post_mview (id) {
+ post_fast_view (id) {
id -> Int4,
name -> Varchar,
url -> Nullable<Text>,
@@ -72,12 +72,12 @@ table! {
thumbnail_url -> Nullable<Text>,
ap_id -> Text,
local -> Bool,
- banned -> Bool,
- banned_from_community -> Bool,
creator_actor_id -> Text,
creator_local -> Bool,
creator_name -> Varchar,
creator_avatar -> Nullable<Text>,
+ banned -> Bool,
+ banned_from_community -> Bool,
community_actor_id -> Text,
community_local -> Bool,
community_name -> Varchar,
@@ -101,7 +101,7 @@ table! {
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
-#[table_name = "post_view"]
+#[table_name = "post_fast_view"]
pub struct PostView {
pub id: i32,
pub name: String,
@@ -122,12 +122,12 @@ pub struct PostView {
pub thumbnail_url: Option<String>,
pub ap_id: String,
pub local: bool,
- pub banned: bool,
- pub banned_from_community: bool,
pub creator_actor_id: String,
pub creator_local: bool,
pub creator_name: String,
pub creator_avatar: Option<String>,
+ pub banned: bool,
+ pub banned_from_community: bool,
pub community_actor_id: String,
pub community_local: bool,
pub community_name: String,
@@ -166,9 +166,9 @@ pub struct PostQueryBuilder<'a> {
impl<'a> PostQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection) -> Self {
- use super::post_view::post_mview::dsl::*;
+ use super::post_view::post_fast_view::dsl::*;
- let query = post_mview.into_boxed();
+ let query = post_fast_view.into_boxed();
PostQueryBuilder {
conn,
@@ -249,7 +249,7 @@ impl<'a> PostQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<PostView>, Error> {
- use super::post_view::post_mview::dsl::*;
+ use super::post_view::post_fast_view::dsl::*;
let mut query = self.query;
@@ -345,10 +345,10 @@ impl PostView {
from_post_id: i32,
my_user_id: Option<i32>,
) -> Result<Self, Error> {
- use super::post_view::post_mview::dsl::*;
+ use super::post_view::post_fast_view::dsl::*;
use diesel::prelude::*;
- let mut query = post_mview.into_boxed();
+ let mut query = post_fast_view.into_boxed();
query = query.filter(id.eq(from_post_id));
@@ -470,6 +470,25 @@ mod tests {
score: 1,
};
+ let read_post_listings_with_user = PostQueryBuilder::create(&conn)
+ .listing_type(ListingType::Community)
+ .sort(&SortType::New)
+ .for_community_id(inserted_community.id)
+ .my_user_id(inserted_user.id)
+ .list()
+ .unwrap();
+
+ let read_post_listings_no_user = PostQueryBuilder::create(&conn)
+ .listing_type(ListingType::Community)
+ .sort(&SortType::New)
+ .for_community_id(inserted_community.id)
+ .list()
+ .unwrap();
+
+ let read_post_listing_no_user = PostView::read(&conn, inserted_post.id, None).unwrap();
+ let read_post_listing_with_user =
+ PostView::read(&conn, inserted_post.id, Some(inserted_user.id)).unwrap();
+
// the non user version
let expected_post_listing_no_user = PostView {
user_id: None,
@@ -496,7 +515,7 @@ mod tests {
score: 1,
upvotes: 1,
downvotes: 0,
- hot_rank: 1728,
+ hot_rank: read_post_listing_no_user.hot_rank,
published: inserted_post.published,
newest_activity_time: inserted_post.published,
updated: None,
@@ -541,13 +560,13 @@ mod tests {
score: 1,
upvotes: 1,
downvotes: 0,
- hot_rank: 1728,
+ hot_rank: read_post_listing_with_user.hot_rank,
published: inserted_post.published,
newest_activity_time: inserted_post.published,
updated: None,
- subscribed: None,
- read: None,
- saved: None,
+ subscribed: Some(false),
+ read: Some(false),
+ saved: Some(false),
nsfw: false,
embed_title: None,
embed_description: None,
@@ -561,25 +580,6 @@ mod tests {
community_local: true,
};
- let read_post_listings_with_user = PostQueryBuilder::create(&conn)
- .listing_type(ListingType::Community)
- .sort(&SortType::New)
- .for_community_id(inserted_community.id)
- .my_user_id(inserted_user.id)
- .list()
- .unwrap();
-
- let read_post_listings_no_user = PostQueryBuilder::create(&conn)
- .listing_type(ListingType::Community)
- .sort(&SortType::New)
- .for_community_id(inserted_community.id)
- .list()
- .unwrap();
-
- let read_post_listing_no_user = PostView::read(&conn, inserted_post.id, None).unwrap();
- let read_post_listing_with_user =
- PostView::read(&conn, inserted_post.id, Some(inserted_user.id)).unwrap();
-
let like_removed = PostLike::remove(&conn, &post_like_form).unwrap();
let num_deleted = Post::delete(&conn, inserted_post.id).unwrap();
Community::delete(&conn, inserted_community.id).unwrap();
diff --git a/server/src/db/private_message_view.rs b/server/src/db/private_message_view.rs
index 9a1df439..899a1084 100644
--- a/server/src/db/private_message_view.rs
+++ b/server/src/db/private_message_view.rs
@@ -26,29 +26,6 @@ table! {
}
}
-table! {
- private_message_mview (id) {
- id -> Int4,
- creator_id -> Int4,
- recipient_id -> Int4,
- content -> Text,
- deleted -> Bool,
- read -> Bool,
- published -> Timestamp,
- updated -> Nullable<Timestamp>,
- ap_id -> Text,
- local -> Bool,
- creator_name -> Varchar,
- creator_avatar -> Nullable<Text>,
- creator_actor_id -> Text,
- creator_local -> Bool,
- recipient_name -> Varchar,
- recipient_avatar -> Nullable<Text>,
- recipient_actor_id -> Text,
- recipient_local -> Bool,
- }
-}
-
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
@@ -76,7 +53,7 @@ pub struct PrivateMessageView {
pub struct PrivateMessageQueryBuilder<'a> {
conn: &'a PgConnection,
- query: super::private_message_view::private_message_mview::BoxedQuery<'a, Pg>,
+ query: super::private_message_view::private_message_view::BoxedQuery<'a, Pg>,
for_recipient_id: i32,
unread_only: bool,
page: Option<i64>,
@@ -85,9 +62,9 @@ pub struct PrivateMessageQueryBuilder<'a> {
impl<'a> PrivateMessageQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection, for_recipient_id: i32) -> Self {
- use super::private_message_view::private_message_mview::dsl::*;
+ use super::private_message_view::private_message_view::dsl::*;
- let query = private_message_mview.into_boxed();
+ let query = private_message_view.into_boxed();
PrivateMessageQueryBuilder {
conn,
@@ -115,7 +92,7 @@ impl<'a> PrivateMessageQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<PrivateMessageView>, Error> {
- use super::private_message_view::private_message_mview::dsl::*;
+ use super::private_message_view::private_message_view::dsl::*;
let mut query = self.query.filter(deleted.eq(false));
diff --git a/server/src/db/user_mention_view.rs b/server/src/db/user_mention_view.rs
index 100445b9..59aefb20 100644
--- a/server/src/db/user_mention_view.rs
+++ b/server/src/db/user_mention_view.rs
@@ -40,7 +40,7 @@ table! {
}
table! {
- user_mention_mview (id) {
+ user_mention_fast_view (id) {
id -> Int4,
user_mention_id -> Int4,
creator_id -> Int4,
@@ -78,7 +78,7 @@ table! {
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
-#[table_name = "user_mention_view"]
+#[table_name = "user_mention_fast_view"]
pub struct UserMentionView {
pub id: i32,
pub user_mention_id: i32,
@@ -115,7 +115,7 @@ pub struct UserMentionView {
pub struct UserMentionQueryBuilder<'a> {
conn: &'a PgConnection,
- query: super::user_mention_view::user_mention_mview::BoxedQuery<'a, Pg>,
+ query: super::user_mention_view::user_mention_fast_view::BoxedQuery<'a, Pg>,
for_user_id: i32,
sort: &'a SortType,
unread_only: bool,
@@ -125,9 +125,9 @@ pub struct UserMentionQueryBuilder<'a> {
impl<'a> UserMentionQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection, for_user_id: i32) -> Self {
- use super::user_mention_view::user_mention_mview::dsl::*;
+ use super::user_mention_view::user_mention_fast_view::dsl::*;
- let query = user_mention_mview.into_boxed();
+ let query = user_mention_fast_view.into_boxed();
UserMentionQueryBuilder {
conn,
@@ -161,7 +161,7 @@ impl<'a> UserMentionQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<UserMentionView>, Error> {
- use super::user_mention_view::user_mention_mview::dsl::*;
+ use super::user_mention_view::user_mention_fast_view::dsl::*;
let mut query = self.query;
@@ -208,9 +208,9 @@ impl UserMentionView {
from_user_mention_id: i32,
from_recipient_id: i32,
) -> Result<Self, Error> {
- use super::user_mention_view::user_mention_view::dsl::*;
+ use super::user_mention_view::user_mention_fast_view::dsl::*;
- user_mention_view
+ user_mention_fast_view
.filter(user_mention_id.eq(from_user_mention_id))
.filter(user_id.eq(from_recipient_id))
.first::<Self>(conn)
diff --git a/server/src/db/user_view.rs b/server/src/db/user_view.rs
index 57e2a4c9..49052172 100644
--- a/server/src/db/user_view.rs
+++ b/server/src/db/user_view.rs
@@ -1,4 +1,4 @@
-use super::user_view::user_mview::BoxedQuery;
+use super::user_view::user_fast::BoxedQuery;
use crate::db::{fuzzy_search, limit_and_offset, MaybeOptional, SortType};
use diesel::{dsl::*, pg::Pg, result::Error, *};
use serde::{Deserialize, Serialize};
@@ -26,7 +26,7 @@ table! {
}
table! {
- user_mview (id) {
+ user_fast (id) {
id -> Int4,
actor_id -> Text,
name -> Varchar,
@@ -50,7 +50,7 @@ table! {
#[derive(
Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize, QueryableByName, Clone,
)]
-#[table_name = "user_view"]
+#[table_name = "user_fast"]
pub struct UserView {
pub id: i32,
pub actor_id: String,
@@ -81,9 +81,9 @@ pub struct UserQueryBuilder<'a> {
impl<'a> UserQueryBuilder<'a> {
pub fn create(conn: &'a PgConnection) -> Self {
- use super::user_view::user_mview::dsl::*;
+ use super::user_view::user_fast::dsl::*;
- let query = user_mview.into_boxed();
+ let query = user_fast.into_boxed();
UserQueryBuilder {
conn,
@@ -100,7 +100,7 @@ impl<'a> UserQueryBuilder<'a> {
}
pub fn search_term<T: MaybeOptional<String>>(mut self, search_term: T) -> Self {
- use super::user_view::user_mview::dsl::*;
+ use super::user_view::user_fast::dsl::*;
if let Some(search_term) = search_term.get_optional() {
self.query = self.query.filter(name.ilike(fuzzy_search(&search_term)));
}
@@ -118,7 +118,7 @@ impl<'a> UserQueryBuilder<'a> {
}
pub fn list(self) -> Result<Vec<UserView>, Error> {
- use super::user_view::user_mview::dsl::*;
+ use super::user_view::user_fast::dsl::*;
let mut query = self.query;
@@ -151,17 +151,17 @@ impl<'a> UserQueryBuilder<'a> {
impl UserView {
pub fn read(conn: &PgConnection, from_user_id: i32) -> Result<Self, Error> {
- use super::user_view::user_mview::dsl::*;
- user_mview.find(from_user_id).first::<Self>(conn)
+ use super::user_view::user_fast::dsl::*;
+ user_fast.find(from_user_id).first::<Self>(conn)
}
pub fn admins(conn: &PgConnection) -> Result<Vec<Self>, Error> {
- use super::user_view::user_mview::dsl::*;
- user_mview.filter(admin.eq(true)).load::<Self>(conn)
+ use super::user_view::user_fast::dsl::*;
+ user_fast.filter(admin.eq(true)).load::<Self>(conn)
}
pub fn banned(conn: &PgConnection) -> Result<Vec<Self>, Error> {
- use super::user_view::user_mview::dsl::*;
- user_mview.filter(banned.eq(true)).load::<Self>(conn)
+ use super::user_view::user_fast::dsl::*;
+ user_fast.filter(banned.eq(true)).load::<Self>(conn)
}
}