New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using `Option<i32>` and `infer_schema!` with SQLite does not work #1359

Closed
flosse opened this Issue Dec 8, 2017 · 2 comments

Comments

Projects
None yet
1 participant
@flosse

flosse commented Dec 8, 2017

Setup

Versions

  • Rust: rustc 1.24.0-nightly (23032d0af 2017-11-30)
  • Diesel: 1.0.0-beta1
  • Database: sqlite
  • Operating System Linux

Feature Flags

  • diesel: "sqlite"
  • diesel_codegen: N/A

Problem Description

Using Option<i32> does not work with infer_schema! :(

This is working:

CREATE TABLE entries (
    id          TEXT NOT NULL,
    created     INTEGER NOT NULL,
    version     INTEGER NOT NULL,
    -- ... some more fields
    PRIMARY KEY (id, version)
);
#[derive(Queryable, Insertable)]
#[table_name = "entries"]
pub struct Entry {
    pub id: String,
    pub created: i32,
    pub version: i32,
   // some more fields
}

but adding a new field Option<i32> causes a problem:

CREATE TABLE entries (
    id          TEXT NOT NULL,
    created     INTEGER NOT NULL,
    version     INTEGER NOT NULL,
    osm_node    INTEGER, -- <-- this is new
    -- ... some more fields
    PRIMARY KEY (id, version)
);
#[derive(Queryable, Insertable)]
#[table_name = "entries"]
pub struct Entry {
    pub id: String,
    pub created: i32,
    pub version: i32,
    pub osm_node: Option<i32>, // <-- this is new
   // some more fields
}

I thought it might be a problem with the primary key so I added the primary_key annotation:

#[derive(Identifiably, Queryable, Insertable)]
#[table_name = "entries"]
#[primary_key(id, version)]
pub struct Entry {
    pub id: String,
    pub created: i32,
    pub version: i32,
    pub osm_node: Option<i32>, // <-- this is new
   // some more fields
}

But this still does not work :(

What is the actual output?

infer_schema!("dotenv:DATABASE_URL");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `(infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license)`
infer_schema!("dotenv:DATABASE_URL");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::expression::NonAggregate` is not implemented for `(infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license)`
infer_schema!("dotenv:DATABASE_URL");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::expression::NonAggregate` is not implemented for `(infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license)`
infer_schema!("dotenv:DATABASE_URL");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::expression::NonAggregate` is not implemented for `(infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license)`
#[derive(Identifiable, Queryable, Insertable)]
                                  ^^^^^^^^^^ the trait `diesel::Insertable<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::table>` is not implemented for `(std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, diesel::expression::bound::Bound<diesel::types::Integer, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, diesel::expression::bound::Bound<diesel::types::Integer, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Integer>, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, diesel::expression::bound::Bound<diesel::types::Bool, &bool>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, diesel::expression::bound::Bound<diesel::types::Float, &f32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, diesel::expression::bound::Bound<diesel::types::Float, &f32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>)`
#[derive(Identifiable, Queryable, Insertable)]
                                  ^^^^^^^^^^ the trait `diesel::Insertable<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::table>` is not implemented for `(std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, diesel::expression::bound::Bound<diesel::types::Integer, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, diesel::expression::bound::Bound<diesel::types::Integer, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Integer>, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, diesel::expression::bound::Bound<diesel::types::Bool, &bool>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, diesel::expression::bound::Bound<diesel::types::Float, &f32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, diesel::expression::bound::Bound<diesel::types::Float, &f32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>)`
#[derive(Identifiable, Queryable, Insertable)]
                                  ^^^^^^^^^^ the trait `diesel::Insertable<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::table>` is not implemented for `(std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::id, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::created, diesel::expression::bound::Bound<diesel::types::Integer, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::version, diesel::expression::bound::Bound<diesel::types::Integer, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::osm_node, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Integer>, &i32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::current, diesel::expression::bound::Bound<diesel::types::Bool, &bool>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::title, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::description, diesel::expression::bound::Bound<diesel::types::Text, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lat, diesel::expression::bound::Bound<diesel::types::Float, &f32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::lng, diesel::expression::bound::Bound<diesel::types::Float, &f32>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::street, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::zip, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::city, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::country, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::email, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::telephone, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::homepage, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>, std::option::Option<diesel::expression::operators::Eq<infrastructure::db::sqlite::schema::__diesel_infer_schema::infer_entries::entries::columns::license, diesel::expression::bound::Bound<diesel::types::Nullable<diesel::types::Text>, &std::string::String>>>)`

Are you seeing any additional errors?

no.

Steps to reproduce

Working files:

Checklist

  • I have already looked over the issue tracker for similar issues.
@flosse

This comment has been minimized.

flosse commented Dec 8, 2017

... ok, I found the mistake via #477 :)

@flosse flosse closed this Dec 8, 2017

@flosse

This comment has been minimized.

flosse commented Dec 8, 2017

A slightly better error message would be great for the future ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment