I have a repo demonstrating this problem here: https://github.com/carols10cents/diesel-inner-join-mvce
I have these tables:
#[derive(Debug, Clone, Queryable, Identifiable, Associations, AsChangeset)]
pub struct Crate {
pub id: i32,
pub name: String,
}
#[derive(Clone, Identifiable, Queryable, Associations, Debug)]
#[belongs_to(Crate)]
pub struct Version {
pub id: i32,
pub crate_id: i32,
}
#[derive(Insertable, Identifiable, Queryable, Associations, Debug)]
#[belongs_to(Version)]
#[table_name = "readme_rendering"]
#[primary_key(version_id)]
struct ReadmeRendering {
version_id: i32,
rendered_at: String,
}
And I would like to write diesel that generates the equivalent of:
SELECT * FROM versions
INNER JOIN readme_rendering ON versions.id = readme_rendering.version_id
INNER JOIN crates ON versions.crate_id = crates.id;
This looks similar to the example with users, posts, and comments in the docs that says users.inner_join(posts).inner_join(comments) generates this sql:
SELECT * FROM users
INNER JOIN posts ON posts.user_id = users.id
INNER JOIN comments ON comments.user_id = users.id
So I have this query:
let versions_to_readme_and_crates_doesnt_work = versions::table
.inner_join(readme_rendering::table)
.inner_join(crates::table)
.select((versions::all_columns, readme_rendering::rendered_at, crates::name))
.load::<(Version, Option<String>, Option<String>)>(&conn)
.expect("error loading versions_to_readme_and_crates_doesnt_work");
I expect this to compile and run the sql above.
I get this compilation error, which seems to indicate diesel is trying to join crates and readme_rendering?
error[E0277]: the trait bound `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table: diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>` is not satisfied
--> src/main.rs:62:10
|
62 | .inner_join(crates::table)
| ^^^^^^^^^^ the trait `diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>` is not implemented for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table`
Full errors behind toggle:
error[E0277]: the trait bound `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table: diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>` is not satisfied
--> src/main.rs:62:10
|
62 | .inner_join(crates::table)
| ^^^^^^^^^^ the trait `diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>` is not implemented for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table`
|
= help: the following implementations were found:
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_source::joins::Join<Left, Right, Kind>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_source::joins::JoinOn<Join, On>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_builder::SelectStatement<F, S, D, W, O, L, Of, G>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_builder::BoxedSelectStatement<'a, QS, ST, DB>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<__diesel_infer_schema::infer_versions::versions::table>>
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` for `__diesel_infer_schema::infer_crates::crates::table`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` for `diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `(__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id, __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at)`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), (__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id, __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at), (__diesel_infer_schema::infer_crates::crates::columns::id, __diesel_infer_schema::infer_crates::crates::columns::name))`
= note: required because of the requirements on the impl of `diesel::QuerySource` for `diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::QuerySource` for `diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>`
= note: required because of the requirements on the impl of `diesel::query_builder::select_clause::SelectClauseExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `diesel::query_builder::select_clause::DefaultSelectClause`
= note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
= note: required because of the requirements on the impl of `diesel::query_builder::AsQuery` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
= note: required because of the requirements on the impl of `diesel::InternalJoinDsl<__diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>>`
error[E0277]: the trait bound `__diesel_infer_schema::infer_crates::crates::table: diesel::JoinTo<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` is not satisfied
--> src/main.rs:62:10
|
62 | .inner_join(crates::table)
| ^^^^^^^^^^ the trait `diesel::JoinTo<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` is not implemented for `__diesel_infer_schema::infer_crates::crates::table`
|
= help: the following implementations were found:
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_source::joins::Join<Left, Right, Kind>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_source::joins::JoinOn<Join, On>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_builder::SelectStatement<F, S, D, W, O, L, Of, G>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_builder::BoxedSelectStatement<'a, QS, ST, DB>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<__diesel_infer_schema::infer_versions::versions::table>>
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `__diesel_infer_schema::infer_crates::crates::columns::id`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `(__diesel_infer_schema::infer_crates::crates::columns::id, __diesel_infer_schema::infer_crates::crates::columns::name)`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), (__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id, __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at), (__diesel_infer_schema::infer_crates::crates::columns::id, __diesel_infer_schema::infer_crates::crates::columns::name))`
= note: required because of the requirements on the impl of `diesel::QuerySource` for `diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::QuerySource` for `diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>`
= note: required because of the requirements on the impl of `diesel::query_builder::select_clause::SelectClauseExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `diesel::query_builder::select_clause::DefaultSelectClause`
= note: required because of the requirements on the impl of `diesel::query_builder::Query` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
= note: required because of the requirements on the impl of `diesel::query_builder::AsQuery` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
= note: required because of the requirements on the impl of `diesel::InternalJoinDsl<__diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>>`
error[E0277]: the trait bound `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table: diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>` is not satisfied
--> src/main.rs:63:10
|
63 | .select((versions::all_columns, readme_rendering::rendered_at, crates::name))
| ^^^^^^ the trait `diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>` is not implemented for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table`
|
= help: the following implementations were found:
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_source::joins::Join<Left, Right, Kind>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_source::joins::JoinOn<Join, On>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_builder::SelectStatement<F, S, D, W, O, L, Of, G>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<diesel::query_builder::BoxedSelectStatement<'a, QS, ST, DB>>>
<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table as diesel::JoinTo<__diesel_infer_schema::infer_versions::versions::table>>
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` for `__diesel_infer_schema::infer_crates::crates::table`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` for `diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)`
= note: required because of the requirements on the impl of `diesel::query_builder::select_clause::SelectClauseExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>`
= note: required because of the requirements on the impl of `diesel::SelectDsl<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
error[E0277]: the trait bound `__diesel_infer_schema::infer_crates::crates::table: diesel::JoinTo<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` is not satisfied
--> src/main.rs:63:10
|
63 | .select((versions::all_columns, readme_rendering::rendered_at, crates::name))
| ^^^^^^ the trait `diesel::JoinTo<__diesel_infer_schema::infer_readme_rendering::readme_rendering::table>` is not implemented for `__diesel_infer_schema::infer_crates::crates::table`
|
= help: the following implementations were found:
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_source::joins::Join<Left, Right, Kind>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_source::joins::JoinOn<Join, On>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_builder::SelectStatement<F, S, D, W, O, L, Of, G>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<diesel::query_builder::BoxedSelectStatement<'a, QS, ST, DB>>>
<__diesel_infer_schema::infer_crates::crates::table as diesel::JoinTo<__diesel_infer_schema::infer_versions::versions::table>>
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `__diesel_infer_schema::infer_readme_rendering::readme_rendering::table`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>`
= note: required because of the requirements on the impl of `diesel::query_source::AppearsInFromClause<__diesel_infer_schema::infer_crates::crates::table>` for `diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>>` for `__diesel_infer_schema::infer_crates::crates::columns::name`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `__diesel_infer_schema::infer_crates::crates::columns::name`
= note: required because of the requirements on the impl of `diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)`
= note: required because of the requirements on the impl of `diesel::query_builder::select_clause::SelectClauseExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>` for `diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>`
= note: required because of the requirements on the impl of `diesel::SelectDsl<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>` for `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
error[E0599]: no method named `load` found for type `diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>>` in the current scope
--> src/main.rs:64:10
|
64 | .load::<(Version, Option<String>, Option<String>)>(&conn)
| ^^^^
|
= note: the method `load` exists but the following trait bounds were not satisfied:
`diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::AsQuery`
`_ : diesel::query_builder::QueryFragment<_>`
`diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)> : diesel::query_builder::select_clause::SelectClauseExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
`((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name) : diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
`diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`&diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::AsQuery`
`_ : diesel::query_builder::QueryFragment<_>`
`&diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)> : diesel::query_builder::select_clause::SelectClauseExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
`((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name) : diesel::SelectableExpression<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>>`
`&diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`&mut diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::AsQuery`
`_ : diesel::query_builder::QueryFragment<_>`
`_ : diesel::query_builder::QueryId`
`&mut diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`&mut diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
`&mut diesel::query_builder::SelectStatement<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<__diesel_infer_schema::infer_versions::versions::table, __diesel_infer_schema::infer_readme_rendering::readme_rendering::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::version_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::id>>>, __diesel_infer_schema::infer_crates::crates::table, diesel::query_source::joins::Inner>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_versions::versions::columns::crate_id>, diesel::expression::nullable::Nullable<__diesel_infer_schema::infer_crates::crates::columns::id>>>, diesel::query_builder::select_clause::SelectClause<((__diesel_infer_schema::infer_versions::versions::columns::id, __diesel_infer_schema::infer_versions::versions::columns::crate_id), __diesel_infer_schema::infer_readme_rendering::readme_rendering::columns::rendered_at, __diesel_infer_schema::infer_crates::crates::columns::name)>> : diesel::query_builder::Query`
Nope. There's other code in the repo that shows versions joining to crates works fine, and versions joining to readme_rendering works fine.
Clone https://github.com/carols10cents/diesel-inner-join-mvce and cargo run; you should get the errors shown above.
Thanks for great issue! You don't see a repro repo every day :)
…and I'm make sure to actually look at that later (😅), but for now, what this reminds of is a recent change in diesel 0.16: The joinable! macro. By the way, did you upgrade diesel_codegen and friends to 0.16 as well?
So, my first try would be to add
joinable!(crates -> readme_rendering (crate_id));
or similar. Same for any other tables that have similar errors. If that works: Great! We probably missed a foreign key in the inference (I assume you specifically defined the foreign keys everywhere). This is a bug and we'll fix it.
Am 25.08.2017 um 17:51 schrieb Carol (Nichols || Goulding) notifications@github.com:
Setup
I have a repo demonstrating this problem here: https://github.com/carols10cents/diesel-inner-join-mvce
Versions
• Rust: stable 1.19.0
• Diesel: 0.16.0
• Database: postgres 9.6.1
• Operating System macOS Sierra
Feature Flags• diesel: postgres
• diesel_codegen: postgres
Problem DescriptionWhat are you trying to accomplish?
I have these tables:
[derive(Debug, Clone, Queryable, Identifiable, Associations, AsChangeset)]
pub struct Crate {
pub id: i32,
pub name: String,
}[derive(Clone, Identifiable, Queryable, Associations, Debug)]
[belongs_to(Crate)]
pub struct Version {
pub id: i32,
pub crate_id: i32,
}[derive(Insertable, Identifiable, Queryable, Associations, Debug)]
[belongs_to(Version)]
[table_name = "readme_rendering"]
[primary_key(version_id)]
struct ReadmeRendering {
version_id: i32,
rendered_at: String,
}And I would like to write diesel that generates the equivalent of:
SELECT * FROM versions
INNER JOIN readme_rendering ON versions.id = readme_rendering.version_id
INNER JOIN crates on versions.crate_id = crates.id;This looks similar to the example with users, posts, and comments in the docs that says users.inner_join(posts).inner_join(comments) generates this sql:
SELECT * FROM users
INNER JOIN posts ON posts.user_id = users.id
INNER JOIN comments ON comments.user_id = users.idSo I have this query:
let versions_to_readme_and_crates_doesnt_work = versions::table .inner_join(readme_rendering::table) .inner_join(crates::table) .select((versions::all_columns, readme_rendering::rendered_at, crates::name)) .load::<(Version, Option<String>, Option<String>)>(&conn) .expect("error loading versions_to_readme_and_crates_doesnt_work");What is the expected output?
I expect this to compile and run the sql above.
What is the actual output?
I get this compilation error, which seems to indicate diesel is trying to join crates and readme_rendering?
error[E0277]: the trait bound
__diesel_infer_schema::infer_readme_rendering::readme_rendering::table: diesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>is not satisfied
--> src/main.rs:62:10
|
62 | .inner_join(crates::table)
| ^^^^^^^^^^ the traitdiesel::JoinTo<__diesel_infer_schema::infer_crates::crates::table>is not implemented for__diesel_infer_schema::infer_readme_rendering::readme_rendering::tableFull errors behind toggle:
Are you seeing any additional errors?
Nope. There's other code in the repo that shows versions joining to crates works fine, and versions joining to readme_rendering works fine.
Steps to reproduce
Clone https://github.com/carols10cents/diesel-inner-join-mvce and cargo run; you should get the errors shown above.
Checklist
• I have already looked over the issue tracker for similar issues.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.
Hey, thanks for the awesome bug report with a repository and everything ❤️
You need to add a enable_multi_table_joins!(crates, readme_rendering); to your code as those are not inferred by diesel.
Ha! Forget everything I said and only believe Bastien from now on.
Am 25.08.2017 um 18:06 schrieb Bastien Orivel notifications@github.com:
Hey, thanks for the awesome bug report with a repository and everything ❤️
You need to add a enable_multi_table_joins!(crates, readme_rendering); to your code as those are not inferred by diesel.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.
Hey, thanks for the awesome bug report with a repository and everything ❤️
You're welcome! I try :)
You need to add a enable_multi_table_joins!(crates, readme_rendering); to your code as those are not inferred by diesel.
I read the docs for that, but I didn't think that applied because i'm not trying to do crates.inner_join(readme_rendering) at all :-/ Why do I need that if I'm only trying to join each of those to version but not to each other?
// This would be required to do `users.inner_join(posts.inner_join(comments))`
// if there were an association between users and posts, and an association
// between posts and comments, but no association between users and comments
but that's not the join i'm trying to do, i'm trying to do the equivalent of users.inner_join(posts).inner_join(comments), which I thought was a different situation according to the inner_join docs....
Ok, I just tried it and the code compiles and runs the query i'm expecting... I think this is a documentation bug then :) The comment on the enable_multi_table_joins! macro made me think it didn't apply to my situation :-/
I have the same problme, when i do with inner_join
Most helpful comment
Ha! Forget everything I said and only believe Bastien from now on.