diff --git a/src/bin/crates-admin/render_readmes.rs b/src/bin/crates-admin/render_readmes.rs index 72643de80f4..1018b4ce156 100644 --- a/src/bin/crates-admin/render_readmes.rs +++ b/src/bin/crates-admin/render_readmes.rs @@ -10,9 +10,9 @@ use std::{io::Read, path::Path, sync::Arc}; use chrono::{NaiveDateTime, Utc}; use crates_io::storage::Storage; use crates_io::tasks::spawn_blocking; -use crates_io::util::diesel::prelude::*; use crates_io_markdown::text_to_html; use crates_io_tarball::{Manifest, StringOrBool}; +use diesel::prelude::*; use diesel_async::async_connection_wrapper::AsyncConnectionWrapper; use diesel_async::{AsyncPgConnection, RunQueryDsl}; use flate2::read::GzDecoder; diff --git a/src/controllers/crate_owner_invitation.rs b/src/controllers/crate_owner_invitation.rs index ce298f76672..b9b7383faf8 100644 --- a/src/controllers/crate_owner_invitation.rs +++ b/src/controllers/crate_owner_invitation.rs @@ -4,7 +4,6 @@ use crate::auth::Authentication; use crate::controllers::helpers::pagination::{Page, PaginationOptions}; use crate::models::{Crate, CrateOwnerInvitation, Rights, User}; use crate::schema::{crate_owner_invitations, crates, users}; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, forbidden, internal, AppResult}; use crate::util::{BytesRequest, RequestUtils}; use crate::views::{ @@ -17,8 +16,9 @@ use axum_extra::json; use axum_extra::response::ErasedJson; use chrono::{Duration, Utc}; use diesel::pg::Pg; +use diesel::prelude::*; use diesel::sql_types::Bool; -use diesel_async::AsyncPgConnection; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; use http::request::Parts; use indexmap::IndexMap; use std::collections::{HashMap, HashSet}; @@ -90,8 +90,6 @@ async fn prepare_list( filter: ListFilter, conn: &mut AsyncPgConnection, ) -> AppResult { - use diesel_async::RunQueryDsl; - let pagination: PaginationOptions = PaginationOptions::builder() .enable_pages(false) .enable_seek(true) diff --git a/src/controllers/github/secret_scanning.rs b/src/controllers/github/secret_scanning.rs index b42da729322..6f52d6230fa 100644 --- a/src/controllers/github/secret_scanning.rs +++ b/src/controllers/github/secret_scanning.rs @@ -2,7 +2,6 @@ use crate::app::AppState; use crate::email::Email; use crate::models::{ApiToken, User}; use crate::schema::api_tokens; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, AppResult, BoxedAppError}; use crate::util::token::HashedToken; use anyhow::{anyhow, Context}; @@ -10,7 +9,8 @@ use axum::body::Bytes; use axum::Json; use base64::{engine::general_purpose, Engine}; use crates_io_github::GitHubPublicKey; -use diesel_async::AsyncPgConnection; +use diesel::prelude::*; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; use http::HeaderMap; use p256::ecdsa::signature::Verifier; use p256::ecdsa::VerifyingKey; @@ -132,8 +132,6 @@ async fn alert_revoke_token( alert: &GitHubSecretAlert, conn: &mut AsyncPgConnection, ) -> QueryResult { - use diesel_async::RunQueryDsl; - let hashed_token = HashedToken::hash(&alert.token); // Not using `ApiToken::find_by_api_token()` in order to preserve `last_used_at` diff --git a/src/controllers/krate/metadata.rs b/src/controllers/krate/metadata.rs index cbc8652ec83..8be893ba887 100644 --- a/src/controllers/krate/metadata.rs +++ b/src/controllers/krate/metadata.rs @@ -11,7 +11,6 @@ use crate::models::{ Version, VersionOwnerAction, }; use crate::schema::*; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, crate_not_found, AppResult, BoxedAppError}; use crate::util::{redirect, RequestUtils}; use crate::views::{ @@ -21,6 +20,8 @@ use axum::extract::Path; use axum::response::{IntoResponse, Response}; use axum_extra::json; use axum_extra::response::ErasedJson; +use diesel::prelude::*; +use diesel_async::RunQueryDsl; use http::request::Parts; use std::cmp::Reverse; use std::str::FromStr; @@ -32,8 +33,6 @@ pub async fn show_new(app: AppState, req: Parts) -> AppResult { /// Handles the `GET /crates/:crate_id` route. pub async fn show(app: AppState, Path(name): Path, req: Parts) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = app.db_read().await?; let include = req @@ -248,8 +247,6 @@ pub async fn reverse_dependencies( Path(name): Path, req: Parts, ) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = app.db_read().await?; let pagination_options = PaginationOptions::builder().gather(&req)?; diff --git a/src/controllers/krate/owners.rs b/src/controllers/krate/owners.rs index 47a1d2f2ffe..05a3451a5a7 100644 --- a/src/controllers/krate/owners.rs +++ b/src/controllers/krate/owners.rs @@ -2,7 +2,6 @@ use crate::models::{krate::NewOwnerInvite, token::EndpointScope}; use crate::models::{Crate, Owner, Rights, Team, User}; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, crate_not_found, custom, AppResult}; use crate::views::EncodableOwner; use crate::{app::AppState, models::krate::OwnerAddError}; @@ -11,16 +10,15 @@ use axum::extract::Path; use axum::Json; use axum_extra::json; use axum_extra::response::ErasedJson; +use diesel::prelude::*; use diesel_async::scoped_futures::ScopedFutureExt; -use diesel_async::AsyncConnection; +use diesel_async::{AsyncConnection, RunQueryDsl}; use http::request::Parts; use http::StatusCode; use secrecy::{ExposeSecret, SecretString}; /// Handles the `GET /crates/:crate_id/owners` route. pub async fn owners(state: AppState, Path(crate_name): Path) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = state.db_read().await?; let krate: Crate = Crate::by_name(&crate_name) @@ -41,8 +39,6 @@ pub async fn owners(state: AppState, Path(crate_name): Path) -> AppResul /// Handles the `GET /crates/:crate_id/owner_team` route. pub async fn owner_team(state: AppState, Path(crate_name): Path) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = state.db_read().await?; let krate: Crate = Crate::by_name(&crate_name) .first(&mut conn) @@ -61,8 +57,6 @@ pub async fn owner_team(state: AppState, Path(crate_name): Path) -> AppR /// Handles the `GET /crates/:crate_id/owner_user` route. pub async fn owner_user(state: AppState, Path(crate_name): Path) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = state.db_read().await?; let krate: Crate = Crate::by_name(&crate_name) @@ -113,8 +107,6 @@ async fn modify_owners( body: ChangeOwnersRequest, add: bool, ) -> AppResult { - use diesel_async::RunQueryDsl; - let logins = body.owners; // Bound the number of invites processed per request to limit the cost of diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index ae7828dea44..6d17be6883d 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -2,7 +2,6 @@ use crate::app::AppState; use crate::auth::AuthCheck; -use crate::util::diesel::prelude::*; use crate::worker::jobs::{ self, CheckTyposquat, SendPublishNotificationsJob, UpdateDefaultVersion, }; @@ -13,6 +12,7 @@ use chrono::{DateTime, SecondsFormat, Utc}; use crates_io_tarball::{process_tarball, TarballError}; use crates_io_worker::BackgroundJob; use diesel::dsl::{exists, select}; +use diesel::prelude::*; use diesel_async::scoped_futures::ScopedFutureExt; use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl}; use futures_util::TryStreamExt; diff --git a/src/controllers/krate/search.rs b/src/controllers/krate/search.rs index 75d97824f7d..6f975ad01b5 100644 --- a/src/controllers/krate/search.rs +++ b/src/controllers/krate/search.rs @@ -1,12 +1,12 @@ //! Endpoint for searching and discovery functionality use crate::auth::AuthCheck; -use crate::util::diesel::prelude::*; use axum_extra::json; use axum_extra::response::ErasedJson; use diesel::dsl::{exists, sql, InnerJoinQuerySource, LeftJoinQuerySource}; +use diesel::prelude::*; use diesel::sql_types::{Bool, Text}; -use diesel_async::AsyncPgConnection; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; use diesel_full_text_search::*; use http::request::Parts; use std::sync::OnceLock; @@ -46,8 +46,6 @@ use crate::util::RequestUtils; /// function out to cover the different use cases, and create unit tests /// for them. pub async fn search(app: AppState, req: Parts) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = app.db_read().await?; use diesel::sql_types::Float; diff --git a/src/controllers/krate/versions.rs b/src/controllers/krate/versions.rs index 8922767101b..0caa32c941f 100644 --- a/src/controllers/krate/versions.rs +++ b/src/controllers/krate/versions.rs @@ -1,10 +1,10 @@ //! Endpoint for versions of a crate -use crate::util::diesel::prelude::*; use axum::extract::Path; use axum_extra::json; use axum_extra::response::ErasedJson; use diesel::dsl::not; +use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; use futures_util::{future, TryStreamExt}; use http::request::Parts; @@ -93,7 +93,6 @@ async fn list_by_date( req: &Parts, conn: &mut AsyncPgConnection, ) -> AppResult { - use diesel_async::RunQueryDsl; use seek::*; let mut query = versions::table diff --git a/src/controllers/token.rs b/src/controllers/token.rs index e51d328c0c8..bc3825eab53 100644 --- a/src/controllers/token.rs +++ b/src/controllers/token.rs @@ -6,7 +6,6 @@ use crate::views::EncodableApiTokenWithToken; use crate::app::AppState; use crate::auth::AuthCheck; use crate::models::token::{CrateScope, EndpointScope}; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, AppResult}; use axum::extract::{Path, Query}; use axum::response::{IntoResponse, Response}; @@ -16,6 +15,7 @@ use axum_extra::response::ErasedJson; use chrono::NaiveDateTime; use diesel::data_types::PgInterval; use diesel::dsl::{now, IntervalDsl}; +use diesel::prelude::*; use diesel_async::RunQueryDsl; use http::request::Parts; use http::StatusCode; diff --git a/src/controllers/user/me.rs b/src/controllers/user/me.rs index 3386424d593..210db02e4c3 100644 --- a/src/controllers/user/me.rs +++ b/src/controllers/user/me.rs @@ -1,10 +1,11 @@ use crate::auth::AuthCheck; -use crate::util::diesel::prelude::*; use axum::extract::Path; use axum::response::Response; use axum::Json; use axum_extra::json; use axum_extra::response::ErasedJson; +use diesel::prelude::*; +use diesel_async::RunQueryDsl; use http::request::Parts; use std::collections::HashMap; @@ -20,8 +21,6 @@ use crate::views::{EncodableMe, EncodablePrivateUser, EncodableVersion, OwnedCra /// Handles the `GET /me` route. pub async fn me(app: AppState, req: Parts) -> AppResult> { - use diesel_async::RunQueryDsl; - let mut conn = app.db_read_prefer_primary().await?; let user_id = AuthCheck::only_cookie() .check(&req, &mut conn) @@ -105,7 +104,6 @@ pub async fn updates(app: AppState, req: Parts) -> AppResult { /// Handles the `PUT /confirm/:email_token` route pub async fn confirm_user_email(state: AppState, Path(token): Path) -> AppResult { use diesel::update; - use diesel_async::RunQueryDsl; let mut conn = state.db_write().await?; @@ -124,7 +122,6 @@ pub async fn confirm_user_email(state: AppState, Path(token): Path) -> A /// Handles `PUT /me/email_notifications` route pub async fn update_email_notifications(app: AppState, req: BytesRequest) -> AppResult { use diesel::pg::upsert::excluded; - use diesel_async::RunQueryDsl; let (parts, body) = req.0.into_parts(); diff --git a/src/controllers/user/update.rs b/src/controllers/user/update.rs index e3079fe7b2c..9c14a308e2c 100644 --- a/src/controllers/user/update.rs +++ b/src/controllers/user/update.rs @@ -3,11 +3,12 @@ use crate::auth::AuthCheck; use crate::controllers::helpers::ok_true; use crate::models::NewEmail; use crate::schema::{emails, users}; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, server_error, AppResult}; use axum::extract::Path; use axum::response::Response; use axum::Json; +use diesel::prelude::*; +use diesel_async::RunQueryDsl; use http::request::Parts; use lettre::Address; use secrecy::{ExposeSecret, SecretString}; @@ -30,8 +31,6 @@ pub async fn update_user( req: Parts, Json(user_update): Json, ) -> AppResult { - use diesel_async::RunQueryDsl; - let mut conn = state.db_write().await?; let auth = AuthCheck::default().check(&req, &mut conn).await?; diff --git a/src/controllers/version/downloads.rs b/src/controllers/version/downloads.rs index 8e7d5ff299e..28390e2b908 100644 --- a/src/controllers/version/downloads.rs +++ b/src/controllers/version/downloads.rs @@ -6,7 +6,6 @@ use super::version_and_crate; use crate::app::AppState; use crate::models::VersionDownload; use crate::schema::*; -use crate::util::diesel::prelude::*; use crate::util::errors::{version_not_found, AppResult}; use crate::util::{redirect, RequestUtils}; use crate::views::EncodableVersionDownload; @@ -15,6 +14,8 @@ use axum::response::{IntoResponse, Response}; use axum_extra::json; use axum_extra::response::ErasedJson; use chrono::{Duration, NaiveDate, Utc}; +use diesel::prelude::*; +use diesel_async::RunQueryDsl; use http::request::Parts; /// Handles the `GET /crates/:crate_id/:version/download` route. @@ -39,8 +40,6 @@ pub async fn downloads( Path((crate_name, version)): Path<(String, String)>, req: Parts, ) -> AppResult { - use diesel_async::RunQueryDsl; - if semver::Version::parse(&version).is_err() { return Err(version_not_found(&crate_name, &version)); } diff --git a/src/controllers/version/metadata.rs b/src/controllers/version/metadata.rs index fa002a8bc0f..b8104f09e2c 100644 --- a/src/controllers/version/metadata.rs +++ b/src/controllers/version/metadata.rs @@ -10,7 +10,8 @@ use axum_extra::json; use axum_extra::response::ErasedJson; use crates_io_database::schema::{crates, dependencies}; use crates_io_worker::BackgroundJob; -use diesel_async::AsyncPgConnection; +use diesel::prelude::*; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; use http::request::Parts; use http::StatusCode; use serde::Deserialize; @@ -23,7 +24,6 @@ use crate::models::{ }; use crate::rate_limiter::LimitedAction; use crate::schema::versions; -use crate::util::diesel::prelude::*; use crate::util::errors::{bad_request, custom, version_not_found, AppResult}; use crate::views::{EncodableDependency, EncodableVersion}; use crate::worker::jobs::{SyncToGitIndex, SyncToSparseIndex, UpdateDefaultVersion}; @@ -51,8 +51,6 @@ pub async fn dependencies( state: AppState, Path((crate_name, version)): Path<(String, String)>, ) -> AppResult { - use diesel_async::RunQueryDsl; - if semver::Version::parse(&version).is_err() { return Err(version_not_found(&crate_name, &version)); } @@ -182,8 +180,6 @@ pub async fn perform_version_yank_update( yanked: Option, yank_message: Option, ) -> AppResult<()> { - use diesel_async::RunQueryDsl; - let api_token_id = auth.api_token_id(); let user = auth.user(); let owners = krate.owners(conn).await?; diff --git a/src/models/crate_owner_invitation.rs b/src/models/crate_owner_invitation.rs index 5b2aceec85f..dfa2aa744cb 100644 --- a/src/models/crate_owner_invitation.rs +++ b/src/models/crate_owner_invitation.rs @@ -1,13 +1,13 @@ use chrono::{NaiveDateTime, Utc}; +use diesel::prelude::*; use diesel_async::scoped_futures::ScopedFutureExt; -use diesel_async::{AsyncConnection, AsyncPgConnection}; +use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl}; use http::StatusCode; use secrecy::SecretString; use crate::config; use crate::models::{CrateOwner, OwnerKind}; use crate::schema::{crate_owner_invitations, crate_owners, crates}; -use crate::util::diesel::prelude::*; use crate::util::errors::{custom, AppResult}; #[derive(Debug)] @@ -37,8 +37,6 @@ impl CrateOwnerInvitation { conn: &mut AsyncPgConnection, config: &config::Server, ) -> QueryResult { - use diesel_async::RunQueryDsl; - #[derive(Insertable, Clone, Copy, Debug)] #[diesel(table_name = crate_owner_invitations, check_for_backend(diesel::pg::Pg))] struct NewRecord { @@ -99,8 +97,6 @@ impl CrateOwnerInvitation { crate_id: i32, conn: &mut AsyncPgConnection, ) -> QueryResult { - use diesel_async::RunQueryDsl; - crate_owner_invitations::table .find((user_id, crate_id)) .first::(conn) @@ -108,8 +104,6 @@ impl CrateOwnerInvitation { } pub async fn find_by_token(token: &str, conn: &mut AsyncPgConnection) -> QueryResult { - use diesel_async::RunQueryDsl; - crate_owner_invitations::table .filter(crate_owner_invitations::token.eq(token)) .first::(conn) @@ -165,8 +159,6 @@ impl CrateOwnerInvitation { } pub async fn decline(self, conn: &mut AsyncPgConnection) -> QueryResult<()> { - use diesel_async::RunQueryDsl; - // The check to prevent declining expired invitations is *explicitly* missing. We do not // care if an expired invitation is declined, as that just removes the invitation from the // database. diff --git a/src/rate_limiter.rs b/src/rate_limiter.rs index 01cbc1c6748..bf53b3593f4 100644 --- a/src/rate_limiter.rs +++ b/src/rate_limiter.rs @@ -1,11 +1,11 @@ use crate::schema::{publish_limit_buckets, publish_rate_overrides}; use crate::sql::{date_part, floor, greatest, interval_part, least, pg_enum}; -use crate::util::diesel::prelude::*; use crate::util::errors::{AppResult, TooManyRequests}; use chrono::{NaiveDateTime, Utc}; use diesel::dsl::IntervalDsl; +use diesel::prelude::*; use diesel::sql_types::Interval; -use diesel_async::AsyncPgConnection; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; use std::borrow::Cow; use std::collections::HashMap; use std::time::Duration; @@ -110,8 +110,6 @@ impl RateLimiter { now: NaiveDateTime, conn: &mut AsyncPgConnection, ) -> QueryResult { - use diesel_async::RunQueryDsl; - let config = self.config_for_action(performed_action); let refill_rate = (config.rate.as_millis() as i64).milliseconds(); @@ -567,8 +565,6 @@ mod tests { #[tokio::test] async fn override_is_used_instead_of_global_burst_if_present() -> anyhow::Result<()> { - use diesel_async::RunQueryDsl; - let test_db = TestDatabase::new(); let mut conn = test_db.async_connect().await; let now = now(); @@ -605,8 +601,6 @@ mod tests { #[tokio::test] async fn overrides_can_expire() -> anyhow::Result<()> { - use diesel_async::RunQueryDsl; - let test_db = TestDatabase::new(); let mut conn = test_db.async_connect().await; let now = now(); @@ -665,8 +659,6 @@ mod tests { #[tokio::test] async fn override_is_different_for_each_action() -> anyhow::Result<()> { - use diesel_async::RunQueryDsl; - let test_db = TestDatabase::new(); let mut conn = test_db.async_connect().await; let now = now(); @@ -711,7 +703,6 @@ mod tests { async fn new_user(conn: &mut AsyncPgConnection, gh_login: &str) -> QueryResult { use crate::models::NewUser; - use diesel_async::RunQueryDsl; let user = NewUser { gh_login, @@ -730,8 +721,6 @@ mod tests { tokens: i32, now: NaiveDateTime, ) -> QueryResult { - use diesel_async::RunQueryDsl; - diesel::insert_into(publish_limit_buckets::table) .values(Bucket { user_id: new_user(conn, "new_user").await?, diff --git a/src/tests/builders/krate.rs b/src/tests/builders/krate.rs index 8328c343334..e2528daad8e 100644 --- a/src/tests/builders/krate.rs +++ b/src/tests/builders/krate.rs @@ -7,9 +7,9 @@ use crate::{ use super::VersionBuilder; use crate::models::update_default_version; use crate::schema::crate_downloads; -use crate::util::diesel::prelude::*; use chrono::NaiveDateTime; -use diesel_async::AsyncPgConnection; +use diesel::prelude::*; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; /// A builder to create crate records for the purpose of inserting directly into the database. /// If you want to test logic that happens as part of a publish request, use `PublishBuilder` @@ -120,7 +120,6 @@ impl<'a> CrateBuilder<'a> { pub async fn build(mut self, connection: &mut AsyncPgConnection) -> AppResult { use diesel::{insert_into, select, update}; - use diesel_async::RunQueryDsl; let mut krate = self.krate.create(connection, self.owner_id).await?; diff --git a/src/tests/builders/version.rs b/src/tests/builders/version.rs index cef1ab9bbee..2d9b97425f1 100644 --- a/src/tests/builders/version.rs +++ b/src/tests/builders/version.rs @@ -5,9 +5,9 @@ use crate::{ }; use std::collections::BTreeMap; -use crate::util::diesel::prelude::*; use chrono::NaiveDateTime; -use diesel_async::AsyncPgConnection; +use diesel::prelude::*; +use diesel_async::{AsyncPgConnection, RunQueryDsl}; /// A builder to create version records for the purpose of inserting directly into the database. pub struct VersionBuilder { @@ -98,7 +98,6 @@ impl VersionBuilder { connection: &mut AsyncPgConnection, ) -> AppResult { use diesel::insert_into; - use diesel_async::RunQueryDsl; let version = self.num.to_string(); diff --git a/src/typosquat/database.rs b/src/typosquat/database.rs index b01fd0349d2..9dcc4a5f4bc 100644 --- a/src/typosquat/database.rs +++ b/src/typosquat/database.rs @@ -5,7 +5,7 @@ use std::{ collections::{BTreeMap, HashMap, HashSet}, }; -use crate::util::diesel::prelude::*; +use diesel::prelude::*; use diesel_async::{AsyncPgConnection, RunQueryDsl}; use futures_util::TryStreamExt; use typomania::{AuthorSet, Corpus, Package}; diff --git a/src/util/diesel.rs b/src/util/diesel.rs index aa9e587cfd4..eeba46ce551 100644 --- a/src/util/diesel.rs +++ b/src/util/diesel.rs @@ -1,44 +1,5 @@ -use diesel::connection::LoadConnection; -use diesel::pg::Pg; use diesel::result::Error; -pub trait Conn: LoadConnection {} - -impl Conn for T where T: LoadConnection {} - pub fn is_read_only_error(error: &Error) -> bool { matches!(error, Error::DatabaseError(_, info) if info.message().ends_with("read-only transaction")) } - -pub mod prelude { - //! Inline diesel prelude - pub use diesel::associations::{Associations, GroupedBy, Identifiable}; - pub use diesel::connection::Connection; - pub use diesel::deserialize::{Queryable, QueryableByName}; - pub use diesel::expression::IntoSql as _; - pub use diesel::expression::{ - AppearsOnTable, BoxableExpression, Expression, IntoSql, Selectable, SelectableExpression, - }; - - pub use diesel::expression::functions::define_sql_function; - - pub use diesel::expression::SelectableHelper; - pub use diesel::expression_methods::*; - pub use diesel::insertable::Insertable; - pub use diesel::prelude::{ - allow_columns_to_appear_in_same_group_by_clause, allow_tables_to_appear_in_same_query, - joinable, table, - }; - pub use diesel::query_builder::AsChangeset; - pub use diesel::query_builder::DecoratableTarget; - pub use diesel::query_dsl::{BelongingToDsl, CombineDsl, JoinOnDsl, QueryDsl, SaveChangesDsl}; - pub use diesel::query_source::SizeRestrictedColumn as _; - pub use diesel::query_source::{Column, JoinTo, QuerySource, Table}; - pub use diesel::result::{ - ConnectionError, ConnectionResult, OptionalEmptyChangesetExtension, OptionalExtension, - QueryResult, - }; - - pub use diesel::prelude::ExecuteCopyFromDsl; - pub use diesel::prelude::PgConnection; -}