Skip to content
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

Remove Self: Type bounds in Encode / Decode implementations #1170

Merged
merged 2 commits into from Apr 16, 2021

Conversation

jplatte
Copy link
Contributor

@jplatte jplatte commented Apr 12, 2021

Notes on the first commit:

  • This changes a few panic!s behaviors. I'm assuming not using a format string there was an oversight, rather than those panics really being meant to be catch-able as std::io::Errors.
  • It looks like enter_runtime for tokio was actually wrong before, due to the runtime guard being dropped before calling the function argument.

About the second ("main") commit: I've only tested that the change of the slice implementation doesn't result in compilation errors, nothing more.

@jplatte
Copy link
Contributor Author

jplatte commented Apr 12, 2021

This allows one to work around #298 like this:

#[derive(sqlx::Encode)]
struct Foos<'a>(&'a [Foo]);

impl sqlx::Type<sqlx::Postgres> for Foos<'_> {
    fn type_info() -> PgTypeInfo {
        PgTypeInfo::with_name("_foo")
    }
}

query_as!(
    Whatever,
    "<QUERY with $1 of type foo[]>",
    Foos(&foo_vec) as _,
)

@jplatte jplatte closed this Apr 12, 2021
@jplatte jplatte reopened this Apr 12, 2021
@mehcode
Copy link
Member

mehcode commented Apr 16, 2021

Very cool. Nice stuff @jplatte.

@mehcode mehcode merged commit 73d35e7 into launchbadge:master Apr 16, 2021
@jplatte jplatte deleted the more-general-encode-decode branch April 16, 2021 08:52
@jplatte jplatte restored the more-general-encode-decode branch April 16, 2021 08:56
@pintert3
Copy link

pintert3 commented Jul 4, 2021

Thank you very much for this. At least it eases some hardships

@pintert3
Copy link

pintert3 commented Jul 4, 2021

Does this work for Decode implementations? I'm getting an error :

thread 'main' panicked at 'internal error: entered unreachable code: (bug) use of unresolved type declaration [kind]', /home/pintert3/.cargo/registry/src/github.com-1ecc6299db9ec823/sqlx-core-0.5.5/src/postgres/type_info.rs:744:17
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

@jplatte
Copy link
Contributor Author

jplatte commented Jul 4, 2021

Sounds like you probably used the wrong type name. Is the postgres type a custom one and did you prefix it with an underscore in PgTypeInfo::with_name()?

@pintert3
Copy link

pintert3 commented Jul 4, 2021

Ya, I did. Well to give more context, I made an adhoc type from this query:

        select people.*, (select array(select c from cars c where c.id = $1)) "cars_owned:_" from people where people.id = $1

$1 was taken from a variable id:i32.
So I created a an output type only for getting the result of the query

@jplatte jplatte deleted the more-general-encode-decode branch August 17, 2021 18:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants