Allow arrays with a non-zero lower bound

When I originally implemented support for arrays, I didn't really
understand what `lower_bound` was, and observed it was always 1. For
that reason, I added the assertion that it must be 1 since I didn't know
if our behavior was correct when it was some number other than 1 (at the
time I thought it was related to multidimensional arrays)

So it turns out that it's literally just the index of the first element
of the array. For whatever reason, PG arrays are 1 indexed by default,
and they have a syntax which lets you have arrays starting at *any*
index. Knowing this, we can safely ignore it.

We will continue to give you a zero indexed `Vec` regardless of what the
lower bound is, since the only other alternative would be to always
deserialize to `Vec<Option<T>>`. If we did this, it would mean that
`ARRAY[1, 2, 3]` would deserialize to `vec![None, Some(1), Some(2),
Some(3)]`. While this is technically more faithful to what PG gives us,
I don't think anybody expects that behavior.
2 files changed
tree: c68dcaa65c4424229b425fb8d05ba181a16e56d9
  1. .github/
  2. bin/
  3. diesel/
  4. diesel_cli/
  5. diesel_compile_tests/
  6. diesel_derives/
  7. diesel_migrations/
  8. diesel_tests/
  9. examples/
  10. guide_drafts/
  11. migrations/
  12. .appveyor.yml
  13. .editorconfig
  14. .env.sample
  15. .gitignore
  16. .travis.yml
  17. Cargo.toml
  18. CHANGELOG.md
  19. clippy.toml
  20. code_of_conduct.md
  21. CONTRIBUTING.md
  22. LICENSE-APACHE
  23. LICENSE-MIT
  24. README.md
README.md

A safe, extensible ORM and Query Builder for Rust

Build Status Appveyor Build Status Gitter Crates.io

API Documentation: latest releasemaster branch

Homepage

Diesel gets rid of the boilerplate for database interaction and eliminates runtime errors without sacrificing performance. It takes full advantage of Rust's type system to create a low overhead query builder that “feels like Rust.”

Getting Started

Find our extensive Getting Started tutorial at https://diesel.rs/guides/getting-started. Guides on more specific features are coming soon.

Getting help

If you run into problems, Diesel has a very active Gitter room. You can come ask for help at gitter.im/diesel-rs/diesel

Code of conduct

Anyone who interacts with Diesel in any space, including but not limited to this GitHub repository, must follow our code of conduct.

License

Licensed under either of these:

Contributing

Unless you explicitly state otherwise, any contribution you intentionally submit for inclusion in the work, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.