Full Code of launchbadge/sqlx for AI

main 05c8dc14a82c cached
690 files
3.7 MB
1.0M tokens
5028 symbols
1 requests
Download .txt
Showing preview only (4,027K chars total). Download the full file or copy to clipboard to get everything.
Repository: launchbadge/sqlx
Branch: main
Commit: 05c8dc14a82c
Files: 690
Total size: 3.7 MB

Directory structure:
gitextract_7wdu157x/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── examples.yml
│       ├── sqlx-cli.yml
│       └── sqlx.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── FAQ.md
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── benches/
│   └── sqlite/
│       └── describe.rs
├── clippy.toml
├── contrib/
│   └── ide/
│       └── vscode/
│           └── settings.json
├── examples/
│   ├── .gitignore
│   ├── mysql/
│   │   └── todos/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       ├── migrations/
│   │       │   └── 20200718111257_todos.sql
│   │       └── src/
│   │           └── main.rs
│   ├── postgres/
│   │   ├── axum-social-with-tests/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   ├── 1_user.sql
│   │   │   │   ├── 2_post.sql
│   │   │   │   └── 3_comment.sql
│   │   │   ├── src/
│   │   │   │   ├── http/
│   │   │   │   │   ├── error.rs
│   │   │   │   │   ├── mod.rs
│   │   │   │   │   ├── post/
│   │   │   │   │   │   ├── comment.rs
│   │   │   │   │   │   └── mod.rs
│   │   │   │   │   └── user.rs
│   │   │   │   ├── lib.rs
│   │   │   │   ├── main.rs
│   │   │   │   └── password.rs
│   │   │   └── tests/
│   │   │       ├── comment.rs
│   │   │       ├── common.rs
│   │   │       ├── fixtures/
│   │   │       │   ├── comments.sql
│   │   │       │   ├── posts.sql
│   │   │       │   └── users.sql
│   │   │       ├── post.rs
│   │   │       └── user.rs
│   │   ├── chat/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── files/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   └── 20220712221654_files.sql
│   │   │   ├── queries/
│   │   │   │   ├── insert_seed_data.sql
│   │   │   │   └── list_all_posts.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── json/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   └── 20200824190010_json.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listen/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── mockable-todos/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── docker-compose.yml
│   │   │   ├── migrations/
│   │   │   │   └── 20200718111257_todos.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── multi-database/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── accounts/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   ├── 02_account.sql
│   │   │   │   │   └── 03_session.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── payments/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   └── 02_payment.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── sqlx.toml
│   │   │   └── src/
│   │   │       ├── main.rs
│   │   │       └── migrations/
│   │   │           ├── 01_setup.sql
│   │   │           └── 02_purchase.sql
│   │   ├── multi-tenant/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── accounts/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   ├── 02_account.sql
│   │   │   │   │   └── 03_session.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── payments/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   └── 02_payment.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── sqlx.toml
│   │   │   └── src/
│   │   │       ├── main.rs
│   │   │       └── migrations/
│   │   │           ├── 01_setup.sql
│   │   │           └── 02_purchase.sql
│   │   ├── preferred-crates/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── sqlx.toml
│   │   │   ├── src/
│   │   │   │   ├── main.rs
│   │   │   │   └── migrations/
│   │   │   │       ├── 01_setup.sql
│   │   │   │       └── 02_users.sql
│   │   │   ├── uses-rust-decimal/
│   │   │   │   ├── Cargo.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   └── uses-time/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── lib.rs
│   │   ├── todos/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   └── 20200718111257_todos.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── transaction/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       ├── migrations/
│   │       │   └── 20200718111257_todos.sql
│   │       └── src/
│   │           └── main.rs
│   ├── sqlite/
│   │   ├── extension/
│   │   │   ├── Cargo.toml
│   │   │   ├── download-extension.sh
│   │   │   ├── migrations/
│   │   │   │   └── 20250203094951_addresses.sql
│   │   │   ├── sqlx.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── todos/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       ├── migrations/
│   │       │   └── 20200718111257_todos.sql
│   │       └── src/
│   │           └── main.rs
│   └── x.py
├── gen-changelog.sh
├── rust-toolchain.toml
├── sqlx-cli/
│   ├── Cargo.toml
│   ├── README.md
│   ├── src/
│   │   ├── bin/
│   │   │   ├── cargo-sqlx.rs
│   │   │   └── sqlx.rs
│   │   ├── completions.rs
│   │   ├── database.rs
│   │   ├── lib.rs
│   │   ├── metadata.rs
│   │   ├── migrate.rs
│   │   ├── opt.rs
│   │   └── prepare.rs
│   └── tests/
│       ├── add.rs
│       ├── assets/
│       │   ├── config_default_type_reversible.toml
│       │   ├── config_default_versioning_sequential.toml
│       │   ├── config_default_versioning_timestamp.toml
│       │   └── sample_metadata.json
│       ├── common/
│       │   └── mod.rs
│       ├── ignored-chars/
│       │   ├── BOM/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   ├── CRLF/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   ├── LF/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   ├── oops-all-tabs/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   └── sqlx.toml
│       ├── migrate.rs
│       └── migrations_reversible/
│           ├── 20230101000000_test1.down.sql
│           ├── 20230101000000_test1.up.sql
│           ├── 20230201000000_test2.down.sql
│           ├── 20230201000000_test2.up.sql
│           ├── 20230301000000_test3.down.sql
│           ├── 20230301000000_test3.up.sql
│           ├── 20230401000000_test4.down.sql
│           ├── 20230401000000_test4.up.sql
│           ├── 20230501000000_test5.down.sql
│           └── 20230501000000_test5.up.sql
├── sqlx-core/
│   ├── Cargo.toml
│   └── src/
│       ├── acquire.rs
│       ├── any/
│       │   ├── arguments.rs
│       │   ├── column.rs
│       │   ├── connection/
│       │   │   ├── backend.rs
│       │   │   ├── executor.rs
│       │   │   └── mod.rs
│       │   ├── database.rs
│       │   ├── driver.rs
│       │   ├── error.rs
│       │   ├── kind.rs
│       │   ├── migrate.rs
│       │   ├── mod.rs
│       │   ├── options.rs
│       │   ├── query_result.rs
│       │   ├── row.rs
│       │   ├── statement.rs
│       │   ├── transaction.rs
│       │   ├── type_info.rs
│       │   ├── types/
│       │   │   ├── blob.rs
│       │   │   ├── bool.rs
│       │   │   ├── float.rs
│       │   │   ├── int.rs
│       │   │   ├── mod.rs
│       │   │   └── str.rs
│       │   └── value.rs
│       ├── arguments.rs
│       ├── column.rs
│       ├── common/
│       │   ├── mod.rs
│       │   └── statement_cache.rs
│       ├── config/
│       │   ├── common.rs
│       │   ├── drivers.rs
│       │   ├── macros.rs
│       │   ├── migrate.rs
│       │   ├── mod.rs
│       │   ├── reference.toml
│       │   └── tests.rs
│       ├── connection.rs
│       ├── database.rs
│       ├── decode.rs
│       ├── describe.rs
│       ├── encode.rs
│       ├── error.rs
│       ├── executor.rs
│       ├── ext/
│       │   ├── async_stream.rs
│       │   ├── mod.rs
│       │   └── ustr.rs
│       ├── from_row.rs
│       ├── fs.rs
│       ├── io/
│       │   ├── buf.rs
│       │   ├── buf_mut.rs
│       │   ├── buf_stream.rs
│       │   ├── decode.rs
│       │   ├── encode.rs
│       │   ├── mod.rs
│       │   ├── read_buf.rs
│       │   └── write_and_flush.rs
│       ├── lib.rs
│       ├── logger.rs
│       ├── migrate/
│       │   ├── error.rs
│       │   ├── migrate.rs
│       │   ├── migration.rs
│       │   ├── migration_type.rs
│       │   ├── migrator.rs
│       │   ├── mod.rs
│       │   └── source.rs
│       ├── net/
│       │   ├── mod.rs
│       │   ├── socket/
│       │   │   ├── buffered.rs
│       │   │   └── mod.rs
│       │   └── tls/
│       │       ├── mod.rs
│       │       ├── tls_native_tls.rs
│       │       ├── tls_rustls.rs
│       │       └── util.rs
│       ├── pool/
│       │   ├── connection.rs
│       │   ├── executor.rs
│       │   ├── inner.rs
│       │   ├── maybe.rs
│       │   ├── mod.rs
│       │   └── options.rs
│       ├── query.rs
│       ├── query_as.rs
│       ├── query_builder.rs
│       ├── query_scalar.rs
│       ├── raw_sql.rs
│       ├── row.rs
│       ├── rt/
│       │   ├── mod.rs
│       │   ├── rt_async_io/
│       │   │   ├── mod.rs
│       │   │   ├── socket.rs
│       │   │   └── timeout.rs
│       │   └── rt_tokio/
│       │       ├── mod.rs
│       │       └── socket.rs
│       ├── sql_str.rs
│       ├── statement.rs
│       ├── sync.rs
│       ├── testing/
│       │   ├── fixtures.rs
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── bstr.rs
│       │   ├── json.rs
│       │   ├── mod.rs
│       │   ├── non_zero.rs
│       │   └── text.rs
│       └── value.rs
├── sqlx-macros/
│   ├── Cargo.toml
│   └── src/
│       └── lib.rs
├── sqlx-macros-core/
│   ├── Cargo.toml
│   ├── clippy.toml
│   └── src/
│       ├── common.rs
│       ├── database/
│       │   ├── impls.rs
│       │   └── mod.rs
│       ├── derives/
│       │   ├── attributes.rs
│       │   ├── decode.rs
│       │   ├── encode.rs
│       │   ├── mod.rs
│       │   ├── row.rs
│       │   └── type.rs
│       ├── lib.rs
│       ├── migrate.rs
│       ├── query/
│       │   ├── args.rs
│       │   ├── cache.rs
│       │   ├── data.rs
│       │   ├── input.rs
│       │   ├── metadata.rs
│       │   ├── mod.rs
│       │   └── output.rs
│       └── test_attr.rs
├── sqlx-mysql/
│   ├── Cargo.toml
│   └── src/
│       ├── any.rs
│       ├── arguments.rs
│       ├── collation.rs
│       ├── column.rs
│       ├── connection/
│       │   ├── auth.rs
│       │   ├── establish.rs
│       │   ├── executor.rs
│       │   ├── mod.rs
│       │   ├── stream.rs
│       │   └── tls.rs
│       ├── database.rs
│       ├── error.rs
│       ├── io/
│       │   ├── buf.rs
│       │   ├── buf_mut.rs
│       │   └── mod.rs
│       ├── lib.rs
│       ├── migrate.rs
│       ├── options/
│       │   ├── connect.rs
│       │   ├── mod.rs
│       │   ├── parse.rs
│       │   └── ssl_mode.rs
│       ├── protocol/
│       │   ├── auth.rs
│       │   ├── capabilities.rs
│       │   ├── connect/
│       │   │   ├── auth_switch.rs
│       │   │   ├── handshake.rs
│       │   │   ├── handshake_response.rs
│       │   │   ├── mod.rs
│       │   │   └── ssl_request.rs
│       │   ├── mod.rs
│       │   ├── packet.rs
│       │   ├── response/
│       │   │   ├── eof.rs
│       │   │   ├── err.rs
│       │   │   ├── mod.rs
│       │   │   ├── ok.rs
│       │   │   └── status.rs
│       │   ├── row.rs
│       │   ├── statement/
│       │   │   ├── execute.rs
│       │   │   ├── mod.rs
│       │   │   ├── prepare.rs
│       │   │   ├── prepare_ok.rs
│       │   │   ├── row.rs
│       │   │   └── stmt_close.rs
│       │   └── text/
│       │       ├── column.rs
│       │       ├── mod.rs
│       │       ├── ping.rs
│       │       ├── query.rs
│       │       ├── quit.rs
│       │       └── row.rs
│       ├── query_result.rs
│       ├── row.rs
│       ├── statement.rs
│       ├── testing/
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── bigdecimal.rs
│       │   ├── bool.rs
│       │   ├── bytes.rs
│       │   ├── chrono.rs
│       │   ├── float.rs
│       │   ├── inet.rs
│       │   ├── int.rs
│       │   ├── json.rs
│       │   ├── mod.rs
│       │   ├── mysql_time.rs
│       │   ├── rust_decimal.rs
│       │   ├── str.rs
│       │   ├── text.rs
│       │   ├── time.rs
│       │   ├── uint.rs
│       │   └── uuid.rs
│       └── value.rs
├── sqlx-postgres/
│   ├── Cargo.toml
│   └── src/
│       ├── advisory_lock.rs
│       ├── any.rs
│       ├── arguments.rs
│       ├── bind_iter.rs
│       ├── column.rs
│       ├── connection/
│       │   ├── describe.rs
│       │   ├── establish.rs
│       │   ├── executor.rs
│       │   ├── mod.rs
│       │   ├── resolve.rs
│       │   ├── sasl.rs
│       │   ├── stream.rs
│       │   └── tls.rs
│       ├── copy.rs
│       ├── database.rs
│       ├── error.rs
│       ├── io/
│       │   ├── buf_mut.rs
│       │   └── mod.rs
│       ├── lib.rs
│       ├── listener.rs
│       ├── message/
│       │   ├── authentication.rs
│       │   ├── backend_key_data.rs
│       │   ├── bind.rs
│       │   ├── close.rs
│       │   ├── command_complete.rs
│       │   ├── copy.rs
│       │   ├── data_row.rs
│       │   ├── describe.rs
│       │   ├── execute.rs
│       │   ├── flush.rs
│       │   ├── mod.rs
│       │   ├── notification.rs
│       │   ├── parameter_description.rs
│       │   ├── parameter_status.rs
│       │   ├── parse.rs
│       │   ├── parse_complete.rs
│       │   ├── password.rs
│       │   ├── query.rs
│       │   ├── ready_for_query.rs
│       │   ├── response.rs
│       │   ├── row_description.rs
│       │   ├── sasl.rs
│       │   ├── ssl_request.rs
│       │   ├── startup.rs
│       │   ├── sync.rs
│       │   └── terminate.rs
│       ├── migrate.rs
│       ├── options/
│       │   ├── connect.rs
│       │   ├── doc.md
│       │   ├── mod.rs
│       │   ├── parse.rs
│       │   ├── pgpass.rs
│       │   └── ssl_mode.rs
│       ├── query_result.rs
│       ├── row.rs
│       ├── statement.rs
│       ├── testing/
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── array.rs
│       │   ├── bigdecimal-range.md
│       │   ├── bigdecimal.rs
│       │   ├── bit_vec.rs
│       │   ├── bool.rs
│       │   ├── bytes.rs
│       │   ├── chrono/
│       │   │   ├── date.rs
│       │   │   ├── datetime.rs
│       │   │   ├── mod.rs
│       │   │   └── time.rs
│       │   ├── citext.rs
│       │   ├── cube.rs
│       │   ├── float.rs
│       │   ├── geometry/
│       │   │   ├── box.rs
│       │   │   ├── circle.rs
│       │   │   ├── line.rs
│       │   │   ├── line_segment.rs
│       │   │   ├── mod.rs
│       │   │   ├── path.rs
│       │   │   ├── point.rs
│       │   │   └── polygon.rs
│       │   ├── hstore.rs
│       │   ├── int.rs
│       │   ├── interval.rs
│       │   ├── ipnet/
│       │   │   ├── ipaddr.rs
│       │   │   ├── ipnet.rs
│       │   │   └── mod.rs
│       │   ├── ipnetwork/
│       │   │   ├── ipaddr.rs
│       │   │   ├── ipnetwork.rs
│       │   │   └── mod.rs
│       │   ├── json.rs
│       │   ├── lquery.rs
│       │   ├── ltree.rs
│       │   ├── mac_address.rs
│       │   ├── mod.rs
│       │   ├── money.rs
│       │   ├── numeric.rs
│       │   ├── oid.rs
│       │   ├── range.rs
│       │   ├── record.rs
│       │   ├── rust_decimal-range.md
│       │   ├── rust_decimal.rs
│       │   ├── str.rs
│       │   ├── text.rs
│       │   ├── time/
│       │   │   ├── date.rs
│       │   │   ├── datetime.rs
│       │   │   ├── mod.rs
│       │   │   └── time.rs
│       │   ├── time_tz.rs
│       │   ├── tuple.rs
│       │   ├── uuid.rs
│       │   └── void.rs
│       └── value.rs
├── sqlx-sqlite/
│   ├── Cargo.toml
│   └── src/
│       ├── any.rs
│       ├── arguments.rs
│       ├── column.rs
│       ├── connection/
│       │   ├── collation.rs
│       │   ├── describe.rs
│       │   ├── deserialize.rs
│       │   ├── establish.rs
│       │   ├── execute.rs
│       │   ├── executor.rs
│       │   ├── explain.rs
│       │   ├── handle.rs
│       │   ├── intmap.rs
│       │   ├── mod.rs
│       │   ├── preupdate_hook.rs
│       │   └── worker.rs
│       ├── database.rs
│       ├── error.rs
│       ├── lib.rs
│       ├── logger.rs
│       ├── migrate.rs
│       ├── options/
│       │   ├── auto_vacuum.rs
│       │   ├── connect.rs
│       │   ├── journal_mode.rs
│       │   ├── locking_mode.rs
│       │   ├── mod.rs
│       │   ├── parse.rs
│       │   └── synchronous.rs
│       ├── query_result.rs
│       ├── regexp.rs
│       ├── row.rs
│       ├── statement/
│       │   ├── handle.rs
│       │   ├── mod.rs
│       │   ├── unlock_notify.rs
│       │   └── virtual.rs
│       ├── testing/
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── bool.rs
│       │   ├── bytes.rs
│       │   ├── chrono.rs
│       │   ├── float.rs
│       │   ├── int.rs
│       │   ├── json.rs
│       │   ├── mod.rs
│       │   ├── str.rs
│       │   ├── text.rs
│       │   ├── time.rs
│       │   ├── uint.rs
│       │   └── uuid.rs
│       └── value.rs
├── sqlx-test/
│   ├── Cargo.toml
│   └── src/
│       └── lib.rs
├── src/
│   ├── any/
│   │   ├── install_drivers_note.md
│   │   └── mod.rs
│   ├── lib.md
│   ├── lib.rs
│   ├── macros/
│   │   ├── mod.rs
│   │   └── test.md
│   ├── spec_error.rs
│   └── ty_match.rs
└── tests/
    ├── .dockerignore
    ├── .env
    ├── .gitignore
    ├── README.md
    ├── any/
    │   ├── any.rs
    │   └── pool.rs
    ├── certs/
    │   ├── .gitignore
    │   ├── README.md
    │   ├── ca.crt
    │   ├── client.crt
    │   ├── keys/
    │   │   ├── ca.key
    │   │   ├── client.key
    │   │   └── server.key
    │   └── server.crt
    ├── docker-compose.yml
    ├── docker.py
    ├── fixtures/
    │   ├── mysql/
    │   │   ├── posts.sql
    │   │   └── users.sql
    │   └── postgres/
    │       ├── posts.sql
    │       └── users.sql
    ├── migrate/
    │   ├── macro.rs
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   └── migrations_simple/
    │       ├── 20220721115250_add_test_table.sql
    │       └── 20220721115524_convert_type.sql
    ├── mssql/
    │   ├── Dockerfile
    │   ├── configure-db.sh
    │   ├── describe.rs
    │   ├── entrypoint.sh
    │   ├── macros.rs
    │   ├── mssql-2017.dockerfile
    │   ├── mssql.rs
    │   ├── setup.sql
    │   └── types.rs
    ├── mysql/
    │   ├── Dockerfile
    │   ├── derives.rs
    │   ├── describe.rs
    │   ├── error.rs
    │   ├── fixtures/
    │   │   ├── comments.sql
    │   │   ├── posts.sql
    │   │   └── users.sql
    │   ├── macros.rs
    │   ├── migrate.rs
    │   ├── migrations/
    │   │   ├── 1_user.sql
    │   │   ├── 2_post.sql
    │   │   └── 3_comment.sql
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   ├── migrations_simple/
    │   │   ├── 20220721115250_add_test_table.sql
    │   │   └── 20220721115524_convert_type.sql
    │   ├── my.cnf
    │   ├── mysql.rs
    │   ├── rustsec.rs
    │   ├── setup-mariadb.sql
    │   ├── setup.sql
    │   ├── test-attr.rs
    │   └── types.rs
    ├── postgres/
    │   ├── Dockerfile
    │   ├── derives.rs
    │   ├── describe.rs
    │   ├── error.rs
    │   ├── fixtures/
    │   │   ├── comments.sql
    │   │   ├── posts.sql
    │   │   ├── rustsec/
    │   │   │   └── 2024_0363.sql
    │   │   └── users.sql
    │   ├── macros.rs
    │   ├── migrate.rs
    │   ├── migrations/
    │   │   ├── 0_setup.sql
    │   │   ├── 1_user.sql
    │   │   ├── 2_post.sql
    │   │   └── 3_comment.sql
    │   ├── migrations_no_tx/
    │   │   └── 0_create_db.sql
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   ├── migrations_simple/
    │   │   ├── 20220721115250_add_test_table.sql
    │   │   └── 20220721115524_convert_type.sql
    │   ├── pg_hba.conf
    │   ├── postgres.rs
    │   ├── query_builder.rs
    │   ├── rustsec.rs
    │   ├── setup.sql
    │   ├── test-attr.rs
    │   ├── test-query.sql
    │   └── types.rs
    ├── sqlite/
    │   ├── .gitignore
    │   ├── any.rs
    │   ├── derives.rs
    │   ├── describe.rs
    │   ├── error.rs
    │   ├── fixtures/
    │   │   ├── comments.sql
    │   │   ├── posts.sql
    │   │   └── users.sql
    │   ├── macros.rs
    │   ├── migrate.rs
    │   ├── migrations/
    │   │   ├── 1_user.sql
    │   │   ├── 2_post.sql
    │   │   └── 3_comment.sql
    │   ├── migrations_no_tx/
    │   │   └── 0_vacuum.sql
    │   ├── migrations_no_tx_reversible/
    │   │   ├── 0_vacuum.down.sql
    │   │   └── 0_vacuum.up.sql
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   ├── migrations_simple/
    │   │   ├── 20220721115250_add_test_table.sql
    │   │   └── 20220721115524_convert_type.sql
    │   ├── rustsec.rs
    │   ├── setup.sql
    │   ├── sqlcipher.rs
    │   ├── sqlite.rs
    │   ├── test-attr.rs
    │   └── types.rs
    ├── ui/
    │   ├── mysql/
    │   │   └── gated/
    │   │       ├── chrono.rs
    │   │       └── chrono.stderr
    │   ├── postgres/
    │   │   ├── deprecated_rename.rs
    │   │   ├── deprecated_rename.stderr
    │   │   ├── gated/
    │   │   │   ├── chrono.rs
    │   │   │   ├── chrono.stderr
    │   │   │   ├── ipnetwork.rs
    │   │   │   ├── ipnetwork.stderr
    │   │   │   ├── uuid.rs
    │   │   │   └── uuid.stderr
    │   │   ├── issue_30.rs
    │   │   ├── issue_30.stderr
    │   │   ├── unsupported-type.rs
    │   │   ├── unsupported-type.stderr
    │   │   ├── wrong_param_type.rs
    │   │   └── wrong_param_type.stderr
    │   └── sqlite/
    │       ├── expression-column-type.rs
    │       └── expression-column-type.stderr
    ├── ui-tests.rs
    └── x.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[*.yml]
indent_size = 2


================================================
FILE: .gitattributes
================================================
* text=auto eol=lf


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: I think I found a bug in SQLx
description: Create a bug-report issue
labels: [bug]
body:
  - type: textarea
    id: related-issues
    validations:
      required: true
    attributes:
      label: I have found these related issues/pull requests
      description: |
        I have searched by clicking [HERE](https://github.com/launchbadge/sqlx/issues?q=) 
        for existing issues, these are the ones I've found, 
        and this is why I think this deserves a new issue.
      placeholder: "Related to ..."
  - type: textarea
    id: description
    validations:
      required: true
    attributes:
      label: Description
      description: Clear and concise description of what the bug is
  - type: textarea
    id: steps-to-reproduce
    validations:
      required: true
    attributes:
      label: Reproduction steps
      description: A small code snippet or a link to a Github repo or Gist, with instructions on reproducing the bug.
  - type: input
    id: sqlx-version
    attributes:
      label: SQLx version
    validations:
      required: true
  - type: input
    id: sqlx-features
    attributes:
      label: Enabled SQLx features
    validations:
      required: true
  - type: input
    id: db-server-and-version
    attributes:
      label: Database server and version
      placeholder: MySQL / Postgres / SQLite <x.y.z>
    validations:
      required: true
  - type: input
    id: os-type
    attributes:
      label: Operating system
    validations:
      required: true
  - type: input
    id: rust-version
    attributes:
      label: Rust version
      description: You can get this via running `rustc --version`
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Enabling some optional features adds unexpected crates to Cargo.lock
    url: https://github.com/launchbadge/sqlx/issues/3211
    about: See this issue.
  - name: I have a question or problem
    url: https://github.com/launchbadge/sqlx/tree/main/FAQ.md
    about: See our FAQ.
  - name: I have a question or problem not covered in the FAQ
    url: https://github.com/launchbadge/sqlx/discussions/new?category=q-a
    about: Open a Q&A discussion.
  - name: Join SQLx's Discord
    url: https://discord.gg/hPm3WqA
    about: Join our Discord server for help, discussions and release announcements.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: I have a feature request for SQLx
description: Create a feature-request issue
labels: [enhancement]
body:
  - type: textarea
    id: related-issues
    validations:
      required: true
    attributes:
      label: I have found these related issues/pull requests
      description: "Provide context for your pull request."
      placeholder: |
          Closes \#...
          Relates to \#...
  - type: textarea
    id: feature-description
    validations:
      required: true
    attributes:
      label: Description
      description: A clear and concise description of what the problem is
      placeholder: You should add ...
  - type: textarea
    id: solution
    validations:
      required: true
    attributes:
      label: Prefered solution
      description: A clear and concise description of what you want to happen.
      placeholder: In my use-case, ...
  - type: textarea
    id: breaking-change
    validations:
      required: true
    attributes:
      label: Is this a breaking change? Why or why not?



================================================
FILE: .github/pull_request_template.md
================================================
<!-- 
PR AUTHOR INSTRUCTIONS; PLEASE READ.

Give your pull request an accurate and descriptive title. It should mention what component(s) or database driver(s) it touches.
Pull requests with undescriptive or inaccurate titles *may* be closed or have their titles changed before merging.

Fill out the fields below.

All pull requests *must* pass CI to be merged. Check your pull request frequently for build failures until all checks pass.
Address build failures by pushing new commits or amending existing ones. Feel free to ask for help if you get stuck.
If a failure seems spurious (timeout or cache failure), you may push a new commit to re-run it.

After addressing review comments, re-request review to show that you are ready for your PR to be looked at again.

Pull requests which sit for a long time with broken CI or unaddressed review comments will be closed to clear the backlog.
If this happens, you are welcome to open a new pull request, but please be sure to address the feedback you have received previously.

Bug fixes should include a regression test which fails before the fix and passes afterwards. If this is infeasible, please explain why.

New features *should* include unit or integration tests in the appropriate folders. Database specific tests should go in `tests/<database>`.

Note that unsolicited pull requests implementing large or complex changes may not be reviwed right away.
Maintainer time and energy is limited and massive unsolicited pull requests require an outsized effort to review.

To make the best use of your time and ours, search for and participate in existing discussion on the issue tracker before opening a pull request.
The solution you came up with may have already been rejected or postponed due to other work needing to be done first,
or there may be a pending solution going down a different direction that you hadn't considered.

Pull requests that take existing discussion into account are the most likely to be merged.

Delete this block comment before submission to show that you have read and understand these instructions.
-->

### Does your PR solve an issue?
Delete this text and add "fixes #(issue number)".

Do *not* just list issue numbers here as they will not be automatically closed on merging this pull request unless prefixed with "fixes" or "closes".

### Is this a breaking change?
Delete this text and answer yes/no and explain.

If yes, this pull request will need to wait for the next major release (`0.{x + 1}.0`)

Behavior changes _can_ be breaking if significant enough.
Consider [Hyrum's Law](https://www.hyrumslaw.com/):

> With a sufficient number of users of an API,  
> it does not matter what you promise in the contract:  
> all observable behaviors of your system  
> will be depended on by somebody.


================================================
FILE: .github/workflows/examples.yml
================================================
name: Examples

on:
  pull_request:
  push:
    branches:
      - main
      - '*-dev'

jobs:
  sqlx-cli:
    name: Build SQLx CLI
    runs-on: ubuntu-latest
    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: |
          rustup show active-toolchain || rustup toolchain install
          rustup override set stable

      - uses: Swatinem/rust-cache@v2

      - run: >
          cargo build
          -p sqlx-cli
          --release
          --no-default-features
          --features mysql,postgres,sqlite,sqlx-toml

      - uses: actions/upload-artifact@v4
        with:
          name: sqlx-cli
          path: |
            target/release/sqlx
            target/release/cargo-sqlx

  mysql:
    name: MySQL Examples
    runs-on: ubuntu-latest
    needs: sqlx-cli
    timeout-minutes: 30

    strategy:
      matrix:
        offline: ['', 'offline']

    services:
      mysql:
        image: mysql:latest
        env:
          MYSQL_ROOT_PASSWORD: password
        ports:
          - 3306:3306

    steps:
      - name: Get SQLx-CLI
        uses: actions/download-artifact@v4
        with:
          name: sqlx-cli
          # $HOME is interpreted differently by the shell
          path: /home/runner/.local/bin

      - run: |
          ls -R /home/runner/.local/bin
          chmod +x /home/runner/.local/bin/sqlx /home/runner/.local/bin/cargo-sqlx
          echo /home/runner/.local/bin >> $GITHUB_PATH
          sleep 10

      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: Todos (Setup)
        working-directory: examples/mysql/todos
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/todos?ssl-mode=disabled
        run: sqlx db setup

      - name: Todos (Prepare)
        if: ${{ matrix.offline }}
        working-directory: examples/mysql/todos
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/todos?ssl-mode=disabled
        run: cargo sqlx prepare

      - name: Todos (Check Offline)
        if: ${{ matrix.offline }}
        run: |
          cargo clean -p sqlx-example-mysql-todos
          cargo check -p sqlx-example-mysql-todos

      - name: Todos (Prepare from .env)
        if: ${{ matrix.offline }}
        working-directory: examples/mysql/todos
        run: |
          echo "DATABASE_URL=mysql://root:password@localhost:3306/todos?ssl-mode=disabled" > .env
          cargo clean -p sqlx-example-mysql-todos
          cargo sqlx prepare
          rm .env

      - name: Todos (Run)
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/todos?ssl-mode=disabled
          SQLX_OFFLINE: ${{ matrix.offline == 'offline' }}
        run: cargo run -p sqlx-example-mysql-todos

  postgres:
    name: PostgreSQL Examples
    runs-on: ubuntu-latest
    needs: sqlx-cli
    timeout-minutes: 30

    strategy:
      matrix:
        offline: ['', 'offline']

    services:
      postgres:
        image: postgres:latest
        env:
          POSTGRES_PASSWORD: password
        ports:
          - 5432:5432

    steps:
      - name: Get SQLx-CLI
        uses: actions/download-artifact@v4
        with:
          name: sqlx-cli
          path: /home/runner/.local/bin

      - run: |
          ls -R /home/runner/.local/bin
          chmod +x $HOME/.local/bin/sqlx
          chmod +x $HOME/.local/bin/cargo-sqlx
          echo $HOME/.local/bin >> $GITHUB_PATH
          sleep 10

      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - name: Axum Social with Tests (Setup)
        working-directory: examples/postgres/axum-social-with-tests
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/axum-social
        run: sqlx db setup

      # Test `cargo sqlx prepare` setting `DATABASE_URL` both directly and in `.env`
      # This doesn't need to be done for every single example here, but should at least cover potential problem cases.
      - name: Axum Social with Tests (Prepare)
        if: ${{ matrix.offline }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/axum-social
        run: cargo sqlx prepare -- -p sqlx-example-postgres-axum-social

      - name: Axum Social with Tests (Check Offline)
        if: ${{ matrix.offline }}
        run: |
          cargo clean -p sqlx-example-postgres-axum-social
          cargo check -p sqlx-example-postgres-axum-social

      - name: Axum Social with Tests (Prepare from .env)
        if: ${{ matrix.offline }}
        run: |
          echo "DATABASE_URL=postgres://postgres:password@localhost:5432/axum-social" > .env
          cargo clean -p sqlx-example-postgres-axum-social
          cargo sqlx prepare -- -p sqlx-example-postgres-axum-social
          rm .env

      - name: Axum Social with Tests (Test)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/axum-social
          SQLX_OFFLINE: ${{ matrix.offline == 'offline' }}
        run: cargo test -p sqlx-example-postgres-axum-social

      # The Chat example has an interactive TUI which is not trivial to test automatically,
      # so we only check that it compiles.
      - name: Chat (Check)
        run: cargo check -p sqlx-example-postgres-chat

      - name: Files (Setup)
        working-directory: examples/postgres/files
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/files
        run: sqlx db setup

      - name: Files (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/files
        run: cargo run -p sqlx-example-postgres-files

      - name: JSON (Setup)
        working-directory: examples/postgres/json
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/json
        run: sqlx db setup

      - name: JSON (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/json
        run: cargo run -p sqlx-example-postgres-json

      - name: Listen (Setup)
        working-directory: examples/postgres/listen
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/listen
        run: sqlx db create

      - name: Listen (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/listen
        run: cargo run -p sqlx-example-postgres-listen

      - name: Mockable TODOs (Setup)
        working-directory: examples/postgres/mockable-todos
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/mockable-todos
        run: sqlx db setup

      - name: Mockable TODOs (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/mockable-todos
        run: cargo run -p sqlx-example-postgres-mockable-todos

      - name: Multi-Database (Setup)
        working-directory: examples/postgres/multi-database
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database
          ACCOUNTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-accounts
          PAYMENTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-payments
        run: |
          (cd accounts && sqlx db setup)
          (cd payments && sqlx db setup)
          sqlx db setup

      - name: Multi-Database (Prepare)
        if: ${{ matrix.offline }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database
          ACCOUNTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-accounts
          PAYMENTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-payments
        run: |
            cargo clean -p sqlx-example-postgres-multi-database-accounts
            cargo clean -p sqlx-example-postgres-multi-database-payments
            cargo clean -p sqlx-example-postgres-multi-database
            # should include -accounts and -payments
            cargo sqlx prepare -- -p sqlx-example-postgres-multi-database

      - name: Multi-Database (Check Offline)
        if: ${{ matrix.offline }}
        run: |
          cargo clean -p sqlx-example-postgres-multi-database
          cargo check -p sqlx-example-postgres-multi-database

      - name: Multi-Database (Prepare from .env)
        if: ${{ matrix.offline }}
        run: |
          # Tried to get this to work with heredocs but had trouble writing tabs in YAML
          echo 'DATABASE_URL=postgres://postgres:password@localhost:5432/multi-database' >.env
          # Important: append, don't truncate
          echo 'ACCOUNTS_DATABASE_URL=postgres://postgres:password@localhost:5432/multi-database-accounts' >> .env
          echo 'PAYMENTS_DATABASE_URL=postgres://postgres:password@localhost:5432/multi-database-payments' >> .env
          
          cargo clean -p sqlx-example-postgres-multi-database-accounts
          cargo clean -p sqlx-example-postgres-multi-database-payments
          cargo clean -p sqlx-example-postgres-multi-database
          cargo sqlx prepare -- -p sqlx-example-postgres-multi-database
          
          rm .env

      - name: Multi-Database (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database
          ACCOUNTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-accounts
          PAYMENTS_DATABASE_URL: postgres://postgres:password@localhost:5432/multi-database-payments
          SQLX_OFFLINE: ${{ matrix.offline == 'offline' }}
        run: cargo run -p sqlx-example-postgres-multi-database

      - name: Multi-Tenant (Setup)
        working-directory: examples/postgres/multi-tenant
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/multi-tenant
        run: |
          (cd accounts && sqlx db setup)
          (cd payments && sqlx migrate run)
          sqlx migrate run

      - name: Multi-Tenant (Prepare)
        if: ${{ matrix.offline }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/multi-tenant
        run: |
          cargo clean -p sqlx-example-postgres-multi-tenant-accounts
          cargo clean -p sqlx-example-postgres-multi-tenant-payments
          cargo clean -p sqlx-example-postgres-multi-tenant
          # should include -accounts and -payments
          cargo sqlx prepare -- -p sqlx-example-postgres-multi-tenant

      - name: Multi-Tenant (Check Offline)
        if: ${{ matrix.offline }}
        run: cargo check -p sqlx-example-postgres-multi-tenant

      - name: Multi-Tenant (Prepare from .env)
        if: ${{ matrix.offline }}
        run: |
          echo "DATABASE_URL=postgres://postgres:password@localhost:5432/multi-tenant" > .env
          
          cargo clean -p sqlx-example-postgres-multi-tenant-accounts
          cargo clean -p sqlx-example-postgres-multi-tenant-payments
          cargo clean -p sqlx-example-postgres-multi-tenant
          # should include -accounts and -payments
          cargo sqlx prepare -- -p sqlx-example-postgres-multi-tenant
          
          rm .env

      - name: Multi-Tenant (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/multi-tenant
          SQLX_OFFLINE: ${{ matrix.offline == 'offline' }}
        run: cargo run -p sqlx-example-postgres-multi-tenant

      - name: Preferred-Crates (Setup)
        working-directory: examples/postgres/preferred-crates
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/preferred-crates
        run: sqlx db setup

      - name: Preferred-Crates (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/preferred-crates
        run: cargo run -p sqlx-example-postgres-preferred-crates

      - name: TODOs (Setup)
        working-directory: examples/postgres/todos
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/todos
        run: sqlx db setup

      - name: TODOs (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/todos
        # TODO: test full CLI
        run: cargo run -p sqlx-example-postgres-todos

      - name: Transaction (Setup)
        working-directory: examples/postgres/transaction
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/txn
        run: sqlx db setup

      - name: Transaction (Run)
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/txn
        run: cargo run -p sqlx-example-postgres-transaction

  sqlite:
    name: SQLite Examples
    runs-on: ubuntu-latest
    needs: sqlx-cli
    timeout-minutes: 30

    steps:
      - name: Get SQLx-CLI
        uses: actions/download-artifact@v4
        with:
          name: sqlx-cli
          path: /home/runner/.local/bin

      - run: |
          ls -R /home/runner/.local/bin
          chmod +x /home/runner/.local/bin/sqlx
          echo /home/runner/.local/bin >> $GITHUB_PATH

      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: TODOs (Setup)
        env:
          DATABASE_URL: sqlite://todos.sqlite
        run: sqlx db setup --source=examples/sqlite/todos/migrations

      - name: Todos (Prepare)
        if: ${{ matrix.offline }}
        env:
          DATABASE_URL: sqlite://todos.sqlite
        run: cargo sqlx prepare -- -p sqlx-example-sqlite-todos

      - name: Todos (Check Offline)
        if: ${{ matrix.offline }}
        run: |
          cargo clean -p sqlx-example-sqlite-todos
          cargo check -p sqlx-example-sqlite-todos

      - name: Todos (Prepare from .env)
        if: ${{ matrix.offline }}
        run: |
          echo "DATABASE_URL=sqlite://todos.sqlite" > .env
          cargo clean -p sqlx-example-sqlite-todos
          cargo sqlx prepare -- -p sqlx-example-sqlite-todos
          rm .env

      - name: TODOs (Run)
        env:
          DATABASE_URL: sqlite://todos.sqlite
          SQLX_OFFLINE: ${{ matrix.offline == 'offline' }}
        run: cargo run -p sqlx-example-sqlite-todos


================================================
FILE: .github/workflows/sqlx-cli.yml
================================================
name: SQLx CLI

on:
  pull_request:
  push:
    branches:
      - main
      - "*-dev"

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: |
          rustup show active-toolchain || rustup toolchain install
          rustup component add clippy
          rustup toolchain install beta
          rustup component add --toolchain beta clippy

      - uses: Swatinem/rust-cache@v2

      - run: cargo clippy --manifest-path sqlx-cli/Cargo.toml -- -D warnings

      # Run beta for new warnings but don't break the build.
      # Use a subdirectory of `target` to avoid clobbering the cache.
      - run: >
          cargo +beta clippy
          --manifest-path sqlx-cli/Cargo.toml
          --target-dir target/beta/

  integration-test:
    name: Integration Test
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        # Note: macOS-latest uses M1 Silicon (ARM64)
        os:
          - ubuntu-latest
          # FIXME: migrations tests fail on Windows for whatever reason
          # - windows-latest
          - macOS-15-intel
          - macOS-latest

    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - run: cargo test --manifest-path sqlx-cli/Cargo.toml

  test-mysql:
    name: Functional Test (MySQL)
    runs-on: ubuntu-latest
    # Deliberately not using `tests/docker-compose.yml` because that sets up the database automatically.
    services:
      mysql:
        image: mysql:8
        ports:
          - 3306:3306
        env:
          MYSQL_ROOT_PASSWORD: password
    env:
      BASE_URL: mysql://root:password@localhost
    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: Install SQLx-CLI
        run:
          cargo install --locked --debug --path sqlx-cli

      - name: Basic Test
        env:
          DATABASE_URL: ${{ env.BASE_URL }}/test1
        run: |
          sqlx db setup --source=tests/mysql/migrations
          
          sqlx mig info --source=tests/mysql/migrations
          
          sqlx db drop -y

      - name: Test .env
        run: |
          echo "DATABASE_URL=${{ env.BASE_URL }}/test2" > .env
          
          sqlx db setup --source=tests/mysql/migrations
          
          sqlx mig info --source=tests/mysql/migrations
          
          sqlx db drop -y

      - name: Test --no-dotenv
        run: |
          # Allow subcommands to fail
          set +e
          
          echo "DATABASE_URL=${{ env.BASE_URL }}/test3" > .env
          
          ERROR=$(sqlx db setup --no-dotenv --source=tests/mysql/migrations)
          
          if [[ "$ERROR" == *"--database-url"* ]]; then
            exit 0
          else
            echo "Unexpected error from sqlx-cli: $ERROR"
            exit 1
          fi

      - name: Test Reversible Migrations
        env:
          DATABASE_URL: ${{ env.BASE_URL }}/test4
        run: |
          sqlx db setup --source=tests/mysql/migrations_reversible
          
          INFO_BEFORE=$(sqlx mig info --source=tests/mysql/migrations_reversible)
          
          sqlx mig revert --target-version=0 --source=tests/mysql/migrations_reversible
          
          INFO_AFTER=$(sqlx mig info --source=tests/mysql/migrations_reversible)
          
          if [[ "$INFO_BEFORE" == "$INFO_AFTER" ]]; then
            echo "Error: migration info is identical before and after migrating: $INFO_BEFORE"
            exit 1
          fi

  test-postgres:
    name: Functional Test (PostgreSQL)
    runs-on: ubuntu-latest
    # Deliberately not using `tests/docker-compose.yml` because that sets up the database automatically.
    services:
      mysql:
        image: postgres:17
        ports:
          - 5432:5432
        env:
          POSTGRES_PASSWORD: password
    env:
      BASE_URL: postgres://postgres:password@localhost
    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: Install SQLx-CLI
        run:
          cargo install --locked --debug --path sqlx-cli

      - name: Basic Test
        env:
          DATABASE_URL: ${{ env.BASE_URL }}/test1
        run: |
          sqlx db setup --source=tests/postgres/migrations
          
          sqlx mig info --source=tests/postgres/migrations
          
          sqlx db drop -y

      - name: Test .env
        run: |
          echo "DATABASE_URL=${{ env.BASE_URL }}/test2" > .env
          
          sqlx db setup --source=tests/postgres/migrations
          
          sqlx mig info --source=tests/postgres/migrations
          
          sqlx db drop -y

      - name: Test --no-dotenv
        run: |
          # Allow subcommands to fail
          set +e
          
          echo "DATABASE_URL=${{ env.BASE_URL }}/test3" > .env
          
          ERROR=$(sqlx db setup --no-dotenv --source=tests/postgres/migrations)
          
          if [[ "$ERROR" == *"--database-url"* ]]; then
            exit 0
          else
            echo "Unexpected error from sqlx-cli: $ERROR"
            exit 1
          fi

      - name: Test Reversible Migrations
        env:
          DATABASE_URL: ${{ env.BASE_URL }}/test4
        run: |
          sqlx db setup --source=tests/postgres/migrations_reversible
          
          INFO_BEFORE=$(sqlx mig info --source=tests/postgres/migrations_reversible)
          
          sqlx mig revert --target-version=0 --source=tests/postgres/migrations_reversible
          
          INFO_AFTER=$(sqlx mig info --source=tests/postgres/migrations_reversible)
          
          if [[ "$INFO_BEFORE" == "$INFO_AFTER" ]]; then
            echo "Error: migration info is identical before and after migrating: $INFO_BEFORE"
            exit 1
          fi

  test-sqlite:
    name: Functional Test (SQLite)
    runs-on: ubuntu-latest
    env:
      BASE_URL: sqlite://.
    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: Install SQLx-CLI
        run:
          cargo install --locked --debug --path sqlx-cli

      - name: Basic Test
        env:
          DATABASE_URL: ${{ env.BASE_URL }}/test1
        run: |
          sqlx db setup --source=tests/sqlite/migrations
          
          sqlx mig info --source=tests/sqlite/migrations
          
          sqlx db drop -y

      - name: Test .env
        run: |
          echo "DATABASE_URL=${{ env.BASE_URL }}/test2" > .env
          
          sqlx db setup --source=tests/sqlite/migrations
          
          sqlx mig info --source=tests/sqlite/migrations
          
          sqlx db drop -y

      - name: Test --no-dotenv
        run: |
          # Allow subcommands to fail
          set +e
          
          echo "DATABASE_URL=${{ env.BASE_URL }}/test3" > .env
          
          ERROR=$(sqlx db setup --no-dotenv --source=tests/sqlite/migrations)
          
          if [[ "$ERROR" == *"--database-url"* ]]; then
            exit 0
          else
            echo "Unexpected error from sqlx-cli: $ERROR"
            exit 1
          fi

      - name: Test Reversible Migrations
        env:
          DATABASE_URL: ${{ env.BASE_URL }}/test4
        run: |
          sqlx db setup --source=tests/sqlite/migrations_reversible
          
          INFO_BEFORE=$(sqlx mig info --source=tests/sqlite/migrations_reversible)
          
          sqlx mig revert --target-version=0 --source=tests/sqlite/migrations_reversible
          
          INFO_AFTER=$(sqlx mig info --source=tests/sqlite/migrations_reversible)
          
          if [[ "$INFO_BEFORE" == "$INFO_AFTER" ]]; then
            echo "Error: migration info is identical before and after migrating: $INFO_BEFORE"
            exit 1
          fi

  build:
    name: Build
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        # Note: macOS-latest uses M1 Silicon (ARM64)
        os:
          - ubuntu-latest
          - windows-latest
          - macOS-15-intel
          - macOS-latest
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
            args: --features openssl-vendored
            bin: target/debug/cargo-sqlx
          - os: windows-latest
            target: x86_64-pc-windows-msvc
            bin: target/debug/cargo-sqlx.exe
          - os: macOS-15-intel
            target: x86_64-apple-darwin
            bin: target/debug/cargo-sqlx
          - os: macOS-latest
            target: aarch64-apple-darwin
            bin: target/debug/cargo-sqlx

    timeout-minutes: 30

    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: |
          rustup show active-toolchain || rustup toolchain install
          rustup override set stable

      - uses: Swatinem/rust-cache@v2

      - run: cargo build --manifest-path sqlx-cli/Cargo.toml --bin cargo-sqlx ${{ matrix.args }}

      - uses: actions/upload-artifact@v4
        with:
          name: cargo-sqlx-${{ matrix.target }}
          path: ${{ matrix.bin }}


================================================
FILE: .github/workflows/sqlx.yml
================================================
name: SQLx

on:
  pull_request:
  push:
    branches:
      - main
      - "*-dev"

jobs:
  format:
    name: Format
    runs-on: ubuntu-24.04
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v4
      - run: rustup component add rustfmt
      - run: cargo fmt --all -- --check

  check:
    name: Check
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        # Note: because `async-std` is deprecated, we only check it in a single job to save CI time.
        runtime: [ async-std, async-global-executor, smol, tokio ]
        tls: [ native-tls, rustls, none ]
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      # Swatinem/rust-cache recommends setting up the rust toolchain first because it's used in cache keys
      - name: Setup Rust
        # https://blog.rust-lang.org/2025/03/02/Rustup-1.28.0.html
        run: |
          rustup show active-toolchain || rustup toolchain install
          rustup component add clippy
          rustup toolchain install beta
          rustup component add --toolchain beta clippy

      - uses: Swatinem/rust-cache@v2

      - run: >
          cargo clippy
          --no-default-features
          --features all-databases,_unstable-all-types,sqlite-preupdate-hook,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros
          -- -D warnings

      # Run beta for new warnings but don't break the build.
      # Use a subdirectory of `target` to avoid clobbering the cache.
      - run: >
          cargo +beta clippy
          --no-default-features
          --features all-databases,_unstable-all-types,sqlite-preupdate-hook,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros
          --target-dir target/beta/

  check-minimal-versions:
    name: Check build using minimal versions
    runs-on: ubuntu-24.04
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Setup Rust
        run: |
          rustup show active-toolchain || rustup toolchain install
          rustup toolchain install nightly
      - run: cargo +nightly generate-lockfile -Z minimal-versions
      - run: cargo build --all-features

  test:
    name: Unit Tests
    runs-on: ubuntu-24.04
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      # https://blog.rust-lang.org/2025/03/02/Rustup-1.28.0.html
      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: Test sqlx-core
        run: >
          cargo test
          -p sqlx-core
          --all-features      

      - name: Test sqlx-mysql
        run: >
          cargo test
          -p sqlx-mysql
          --all-features      

      - name: Test sqlx-postgres
        run: >
          cargo test
          -p sqlx-postgres
          --all-features      

      - name: Test sqlx-sqlite
        run: >
          cargo test
          -p sqlx-sqlite
          --all-features      

      - name: Test sqlx-macros-core
        run: >
          cargo test
          -p sqlx-macros-core
          --all-features

      # Note: use `--lib` to not run integration tests that require a DB
      - name: Test sqlx
        run: >
          cargo test
          -p sqlx
          --lib
          --all-features

  sqlite:
    name: SQLite
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        runtime: [ async-global-executor, smol, tokio ]
        linking: [ sqlite, sqlite-unbundled ]
    needs: check
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - run: mkdir /tmp/sqlite3-lib && wget -O /tmp/sqlite3-lib/ipaddr.so https://github.com/nalgeon/sqlean/releases/download/0.15.2/ipaddr.so

      # https://blog.rust-lang.org/2025/03/02/Rustup-1.28.0.html
      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - name: Install system sqlite library
        if: ${{ matrix.linking == 'sqlite-unbundled' }}
        run: sudo apt-get install -y libsqlite3-dev

      - run: echo "using ${DATABASE_URL}"

      # Create data dir for offline mode
      - run: mkdir .sqlx

      - run: >
          cargo test
          --no-default-features
          --features any,macros,migrate,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }},${{ matrix.linking == 'sqlite' && 'sqlite-preupdate-hook' || ''}}
          --
          --test-threads=1
        env:
          DATABASE_URL: sqlite:tests/sqlite/sqlite.db
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg sqlite_ipaddr --cfg sqlite_test_sqlcipher
          LD_LIBRARY_PATH: /tmp/sqlite3-lib

      # Run the `test-attr` test again to cover cleanup.
      # The `sqlite-test-attr` test requires the `sqlite` feature.
      - if: ${{ matrix.linking == 'sqlite' }}
        run: >
          cargo test
          --test sqlite-test-attr
          --no-default-features
          --features any,macros,migrate,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }},${{ matrix.linking == 'sqlite' && 'sqlite-preupdate-hook' || ''}}
          --
          --test-threads=1
        env:
          DATABASE_URL: sqlite:tests/sqlite/sqlite.db
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg sqlite_ipaddr --cfg sqlite_test_sqlcipher
          LD_LIBRARY_PATH: /tmp/sqlite3-lib

      # Remove test artifacts
      - run: cargo clean -p sqlx

      # Build the macros-test in offline mode (omit DATABASE_URL)
      - run: >
          cargo build
          --no-default-features
          --test sqlite-macros
          --features any,macros,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }}
        env:
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg sqlite_ipaddr
          LD_LIBRARY_PATH: /tmp/sqlite3-lib

      # Test macros in offline mode (still needs DATABASE_URL to run)
      - run: >
          cargo test
          --no-default-features
          --test sqlite-macros
          --features any,macros,${{ matrix.linking }},_unstable-all-types,runtime-${{ matrix.runtime }}
        env:
          DATABASE_URL: sqlite://tests/sqlite/sqlite.db
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg sqlite_ipaddr
          LD_LIBRARY_PATH: /tmp/sqlite3-lib

  postgres:
    name: Postgres
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        postgres: [ 17, 13 ]
        runtime: [ async-global-executor, smol, tokio ]
        tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ]
    needs: check
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - env:
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"
        run: >
          cargo build 
          --no-default-features
          --features postgres,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }},macros,migrate

      - run: |
          docker compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }} postgres_${{ matrix.postgres }}

      - run: |
          docker exec postgres_${{ matrix.postgres }} bash -c "until pg_isready; do sleep 1; done"

      # Create data dir for offline mode
      - run: mkdir .sqlx

      - run: >
          cargo test
          --no-default-features
          --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"

      # Run the `test-attr` test again to cover cleanup.
      - run: >
          cargo test
          --test postgres-test-attr
          --no-default-features
          --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"

      - if: matrix.tls != 'none'
        run: >
          cargo test
          --no-default-features
          --features any,postgres,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"

      # Remove test artifacts
      - run: cargo clean -p sqlx

      # Build the macros-test in offline mode (omit DATABASE_URL)
      - run: >
          cargo build
          --no-default-features
          --test postgres-macros
          --features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"

      # Test macros in offline mode (still needs DATABASE_URL to run)
      - run: >
          cargo test
          --no-default-features
          --test postgres-macros
          --features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: postgres://postgres:password@localhost:5432/sqlx
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"

  postgres-ssl-auth:
    name: Postgres SSL Auth
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        postgres: [ 13, 17 ]
        runtime: [ async-std, tokio ]
        tls: [ native-tls, rustls-aws-lc-rs, rustls-ring ]
    needs: check
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - run: |
          docker compose -f tests/docker-compose.yml run -d -p 5432:5432 --name postgres_${{ matrix.postgres }}_client_ssl postgres_${{ matrix.postgres }}_client_ssl

      - run: |
          docker exec postgres_${{ matrix.postgres }}_client_ssl bash -c "until pg_isready; do sleep 1; done"

      - run: >
          cargo test
          --no-default-features
          --features any,postgres,macros,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: postgres://postgres@localhost:5432/sqlx?sslmode=verify-ca&sslrootcert=.%2Ftests%2Fcerts%2Fca.crt&sslkey=.%2Ftests%2Fcerts%2Fkeys%2Fclient.key&sslcert=.%2Ftests%2Fcerts%2Fclient.crt
          RUSTFLAGS: -D warnings --cfg postgres="${{ matrix.postgres }}"

  mysql:
    name: MySQL
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        mysql: [ 8 ]
        runtime: [ async-global-executor, smol, tokio ]
        tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ]
    needs: check
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - run: cargo build --features mysql,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}

      - run: docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mysql_${{ matrix.mysql }} mysql_${{ matrix.mysql }}
      - run: sleep 60

      # Create data dir for offline mode
      - run: mkdir .sqlx

      - run: >
          cargo test
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx?ssl-mode=disabled
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mysql_${{ matrix.mysql }}

      # Run the `test-attr` test again to cover cleanup.
      - run: >
          cargo test
          --test mysql-test-attr
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx?ssl-mode=disabled
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mysql_${{ matrix.mysql }}

      # MySQL 5.7 supports TLS but not TLSv1.3 as required by RusTLS.
      - if: ${{ !(matrix.mysql == '5_7' && matrix.tls == 'rustls') }}
        run: >
          cargo test
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mysql_${{ matrix.mysql }}

      # Remove test artifacts
      - run: cargo clean -p sqlx

      # Build the macros-test in offline mode (omit DATABASE_URL)
      - run: >
          cargo build
          --no-default-features
          --test mysql-macros
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg mysql_${{ matrix.mysql }}

      # Test macros in offline mode (still needs DATABASE_URL to run)
      # MySQL 5.7 supports TLS but not TLSv1.3 as required by RusTLS.
      - run: >
          cargo test
          --no-default-features
          --test mysql-macros
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mysql_${{ matrix.mysql }}

      # client SSL authentication

      - if: ${{ matrix.tls != 'none' }}
        run: |
          docker stop mysql_${{ matrix.mysql }}
          docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mysql_${{ matrix.mysql }}_client_ssl mysql_${{ matrix.mysql }}_client_ssl
          sleep 60

      - if: ${{ matrix.tls != 'none' }}
        run: >
          cargo test
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root@localhost:3306/sqlx?sslmode=verify_ca&ssl-ca=.%2Ftests%2Fcerts%2Fca.crt&ssl-key=.%2Ftests%2Fcerts%2Fkeys%2Fclient.key&ssl-cert=.%2Ftests%2Fcerts%2Fclient.crt
          RUSTFLAGS: --cfg mysql_${{ matrix.mysql }}

  mariadb:
    name: MariaDB
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        mariadb: [ verylatest, 11_8, 11_4, 10_11, 10_6 ]
        runtime: [ async-global-executor, smol, tokio ]
        tls: [ native-tls, rustls-aws-lc-rs, rustls-ring, none ]
    needs: check
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - name: Setup Rust
        run: rustup show active-toolchain || rustup toolchain install

      - uses: Swatinem/rust-cache@v2

      - run: cargo build --features mysql,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}

      - run: docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mariadb_${{ matrix.mariadb }} mariadb_${{ matrix.mariadb }}
      - run: sleep 30

      # Create data dir for offline mode
      - run: mkdir .sqlx

      - run: >
          cargo test
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}"

      # Run the `test-attr` test again to cover cleanup.
      - run: >
          cargo test
          --test mysql-test-attr
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}"

      # Remove test artifacts
      - run: cargo clean -p sqlx

      # Build the macros-test in offline mode (omit DATABASE_URL)
      - run: >
          cargo build
          --no-default-features
          --test mysql-macros
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: -D warnings --cfg mariadb="${{ matrix.mariadb }}"

      # Test macros in offline mode (still needs DATABASE_URL to run)
      - run: >
          cargo test
          --no-default-features
          --test mysql-macros
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root:password@localhost:3306/sqlx
          SQLX_OFFLINE: true
          SQLX_OFFLINE_DIR: .sqlx
          RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}"

      # client SSL authentication

      - if: ${{ matrix.tls != 'none' }}
        run: |
          docker stop mariadb_${{ matrix.mariadb }}
          docker compose -f tests/docker-compose.yml run -d -p 3306:3306 --name mariadb_${{ matrix.mariadb }}_client_ssl mariadb_${{ matrix.mariadb }}_client_ssl
          sleep 60

      - if: ${{ matrix.tls != 'none' }}
        run: >
          cargo test
          --no-default-features
          --features any,mysql,macros,migrate,_unstable-all-types,runtime-${{ matrix.runtime }},tls-${{ matrix.tls }}
        env:
          DATABASE_URL: mysql://root@localhost:3306/sqlx?sslmode=verify_ca&ssl-ca=.%2Ftests%2Fcerts%2Fca.crt&ssl-key=.%2Ftests%2Fcerts%2Fkeys%2Fclient.key&ssl-cert=.%2Ftests%2Fcerts%2Fclient.crt
          RUSTFLAGS: --cfg mariadb="${{ matrix.mariadb }}"


================================================
FILE: .gitignore
================================================
# Built artifacts
target/

# Project and editor files
.vscode/
.idea/
*.vim
*.vi

# Environment
.env

# Shared-memory and WAL files created by SQLite.
*-shm
*-wal

# Integration testing extension library for SQLite.
ipaddr.dylib
ipaddr.so

# Temporary files from running the tests locally like they would be run from CI
.sqlx


================================================
FILE: CHANGELOG.md
================================================
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 0.9.0-alpha.1 - 2025-10-14

Accumulated changes since the beginning of the alpha cycle. Effectively a draft CHANGELOG for the 0.9.0 release.

This section will be replaced in subsequent alpha releases. See the Git history of this file for previous alphas.

### Breaking

* [[#3383]]: feat: create `sqlx.toml` format [[@abonander]]
  * SQLx and `sqlx-cli` now support per-crate configuration files (`sqlx.toml`)
  * New functionality includes, but is not limited to:
    * Rename `DATABASE_URL` for a crate (for multi-database workspaces) 
    * Set global type overrides for the macros (supporting custom types)
    * Rename or relocate the `_sqlx_migrations` table (for multiple crates using the same database)
    * Set characters to ignore when hashing migrations (e.g. ignore whitespace)
  * More to be implemented in future releases.
  * Enable feature `sqlx-toml` to use.
    * `sqlx-cli` has it enabled by default, but `sqlx` does **not**.
    * Default features of library crates can be hard to completely turn off because of [feature unification], 
      so it's better to keep the default feature set as limited as possible. 
      [This is something we learned the hard way.][preferred-crates]
  * Guide: see `sqlx::_config` module in documentation.
  * Reference: [[Link](sqlx-core/src/config/reference.toml)]
  * Examples (written for Postgres but can be adapted to other databases; PRs welcome!):
    * Multiple databases using `DATABASE_URL` renaming and global type overrides: [[Link](examples/postgres/multi-database)]
    * Multi-tenant database using `_sqlx_migrations` renaming and multiple schemas: [[Link](examples/postgres/multi-tenant)]
    * Force use of `chrono` when `time` is enabled (e.g. when using `tower-sessions-sqlx-store`): [[Link][preferred-crates]]
      * Forcing `bigdecimal` when `rust_decimal` is enabled is also shown, but problems with `chrono`/`time` are more common.
  * **Breaking changes**:
    * Significant changes to the `Migrate` trait
    * `sqlx::migrate::resolve_blocking()` is now `#[doc(hidden)]` and thus SemVer-exempt.
* [[#3486]]: fix(logs): Correct spelling of aquired_after_secs tracing field [[@iamjpotts]]
  * Breaking behavior change: implementations parsing `tracing` logs from SQLx will need to update the spelling.
* [[#3495]]: feat(postgres): remove lifetime from `PgAdvisoryLockGuard` [[@bonsairobo]]
* [[#3526]]: Return &mut Self from the migrator set_ methods [[@nipunn1313]]
  * Minor breaking change: `Migrator::set_ignore_missing` and `set_locking` now return `&mut Self` instead of `&Self`
    which may break code in rare circumstances.
* [[#3541]]: Postgres: force generic plan for better nullability inference. [[@joeydewaal]]
  * Breaking change: may alter the output of the `query!()` macros for certain queries in Postgres.
* [[#3613]]: fix: `RawSql` lifetime issues [[@abonander]]
  * Breaking change: adds `DB` type parameter to all methods of `RawSql`
* [[#3670]]: Bump ipnetwork to v0.21.1 [[@BeauGieskens]]
* [[#3674]]: Implement `Decode`, `Encode` and `Type` for `Box`, `Arc`, `Cow` and `Rc` [[@joeydewaal]]
  * Breaking change: `impl Decode for Cow` now always decodes `Cow::Owned`, lifetime is unlinked
  * See this discussion for motivation: https://github.com/launchbadge/sqlx/pull/3674#discussion_r2008611502
* [[#3723]]: Add SqlStr [[@joeydewaal]]
  * Breaking change: all `query*()` functions now take `impl SqlSafeStr` 
    which is only implemented for `&'static str` and `AssertSqlSafe`. 
    For all others, wrap in `AssertSqlSafe(<query>)`.
  * This, along with [[#3960]], finally allows returning owned queries as the type will be `Query<'static, DB>`.
  * `SqlSafeStr` trait is deliberately similar to `std::panic::UnwindSafe`, 
    serving as a speedbump to warn users about naïvely building queries with `format!()`
    while allowing a workaround for advanced usage that is easy to spot on code review. 
* [[#3800]]: Escape PostgreSQL Options [[@V02460]]
  * Breaking behavior change: options passed to `PgConnectOptions::options()` are now automatically escaped.
    Manual escaping of options is no longer necessary and may cause incorrect behavior.
* [[#3821]]: Groundwork for 0.9.0-alpha.1 [[@abonander]]
  * Increased MSRV to 1.86 and set rust-version
  * Deleted deprecated combination runtime+TLS features (e.g. `runtime-tokio-native-tls`)
  * Deleted re-export of unstable `TransactionManager` trait in `sqlx`.
    * Not technically a breaking change because it's `#[doc(hidden)]`,
      but [it _will_ break SeaORM][seaorm-2600] if not proactively fixed.
* [[#3924]]: breaking(mysql): assume all non-binary collations compatible with `str` [[@abonander]]
  * Text (or text-like) columns which previously were inferred to be `Vec<u8>` will be inferred to be `String` 
    (this should ultimately fix more code than it breaks).
  * `SET NAMES utf8mb4 COLLATE utf8_general_ci` is no longer sent by default; instead, `SET NAMES utf8mb4` is sent to
    allow the server to select the appropriate default collation (since this is version- and configuration-dependent).
  * `MySqlConnectOptions::charset()` and `::collation()` now imply `::set_names(true)` because they don't do anything otherwise.
  * Setting `charset` doesn't change what's sent in the `Protocol::HandshakeResponse41` packet as that normally only 
    matters for error messages before `SET NAMES` is sent. 
    The default collation if `set_names = false` is `utf8mb4_general_ci`.
  * See [this comment](https://github.com/launchbadge/sqlx/blob/388c424f486bf20542a8a37d296dbcf86bb6dffd/sqlx-mysql/src/collation.rs#L1-L37) for details.
  * Incidental breaking change: `RawSql::fetch_optional()` now returns `sqlx::Result<Option<DB::Row>>` 
    instead of `sqlx::Result<DB::Row>`. Whoops.
* [[#3928]]: breaking(sqlite): `libsqlite3-sys` versioning, feature flags, safety changes [[@abonander]]
  * SemVer policy changes: `libsqlite3-sys` version is now specified using a range.
    The maximum of the range may now be increased in any backwards-compatible release.
    The minimum of the range may only be increased in major releases.
    If you have `libsqlite3-sys` in your dependencies, Cargo should choose a compatible version automatically. 
    If otherwise unconstrained, Cargo should choose the latest version supported.
  * SQLite extension loading (including through the new `sqlx-toml` feature) is now `unsafe`. 
  * Added new **non-default** features corresponding to conditionally compiled SQLite APIs:
    * `sqlite-deserialize` enabling `SqliteConnection::serialize()` and `SqliteConnection::deserialize()`
    * `sqlite-load-extension` enabling `SqliteConnectOptions::extension()` and `::extension_with_entrypoint()`
    * `sqlite-unlock-notify` enables internal use of `sqlite3_unlock_notify()`
  * `SqliteValue` and `SqliteValueRef` changes:
    * The [`sqlite3_value*` interface](https://www.sqlite.org/c3ref/value_blob.html) reserves the right to be stateful. 
      Without protection, any call could theoretically invalidate values previously returned, leading to dangling pointers.
    * `SqliteValue` is now `!Sync` and `SqliteValueRef` is `!Send` to prevent data races from concurrent accesses.
      *  Instead, clone or wrap the `SqliteValue` in `Mutex`, or convert the `SqliteValueRef` to an owned value.
    * `SqliteValue` and any derived `SqliteValueRef`s now internally track if that value has been used to decode a 
      borrowed `&[u8]` or `&str` and errors if it's used to decode any other type.
    * This is not expected to affect the vast majority of usages, which should only decode a single type 
      per `SqliteValue`/`SqliteValueRef`.
    * See new docs on `SqliteValue` for details.
* [[#3949]]: Postgres: move `PgLTree::from` to `From<Vec<PgLTreeLabel>>` implementation [[@JerryQ17]]
* [[#3957]]: refactor(sqlite): do not borrow bound values, delete lifetime on `SqliteArguments` [[@iamjpotts]]
* [[#3958]]: refactor(any): Remove lifetime parameter from AnyArguments [[@iamjpotts]]
* [[#3960]]: refactor(core): Remove lifetime parameter from Arguments trait [[@iamjpotts]]
* [[#4008]]: make `#[derive(sqlx::Type)]` automatically generate `impl PgHasArrayType` by default for newtype structs [[@papaj-na-wrotkach]]
  * Manual implementations of PgHasArrayType for newtypes will conflict with the generated one.
    Delete the manual impl or add `#[sqlx(no_pg_array)]` where conflicts occur.

### Added
* [[#3641]]: feat(Postgres): support nested domain types [[@joeydewaal]]
* [[#3651]]: Add PgBindIter for encoding and use it as the implementation encoding &[T] [[@tylerhawkes]]
* [[#3675]]: feat: implement Encode, Decode, Type for `Arc<str>` and `Arc<[u8]>` (and `Rc` equivalents) [[@joeydewaal]]
* [[#3791]]: Smol+async global executor 1.80 dev [[@martin-kolarik]]
  * Adds `runtime-smol` and `runtime-async-global-executor` features to replace usages of the deprecated `async-std` crate.
* [[#3859]]: Add more JsonRawValue encode/decode impls. [[@Dirbaio]]
* [[#3881]]: CLi: made cli-lib modules publicly available for other crates [[@silvestrpredko]]
* [[#3889]]: Compile-time support for external drivers [[@bobozaur]]
* [[#3917]]: feat(sqlx.toml): support SQLite extensions in macros and sqlx-cli  [[@djarb]]
* [[#3918]]: Feature: Add exclusion violation error kind [[@barskern]]
* [[#3971]]: Allow single-field named structs to be transparent [[@Xiretza]]
* [[#4015]]: feat(sqlite): `no_tx` migration support [[@AlexTMjugador]]
* [[#4020]]: Add `Migrator::with_migrations()` constructor [[@xb284524239]]

### Changed
* [[#3525]]: Remove unnecessary boxfutures [[@joeydewaal]]
* [[#3867]]: sqlx-postgres: Bump etcetera to 0.10.0 [[@miniduikboot]]
* [[#3709]]: chore: replace once_cell `OnceCell`/`Lazy` with std `OnceLock`/`LazyLock` [[@paolobarbolini]]
* [[#3890]]: feat: Unify `Debug` implementations across `PgRow`, `MySqlRow` and `SqliteRow` [[@davidcornu]]
* [[#3911]]: chore: upgrade async-io to v2.4.1 [[@zebrapurring]]
* [[#3938]]: Move `QueryLogger` back [[@joeydewaal]]
* [[#3956]]: chore(sqlite): Remove unused test of removed git2 feature [[@iamjpotts]]
* [[#3962]]: Give SQLX_OFFLINE_DIR from environment precedence in macros [[@psionic-k]]
* [[#3968]]: chore(ci): Add timeouts to ci jobs [[@iamjpotts]]
* [[#4002]]: sqlx-postgres(tests): cleanup 2 unit tests. [[@joeydewaal]]
* [[#4022]]: refactor: tweaks after #3791 [[@abonander]]

### Fixed
* [[#3840]]: Fix docs.rs build of sqlx-sqlite [[@gferon]]
* [[#3848]]: fix(macros): don't mutate environment variables [[@joeydewaal]]
* [[#3856]]: fix(macros): slightly improve unsupported type error message [[@dyc3]]
* [[#3857]]: fix(mysql): validate parameter count for prepared statements [[@cvzx]]
* [[#3861]]: Fix NoHostnameTlsVerifier for rustls 0.23.24 and above [[@elichai]]
* [[#3863]]: Use unnamed statement in pg when not persistent [[@ThomWright]]
* [[#3874]]: Further reduce dependency on `futures` and `futures-util` [[@paolobarbolini]]
* [[#3886]]: fix: use Executor::fetch in QueryAs::fetch [[@bobozaur]]
* [[#3910]]: feat(ok): add correct handling of ok packets in MYSQL implementation [[@0xfourzerofour]]
* [[#3914]]: fix: regenerate test certificates [[@abonander]]
* [[#3915]]: fix: spec_error is used by try_from derive [[@saiintbrisson]]
* [[#3919]]: fix[sqlx-postgres]: do a checked_mul to prevent panic'ing [[@nhatcher-frequenz]]
* [[#3923]]: sqlx-mysql: Fix bug in cleanup test db's. [[@joeydewaal]]
* [[#3950]]: chore: Fix warnings for custom postgres_## cfg flags [[@iamjpotts]]
* [[#3952]]: `Pool.close`: close all connections before returning [[@jpmelos]]
* [[#3975]]: fix documentation for rustls native root certificates [[@2ndDerivative]]
* [[#3977]]: refactor(ci): Use separate job for postgres ssl auth tests [[@iamjpotts]]
* [[#3980]]: Correctly `ROLLBACK` transaction when dropped during `BEGIN`. [[@kevincox]]
* [[#3981]]: SQLite: fix transaction level accounting with bad custom command. [[@kevincox]]
* [[#3986]]: chore(core): Fix docstring for Query::try_bind [[@iamjpotts]]
* [[#3987]]: chore(deps): Resolve deprecation warning for chrono Date and ymd methods [[@iamjpotts]]
* [[#3988]]: refactor(sqlite): Resolve duplicate test target warning for macros.rs [[@iamjpotts]]
* [[#3989]]: chore(deps): Set default-features=false on sqlx in workspace.dependencies [[@iamjpotts]]
* [[#3991]]: fix(sqlite): regression when decoding nulls [[@abonander]]
* [[#4006]]: PostgreSQL SASL – run SHA256 in a blocking executor [[@ThomWright]]
* [[#4007]]: fix(compose): use OS-assigned ports for all conatiners [[@papaj-na-wrotkach]]
* [[#4009]]: Drop cached db connections in macros upon hitting an error [[@swlynch99]]
* [[#4024]]: fix(sqlite) Migrate revert with no-transaction [[@Dosenpfand]]
* [[#4027]]: native tls handshake: build TlsConnector in blocking threadpool [[@daviduebler]]
* [[#4053]]: fix(macros): smarter `.env` loading, caching, and invalidation [[@abonander]]
  * Additional credit to [[@AlexTMjugador]] ([[#4018]]) and [[@Diggsey]] ([[#4039]]) for their proposed solutions
    which served as a useful comparison.

[seaorm-2600]: https://github.com/SeaQL/sea-orm/issues/2600
[feature unification]: https://doc.rust-lang.org/cargo/reference/features.html#feature-unification
[preferred-crates]: examples/postgres/preferred-crates

[#3821]: https://github.com/launchbadge/sqlx/pull/3821
[#3383]: https://github.com/launchbadge/sqlx/pull/3383
[#3486]: https://github.com/launchbadge/sqlx/pull/3486
[#3495]: https://github.com/launchbadge/sqlx/pull/3495
[#3525]: https://github.com/launchbadge/sqlx/pull/3525
[#3526]: https://github.com/launchbadge/sqlx/pull/3526
[#3541]: https://github.com/launchbadge/sqlx/pull/3541
[#3613]: https://github.com/launchbadge/sqlx/pull/3613
[#3641]: https://github.com/launchbadge/sqlx/pull/3641
[#3651]: https://github.com/launchbadge/sqlx/pull/3651
[#3670]: https://github.com/launchbadge/sqlx/pull/3670
[#3674]: https://github.com/launchbadge/sqlx/pull/3674
[#3675]: https://github.com/launchbadge/sqlx/pull/3675
[#3709]: https://github.com/launchbadge/sqlx/pull/3709
[#3723]: https://github.com/launchbadge/sqlx/pull/3723
[#3791]: https://github.com/launchbadge/sqlx/pull/3791
[#3800]: https://github.com/launchbadge/sqlx/pull/3800
[#3821]: https://github.com/launchbadge/sqlx/pull/3821
[#3840]: https://github.com/launchbadge/sqlx/pull/3840
[#3848]: https://github.com/launchbadge/sqlx/pull/3848
[#3856]: https://github.com/launchbadge/sqlx/pull/3856
[#3857]: https://github.com/launchbadge/sqlx/pull/3857
[#3859]: https://github.com/launchbadge/sqlx/pull/3859
[#3861]: https://github.com/launchbadge/sqlx/pull/3861
[#3863]: https://github.com/launchbadge/sqlx/pull/3863
[#3867]: https://github.com/launchbadge/sqlx/pull/3867
[#3874]: https://github.com/launchbadge/sqlx/pull/3874
[#3881]: https://github.com/launchbadge/sqlx/pull/3881
[#3886]: https://github.com/launchbadge/sqlx/pull/3886
[#3889]: https://github.com/launchbadge/sqlx/pull/3889
[#3890]: https://github.com/launchbadge/sqlx/pull/3890
[#3910]: https://github.com/launchbadge/sqlx/pull/3910
[#3911]: https://github.com/launchbadge/sqlx/pull/3911
[#3914]: https://github.com/launchbadge/sqlx/pull/3914
[#3915]: https://github.com/launchbadge/sqlx/pull/3915
[#3917]: https://github.com/launchbadge/sqlx/pull/3917
[#3918]: https://github.com/launchbadge/sqlx/pull/3918
[#3919]: https://github.com/launchbadge/sqlx/pull/3919
[#3923]: https://github.com/launchbadge/sqlx/pull/3923
[#3924]: https://github.com/launchbadge/sqlx/pull/3924
[#3928]: https://github.com/launchbadge/sqlx/pull/3928
[#3938]: https://github.com/launchbadge/sqlx/pull/3938
[#3949]: https://github.com/launchbadge/sqlx/pull/3949
[#3950]: https://github.com/launchbadge/sqlx/pull/3950
[#3952]: https://github.com/launchbadge/sqlx/pull/3952
[#3956]: https://github.com/launchbadge/sqlx/pull/3956
[#3957]: https://github.com/launchbadge/sqlx/pull/3957
[#3958]: https://github.com/launchbadge/sqlx/pull/3958
[#3960]: https://github.com/launchbadge/sqlx/pull/3960
[#3962]: https://github.com/launchbadge/sqlx/pull/3962
[#3968]: https://github.com/launchbadge/sqlx/pull/3968
[#3971]: https://github.com/launchbadge/sqlx/pull/3971
[#3975]: https://github.com/launchbadge/sqlx/pull/3975
[#3977]: https://github.com/launchbadge/sqlx/pull/3977
[#3980]: https://github.com/launchbadge/sqlx/pull/3980
[#3981]: https://github.com/launchbadge/sqlx/pull/3981
[#3986]: https://github.com/launchbadge/sqlx/pull/3986
[#3987]: https://github.com/launchbadge/sqlx/pull/3987
[#3988]: https://github.com/launchbadge/sqlx/pull/3988
[#3989]: https://github.com/launchbadge/sqlx/pull/3989
[#3991]: https://github.com/launchbadge/sqlx/pull/3991
[#4002]: https://github.com/launchbadge/sqlx/pull/4002
[#4006]: https://github.com/launchbadge/sqlx/pull/4006
[#4007]: https://github.com/launchbadge/sqlx/pull/4007
[#4008]: https://github.com/launchbadge/sqlx/pull/4008
[#4009]: https://github.com/launchbadge/sqlx/pull/4009
[#4015]: https://github.com/launchbadge/sqlx/pull/4015
[#4018]: https://github.com/launchbadge/sqlx/pull/4018
[#4020]: https://github.com/launchbadge/sqlx/pull/4020
[#4022]: https://github.com/launchbadge/sqlx/pull/4022
[#4024]: https://github.com/launchbadge/sqlx/pull/4024
[#4027]: https://github.com/launchbadge/sqlx/pull/4027
[#4039]: https://github.com/launchbadge/sqlx/pull/4039
[#4053]: https://github.com/launchbadge/sqlx/pull/4053

## 0.8.6 - 2025-05-19

9 pull requests were merged this release cycle.

### Added
* [[#3849]]: Add color and wrapping to cli help text [[@joshka]]

### Changed
* [[#3830]]: build: drop unused `tempfile` dependency [[@paolobarbolini]]
* [[#3845]]: chore: clean up no longer used imports [[@tisonkun]]
* [[#3863]]: Use unnamed statement in pg when not persistent [[@ThomWright]]
* [[#3866]]: chore(doc): clarify compile-time verification and case conversion behavior [[@duhby]]

### Fixed
* [[#3840]]: Fix docs.rs build of sqlx-sqlite [[@gferon]]
* [[#3848]]: fix(macros): don't mutate environment variables [[@joeydewaal]]
* [[#3855]]: fix `attrubute` typo in doc [[@kujeger]]
* [[#3856]]: fix(macros): slightly improve unsupported type error message [[@dyc3]]

[#3830]: https://github.com/launchbadge/sqlx/pull/3830
[#3840]: https://github.com/launchbadge/sqlx/pull/3840
[#3845]: https://github.com/launchbadge/sqlx/pull/3845
[#3848]: https://github.com/launchbadge/sqlx/pull/3848
[#3849]: https://github.com/launchbadge/sqlx/pull/3849
[#3855]: https://github.com/launchbadge/sqlx/pull/3855
[#3856]: https://github.com/launchbadge/sqlx/pull/3856
[#3863]: https://github.com/launchbadge/sqlx/pull/3863
[#3866]: https://github.com/launchbadge/sqlx/pull/3866

## 0.8.5 - 2025-04-14

Hotfix release to address two new issues:
* [[#3823]]: `sqlx-cli@0.8.4` broke `.env` default resolution mechanism
* [[#3825]]: `sqlx@0.8.4` broke test fixture setup

The `0.8.4` release will be yanked as of publishing this one.

### Added
* In release PR: `sqlx-cli` now accepts `--no-dotenv` in subcommand arguments.
* In release PR: added functionality tests for `sqlx-cli` to CI.
* In release PR: test `#[sqlx::test]` twice in CI to cover cleanup.

### Fixed
* In release PR: `sqlx-cli` correctly reads `.env` files by default again.
  * Addresses [[#3823]].
* In release PR: fix bugs in MySQL implementation of `#[sqlx::test]`.
  * Addresses [[#3825]].

[#3823]: https://github.com/launchbadge/sqlx/issues/3823
[#3825]: https://github.com/launchbadge/sqlx/issues/3825

## 0.8.4 - 2025-04-13

50 pull requests were merged this release cycle.

### Added
* [[#3603]]: Added missing special casing for encoding embedded arrays of custom types [[@nico-incubiq]]
* [[#3625]]: feat(sqlite): add preupdate hook [[@aschey]]
* [[#3655]]: docs: add example for postgres enums with type TEXT [[@tisonkun]]
* [[#3677]]: Add json(nullable) macro attribute [[@seanaye]]
* [[#3687]]: Derive clone and debug for postgresql arguments [[@remysaissy]]
* [[#3690]]: feat: add postres geometry line segment [[@jayy-lmao]]
* [[#3707]]: feat(Sqlite): add LockedSqliteHandle::last_error [[@joeydewaal]]
* [[#3710]]: feat: add ipnet support [[@BeauGieskens]]
* [[#3711]]: feat(postgres): add geometry box [[@jayy-lmao]]
* [[#3714]]: chore: expose bstr feature [[@joeydewaal]]
* [[#3716]]: feat(postgres): add geometry path [[@jayy-lmao]]
* [[#3724]]: feat(sqlx-cli): Add flag to disable automatic loading of .env files [[@benwilber]]
* [[#3734]]: QueryBuilder: add debug_assert when `push_values` is passed an empty set of tuples [[@chanmaoganda]]
* [[#3745]]: feat: sqlx sqlite expose de/serialize [[@mattrighetti]]
* [[#3765]]: Merge of #3427 (by @mpyw) and #3614 (by @bonsairobo) [[@abonander]]
    * [[#3427]] Expose `transaction_depth` through `get_transaction_depth()` method [[@mpyw]]
      * Changed to `Connection::is_in_transaction` in [[#3765]]
    * [[#3614]] Add `begin_with` methods to support database-specific transaction options [[@bonsairobo]]
* [[#3769]]: feat(postgres): add geometry polygon [[@jayy-lmao]]
* [[#3773]]: feat(postgres): add geometry circle [[@jayy-lmao]]

### Changed
* [[#3665]]: build(deps): bump semver compatible dependencies [[@paolobarbolini]]
* [[#3669]]: refactor(cli): replace promptly with dialoguer [[@paolobarbolini]]
* [[#3672]]: add `#[track_caller]` to `Row::get()` [[@karambarakat]]
* [[#3708]]: chore(MySql): Remove unnecessary box [[@joeydewaal]]
* [[#3715]]: chore: add pg_copy regression tests [[@joeydewaal]]
* [[#3721]]: Replace some `futures-core` / `futures-util` APIs with `std` variants [[@paolobarbolini]]
* [[#3725]]: chore: replace rustls-pemfile with rustls-pki-types [[@tottoto]]
* [[#3754]]: chore(cli): remove unused async-trait crate from dependencies [[@tottoto]]
* [[#3762]]: docs(pool): recommend actix-web ThinData over Data to avoid two Arcs [[@jonasmalacofilho]]

### Fixed
* [[#3289]]: Always set `SQLITE_OPEN_URI` on in-memory sqlite [[@LecrisUT]]
* [[#3334]]: Fix: nextest cleanup race condition [[@bonega]]
* [[#3666]]: fix(cli): running tests on 32bit platforms [[@paolobarbolini]]
* [[#3686]]: fix: handle nullable values by printing NULL instead of panicking [[@joeydewaal]]
* [[#3700]]: fix(Sqlite): stop sending rows after first error [[@joeydewaal]]
* [[#3701]]: fix(postgres) use signed int for length prefix in `PgCopyIn` [[@joeydewaal]]
* [[#3703]]: fix(Postgres) chunk pg_copy data [[@joeydewaal]]
* [[#3712]]: FromRow: Fix documentation order [[@Turbo87]]
* [[#3720]]: Fix readme: uuid feature is gating for all repos [[@jthacker]]
* [[#3728]]: postgres: Fix tracing span when dropping PgListener [[@chitoku-k]]
* [[#3741]]: Fix example calculation in docs [[@dns2utf8]]
* [[#3749]]: docs: add some missing backticks [[@soulwa]]
* [[#3753]]: Avoid privilege requirements by using an advisory lock in test setup (postgres). [[@kildrens]]
* [[#3755]]: Fix FromRow docs for tuples [[@xvapx]]
* [[#3768]]: chore(Sqlite): remove ci.db from repo [[@joeydewaal]]
* [[#3771]]: fix(ci): breakage from Rustup 1.28 [[@abonander]]
* [[#3786]]: Fix a copy-paste error on get_username docs [[@sulami]]
* [[#3801]]: Fix: Enable Json type when db feature isn't enabled [[@thriller08]]
* [[#3809]]: fix: PgConnectOptions docs [[@mbj]]
* [[#3811]]: Fix error message typo in PgPoint::from_str [[@TeCHiScy]]
* [[#3812]]: mysql: Fix panic on invalid text row length field [[@0xdeafbeef]]
* [[#3815]]: fix(macros): cache macro metadata based on `CARGO_MANIFEST_DIR` [[@joeydewaal]]
* Fixes in release PR [[#3819]] [[@abonander]]:
  * fix(postgres): send `limit: 0` for all `Execute` messages
    * Addresses [[#3673]]: Parallel workers not used on Postgres 
  * fix: let `CertificateInput::from` infer any PEM-encoded document
    * Fixes `PGSSLKEY` not being parsed correctly when containing a PEM-encoded private key.
  * doc: improve documentation of `PgConnectOptions`
    * `PGHOSTADDR` now can be used to override `PGHOST`. 
    * Addresses [[#3740]]: Document the URL syntax for Unix-domain sockets when connecting to postgres

[#3819]: https://github.com/launchbadge/sqlx/pull/3819

[#3673]: https://github.com/launchbadge/sqlx/issues/3673
[#3740]: https://github.com/launchbadge/sqlx/issues/3740

[#3289]: https://github.com/launchbadge/sqlx/pull/3289
[#3334]: https://github.com/launchbadge/sqlx/pull/3334
[#3427]: https://github.com/launchbadge/sqlx/pull/3427
[#3603]: https://github.com/launchbadge/sqlx/pull/3603
[#3614]: https://github.com/launchbadge/sqlx/pull/3614
[#3625]: https://github.com/launchbadge/sqlx/pull/3625
[#3655]: https://github.com/launchbadge/sqlx/pull/3655
[#3665]: https://github.com/launchbadge/sqlx/pull/3665
[#3666]: https://github.com/launchbadge/sqlx/pull/3666
[#3669]: https://github.com/launchbadge/sqlx/pull/3669
[#3672]: https://github.com/launchbadge/sqlx/pull/3672
[#3677]: https://github.com/launchbadge/sqlx/pull/3677
[#3686]: https://github.com/launchbadge/sqlx/pull/3686
[#3687]: https://github.com/launchbadge/sqlx/pull/3687
[#3690]: https://github.com/launchbadge/sqlx/pull/3690
[#3700]: https://github.com/launchbadge/sqlx/pull/3700
[#3701]: https://github.com/launchbadge/sqlx/pull/3701
[#3703]: https://github.com/launchbadge/sqlx/pull/3703
[#3707]: https://github.com/launchbadge/sqlx/pull/3707
[#3708]: https://github.com/launchbadge/sqlx/pull/3708
[#3710]: https://github.com/launchbadge/sqlx/pull/3710
[#3711]: https://github.com/launchbadge/sqlx/pull/3711
[#3712]: https://github.com/launchbadge/sqlx/pull/3712
[#3714]: https://github.com/launchbadge/sqlx/pull/3714
[#3715]: https://github.com/launchbadge/sqlx/pull/3715
[#3716]: https://github.com/launchbadge/sqlx/pull/3716
[#3720]: https://github.com/launchbadge/sqlx/pull/3720
[#3721]: https://github.com/launchbadge/sqlx/pull/3721
[#3724]: https://github.com/launchbadge/sqlx/pull/3724
[#3725]: https://github.com/launchbadge/sqlx/pull/3725
[#3728]: https://github.com/launchbadge/sqlx/pull/3728
[#3734]: https://github.com/launchbadge/sqlx/pull/3734
[#3741]: https://github.com/launchbadge/sqlx/pull/3741
[#3745]: https://github.com/launchbadge/sqlx/pull/3745
[#3749]: https://github.com/launchbadge/sqlx/pull/3749
[#3753]: https://github.com/launchbadge/sqlx/pull/3753
[#3754]: https://github.com/launchbadge/sqlx/pull/3754
[#3755]: https://github.com/launchbadge/sqlx/pull/3755
[#3762]: https://github.com/launchbadge/sqlx/pull/3762
[#3765]: https://github.com/launchbadge/sqlx/pull/3765
[#3768]: https://github.com/launchbadge/sqlx/pull/3768
[#3769]: https://github.com/launchbadge/sqlx/pull/3769
[#3771]: https://github.com/launchbadge/sqlx/pull/3771
[#3773]: https://github.com/launchbadge/sqlx/pull/3773
[#3786]: https://github.com/launchbadge/sqlx/pull/3786
[#3801]: https://github.com/launchbadge/sqlx/pull/3801
[#3809]: https://github.com/launchbadge/sqlx/pull/3809
[#3811]: https://github.com/launchbadge/sqlx/pull/3811
[#3812]: https://github.com/launchbadge/sqlx/pull/3812
[#3815]: https://github.com/launchbadge/sqlx/pull/3815

## 0.8.3 - 2025-01-03

41 pull requests were merged this release cycle.

### Added
* [[#3418]]: parse timezone parameter in mysql connection url [[@dojiong]]
* [[#3491]]: chore: Update async-std v1.13 [[@jayvdb]]
* [[#3492]]: expose relation_id and relation_attribution_no on PgColumn [[@kurtbuilds]]
* [[#3493]]: doc(sqlite): document behavior for zoned date-time types [[@abonander]]
* [[#3500]]: Add sqlite commit and rollback hooks [[@gridbox]]
* [[#3505]]: chore(mysql): create test for passwordless auth (#3484) [[@abonander]]
* [[#3507]]: Add a "sqlite-unbundled" feature that dynamically links to system libsqlite3.so library [[@lilydjwg]]
* [[#3508]]: doc(sqlite): show how to turn options into a pool [[@M3t0r]]
* [[#3514]]: Support PgHstore by default in macros [[@joeydewaal]]
* [[#3550]]: Implement Acquire for PgListener [[@sandhose]]
* [[#3551]]: Support building with rustls but native certificates [[@IlyaBizyaev]]
* [[#3553]]: Add support for Postgres lquery arrays [[@philipcristiano]]
* [[#3560]]: Add PgListener::next_buffered(), to support batch processing of notifications [[@chanks]]
* [[#3577]]: Derive Copy where possible for database-specific types [[@veigaribo]]
* [[#3579]]: Reexport AnyTypeInfoKind [[@Norlock]]
* [[#3580]]: doc(mysql): document difference between `Uuid` and `uuid::fmt::Hyphenated` [[@abonander]]
* [[#3583]]: feat: point [[@jayy-lmao]]
* [[#3608]]: Implement AnyQueryResult for Sqlite and MySQL [[@pxp9]]
* [[#3623]]: feat: add geometry line [[@jayy-lmao]]
* [[#3658]]: feat: add Transaction type aliases [[@joeydewaal]]

### Changed
* [[#3519]]: Remove unused dependencies from sqlx-core, sqlx-cli and sqlx-postgres [[@vsuryamurthy]]
* [[#3529]]: Box Pgconnection fields [[@joeydewaal]]
* [[#3548]]: Demote `.pgpass` file warning to a debug message. [[@denschub]]
* [[#3585]]: Eagerly reconnect in `PgListener::try_recv` [[@swlynch99]]
* [[#3596]]: Bump thiserror to v2.0.0 [[@paolobarbolini]]
* [[#3605]]: Use `UNION ALL` instead of `UNION` in nullable check [[@Suficio]]
* [[#3629]]: chore: remove BoxFuture's (non-breaking) [[@joeydewaal]]
* [[#3632]]: Bump hashlink to v0.10 [[@paolobarbolini]]
* [[#3643]]: Roll PostgreSQL 11..=15 tests to 13..=17 [[@paolobarbolini]]
* [[#3648]]: close listener connection on TimedOut and BrokenPipe errors [[@DXist]]
* [[#3649]]: Bump hashbrown to v0.15 [[@paolobarbolini]]

### Fixed
* [[#3528]]: fix: obey `no-transaction` flag in down migrations [[@manifest]]
* [[#3536]]: fix: using sqlx::test macro inside macro's [[@joeydewaal]]
* [[#3545]]: fix: remove `sqlformat` [[@tbar4]]
* [[#3558]]: fix: fix example code of `query_as` [[@xuehaonan27]]
* [[#3566]]: Fix: Cannot query Postgres `INTERVAL[]` [[@Ddystopia]]
* [[#3593]]: fix: URL decode database name when parsing connection url [[@BenoitRanque]]
* [[#3601]]: Remove default-features = false from url [[@hsivonen]]
* [[#3604]]: Fix mistake in sqlx::test fixtures docs [[@andreweggleston]]
* [[#3612]]: fix(mysql): percent-decode database name [[@abonander]]
* [[#3640]]: Dont use `EXPLAIN` in nullability check for QuestDB [[@Suficio]]

[#3418]: https://github.com/launchbadge/sqlx/pull/3418
[#3478]: https://github.com/launchbadge/sqlx/pull/3478
[#3491]: https://github.com/launchbadge/sqlx/pull/3491
[#3492]: https://github.com/launchbadge/sqlx/pull/3492
[#3493]: https://github.com/launchbadge/sqlx/pull/3493
[#3500]: https://github.com/launchbadge/sqlx/pull/3500
[#3505]: https://github.com/launchbadge/sqlx/pull/3505
[#3507]: https://github.com/launchbadge/sqlx/pull/3507
[#3508]: https://github.com/launchbadge/sqlx/pull/3508
[#3514]: https://github.com/launchbadge/sqlx/pull/3514
[#3519]: https://github.com/launchbadge/sqlx/pull/3519
[#3528]: https://github.com/launchbadge/sqlx/pull/3528
[#3529]: https://github.com/launchbadge/sqlx/pull/3529
[#3536]: https://github.com/launchbadge/sqlx/pull/3536
[#3545]: https://github.com/launchbadge/sqlx/pull/3545
[#3548]: https://github.com/launchbadge/sqlx/pull/3548
[#3550]: https://github.com/launchbadge/sqlx/pull/3550
[#3551]: https://github.com/launchbadge/sqlx/pull/3551
[#3553]: https://github.com/launchbadge/sqlx/pull/3553
[#3558]: https://github.com/launchbadge/sqlx/pull/3558
[#3560]: https://github.com/launchbadge/sqlx/pull/3560
[#3566]: https://github.com/launchbadge/sqlx/pull/3566
[#3577]: https://github.com/launchbadge/sqlx/pull/3577
[#3579]: https://github.com/launchbadge/sqlx/pull/3579
[#3580]: https://github.com/launchbadge/sqlx/pull/3580
[#3583]: https://github.com/launchbadge/sqlx/pull/3583
[#3585]: https://github.com/launchbadge/sqlx/pull/3585
[#3593]: https://github.com/launchbadge/sqlx/pull/3593
[#3596]: https://github.com/launchbadge/sqlx/pull/3596
[#3601]: https://github.com/launchbadge/sqlx/pull/3601
[#3604]: https://github.com/launchbadge/sqlx/pull/3604
[#3605]: https://github.com/launchbadge/sqlx/pull/3605
[#3608]: https://github.com/launchbadge/sqlx/pull/3608
[#3612]: https://github.com/launchbadge/sqlx/pull/3612
[#3623]: https://github.com/launchbadge/sqlx/pull/3623
[#3629]: https://github.com/launchbadge/sqlx/pull/3629
[#3632]: https://github.com/launchbadge/sqlx/pull/3632
[#3640]: https://github.com/launchbadge/sqlx/pull/3640
[#3643]: https://github.com/launchbadge/sqlx/pull/3643
[#3648]: https://github.com/launchbadge/sqlx/pull/3648
[#3649]: https://github.com/launchbadge/sqlx/pull/3649
[#3658]: https://github.com/launchbadge/sqlx/pull/3658


## 0.8.2 - 2024-09-02

10 pull requests were merged this release cycle.

This release addresses a few regressions that have occurred, and refines SQLx's MSRV policy (see [the FAQ](FAQ.md)).

### Added
* [[#3447]]: Clarify usage of Json/Jsonb in query macros [[@Lachstec]]

### Changed
* [[#3424]]: Remove deprecated feature-names from `Cargo.toml` files in examples [[@carschandler]]

### Fixed
* [[#3403]]: Fix (#3395) sqlx::test macro in 0.8 [[@joeydewaal]]
* [[#3411]]: fix: Use rfc3339 to decode date from text [[@pierre-wehbe]]
* [[#3453]]: fix(#3445): PgHasArrayType [[@joeydewaal]]
    * Fixes `#[sqlx(no_pg_array)]` being forbidden on `#[derive(Type)]` structs. 
* [[#3454]]: fix: non snake case warning [[@joeydewaal]]
* [[#3459]]: Pgsql cube type compile fail [[@kdesjard]]
* [[#3465]]: fix(postgres): max number of binds is 65535, not 32767 (regression) [[@abonander]]
* [[#3467]]: fix cancellation issues with `PgListener`, `PgStream::recv()` [[@abonander]]
    * Fixes cryptic `unknown message: "\\0"` error 
* [[#3474]]: Fix try_get example in README.md [[@luveti]]

[#3403]: https://github.com/launchbadge/sqlx/pull/3403
[#3411]: https://github.com/launchbadge/sqlx/pull/3411
[#3424]: https://github.com/launchbadge/sqlx/pull/3424
[#3447]: https://github.com/launchbadge/sqlx/pull/3447
[#3453]: https://github.com/launchbadge/sqlx/pull/3453
[#3454]: https://github.com/launchbadge/sqlx/pull/3454
[#3455]: https://github.com/launchbadge/sqlx/pull/3455
[#3459]: https://github.com/launchbadge/sqlx/pull/3459
[#3465]: https://github.com/launchbadge/sqlx/pull/3465
[#3467]: https://github.com/launchbadge/sqlx/pull/3467
[#3474]: https://github.com/launchbadge/sqlx/pull/3474

## 0.8.1 - 2024-08-23

16 pull requests were merged this release cycle.

This release contains a fix for [RUSTSEC-2024-0363]. 

Postgres users are advised to upgrade ASAP as a possible exploit has been demonstrated:
<https://github.com/launchbadge/sqlx/issues/3440#issuecomment-2307956901>

MySQL and SQLite do not _appear_ to be exploitable, but upgrading is recommended nonetheless.

### Added
* [[#3421]]: correct spelling of `MySqlConnectOptions::no_engine_substitution()` [[@kolinfluence]]
    * Deprecates `MySqlConnectOptions::no_engine_subsitution()` (oops) in favor of the correctly spelled version.

### Changed
* [[#3376]]: doc: hide `spec_error` module [[@abonander]]
    * This is a helper module for the macros and was not meant to be exposed.
    * It is not expected to receive any breaking changes for the 0.8.x release, but is not designed as a public API.
      Use at your own risk.
* [[#3382]]: feat: bumped to `libsqlite3-sys=0.30.1` to support sqlite 3.46 [[@CommanderStorm]]
* [[#3385]]: chore(examples):Migrated the pg-chat example to ratatui [[@CommanderStorm]]
* [[#3399]]: Upgrade to rustls 0.23 [[@djc]]
    * RusTLS now has pluggable cryptography providers: `ring` (the existing implementation),
      and `aws-lc-rs` which has optional FIPS certification.
    * The existing features activating RusTLS (`runtime-tokio-rustls`, `runtime-async-std-rustls`, `tls-rustls`)
      enable the `ring` provider of RusTLS to match the existing behavior so this _should not_ be a breaking change. 
    * Switch to the `tls-rustls-aws-lc-rs` feature to use the `aws-lc-rs` provider.
      * If using `runtime-tokio-rustls` or `runtime-async-std-rustls`, 
        this will necessitate switching to the appropriate non-legacy runtime feature: 
        `runtime-tokio` or `runtime-async-std`
    * See the RusTLS README for more details: <https://github.com/rustls/rustls?tab=readme-ov-file#cryptography-providers>

### Fixed
* [[#2786]]: fix(sqlx-cli): do not clean sqlx during prepare [[@cycraig]]
* [[#3354]]: sqlite: fix inconsistent read-after-write [[@ckampfe]]
* [[#3371]]: Fix encoding and decoding of MySQL enums in `sqlx::Type` [[@alu]]
* [[#3374]]: fix: usage of `node12` in `SQLx` action [[@hamirmahal]]
* [[#3380]]: chore: replace structopt with clap in examples [[@tottoto]]
* [[#3381]]: Fix CI after Rust 1.80, remove dead feature references [[@abonander]]
* [[#3384]]: chore(tests): fixed deprecation warnings [[@CommanderStorm]]
* [[#3386]]: fix(dependencys):bumped cargo_metadata to `v0.18.1` to avoid yanked `v0.14.3` [[@CommanderStorm]]
* [[#3389]]: fix(cli): typo in error for required DB URL [[@ods]]
* [[#3417]]: Update version to 0.8 in README [[@soucosmo]]
* [[#3441]]: fix: audit protocol handling [[@abonander]]
    * This addresses [RUSTSEC-2024-0363] and includes regression tests for MySQL, Postgres and SQLite.

[#2786]: https://github.com/launchbadge/sqlx/pull/2786
[#3354]: https://github.com/launchbadge/sqlx/pull/3354
[#3371]: https://github.com/launchbadge/sqlx/pull/3371
[#3374]: https://github.com/launchbadge/sqlx/pull/3374
[#3376]: https://github.com/launchbadge/sqlx/pull/3376
[#3380]: https://github.com/launchbadge/sqlx/pull/3380
[#3381]: https://github.com/launchbadge/sqlx/pull/3381
[#3382]: https://github.com/launchbadge/sqlx/pull/3382
[#3384]: https://github.com/launchbadge/sqlx/pull/3384
[#3385]: https://github.com/launchbadge/sqlx/pull/3385
[#3386]: https://github.com/launchbadge/sqlx/pull/3386
[#3389]: https://github.com/launchbadge/sqlx/pull/3389
[#3399]: https://github.com/launchbadge/sqlx/pull/3399
[#3417]: https://github.com/launchbadge/sqlx/pull/3417
[#3421]: https://github.com/launchbadge/sqlx/pull/3421
[#3441]: https://github.com/launchbadge/sqlx/pull/3441

[RUSTSEC-2024-0363]: https://rustsec.org/advisories/RUSTSEC-2024-0363.html

## 0.8.0 - 2024-07-22

70 pull requests were merged this release cycle.

[#2697] was merged the same day as release 0.7.4 and so was missed by the automatic CHANGELOG generation.

### Breaking
* [[#2697]]: fix(macros): only enable chrono when time is disabled [[@saiintbrisson]]
* [[#2973]]: Generic Associated Types in Database, replacing HasValueRef, HasArguments, HasStatement [[@nitn3lav]]
* [[#2482]]: chore: bump syn to 2.0 [[@saiintbrisson]]
    * Deprecated type ascription syntax in the query macros was removed.
* [[#2736]]: Fix describe on PostgreSQL views with rules [[@tsing]]
  * Potentially breaking: nullability inference changes for Postgres.
* [[#2869]]: Implement PgHasArrayType for all references [[@tylerhawkes]]
    * Conflicts with existing manual implementations.
* [[#2940]]: fix: Decode and Encode derives (#1031) [[@benluelo]]
    * Changes lifetime obligations for field types.
* [[#3064]]: Sqlite explain graph [[@tyrelr]]
    * Potentially breaking: nullability inference changes for SQLite.
* [[#3123]]: Reorder attrs in sqlx::test macro [[@bobozaur]]
    * Potentially breaking: attributes on `#[sqlx::test]` usages are applied in the correct order now.
* [[#3126]]: Make Encode return a result [[@FSMaxB]]
* [[#3130]]: Add version information for failed cli migration (#3129) [[@FlakM]]
    * Breaking changes to `MigrateError`.
* [[#3181]]: feat: no tx migration [[@cleverjam]]
    * (Postgres only) migrations that should not run in a transaction can be flagged by adding `-- no-transaction` to the beginning.
    * Breaking change: added field to `Migration`
* [[#3184]]: [BREAKING} fix(sqlite): always use `i64` as intermediate when decoding [[@abonander]]
    * integer decoding will now loudly error on overflow instead of silently truncating.
    * some usages of the query!() macros might change an i32 to an i64.
* [[#3252]]: fix `#[derive(sqlx::Type)]` in Postgres [[@abonander]]
  * Manual implementations of PgHasArrayType for enums will conflict with the generated one. Delete the manual impl or add `#[sqlx(no_pg_array)]` where conflicts occur.
  * Type equality for PgTypeInfo is now schema-aware.
* [[#3329]]: fix: correct handling of arrays of custom types in Postgres [[@abonander]]
    * Potential breaking change: `PgTypeInfo::with_name()` infers types that start with `_` to be arrays of the un-prefixed type. Wrap type names in quotes to bypass this behavior.
* [[#3356]]: breaking: fix name collision in `FromRow`, return `Error::ColumnDecode` for `TryFrom` errors [[@abonander]]
    * Breaking behavior change: errors with `#[sqlx(try_from = "T")]` now return `Error::ColumnDecode` instead of `Error::ColumnNotFound`.
    * Breaking because `#[sqlx(default)]` on an individual field or the struct itself would have previously suppressed the error. 
      This doesn't seem like good behavior as it could result in some potentially very difficult bugs.
      * Instead, create a wrapper implementing `From` and apply the default explicitly.
* [[#3337]]: allow rename with rename_all (close #2896) [[@DirectorX]]
    * Changes the precedence of `#[sqlx(rename)]` and `#[sqlx(rename_all)]` to match the expected behavior (`rename` wins).
* [[#3285]]: fix: use correct names for sslmode options [[@lily-mosquitoes]]
    * Changes the output of `ConnectOptions::to_url_lossy()` to match what parsing expects.

### Added
* [[#2917]]: Add Debug impl for PgRow [[@g-bartoszek]]
* [[#3113]]: feat: new derive feature flag [[@saiintbrisson]]
* [[#3154]]: feat: add `MySqlTime`, audit `mysql::types` for panics [[@abonander]]
* [[#3188]]: feat(cube): support postgres cube [[@jayy-lmao]]
* [[#3244]]: feat: support `NonZero*` scalar types [[@AlphaKeks]]
* [[#3260]]: feat: Add set_update_hook on SqliteConnection [[@gridbox]]
* [[#3291]]: feat: support the Postgres Bool type for the Any driver [[@etorreborre]]
* [[#3293]]: Add LICENSE-* files to crates [[@LecrisUT]]
* [[#3303]]: add array support for NonZeroI* in postgres [[@JohannesIBK]]
* [[#3311]]: Add example on how to use Transaction as Executor [[@Lachstec]]
* [[#3343]]: Add support for PostgreSQL HSTORE data type [[@KobusEllis]]

### Changed
* [[#2652]]: MySQL: Remove collation compatibility check for strings [[@alu]]
* [[#2960]]: Removed `Send` trait bound from argument binding [[@bobozaur]]
* [[#2970]]: refactor: lift type mappings into driver crates [[@abonander]]
* [[#3148]]: Bump libsqlite3-sys to v0.28 [[@NfNitLoop]]
    * Note: version bumps to `libsqlite3-sys` are not considered breaking changes as per our semver guarantees.
* [[#3265]]: perf: box `MySqlConnection` to reduce sizes of futures [[@stepantubanov]]
* [[#3352]]: chore:added a testcase for `sqlx migrate add ...` [[@CommanderStorm]]
* [[#3340]]: ci: Add job to check that sqlx builds with its declared minimum dependencies [[@iamjpotts]]

### Fixed
* [[#2702]]: Constrain cyclic associated types to themselves [[@BadBastion]]
* [[#2954]]: Fix several inter doc links [[@ralpha]]
* [[#3073]]: feat(logging): Log slow acquires from connection pool [[@iamjpotts]]
* [[#3137]]: SqliteConnectOptions::filename() memory fix (#3136) [[@hoxxep]]
* [[#3138]]: PostgreSQL Bugfix: Ensure connection is usable after failed COPY inside a transaction [[@feikesteenbergen]]
* [[#3146]]: fix(sqlite): delete unused `ConnectionHandleRaw` type [[@abonander]]
* [[#3162]]: Drop urlencoding dependency [[@paolobarbolini]]
* [[#3165]]: Bump deps that do not need code changes [[@GnomedDev]]
* [[#3167]]: fix(ci): use `docker compose` instead of `docker-compose` [[@abonander]]
* [[#3172]]: fix: Option decoding in any driver [[@pxp9]]
* [[#3173]]: fix(postgres) : int type conversion while decoding [[@RaghavRox]]
* [[#3190]]: Update time to 0.3.36 [[@BlackSoulHub]]
* [[#3191]]: Fix unclean TLS shutdown [[@levkk]]
* [[#3194]]: Fix leaking connections in fetch_optional (#2647) [[@danjpgriffin]]
* [[#3216]]: security: bump rustls to 0.21.11 [[@toxeus]]
* [[#3230]]: fix: sqlite pragma order for auto_vacuum [[@jasonish]]
* [[#3233]]: fix: get_filename should not consume self [[@jasonish]]
* [[#3234]]: fix(ci): pin Rust version, ditch unmaintained actions [[@abonander]]
* [[#3236]]: fix: resolve `path` ownership problems when using `sqlx_macros_unstable` [[@lily-mosquitoes]]
* [[#3254]]: fix: hide `sqlx_postgres::any` [[@Zarathustra2]]
* [[#3266]]: ci: MariaDB - add back 11.4 and add 11.5 [[@grooverdan]]
* [[#3267]]: ci: syntax fix [[@grooverdan]]
* [[#3271]]: docs(sqlite): fix typo - unixtime() -> unixepoch() [[@joelkoen]]
* [[#3276]]: Invert boolean for `migrate` error message. (#3275) [[@nk9]]
* [[#3279]]: fix Clippy errors [[@abonander]]
* [[#3288]]: fix: sqlite update_hook char types [[@jasonish]]
* [[#3297]]: Pass the `persistent` query setting when preparing queries with the `Any` driver [[@etorreborre]]
* [[#3298]]: Track null arguments in order to provide the appropriate type when converting them. [[@etorreborre]]
* [[#3312]]: doc: Minor rust docs fixes [[@SrGesus]]
* [[#3327]]: chore: fixed one usage of `select_input_type!()` being unhygenic [[@CommanderStorm]]
* [[#3328]]: fix(ci): comment not separated from other characters [[@hamirmahal]]
* [[#3341]]: refactor: Resolve cargo check warnings in postgres examples [[@iamjpotts]]
* [[#3346]]: fix(postgres): don't panic if `M` or `C` Notice fields are not UTF-8 [[@YgorSouza]]
* [[#3350]]: fix:the `json`-feature should activate `sqlx-postgres?/json` as well [[@CommanderStorm]]
* [[#3353]]: fix: build script new line at eof [[@Zarthus]]
* (no PR): activate `clock` and `std` features of `workspace.dependencies.chrono`.

[#2482]: https://github.com/launchbadge/sqlx/pull/2482
[#2652]: https://github.com/launchbadge/sqlx/pull/2652
[#2697]: https://github.com/launchbadge/sqlx/pull/2697
[#2702]: https://github.com/launchbadge/sqlx/pull/2702
[#2736]: https://github.com/launchbadge/sqlx/pull/2736
[#2869]: https://github.com/launchbadge/sqlx/pull/2869
[#2917]: https://github.com/launchbadge/sqlx/pull/2917
[#2940]: https://github.com/launchbadge/sqlx/pull/2940
[#2954]: https://github.com/launchbadge/sqlx/pull/2954
[#2960]: https://github.com/launchbadge/sqlx/pull/2960
[#2970]: https://github.com/launchbadge/sqlx/pull/2970
[#2973]: https://github.com/launchbadge/sqlx/pull/2973
[#3064]: https://github.com/launchbadge/sqlx/pull/3064
[#3073]: https://github.com/launchbadge/sqlx/pull/3073
[#3113]: https://github.com/launchbadge/sqlx/pull/3113
[#3123]: https://github.com/launchbadge/sqlx/pull/3123
[#3126]: https://github.com/launchbadge/sqlx/pull/3126
[#3130]: https://github.com/launchbadge/sqlx/pull/3130
[#3137]: https://github.com/launchbadge/sqlx/pull/3137
[#3138]: https://github.com/launchbadge/sqlx/pull/3138
[#3146]: https://github.com/launchbadge/sqlx/pull/3146
[#3148]: https://github.com/launchbadge/sqlx/pull/3148
[#3154]: https://github.com/launchbadge/sqlx/pull/3154
[#3162]: https://github.com/launchbadge/sqlx/pull/3162
[#3165]: https://github.com/launchbadge/sqlx/pull/3165
[#3167]: https://github.com/launchbadge/sqlx/pull/3167
[#3172]: https://github.com/launchbadge/sqlx/pull/3172
[#3173]: https://github.com/launchbadge/sqlx/pull/3173
[#3181]: https://github.com/launchbadge/sqlx/pull/3181
[#3184]: https://github.com/launchbadge/sqlx/pull/3184
[#3188]: https://github.com/launchbadge/sqlx/pull/3188
[#3190]: https://github.com/launchbadge/sqlx/pull/3190
[#3191]: https://github.com/launchbadge/sqlx/pull/3191
[#3194]: https://github.com/launchbadge/sqlx/pull/3194
[#3216]: https://github.com/launchbadge/sqlx/pull/3216
[#3230]: https://github.com/launchbadge/sqlx/pull/3230
[#3233]: https://github.com/launchbadge/sqlx/pull/3233
[#3234]: https://github.com/launchbadge/sqlx/pull/3234
[#3236]: https://github.com/launchbadge/sqlx/pull/3236
[#3244]: https://github.com/launchbadge/sqlx/pull/3244
[#3252]: https://github.com/launchbadge/sqlx/pull/3252
[#3254]: https://github.com/launchbadge/sqlx/pull/3254
[#3260]: https://github.com/launchbadge/sqlx/pull/3260
[#3265]: https://github.com/launchbadge/sqlx/pull/3265
[#3266]: https://github.com/launchbadge/sqlx/pull/3266
[#3267]: https://github.com/launchbadge/sqlx/pull/3267
[#3271]: https://github.com/launchbadge/sqlx/pull/3271
[#3276]: https://github.com/launchbadge/sqlx/pull/3276
[#3279]: https://github.com/launchbadge/sqlx/pull/3279
[#3285]: https://github.com/launchbadge/sqlx/pull/3285
[#3288]: https://github.com/launchbadge/sqlx/pull/3288
[#3291]: https://github.com/launchbadge/sqlx/pull/3291
[#3293]: https://github.com/launchbadge/sqlx/pull/3293
[#3297]: https://github.com/launchbadge/sqlx/pull/3297
[#3298]: https://github.com/launchbadge/sqlx/pull/3298
[#3303]: https://github.com/launchbadge/sqlx/pull/3303
[#3311]: https://github.com/launchbadge/sqlx/pull/3311
[#3312]: https://github.com/launchbadge/sqlx/pull/3312
[#3327]: https://github.com/launchbadge/sqlx/pull/3327
[#3328]: https://github.com/launchbadge/sqlx/pull/3328
[#3329]: https://github.com/launchbadge/sqlx/pull/3329
[#3337]: https://github.com/launchbadge/sqlx/pull/3337
[#3340]: https://github.com/launchbadge/sqlx/pull/3340
[#3341]: https://github.com/launchbadge/sqlx/pull/3341
[#3343]: https://github.com/launchbadge/sqlx/pull/3343
[#3346]: https://github.com/launchbadge/sqlx/pull/3346
[#3350]: https://github.com/launchbadge/sqlx/pull/3350
[#3352]: https://github.com/launchbadge/sqlx/pull/3352
[#3353]: https://github.com/launchbadge/sqlx/pull/3353
[#3356]: https://github.com/launchbadge/sqlx/pull/3356
## 0.7.4 - 2024-03-11

38 pull requests were merged this release cycle.

This is officially the **last** release of the 0.7.x release cycle.

As of this release, development of 0.8.0 has begun on `main` and only high-priority bugfixes may be backported.

### Added

* [[#2891]]: feat: expose getters for connect options fields [[@saiintbrisson]]
* [[#2902]]: feat: add `to_url_lossy` to connect options [[@lily-mosquitoes]]
* [[#2927]]: Support `query!` for cargo-free systems [[@kshramt]]
* [[#2997]]: doc(FAQ): add entry explaining prepared statements [[@abonander]]
* [[#3001]]: Update README to clarify MariaDB support [[@iangilfillan]]
* [[#3004]]: feat(logging): Add numeric elapsed time field elapsed_secs [[@iamjpotts]]
* [[#3007]]: feat: add `raw_sql` API [[@abonander]]
    * This hopefully makes it easier to find how to execute statements which are not supported by the default
      prepared statement interfaces `query*()` and `query!()`.
    * Improved documentation across the board for the `query*()` functions.
    * Deprecated: `execute_many()` and `fetch_many()` on interfaces that use prepared statements.
        * Multiple SQL statements in one query string were only supported by SQLite because its prepared statement
          interface is the *only* way to execute SQL. All other database flavors forbid multiple statements in
          one prepared statement string as an extra defense against SQL injection.
        * The new `raw_sql` API retains this functionality because it explicitly does *not* use prepared statements.
          Raw or text-mode query interfaces generally allow multiple statements in one query string, and this is
          supported by all current databases. Due to their nature, however, one cannot use bind parameters with them.
        * If this change affects you, an issue is open for discussion: https://github.com/launchbadge/sqlx/issues/3108
* [[#3011]]: Added support to IpAddr with MySQL/MariaDB. [[@Icerath]]
* [[#3013]]: Add default implementation for PgInterval [[@pawurb]]
* [[#3018]]: Add default implementation for PgMoney [[@pawurb]]
* [[#3026]]: Update docs to reflect support for MariaDB data types [[@iangilfillan]]
* [[#3037]]: feat(mysql): allow to connect with mysql driver without default behavor [[@darkecho731]]

### Changed

* [[#2900]]: Show latest url to docs for macro.migrate [[@Vrajs16]]
* [[#2914]]: Use `create_new` instead of `atomic-file-write` [[@mattfbacon]]
* [[#2926]]: docs: update example for `PgConnectOptions` [[@Fyko]]
* [[#2989]]: sqlx-core: Remove dotenvy dependency [[@joshtriplett]]
* [[#2996]]: chore: Update ahash to 0.8.7 [[@takenoko-gohan]]
* [[#3006]]: chore(deps): Replace unmaintained tempdir crate with tempfile [[@iamjpotts]]
* [[#3008]]: chore: Ignore .sqlx folder created by running ci steps locally [[@iamjpotts]]
* [[#3009]]: chore(dev-deps): Upgrade env_logger from 0.9 to 0.11 [[@iamjpotts]]
* [[#3010]]: chore(deps): Upgrade criterion to 0.5.1 [[@iamjpotts]]
* [[#3050]]: Optimize SASL auth in sqlx-postgres [[@mirek26]]
* [[#3055]]: Set TCP_NODELAY option on TCP sockets [[@mirek26]]
* [[#3065]]: Improve max_lifetime handling [[@mirek26]]
* [[#3072]]: Change the name of "inner" function generated by `#[sqlx::test]` [[@ciffelia]]
* [[#3083]]: Remove sha1 because it's not being used in postgres [[@rafaelGuerreiro]]

### Fixed

* [[#2898]]: Fixed docs [[@Vrajs16]]
* [[#2905]]: fix(mysql): Close prepared statement if persistence is disabled [[@larsschumacher]]
* [[#2913]]: Fix handling of deferred constraints [[@Thomasdezeeuw]]
* [[#2919]]: fix duplicate "`" in FromRow "default" attribute doc comment [[@shengsheng]]
* [[#2932]]: fix(postgres): avoid unnecessary flush in PgCopyIn::read_from [[@tsing]]
* [[#2955]]: Minor fixes [[@Dawsoncodes]]
* [[#2963]]: Fixed ReadMe badge styling [[@tadghh]]
* [[#2976]]: fix: AnyRow not support PgType::Varchar [[@holicc]]
* [[#3053]]: fix: do not panic when binding a large BigDecimal [[@Ekleog]]
* [[#3056]]: fix: spans in sqlite tracing (#2876) [[@zoomiti]]
* [[#3089]]: fix(migrate): improve error message when parsing version from filename [[@abonander]]
* [[#3098]]: Migrations fixes [[@abonander]]
  * Unhides `sqlx::migrate::Migrator`.
  * Improves I/O error message when failing to read a file in `migrate!()`.

[#2891]: https://github.com/launchbadge/sqlx/pull/2891
[#2898]: https://github.com/launchbadge/sqlx/pull/2898
[#2900]: https://github.com/launchbadge/sqlx/pull/2900
[#2902]: https://github.com/launchbadge/sqlx/pull/2902
[#2905]: https://github.com/launchbadge/sqlx/pull/2905
[#2913]: https://github.com/launchbadge/sqlx/pull/2913
[#2914]: https://github.com/launchbadge/sqlx/pull/2914
[#2919]: https://github.com/launchbadge/sqlx/pull/2919
[#2926]: https://github.com/launchbadge/sqlx/pull/2926
[#2927]: https://github.com/launchbadge/sqlx/pull/2927
[#2932]: https://github.com/launchbadge/sqlx/pull/2932
[#2955]: https://github.com/launchbadge/sqlx/pull/2955
[#2963]: https://github.com/launchbadge/sqlx/pull/2963
[#2976]: https://github.com/launchbadge/sqlx/pull/2976
[#2989]: https://github.com/launchbadge/sqlx/pull/2989
[#2996]: https://github.com/launchbadge/sqlx/pull/2996
[#2997]: https://github.com/launchbadge/sqlx/pull/2997
[#3001]: https://github.com/launchbadge/sqlx/pull/3001
[#3004]: https://github.com/launchbadge/sqlx/pull/3004
[#3006]: https://github.com/launchbadge/sqlx/pull/3006
[#3007]: https://github.com/launchbadge/sqlx/pull/3007
[#3008]: https://github.com/launchbadge/sqlx/pull/3008
[#3009]: https://github.com/launchbadge/sqlx/pull/3009
[#3010]: https://github.com/launchbadge/sqlx/pull/3010
[#3011]: https://github.com/launchbadge/sqlx/pull/3011
[#3013]: https://github.com/launchbadge/sqlx/pull/3013
[#3018]: https://github.com/launchbadge/sqlx/pull/3018
[#3026]: https://github.com/launchbadge/sqlx/pull/3026
[#3037]: https://github.com/launchbadge/sqlx/pull/3037
[#3050]: https://github.com/launchbadge/sqlx/pull/3050
[#3053]: https://github.com/launchbadge/sqlx/pull/3053
[#3055]: https://github.com/launchbadge/sqlx/pull/3055
[#3056]: https://github.com/launchbadge/sqlx/pull/3056
[#3065]: https://github.com/launchbadge/sqlx/pull/3065
[#3072]: https://github.com/launchbadge/sqlx/pull/3072
[#3083]: https://github.com/launchbadge/sqlx/pull/3083
[#3089]: https://github.com/launchbadge/sqlx/pull/3089
[#3098]: https://github.com/launchbadge/sqlx/pull/3098

## 0.7.3 - 2023-11-22

38 pull requests were merged this release cycle.

### Added
* [[#2478]]: feat(citext): support postgres citext [[@hgranthorner]]
* [[#2545]]: Add `fixtures_path` in sqlx::test args [[@ripa1995]]
* [[#2665]]: feat(mysql): support packet splitting [[@tk2217]]
* [[#2752]]: Enhancement #2747 Provide `fn PgConnectOptions::get_host(&self)` [[@boris-lok]]
* [[#2769]]: Customize the macro error message based on the metadata [[@Nemo157]]
* [[#2793]]: derived Hash trait for PgInterval [[@yasamoka]]
* [[#2801]]: derive FromRow: sqlx(default) for all fields [[@grgi]]
* [[#2827]]: Add impl `FromRow` for the unit type [[@nanoqsh]]
* [[#2871]]: Add `MySqlConnectOptions::get_database()`  [[@shiftrightonce]]
* [[#2873]]: Sqlx Cli: Added force flag to drop database for postgres [[@Vrajs16]]
* [[#2894]]: feat: `Text` adapter [[@abonander]]

### Changed
* [[#2701]]: Remove documentation on offline feature [[@Baptistemontan]]
* [[#2713]]: Add additional info regarding using Transaction and PoolConnection as… [[@satwanjyu]]
* [[#2770]]: Update README.md [[@snspinn]]
* [[#2797]]: doc(mysql): document behavior regarding `BOOLEAN` and the query macros [[@abonander]]
* [[#2803]]: Don't use separate temp dir for query jsons (2)  [[@mattfbacon]]
* [[#2819]]: postgres begin cancel safe [[@conradludgate]]
* [[#2832]]: Update extra_float_digits default to 2 instead of 3 [[@brianheineman]]
* [[#2865]]: Update Faq - Bulk upsert with optional fields  [[@Vrajs16]]
* [[#2880]]: feat: use specific message for slow query logs [[@abonander]]
* [[#2882]]: Do not require db url for prepare [[@tamasfe]]
* [[#2890]]: doc(sqlite): cover lack of `NUMERIC` support [[@abonander]]
* [No PR]: Upgraded `libsqlite3-sys` to 0.27.0
  * Note: linkage to `libsqlite3-sys` is considered semver-exempt; 
    see the release notes for 0.7.0 below for details.

### Fixed
* [[#2640]]: fix: sqlx::macro db cleanup race condition by adding a margin to current timestamp [[@fhsgoncalves]]
* [[#2655]]: [fix] Urlencode when passing filenames to sqlite3 [[@uttarayan21]]
* [[#2684]]: Make PgListener recover from UnexpectedEof [[@hamiltop]]
* [[#2688]]: fix: Make rust_decimal and bigdecimal decoding more lenient [[@cameronbraid]]
* [[#2754]]: Is tests/x.py maintained? And I tried fix it. [[@qwerty2501]]
* [[#2784]]: fix: decode postgres time without subsecond [[@granddaifuku]]
* [[#2806]]: Depend on version of async-std with non-private spawn-blocking [[@A248]]
* [[#2820]]: fix: correct decoding of `rust_decimal::Decimal` for high-precision values [[@abonander]]
* [[#2822]]: issue #2821 Update error handling logic when opening a TCP connection [[@anupj]]
* [[#2826]]: chore: bump some sqlx-core dependencies [[@djc]]
* [[#2838]]: Fixes rust_decimal scale for Postgres [[@jkleinknox]]
* [[#2847]]: Fix comment in `sqlx migrate add` help text [[@cryeprecision]]
* [[#2850]]: fix(core): avoid unncessary wakeups in `try_stream!()` [[@abonander]]
* [[#2856]]: Prevent warnings running `cargo build` [[@nyurik]]
* [[#2864]]: fix(sqlite): use `AtomicUsize` for thread IDs [[@abonander]]
* [[#2892]]: Fixed force dropping bug [[@Vrajs16]]

[#2478]: https://github.com/launchbadge/sqlx/pull/2478
[#2545]: https://github.com/launchbadge/sqlx/pull/2545
[#2640]: https://github.com/launchbadge/sqlx/pull/2640
[#2655]: https://github.com/launchbadge/sqlx/pull/2655
[#2665]: https://github.com/launchbadge/sqlx/pull/2665
[#2684]: https://github.com/launchbadge/sqlx/pull/2684
[#2688]: https://github.com/launchbadge/sqlx/pull/2688
[#2701]: https://github.com/launchbadge/sqlx/pull/2701
[#2713]: https://github.com/launchbadge/sqlx/pull/2713
[#2752]: https://github.com/launchbadge/sqlx/pull/2752
[#2754]: https://github.com/launchbadge/sqlx/pull/2754
[#2769]: https://github.com/launchbadge/sqlx/pull/2769
[#2770]: https://github.com/launchbadge/sqlx/pull/2770
[#2782]: https://github.com/launchbadge/sqlx/pull/2782
[#2784]: https://github.com/launchbadge/sqlx/pull/2784
[#2793]: https://github.com/launchbadge/sqlx/pull/2793
[#2797]: https://github.com/launchbadge/sqlx/pull/2797
[#2801]: https://github.com/launchbadge/sqlx/pull/2801
[#2803]: https://github.com/launchbadge/sqlx/pull/2803
[#2806]: https://github.com/launchbadge/sqlx/pull/2806
[#2819]: https://github.com/launchbadge/sqlx/pull/2819
[#2820]: https://github.com/launchbadge/sqlx/pull/2820
[#2822]: https://github.com/launchbadge/sqlx/pull/2822
[#2826]: https://github.com/launchbadge/sqlx/pull/2826
[#2827]: https://github.com/launchbadge/sqlx/pull/2827
[#2832]: https://github.com/launchbadge/sqlx/pull/2832
[#2838]: https://github.com/launchbadge/sqlx/pull/2838
[#2847]: https://github.com/launchbadge/sqlx/pull/2847
[#2850]: https://github.com/launchbadge/sqlx/pull/2850
[#2856]: https://github.com/launchbadge/sqlx/pull/2856
[#2864]: https://github.com/launchbadge/sqlx/pull/2864
[#2865]: https://github.com/launchbadge/sqlx/pull/2865
[#2871]: https://github.com/launchbadge/sqlx/pull/2871
[#2873]: https://github.com/launchbadge/sqlx/pull/2873
[#2880]: https://github.com/launchbadge/sqlx/pull/2880
[#2882]: https://github.com/launchbadge/sqlx/pull/2882
[#2890]: https://github.com/launchbadge/sqlx/pull/2890
[#2892]: https://github.com/launchbadge/sqlx/pull/2892
[#2894]: https://github.com/launchbadge/sqlx/pull/2894

## 0.7.2 - 2023-09-25

23 pull requests were merged this release cycle.

### Added

* [[#2121]]: Add JSON support to `FromRow` derive [[@95ulisse]]
* [[#2533]]: Implement mysql_clear_password [[@ldanilek]]
* [[#2538]]: cli: add --target-version CLI flags for migrate run/revert [[@inahga]]
* [[#2577]]: supplement Postgres listen example with a small chat example [[@JockeM]]
* [[#2602]]: Support naming migrations sequentially [[@vmax]]
* [[#2634]]: Adding PgHasArrayType for &[u8;N] [[@snf]]
* [[#2646]]: Support for setting client certificate and key from bytes [[@wyhaya]]
* [[#2664]]: Automatically infer migration type [[@vmax]]
* [[#2712]]: Add impl for `Type`, `Decode`, and `Encode` for `Box<str>` and `Box<[u8]>` [[@grant0417]]

### Changed
* [[#2650]]: Cleanup format arguments [[@nyurik]]
* [[#2695]]: remove &mut PoolConnection from Executor docs [[@olback]]
    * This impl was removed in 0.7.0 because of coherence issues.
* [[#2706]]: Clarify where optional features should be enabled [[@kryptan]]
* [[#2717]]: Update README.md [[@fermanjj]]
* [[#2739]]: Bump mariadb CI images + mysql unpin [[@grooverdan]]
* [[#2742]]: Implemented poll_flush for Box<S:Socket> [[@bobozaur]]
* [[#2740]]: Remove sealed trait comments from documentation [[@bobozaur]]
* [[#2750]]: Fix #2384, bump flume to v0.11.0 [[@madadam]]
* [[#2757]]: Remove unused `remove_dir_all` crate from `sqlx-cli`, fixes RUSTSEC-2023-0018 [[@aldur]]

### Fixed

* [[#2624]]: Documentation typo: BYTE -> BINARY [[@sebastianv89]]
* [[#2628]]: docs: 0.7 is stable in the entire README [[@marcusirgens]]
* [[#2630]]: fix(postgres): fix buffer management in PgCopyIn::read_from [[@tsing]]
* [[#2651]]: Chore: Fix few build warnings, and make CI fail on warn [[@nyurik]]
* [[#2670]]: fix: ignore extra fields in Postgres describe parsing [[@abonander]]
* [[#2687]]: docs: Fix description of `min_connections` [[@hakoerber]]

[#2121]: https://github.com/launchbadge/sqlx/pull/2121
[#2533]: https://github.com/launchbadge/sqlx/pull/2533
[#2538]: https://github.com/launchbadge/sqlx/pull/2538
[#2577]: https://github.com/launchbadge/sqlx/pull/2577
[#2602]: https://github.com/launchbadge/sqlx/pull/2602
[#2624]: https://github.com/launchbadge/sqlx/pull/2624
[#2628]: https://github.com/launchbadge/sqlx/pull/2628
[#2630]: https://github.com/launchbadge/sqlx/pull/2630
[#2634]: https://github.com/launchbadge/sqlx/pull/2634
[#2646]: https://github.com/launchbadge/sqlx/pull/2646
[#2650]: https://github.com/launchbadge/sqlx/pull/2650
[#2651]: https://github.com/launchbadge/sqlx/pull/2651
[#2664]: https://github.com/launchbadge/sqlx/pull/2664
[#2670]: https://github.com/launchbadge/sqlx/pull/2670
[#2687]: https://github.com/launchbadge/sqlx/pull/2687
[#2695]: https://github.com/launchbadge/sqlx/pull/2695
[#2706]: https://github.com/launchbadge/sqlx/pull/2706
[#2712]: https://github.com/launchbadge/sqlx/pull/2712
[#2717]: https://github.com/launchbadge/sqlx/pull/2717
[#2739]: https://github.com/launchbadge/sqlx/pull/2739
[#2740]: https://github.com/launchbadge/sqlx/pull/2740
[#2742]: https://github.com/launchbadge/sqlx/pull/2742
[#2750]: https://github.com/launchbadge/sqlx/pull/2750
[#2757]: https://github.com/launchbadge/sqlx/pull/2757

## 0.7.1 - 2023-07-14

This release mainly addresses issues reported with the 0.7.0 release.

16 pull requests were merged this release cycle.

### Added
* [[#2551]]: Introduce build_query_scalar for QueryBuilder [[@iamquang95]]
* [[#2605]]: Implement Default for QueryBuilder [[@Xydez]]
* [[#2616]]: feat(sqlx-core): add table function to database error [[@saiintbrisson]]
* [[#2619]]: feat: allow opt-out of `PgHasArrayType` with `#[derive(sqlx::Type)]` [[@abonander]]
  * TL;DR: if you're getting errors from `#[derive(sqlx::Type)]` with `#[sqlx(transparent)]`
    regarding `PgHasArrayType` not being implemented, add `#[sqlx(no_pg_array)]` to fix.

### Changed
* [[#2566]]: improve docs about migration files [[@jnnnnn]]
* [[#2576]]: Major Version Update clap to 4.0 [[@titaniumtraveler]]
* [[#2597]]: Bump webpki-roots to v0.24 [[@paolobarbolini]]
* [[#2603]]: docs(changelog): be more verbose about offline mode breaking change [[@mrl5]]

### Fixed
* [[#2553]]: Implement `Clone` for `PoolOptions` manually (#2548) [[@alilleybrinker]]
* [[#2580]]: Update README.md now that 0.7.0 is no longer in alpha [[@saolof]]
* [[#2585]]: Fix for Issue #2549 - cannot use feature "rust_decimal" without also using "bigdecimal" [[@deneut]]
* [[#2586]]: Fix optional dependency on sqlx-macros [[@kitterion]]
* [[#2593]]: Correct mention of the `tls-native-tls` in the documentation. [[@denschub]]
* [[#2599]]: Remove incorrect CAST in test database cleanup for MySQL. [[@fd]]
* [[#2613]]: Fix readme.md to reduce confusion about optional features (decimal->rust_decimal) [[@vabka]]
* [[#2620]]: fix(sqlite/any): encode bool as integer [[@saiintbrisson]]

[#2551]: https://github.com/launchbadge/sqlx/pull/2551
[#2553]: https://github.com/launchbadge/sqlx/pull/2553
[#2566]: https://github.com/launchbadge/sqlx/pull/2566
[#2576]: https://github.com/launchbadge/sqlx/pull/2576
[#2580]: https://github.com/launchbadge/sqlx/pull/2580
[#2585]: https://github.com/launchbadge/sqlx/pull/2585
[#2586]: https://github.com/launchbadge/sqlx/pull/2586
[#2593]: https://github.com/launchbadge/sqlx/pull/2593
[#2597]: https://github.com/launchbadge/sqlx/pull/2597
[#2599]: https://github.com/launchbadge/sqlx/pull/2599
[#2603]: https://github.com/launchbadge/sqlx/pull/2603
[#2605]: https://github.com/launchbadge/sqlx/pull/2605
[#2613]: https://github.com/launchbadge/sqlx/pull/2613
[#2616]: https://github.com/launchbadge/sqlx/pull/2616
[#2619]: https://github.com/launchbadge/sqlx/pull/2619
[#2620]: https://github.com/launchbadge/sqlx/pull/2620

## 0.7.0 - 2023-06-30

At least **70 pull requests** were merged this release cycle! (The exact count is muddied with pull requests for alpha
releases and such.) And we gained 43 new contributors! Thank you to everyone who helped make this release a reality.

### Breaking
Many revisions were made to query analysis in the SQLite driver; these are all potentially breaking changes
as they can change the output of `sqlx::query!()` _et al_. We'd like to thank [[@tyrelr]] for their numerous PRs to
this area.

The MSSQL driver has been removed as it was not nearly at the same maturity level as the other drivers.
[As previously announced][sqlx-pro], we have plans to introduce a fully featured replacement as a premium offering,
alongside drivers for other proprietary databases, with the goal to support full-time development on SQLx. 

If interested, please email your inquiry to sqlx@launchbadge.com.

The offline mode for the queries has been changed to use a separate file per `query!()` invocation,
which is intended to reduce the number of conflicts when merging branches in a project that both modified queries.
This means that CLI flag `--merged` is no longer supported. See [[#2363]] for details and make sure that your
`sqlx-cli` version is in sync with the `sqlx` version in your project.

The type ascription override syntax for the query macros has been deprecated,
as parse support for it has been removed in `syn 2.0`, which we'll be upgrading to in the next breaking release. 
This can be replaced with type overrides using casting syntax (`as`). 
See [[#2483]] for details.

* [[#1946]]: Fix compile time verification performance regression for sqlite [[@liningpan]]
* [[#1960]]: Fix sqlite update return and order by type inference [[@tyrelr]]
* [[#1984]]: Sqlite EXPLAIN type inference improvements [[@rongcuid]]
* [[#2039]]: Break drivers out into separate crates, clean up some technical debt [[@abonander]]
    * All deprecated items have been removed.
    * The `mssql` feature and associated database driver has been deleted from the source tree. It will return as part of our planned SQLx Pro offering as a from-scratch rewrite with extra features (such as TLS) and type integrations that were previously missing.
    * The `runtime-actix-*` features have been deleted. They were previously changed to be aliases of their `runtime-tokio-*` counterparts for backwards compatibility reasons, but their continued existence is misleading as SQLx has no special knowledge of Actix anymore.
        * To fix, simply replace the `runtime-actix-*` feature with its `runtime-tokio-*` equivalent.
    * The `git2` feature has been removed. This was a requested integration from a while ago that over time made less and less sense to be part of SQLx itself. We have to be careful with the crates we add to our public API as each one introduces yet another semver hazard. The expected replacement is to make `#[derive(sqlx::Type)]` useful enough that users can write wrapper types for whatever they want to use without SQLx needing to be specifically aware of it.
    * The `Executor` impls for `Transaction` and `PoolConnection` have been deleted because they cannot exist in the new crate architecture without rewriting the `Executor` trait entirely.
        * To fix this breakage, simply add a dereference where an `impl Executor` is expected, as they both dereference to the inner connection type which will still implement it:
            * `&mut transaction` -> `&mut *transaction`
            * `&mut connection` -> `&mut *connection`
        * These cannot be blanket impls as it triggers an overflow in the compiler due to the lack of lazy normalization, and
          the driver crates cannot provide their own impls due to the orphan rule.
        * We're expecting to do another major refactor of traits to incorporate generic associated types (GAT).
          This will mean another major release of SQLx but ideally most API usage will not need to change significantly, if at all.
    * The fields of `Migrator` are now `#[doc(hidden)]` and semver-exempt; they weren't meant to be public.
    * The `offline` feature has been removed from the `sqlx` facade crate and is enabled unconditionally as most users are expected to have enabled it anyway and disabling it doesn't seem to appreciably affect compile times.
    * The `decimal` feature has been renamed to `rust_decimal` to match the crate it actually provides integrations for.
    * `AnyDriver` and `AnyConnection` now require either `sqlx::any::install_drivers()` or `sqlx::any::install_default_drivers()` to be called at some point during the process' lifetime before the first connection is made, as the set of possible drivers is now determined at runtime. This was determined to be the least painful way to provide knowledge of database drivers to `Any` without them being hardcoded.
    * The `AnyEncode` trait has been removed.
* [[#2109]]: feat: better database errors [[@saiintbrisson]]
* [[#2094]]: Update libsqlite3-sys to 0.25.1 [[@penberg]]
  * Alongside this upgrade, we are now considering the linkage to `libsqlite3-sys` to be **semver-exempt**,
    and we reserve the right to upgrade it as necessary. If you are using `libsqlite3-sys` directly or a crate that
    links it such as `rusqlite`, you should pin the versions of both crates to avoid breakages from `cargo update`:
```toml
[dependencies]
sqlx = { version = "=0.7.0", features = ["sqlite"] }
rusqlite = "=0.29.0"
```
* [[#2132]]: fix: use owned Builder pattern for ConnectOptions [[@ar3s3ru]]
* [[#2253]]: Sqlite describe fixes [[@tyrelr]]
* [[#2285]]: `time`: Assume UTC when decoding a DATETIME column in sqlite [[@nstinus]]
* [[#2363]]: [offline] Change prepare to one-file-per-query [[@cycraig]]
* [[#2387]]: PATCH: bump libsqlite3-sys to patched version [[@grantkee]]
* [[#2409]]: fix(#2407): respect the HaltIfNull opcode when determining nullability [[@arlyon]]
* [[#2459]]: limit the number of instructions that can be evaluated [[@tyrelr]]
* [[#2467]]: Add and improve sqlite describe performance benchmarks [[@tyrelr]]
* [[#2491]]: sqlite date macro support [[@Arcayr]]
    * Changes `OffsetDateTime` to be the first type used when deserializing a `timestamp` type.
* [[#2496]]: Bump to libsqlite3-sys 0.26 [[@mdecimus]]
* [[#2508]]: Sqlite analytical [[@tyrelr]]


### Added
* [[#1850]]: Add client SSL authentication using key-file for Postgres, MySQL and MariaDB [[@ThibsG]]
* [[#2088]]: feat: Add set_connect_options method to Pool [[@moatra]]
* [[#2113]]: Expose PoolOptions for reading [[@FSMaxB]]
* [[#2115]]: Allow using complex types in `try_from` when deriving `FromRow` [[@95ulisse]]
* [[#2116]]: [SQLite] Add option to execute `PRAGMA optimize;` on close of a connection [[@miles170]]
* [[#2189]]: Added regexp support in sqlite [[@VictorKoenders]]
* [[#2224]]: Add From impls for Json [[@dbeckwith]]
* [[#2256]]: add progress handler support to sqlite [[@nbaztec]]
* [[#2366]]: Allow ignoring attributes for deriving FromRow [[@grgi]]
* [[#2369]]: new type support in query_as [[@0xdeafbeef]]
* [[#2379]]: feat: add `Connection::shrink_buffers`, `PoolConnection::close` [[@abonander]]
* [[#2400]]: fix(docs): example of `sqlx_macros_unstable` in config.toml [[@df51d]]
* [[#2469]]: Add Simple format for Uuid for MySQL & SQLite. [[@MidasLamb]]
* [[#2483]]: chore: add deprecation notice for type ascription use [[@saiintbrisson]]
* [[#2506]]: add args to query builder (#2494) [[@cemoktra]]
* [[#2554]]: Impl `AsMut` for advisory lock types (#2520) [[@alilleybrinker]]
* [[#2559]]: Add CLI autocompletion using clap_complete [[@titaniumtraveler]]


### Changed
* [[#2185]]: Initial work to switch to `tracing` [[@CosmicHorrorDev]]
* [[#2193]]: Start testing on Postgres 15 and drop Postgres 10 [[@paolobarbolini]]
    * We reserve the right to drop support for end-of-lifed database versions [as discussed in our FAQ][faq-db-version].
* [[#2213]]: Use `let else` statements in favor of macro [[@OverHash]]
* [[#2365]]: Update dependencies [[@paolobarbolini]]
* [[#2371]]: Disable rustls crate logging feature by default up to date [[@sergeiivankov]]
* [[#2373]]: chore: Use tracing's fields to get structured logs [[@jaysonsantos]]
* [[#2393]]: Lower default logging level for statements to Debug [[@bnoctis]]
* [[#2445]]: Traverse symlinks when resolving migrations [[@tgeoghegan]]
* [[#2485]]: chore(sqlx-postgres): replace `dirs` with `home` & `etcetera` [[@utkarshgupta137]]
* [[#2515]]: Bump mac_address to 1.1.5 [[@repnop]]
* [[#2440]]: Update rustls to 0.21, webpki-roots to 0.23 [[@SergioBenitez]]
* [[#2563]]: Update rsa to 0.9 [[@paolobarbolini]]
* [[#2564]]: Update bitflags to v2 [[@paolobarbolini]]
* [[#2565]]: Bump indexmap and ahash [[@paolobarbolini]]
* [[#2574]]: doc: make it clear that `ConnectOptions` types impl `FromStr` [[@abonander]]

### Fixed
* [[#2098]]: Fix sqlite compilation [[@cycraig]]
* [[#2120]]: fix logical merge conflict [[@tyrelr]]
* [[#2133]]: Postgres OID resolution query does not take into account current `search_path` [[@95ulisse]]
* [[#2156]]: Fixed typo. [[@cdbfoster]]
* [[#2179]]: fix: ensures recover from fail with PgCopyIn [[@andyquinterom]]
* [[#2200]]: Run CI on *-dev branch [[@joehillen]]
* [[#2222]]: Add context to confusing sqlx prepare parse error [[@laundmo]]
* [[#2271]]: feat: support calling Postgres procedures with the macros [[@bgeron]]
* [[#2282]]: Don't run EXPLAIN nullability analysis on Materialize [[@benesch]]
* [[#2319]]: Set whoami default-features to false [[@thedodd]]
* [[#2352]]: Preparing 0.7.0-alpha.1 release [[@abonander]]
* [[#2355]]: Fixed the example code for `sqlx::test` [[@kenkoooo]]
* [[#2367]]: Fix sqlx-cli create, drop, migrate [[@cycraig]]
* [[#2376]]: fix(pool): close when last handle is dropped, extra check in `try_acquire` [[@abonander]]
* [[#2378]]: Fix README build badge [[@dbrgn]]
* [[#2398]]: fix(prepare): store temporary query files inside the workspace [[@aschey]]
* [[#2402]]: fix: drop old time 0.1.44 dep [[@codahale]]
* [[#2413]]: fix(macros-core): use of undeclared `tracked_path` [[@df51d]]
* [[#2420]]: Enable runtime-tokio feature of sqlx when building sqlx-cli [[@paolobarbolini]]
* [[#2453]]: in README.md, correct spelling and grammar [[@vizvasrj]]
* [[#2454]]: fix: ensure fresh test db's aren't accidentally deleted by do_cleanup [[@phlip9]]
* [[#2507]]: Exposing the Oid of PostgreSQL types [[@Razican]]
* [[#2519]]: Use ::std::result::Result::Ok in output.rs [[@southball]]
* [[#2569]]: Fix broken links to mysql error documentation [[@titaniumtraveler]]
* [[#2570]]: Add a newline to the generated JSON files [[@nyurik]]
* [[#2572]]: Do not panic when `PrepareOk` fails to decode [[@stepantubanov]]
* [[#2573]]: fix(sqlite) Do not drop notify mutex guard until after condvar is triggered [[@andrewwhitehead]]

[sqlx-pro]: https://github.com/launchbadge/sqlx/discussions/1616

[faq-db-version]: https://github.com/launchbadge/sqlx/blob/main/FAQ.md#what-database-versions-does-sqlx-support

[#1850]: https://github.com/launchbadge/sqlx/pull/1850
[#1946]: https://github.com/launchbadge/sqlx/pull/1946
[#1960]: https://github.com/launchbadge/sqlx/pull/1960
[#1984]: https://github.com/launchbadge/sqlx/pull/1984
[#2039]: https://github.com/launchbadge/sqlx/pull/2039
[#2088]: https://github.com/launchbadge/sqlx/pull/2088
[#2092]: https://github.com/launchbadge/sqlx/pull/2092
[#2094]: https://github.com/launchbadge/sqlx/pull/2094
[#2098]: https://github.com/launchbadge/sqlx/pull/2098
[#2109]: https://github.com/launchbadge/sqlx/pull/2109
[#2113]: https://github.com/launchbadge/sqlx/pull/2113
[#2115]: https://github.com/launchbadge/sqlx/pull/2115
[#2116]: https://github.com/launchbadge/sqlx/pull/2116
[#2120]: https://github.com/launchbadge/sqlx/pull/2120
[#2132]: https://github.com/launchbadge/sqlx/pull/2132
[#2133]: https://github.com/launchbadge/sqlx/pull/2133
[#2156]: https://github.com/launchbadge/sqlx/pull/2156
[#2179]: https://github.com/launchbadge/sqlx/pull/2179
[#2185]: https://github.com/launchbadge/sqlx/pull/2185
[#2189]: https://github.com/launchbadge/sqlx/pull/2189
[#2193]: https://github.com/launchbadge/sqlx/pull/2193
[#2200]: https://github.com/launchbadge/sqlx/pull/2200
[#2213]: https://github.com/launchbadge/sqlx/pull/2213
[#2222]: https://github.com/launchbadge/sqlx/pull/2222
[#2224]: https://github.com/launchbadge/sqlx/pull/2224
[#2253]: https://github.com/launchbadge/sqlx/pull/2253
[#2256]: https://github.com/launchbadge/sqlx/pull/2256
[#2271]: https://github.com/launchbadge/sqlx/pull/2271
[#2282]: https://github.com/launchbadge/sqlx/pull/2282
[#2285]: https://github.com/launchbadge/sqlx/pull/2285
[#2319]: https://github.com/launchbadge/sqlx/pull/2319
[#2352]: https://github.com/launchbadge/sqlx/pull/2352
[#2355]: https://github.com/launchbadge/sqlx/pull/2355
[#2363]: https://github.com/launchbadge/sqlx/pull/2363
[#2365]: https://github.com/launchbadge/sqlx/pull/2365
[#2366]: https://github.com/launchbadge/sqlx/pull/2366
[#2367]: https://github.com/launchbadge/sqlx/pull/2367
[#2369]: https://github.com/launchbadge/sqlx/pull/2369
[#2371]: https://github.com/launchbadge/sqlx/pull/2371
[#2373]: https://github.com/launchbadge/sqlx/pull/2373
[#2376]: https://github.com/launchbadge/sqlx/pull/2376
[#2378]: https://github.com/launchbadge/sqlx/pull/2378
[#2379]: https://github.com/launchbadge/sqlx/pull/2379
[#2387]: https://github.com/launchbadge/sqlx/pull/2387
[#2393]: https://github.com/launchbadge/sqlx/pull/2393
[#2398]: https://github.com/launchbadge/sqlx/pull/2398
[#2400]: https://github.com/launchbadge/sqlx/pull/2400
[#2402]: https://github.com/launchbadge/sqlx/pull/2402
[#2408]: https://github.com/launchbadge/sqlx/pull/2408
[#2409]: https://github.com/launchbadge/sqlx/pull/2409
[#2413]: https://github.com/launchbadge/sqlx/pull/2413
[#2420]: https://github.com/launchbadge/sqlx/pull/2420
[#2440]: https://github.com/launchbadge/sqlx/pull/2440
[#2445]: https://github.com/launchbadge/sqlx/pull/2445
[#2453]: https://github.com/launchbadge/sqlx/pull/2453
[#2454]: https://github.com/launchbadge/sqlx/pull/2454
[#2459]: https://github.com/launchbadge/sqlx/pull/2459
[#2467]: https://github.com/launchbadge/sqlx/pull/2467
[#2469]: https://github.com/launchbadge/sqlx/pull/2469
[#2483]: https://github.com/launchbadge/sqlx/pull/2483
[#2485]: https://github.com/launchbadge/sqlx/pull/2485
[#2491]: https://github.com/launchbadge/sqlx/pull/2491
[#2496]: https://github.com/launchbadge/sqlx/pull/2496
[#2506]: https://github.com/launchbadge/sqlx/pull/2506
[#2507]: https://github.com/launchbadge/sqlx/pull/2507
[#2508]: https://github.com/launchbadge/sqlx/pull/2508
[#2515]: https://github.com/launchbadge/sqlx/pull/2515
[#2519]: https://github.com/launchbadge/sqlx/pull/2519
[#2554]: https://github.com/launchbadge/sqlx/pull/2554
[#2559]: https://github.com/launchbadge/sqlx/pull/2559
[#2563]: https://github.com/launchbadge/sqlx/pull/2563
[#2564]: https://github.com/launchbadge/sqlx/pull/2564
[#2565]: https://github.com/launchbadge/sqlx/pull/2565
[#2569]: https://github.com/launchbadge/sqlx/pull/2569
[#2570]: https://github.com/launchbadge/sqlx/pull/2570
[#2572]: https://github.com/launchbadge/sqlx/pull/2572
[#2573]: https://github.com/launchbadge/sqlx/pull/2573
[#2574]: https://github.com/launchbadge/sqlx/pull/2574

## 0.6.3 - 2023-03-21

This is a hotfix to address the breakage caused by transitive dependencies upgrading to `syn = "2"`.

We set `default-features = false` for our dependency on `syn = "1"` to be good crates.io citizens, 
but failed to enable the features we actually used, which went undetected because we transitively depended on
`syn` with the default features enabled through other crates, 
and so they were also on for us because features are additive.

When those other dependencies upgraded to `syn = "2"` it was no longer enabling those features for us, 
and so compilation broke for projects that don't also depend on `syn = "1"`, transitively or otherwise.

There is no PR for this fix as there was no longer a dedicated development branch for `0.6`, 
but discussion can be found in [issue #2418].

As of this release, the `0.7` release is in alpha and so development is no longer occurring against `0.6`.
This fix will be forward-ported to `0.7`.

[issue #2418]: https://github.com/launchbadge/sqlx/issues/2418

## 0.6.2 - 2022-09-14

[25 pull requests][0.6.2-prs] were merged this release cycle.

### Added
* [[#1081]]: Add `try_from` attribute for `FromRow` derive [[@zzhengzhuo]]
    * Exemplifies "out of sight, out of mind." It's surprisingly easy to forget about PRs when they get pushed onto
      the second page. We'll be sure to clean out the backlog for 0.7.0.
* [[#2014]]: Support additional SQLCipher options in SQLite driver. [[@szymek156]]
* [[#2052]]: Add issue templates [[@abonander]]
* [[#2053]]: Add documentation for `IpAddr` support in Postgres [[@rakshith-ravi]]
* [[#2062]]: Add extension support for SQLite [[@bradfier]]
* [[#2063]]: customizable db locking during migration [[@fuzzbuck]]

### Changed
* [[#2025]]: Bump sqlformat to 2.0 [[@NSMustache]]
* [[#2056]]: chore: Switch to sha1 crate [[@stoically]]
* [[#2071]]: Use cargo check consistently in `prepare` [[@cycraig]]

### Fixed
* [[#1991]]: Ensure migration progress is not lost for Postgres, MySQL and SQLite. [[@crepererum]]
* [[#2023]]: Fix expansion of `#[sqlx(flatten)]` for `FromRow` derive [[@RustyYato]]
* [[#2028]]: Use fully qualified path when forwarding to `#[test]` from `#[sqlx::test]` [[@alexander-jackson]]
* [[#2040]]: Fix typo in `FromRow` docs [[@zlidner]]
* [[#2046]]: added flag for PIPES_AS_CONCAT connection setting for MySQL to fix #2034 [[@marcustut]]
* [[#2055]]: Use unlock notify also on `sqlite3_exec`  [[@madadam]]
* [[#2057]]: Make begin,commit,rollback cancel-safe in sqlite  [[@madadam]]
* [[#2058]]: fix typo in documentation [[@lovasoa]]
* [[#2067]]: fix(docs): close code block in query_builder.rs [[@abonander]]
* [[#2069]]: Fix `prepare` race condition in workspaces [[@cycraig]]\
    * NOTE: this changes the directory structure under `target/` that `cargo sqlx prepare` depends on.
      If you use offline mode in your workflow, please rerun `cargo install sqlx-cli` to upgrade.
* [[#2072]]: SqliteConnectOptions typo [[@fasterthanlime]]
* [[#2074]]: fix: mssql uses unsigned for tinyint instead of signed [[@he4d]]
* [[#2081]]: close unnamed portal after each executed extended query [[@DXist]]
* [[#2086]]: PgHasArrayType for transparent types fix. [[@Wopple]]
    * NOTE: this is a breaking change and has been postponed to 0.7.0.
* [[#2089]]: fix: Remove default chrono dep on time for sqlx-cli [[@TravisWhitehead]]
* [[#2091]]: Sqlite explain plan log efficiency [[@tyrelr]]

[0.6.2-prs]: https://github.com/launchbadge/sqlx/pulls?q=is%3Apr+is%3Aclosed+merged%3A2022-08-04..2022-09-14+

[#1081]: https://github.com/launchbadge/sqlx/pull/1081
[#1991]: https://github.com/launchbadge/sqlx/pull/1991
[#2014]: https://github.com/launchbadge/sqlx/pull/2014
[#2023]: https://github.com/launchbadge/sqlx/pull/2023
[#2025]: https://github.com/launchbadge/sqlx/pull/2025
[#2028]: https://github.com/launchbadge/sqlx/pull/2028
[#2040]: https://github.com/launchbadge/sqlx/pull/2040
[#2046]: https://github.com/launchbadge/sqlx/pull/2046
[#2052]: https://github.com/launchbadge/sqlx/pull/2052
[#2053]: https://github.com/launchbadge/sqlx/pull/2053
[#2055]: https://github.com/launchbadge/sqlx/pull/2055
[#2056]: https://github.com/launchbadge/sqlx/pull/2056
[#2057]: https://github.com/launchbadge/sqlx/pull/2057
[#2058]: https://github.com/launchbadge/sqlx/pull/2058
[#2062]: https://github.com/launchbadge/sqlx/pull/2062
[#2063]: https://github.com/launchbadge/sqlx/pull/2063
[#2067]: https://github.com/launchbadge/sqlx/pull/2067
[#2069]: https://github.com/launchbadge/sqlx/pull/2069
[#2071]: https://github.com/launchbadge/sqlx/pull/2071
[#2072]: https://github.com/launchbadge/sqlx/pull/2072
[#2074]: https://github.com/launchbadge/sqlx/pull/2074
[#2081]: https://github.com/launchbadge/sqlx/pull/2081
[#2086]: https://github.com/launchbadge/sqlx/pull/2086
[#2089]: https://github.com/launchbadge/sqlx/pull/2089
[#2091]: https://github.com/launchbadge/sqlx/pull/2091

## 0.6.1 - 2022-08-02

[33 pull requests][0.6.1-prs] were merged this release cycle.

### Added
* [[#1495]]: Add example for manual implementation of the `FromRow` trait [[@Erik1000]]
* [[#1822]]: (Postgres) Add support for `std::net::IpAddr` [[@meh]]
    * Decoding returns an error if the `INET` value in Postgres is a prefix and not a full address
      (`/32` for IPv4, `/128` for IPv6).
* [[#1865]]: Add SQLite support for the `time` crate [[@johnbcodes]]
* [[#1902]]: Add an example of how to use `QueryBuilder::separated()` [[@sbeckeriv]]
* [[#1917]]: Added docs for `sqlx::types::Json` [[@jayy-lmao]]
* [[#1919]]: Implement `Clone` for `PoolOptions` [[@Thomasdezeeuw]]
* [[#1953]]: Support Rust arrays in Postgres [[@e00E]]
* [[#1954]]: Add `push_tuples` for `QueryBuilder` [[@0xdeafbeef]]
* [[#1959]]: Support `#[sqlx(flatten)]` attribute in `FromRow` [[@TheoOiry]]
* [[#1967]]: Add example with external query files [[@JoeyMckenzie]]
* [[#1985]]: Add `query_builder::Separated::push_bind_unseparated()` [[@0xdeafbeef]]
* [[#2001]]: Implement `#[sqlx::test]` for general use
    * Includes automatic database management, migration and fixture application.
    * Drops support for end-of-lifed database versions, see PR for details.
* [[#2005]]: `QueryBuilder` improvements [[@abonander]]
    * Raw SQL getters, new method to build `QueryAs` instead of `Query`.
* [[#2013]]: (SQLite) Allow VFS to be set as URL query parameter [[@liningpan]] 

### Changed
* [[#1679]]: refactor: alias actix-* features to their equivalent tokio-* features [[@robjtede]]
* [[#1906]]: replaced all uses of "uri" to "url" [[@RomainStorai]]
* [[#1965]]: SQLite improvements [[@abonander]]
* [[#1977]]: Docs: clarify relationship between `query_as!()` and `FromRow` [[@abonander]]
* [[#2003]]: Replace `dotenv` with `dotenvy` [[@abonander]]

### Fixed
* [[#1802]]: Try avoiding a full clean in `cargo sqlx prepare --merged` [[@LovecraftianHorror]]
* [[#1848]]: Fix type info access in `Any` database driver [[@raviqqe]]
* [[#1910]]: Set `CARGO_TARGET_DIR` when compiling queries [[@sedrik]]
* [[#1915]]: Pool: fix panic when using callbacks [[@abonander]]
* [[#1930]]: Don't cache SQLite connection for macros [[@LovecraftianHorror]]
* [[#1948]]: Fix panic in Postgres `BYTEA` decode [[@e00E]]
* [[#1955]]: Fix typo in FAQ [[@kenkoooo]]
* [[#1968]]: (Postgres) don't panic if `S` or `V` notice fields are not UTF-8 [[@abonander]]
* [[#1969]]: Fix sqlx-cli build [[@ivan]]
* [[#1974]]: Use the `rust-cache` action for CI [[@abonander]]
* [[#1988]]: Agree on a single default runtime for the whole workspace [[@crepererum]]
* [[#1989]]: Fix panics in `PgListener` [[@crepererum]]
* [[#1990]]: Switch `master` to `main` in docs [[@crepererum]]
    * The change had already been made in the repo, the docs were out of date.
* [[#1993]]: Update versions in quickstart examples in README [[@UramnOIL]]

[0.6.1-prs]: https://github.com/launchbadge/sqlx/pulls?page=1&q=is%3Apr+is%3Aclosed+merged%3A2022-06-17..2022-08-02

[#1906]: https://github.com/launchbadge/sqlx/pull/1906
[#1495]: https://github.com/launchbadge/sqlx/pull/1495
[#1679]: https://github.com/launchbadge/sqlx/pull/1679
[#1802]: https://github.com/launchbadge/sqlx/pull/1802
[#1822]: https://github.com/launchbadge/sqlx/pull/1822
[#1848]: https://github.com/launchbadge/sqlx/pull/1848
[#1865]: https://github.com/launchbadge/sqlx/pull/1865
[#1902]: https://github.com/launchbadge/sqlx/pull/1902
[#1910]: https://github.com/launchbadge/sqlx/pull/1910
[#1915]: https://github.com/launchbadge/sqlx/pull/1915
[#1917]: https://github.com/launchbadge/sqlx/pull/1917
[#1919]: https://github.com/launchbadge/sqlx/pull/1919
[#1930]: https://github.com/launchbadge/sqlx/pull/1930
[#1948]: https://github.com/launchbadge/sqlx/pull/1948
[#1953]: https://github.com/launchbadge/sqlx/pull/1953
[#1954]: https://github.com/launchbadge/sqlx/pull/1954
[#1955]: https://github.com/launchbadge/sqlx/pull/1955
[#1959]: https://github.com/launchbadge/sqlx/pull/1959
[#1965]: https://github.com/launchbadge/sqlx/pull/1965
[#1967]: https://github.com/launchbadge/sqlx/pull/1967
[#1968]: https://github.com/launchbadge/sqlx/pull/1968
[#1969]: https://github.com/launchbadge/sqlx/pull/1969
[#1974]: https://github.com/launchbadge/sqlx/pull/1974
[#1977]: https://github.com/launchbadge/sqlx/pull/1977
[#1985]: https://github.com/launchbadge/sqlx/pull/1985
[#1988]: https://github.com/launchbadge/sqlx/pull/1988
[#1989]: https://github.com/launchbadge/sqlx/pull/1989
[#1990]: https://github.com/launchbadge/sqlx/pull/1990
[#1993]: https://github.com/launchbadge/sqlx/pull/1993
[#2001]: https://github.com/launchbadge/sqlx/pull/2001
[#2003]: https://github.com/launchbadge/sqlx/pull/2003
[#2005]: https://github.com/launchbadge/sqlx/pull/2005
[#2013]: https://github.com/launchbadge/sqlx/pull/2013

## 0.6.0 - 2022-06-16

This release marks the end of the 0.5.x series of releases and contains a number of breaking changes,
mainly to do with backwards-incompatible dependency upgrades. 

As we foresee many more of these in the future, we [surveyed the community] on how to handle this;
the consensus appears to be "just release breaking changes more often." 

As such, we expect the 0.6.x release series to be a shorter one.

[39 pull requests(!)][0.6.0-prs] (not counting "prepare 0.5.12 release", of course) were merged this release cycle.

### Breaking
* [[#1384]]: (Postgres) Move `server_version_num` from trait to inherent impl [[@AtkinsChang]]
* [[#1426]]: Bump `ipnetwork` to 0.19 [[@paolobarbolini]]
* [[#1455]]: Upgrade `time` to 0.3 [[@paolobarbolini]]
* [[#1505]]: Upgrade `rustls` to 0.20 [[@paolobarbolini]]
    * Fortunately, future upgrades should not be breaking as `webpki` is no longer exposed in the API.
* [[#1529]]: Upgrade `bigdecimal` to 0.3 [[@e00E]]
* [[#1602]]: postgres: use `Oid` everywhere instead of `u32` [[@paolobarbolini]]
    * This drops the `Type`, `Decode`, `Encode` impls for `u32` for Postgres as it was misleading.
      Postgres doesn't support unsigned ints without using an extension. These impls were decoding Postgres `OID`s
      as bare `u32`s without any context (and trying to bind a `u32` to a query would produce an `OID` value in SQL).
      This changes that to use a newtype instead, for clarity.
* [[#1612]]: Make all `ConnectOptions` types cloneable [[@05storm26]]
* [[#1618]]: SQLite `chrono::DateTime<FixedOffset>` timezone fix [[@05storm26]]
    * `DateTime<FixedOffset>` will be stored in SQLite with the correct timezone instead of always in UTC.
      This was flagged as a "potentially breaking change" since it changes how dates are sent to SQLite.
* [[#1733]]: Update `git2` to 0.14 [[@joshtriplett]]
* [[#1734]]: Make `PgLTree::push()` infallible and take `PgLTreeLabel` directly [[@sebpuetz]]
* [[#1785]]: Fix Rust type for SQLite `REAL` [[@pruthvikar]]
    * Makes the macros always map a `REAL` column to `f64` instead of `f32` as SQLite uses **only** 64-bit floats.
* [[#1816]]: Improve SQLite support for sub-queries and CTEs [[@tyrelr]]
    * This likely will change the generated code for some invocations `sqlx::query!()` with SQLite.
* [[#1821]]: Update `uuid` crate to v1 [[@paolobarbolini]]
* [[#1901]]: Pool fixes and breaking changes [[@abonander]]
    * Renamed `PoolOptions::connect_timeout` to `acquire_timeout` for clarity.
    * Changed the expected signatures for `PoolOptions::after_connect`, `before_acquire`, `after_release`
    * Changed the signature for `Pool::close()` slightly
        * Now eagerly starts the pool closing, `.await`ing is only necessary if you want to ensure a graceful shutdown.
    * Deleted `PoolConnection::release()` which was previously deprecated in favor of `PoolConnection::detach()`.
    * Fixed connections getting leaked even when calling `.close()`.
* [[#1748]]: Derive `PgHasArrayType` for `#[sqlx(transparent)]` types [[@carols10cents]]
    * This change was released with 0.5.12 but [we didn't realize it was a breaking change] at the time.  
      It was reverted in 0.5.13 and postponed until this release.

### Added
* [[#1843]]: Expose some useful methods on `PgValueRef` [[@mfreeborn]]
* [[#1889]]: SQLx-CLI: add `--connect-timeout` [[@abonander]]
    * Adds a default 10 second connection timeout to all commands.
* [[#1890]]: Added test for mssql LoginAck [[@walf443]]
* [[#1891]]: Added test for mssql ProtocolInfo [[@walf443]]
* [[#1892]]: Added test for mssql ReturnValue [[@walf443]]
* [[#1895]]: Add support for `i16` to `Any` driver [[@EthanYuan]]
* [[#1897]]: Expose `ConnectOptions` and `PoolOptions` on `Pool` and database name on `PgConnectOptions` [[@Nukesor]]

### Changed
* [[#1782]]: Reuse a cached DB connection instead of always opening a new one for `sqlx-macros` [[@LovecraftianHorror]]
* [[#1807]]: Bump remaining dependencies [[@paolobarbolini]]
* [[#1808]]: Update to edition 2021 [[@paolobarbolini]]
    * Note that while SQLx [does not officially track an MSRV] and only officially supports the latest stable Rust, 
      this effectively places a lower bound of 1.56.0 on the range of versions it may work with.
* [[#1823]]: (sqlx-macros) Ignore deps when getting metadata for workspace root [[@LovecraftianHorror]]
* [[#1831]]: Update `crc` to 3.0 [[@djc]]
* [[#1887]]: query_as: don't stop stream after decoding error [[@lovasoa]]

### Fixed
* [[#1814]]: SQLx-cli README: move `Usage` to the same level as `Install` [[@tobymurray]]
* [[#1815]]: SQLx-cli README: reword "building in offline mode" [[@tobymurray]]
* [[#1818]]: Trim `[]` from host string before passing to TcpStream [[@smonv]]
    * This fixes handling of database URLs with IPv6 hosts.
* [[#1842]]: Fix usage of `serde_json` in macros [[@mfreeborn]]
* [[#1855]]: Postgres: fix panics on unknown type OID when decoding [[@demurgos]] 
* [[#1856]]: MySQL: support COLLATE_UTF8MB4_0900_AI_CI [[@scottwey]]
    * Fixes the MySQL driver thinking text columns are bytestring columns when querying against a Planetscale DB.
* [[#1861]]: MySQL: avoid panic when streaming packets are empty [[@e-rhodes]]
* [[#1863]]: Fix nullability check for inner joins in Postgres [[@OskarPersson]]
* [[#1881]]: Fix `field is never read` warnings on Postgres test [[@walf443]]
* [[#1882]]: Fix `unused result must be used` warnings [[@walf443]]
* [[#1888]]: Fix migration checksum comparison during `sqlx migrate info` [[@mdtusz]]
* [[#1894]]: Fix typos [[@kianmeng]]

[surveyed the community]: https://github.com/launchbadge/sqlx/issues/1796
[0.6.0-prs]: https://github.com/launchbadge/sqlx/pulls?page=2&q=is%3Apr+is%3Amerged+merged%3A2022-04-14..2022-06-16
[does not officially track an MSRV]: /FAQ.md#what-versions-of-rust-does-sqlx-support-what-is-sqlxs-msrv
[we didn't realize it was a breaking change]: https://github.com/launchbadge/sqlx/pull/1800#issuecomment-1099898932

[#1384]: https://github.com/launchbadge/sqlx/pull/1384
[#1426]: https://github.com/launchbadge/sqlx/pull/1426
[#1455]: https://github.com/launchbadge/sqlx/pull/1455
[#1505]: https://github.com/launchbadge/sqlx/pull/1505
[#1529]: https://github.com/launchbadge/sqlx/pull/1529
[#1602]: https://github.com/launchbadge/sqlx/pull/1602
[#1612]: https://github.com/launchbadge/sqlx/pull/1612
[#1618]: https://github.com/launchbadge/sqlx/pull/1618
[#1733]: https://github.com/launchbadge/sqlx/pull/1733
[#1734]: https://github.com/launchbadge/sqlx/pull/1734
[#1782]: https://github.com/launchbadge/sqlx/pull/1782
[#1785]: https://github.com/launchbadge/sqlx/pull/1785
[#1807]: https://github.com/launchbadge/sqlx/pull/1807
[#1808]: https://github.com/launchbadge/sqlx/pull/1808
[#1814]: https://github.com/launchbadge/sqlx/pull/1814
[#1815]: https://github.com/launchbadge/sqlx/pull/1815
[#1816]: https://github.com/launchbadge/sqlx/pull/1816
[#1818]: https://github.com/launchbadge/sqlx/pull/1818
[#1821]: https://github.com/launchbadge/sqlx/pull/1821
[#1823]: https://github.com/launchbadge/sqlx/pull/1823
[#1831]: https://github.com/launchbadge/sqlx/pull/1831
[#1842]: https://github.com/launchbadge/sqlx/pull/1842
[#1843]: https://github.com/launchbadge/sqlx/pull/1843
[#1855]: https://github.com/launchbadge/sqlx/pull/1855
[#1856]: https://github.com/launchbadge/sqlx/pull/1856
[#1861]: https://github.com/launchbadge/sqlx/pull/1861
[#1863]: https://github.com/launchbadge/sqlx/pull/1863
[#1881]: https://github.com/launchbadge/sqlx/pull/1881
[#1882]: https://github.com/launchbadge/sqlx/pull/1882
[#1887]: https://github.com/launchbadge/sqlx/pull/1887
[#1888]: https://github.com/launchbadge/sqlx/pull/1888
[#1889]: https://github.com/launchbadge/sqlx/pull/1889
[#1890]: https://github.com/launchbadge/sqlx/pull/1890
[#1891]: https://github.com/launchbadge/sqlx/pull/1891
[#1892]: https://github.com/launchbadge/sqlx/pull/1892
[#1894]: https://github.com/launchbadge/sqlx/pull/1894
[#1895]: https://github.com/launchbadge/sqlx/pull/1895
[#1897]: https://github.com/launchbadge/sqlx/pull/1897
[#1901]: https://github.com/launchbadge/sqlx/pull/1901

## 0.5.13 - 2022-04-15

This is a hotfix that reverts [#1748] as that was an accidental breaking change:  
the generated `PgHasArrayType` impl conflicts with manual impls of the trait.  
This change will have to wait for 0.6.0.

## 0.5.12 - 2022-04-13 (Yanked; use 0.5.13)
[27 pull requests][0.5.12-prs] were merged this release cycle.

### Added
* [[#1641]]: Postgres: Convenient wrapper for advisory locks [[@abonander]]
* [[#1675]]: Add function to undo migrations [[@jdrouet]]
* [[#1722]]: Postgres: implement `PgHasArrayType` for `serde_json::{Value, RawValue}` [[@abreis]]
* [[#1736]]: Derive `Clone` for `MySqlArguments` and `MssqlArguments` [[@0xdeafbeef]]
* [[#1748]]: Derive `PgHasArrayType` for `#[sqlx(transparent)]` types [[@carols10cents]]
* [[#1754]]: Include affected rows alongside returned rows in query logging [[@david-mcgillicuddy-moixa]]
* [[#1757]]: Implement `Type` for `Cow<str>` for MySQL, MSSQL and SQLite [[@ipetkov]]
* [[#1769]]: sqlx-cli: add `--source` to migration subcommands [[@pedromfedricci]]
* [[#1774]]: Postgres: make `extra_float_digits` settable [[@abonander]]
    * Can be set to `None` for Postgres or third-party database servers that don't support the option.
* [[#1776]]: Implement close-event notification for Pool [[@abonander]]
    * Also fixes `PgListener` preventing `Pool::close()` from resolving.
* [[#1780]]: Implement query builder [[@crajcan]]
    * See also [[#1790]]: Document and expand query builder [[@abonander]]
* [[#1781]]: Postgres: support `NUMERIC[]` using `decimal` feature [[@tm-drtina]]
* [[#1784]]: SQLite: add `FromStr`, `Copy`, `PartialEq`, `Eq` impls for options enums [[@andrewwhitehead]]

### Changed
* [[#1625]]: Update RustCrypto crates [[@paolobarbolini]]
* [[#1725]]: Update `heck` to 0.4 [[@paolobarbolini]]
* [[#1738]]: Update `regex` [[@Dylan-DPC]]
* [[#1763]]: SQLite: update `libsqlite3-sys` [[@espindola]]


### Fixed
* [[#1719]]: Fix a link in `query!()` docs [[@vbmade2000]]
* [[#1731]]: Postgres: fix option passing logic [[@liushuyu]]
* [[#1735]]: sqlx-cli: pass `DATABASE_URL` to command spawned in `prepare` [[@LovecraftianHorror]]
* [[#1741]]: Postgres: fix typo in `TSTZRANGE` [[@mgrachev]]
* [[#1761]]: Fix link from `QueryAs` to `query_as()` in docs [[@mgrachev]]
* [[#1786]]: MySQL: silence compile warnings for unused fields [[@andrewwhitehead]]
* [[#1789]]: SQLite: fix left-joins breaking `query!()` macros [[@tyrelr]]
* [[#1791]]: Postgres: fix newline parsing of `.pgpass` files [[@SebastienGllmt]]
* [[#1799]]: `PoolConnection`: don't leak connection permit if drop task fails to run [[@abonander]]

[#1625]: https://github.com/launchbadge/sqlx/pull/1625
[#1641]: https://github.com/launchbadge/sqlx/pull/1641
[#1675]: https://github.com/launchbadge/sqlx/pull/1675
[#1719]: https://github.com/launchbadge/sqlx/pull/1719
[#1722]: https://github.com/launchbadge/sqlx/pull/1722
[#1725]: https://github.com/launchbadge/sqlx/pull/1725
[#1731]: https://github.com/launchbadge/sqlx/pull/1731
[#1735]: https://github.com/launchbadge/sqlx/pull/1735
[#1736]: https://github.com/launchbadge/sqlx/pull/1736
[#1738]: https://github.com/launchbadge/sqlx/pull/1738
[#1741]: https://github.com/launchbadge/sqlx/pull/1741
[#1748]: https://github.com/launchbadge/sqlx/pull/1748
[#1754]: https://github.com/launchbadge/sqlx/pull/1754
[#1757]: https://github.com/launchbadge/sqlx/pull/1757
[#1761]: https://github.com/launchbadge/sqlx/pull/1761
[#1763]: https://github.com/launchbadge/sqlx/pull/1763
[#1769]: https://github.com/launchbadge/sqlx/pull/1769
[#1774]: https://github.com/launchbadge/sqlx/pull/1774
[#1776]: https://github.com/launchbadge/sqlx/pull/1776
[#1780]: https://github.com/launchbadge/sqlx/pull/1780
[#1781]: https://github.com/launchbadge/sqlx/pull/1781
[#1784]: https://github.com/launchbadge/sqlx/pull/1784
[#1786]: https://github.com/launchbadge/sqlx/pull/1786
[#1789]: https://github.com/launchbadge/sqlx/pull/1789
[#1790]: https://github.com/launchbadge/sqlx/pull/1790
[#1791]: https://github.com/launchbadge/sqlx/pull/1791
[#1799]: https://github.com/launchbadge/sqlx/pull/1799

[0.5.12-prs]: https://github.com/launchbadge/sqlx/pulls?q=is%3Apr+is%3Amerged+merged%3A2022-02-19..2022-04-13

## 0.5.11 - 2022-02-17
[20 pull requests][0.5.11-prs] were merged this release cycle.

### Added
* [[#1610]]: Allow converting `AnyConnectOptions` to a specific `ConnectOptions` [[@05storm26]]
* [[#1652]]: Implement `From` for `AnyConnection` [[@genusistimelord]]
* [[#1658]]: Handle `SQLITE_LOCKED` [[@madadam]]
* [[#1665]]: Document offline mode usage with feature flags [[@sedrik]]
* [[#1680]]: Show checksum mismatches in `sqlx migrate info` [[@ifn3]]
* [[#1685]]: Add tip for setting `opt-level` for `sqlx-macros` [[@LovecraftianHorror]]
* [[#1687]]: Docs: `Acquire` examples and alternative [[@stoically]]
* [[#1696]]: Postgres: support for `ltree` [[@cemoktra]]
* [[#1710]]: Postgres: support for `lquery` [[@cemoktra]]

### Changed
* [[#1605]]: Remove unused dependencies [[@paolobarbolini]]
* [[#1606]]: Add target context to Postgres `NOTICE` logs [[@dbeckwith]]
* [[#1684]]: Macros: Cache parsed `sqlx-data.json` instead of reparsing [[@LovecraftianHorror]]

### Fixed
* [[#1608]]: Drop worker shared state in shutdown (SQLite) [[@andrewwhitehead]]
* [[#1619]]: Docs(macros): remove sentences banning usage of `as _` [[@k-jun]]
* [[#1626]]: Simplify `cargo-sqlx` command-line definition [[@tranzystorek-io]]
* [[#1636]]: Fix and extend Postgres transaction example [[@taladar]]
* [[#1657]]: Fix typo in macro docs [[@p9s]]
* [[#1661]]: Fix binding `Option<T>` for `Any` driver [[@ArGGu]]
* [[#1667]]: MySQL: Avoid panicking if packet is empty [[@nappa85]]
* [[#1692]]: Postgres: Fix power calculation when encoding `BigDecimal` into `NUMERIC` [[@VersBinarii]]

Additionally, we have introduced two mitigations for [the issue of the cyclic dependency on `ahash`][aHash#95]: 

* We re-downgraded our version requirement on `indexmap` from `1.7.0` back to `1.6.2` so users can pin it to that
  version [as recommended in aHash#95][ahash-fix]. 
  * [This was regressed accidentally during a sweeping dependency upgrade before the last release][indexmap-regression],
    sorry about that.
* Thanks to the work of [@LovecraftianHorror] in [#1684], we no longer require the `preserve_order` feature of
  `serde_json` which gives users another place to break the cycle by simply not enabling that feature. 
  * This may introduce extra churn in Git diffs for `sqlx-data.json`, however. If this is an issue for you but 
    the dependency cycle isn't, you can re-enable the `preserve_order` feature:
  ```toml
  [dependencies]
  serde_json = { version = "1", features = ["preserve_order"] }
  ```

[aHash#95]: https://github.com/tkaitchuck/aHash/issues/95
[ahash-fix]: https://github.com/tkaitchuck/aHash/issues/95#issuecomment-874150078
[indexmap-regression]: https://github.com/launchbadge/sqlx/pull/1603#issuecomment-1010827637

[#1605]: https://github.com/launchbadge/sqlx/pull/1605
[#1606]: https://github.com/launchbadge/sqlx/pull/1606
[#1608]: https://github.com/launchbadge/sqlx/pull/1608
[#1610]: https://github.com/launchbadge/sqlx/pull/1610
[#1619]: https://github.com/launchbadge/sqlx/pull/1619
[#1626]: https://github.com/launchbadge/sqlx/pull/1626
[#1636]: https://github.com/launchbadge/sqlx/pull/1636
[#1652]: https://github.com/launchbadge/sqlx/pull/1652
[#1657]: https://github.com/launchbadge/sqlx/pull/1657
[#1658]: https://github.com/launchbadge/sqlx/pull/1658
[#1661]: https://github.com/launchbadge/sqlx/pull/1661
[#1665]: https://github.com/launchbadge/sqlx/pull/1665
[#1667]: https://github.com/launchbadge/sqlx/pull/1667
[#1680]: https://github.com/launchbadge/sqlx/pull/1680
[#1684]: https://github.com/launchbadge/sqlx/pull/1684
[#1685]: https://github.com/launchbadge/sqlx/pull/1685
[#1687]: https://github.com/launchbadge/sqlx/pull/1687
[#1692]: https://github.com/launchbadge/sqlx/pull/1692
[#1696]: https://github.com/launchbadge/sqlx/pull/1696
[#1710]: https://github.com/launchbadge/sqlx/pull/1710

[0.5.11-prs]: https://github.com/launchbadge/sqlx/pulls?q=is%3Apr+is%3Amerged+merged%3A2021-12-30..2022-02-17

## 0.5.10 - 2021-12-29
[A whopping 31 pull requests][0.5.10-prs] were merged this release cycle!

According to this changelog, we saw 18 new contributors! However, some of these folks may have missed getting
mentioned in previous entries since we only listed highlights. To avoid anyone feeling left out, I put in the effort
this time and tried to list every single one here.

### Added
* [[#1228]]: Add `Pool::any_kind()` [[@nitnelave]]
* [[#1343]]: Add `Encode/Decode` impl for `Cow<'_, str>` [[@Drevoed]]
* [[#1474]]: Derive `Clone`, `Copy` for `AnyKind` [[@yuyawk]]
* [[#1497]]: Update FAQ to explain how to configure docs.rs to build a project using SQLx [[@russweas]]
* [[#1498]]: Add description of migration file structure to `migrate!()` docs [[@zbigniewzolnierowicz]]
* [[#1508]]: Add `.persistent(bool)` to `QueryAs`, `QueryScalar` [[@akiradeveloper]]
* [[#1514]]: Add support for serialized threading mode to SQLite [[@LLBlumire]]
* [[#1523]]: Allow `rust_decimal::Decimal` in `PgRange` [[@meh]]
* [[#1539]]: Support `PGOPTIONS` and adding custom configuration options in `PgConnectOptions` [[@liushuyu]]
* [[#1562]]: Re-export `either::Either` used by `Executor::fetch_many()` [[@DoumanAsh]]
* [[#1584]]: Add feature to use RusTLS instead of `native-tls` for `sqlx-cli` [[@SonicZentropy]]
* [[#1592]]: Add `AnyConnection::kind()` [[@05storm26]]

### Changes
* [[#1385]]: Rewrite Postgres array handling to reduce boilerplate and allow custom types [[@jplatte]]
* [[#1479]]: Remove outdated mention of `runtime-async-std-native-tls` as the default runtime in README.md [[@yerke]]
* [[#1526]]: Revise `Pool` docs in a couple places [[@abonander]]
* [[#1535]]: Bump `libsqlite-sys` to `0.23.1` [[@nitsky]]
* [[#1551]]: SQLite: make worker thread responsible for all FFI calls [[@abonander]]
    * If you were encountering segfaults with the SQLite driver, there's a good chance this will fix it!
* [[#1557]]: CI: test with Postgres 14 [[@paolobarbolini]]
* [[#1571]]: Make `whoami` dep optional, only pull it in for Postgres [[@joshtriplett]]
* [[#1572]]: Update `rsa` crate to 0.5 [[@paolobarbolini]]
* [[#1591]]: List SeaORM as an ORM option in the README [[@kunjee17]]
* [[#1601]]: Update `itoa` and `dirs` [[@paolobarbolini]]

### Fixes
* [[#1475]]: Fix panic when converting a negative `chrono::Duration` to `PgInterval` [[@yuyawk]]
* [[#1483]]: Fix error when decoding array of custom types from Postgres [[@demurgos]
* [[#1501]]: Reduce `indexmap` version requirement to `1.6.2` [[@dimfeld]]
* [[#1511]]: Fix element type given to Postgres for arrays of custom enums [[@chesedo]]
* [[#1517]]: Fix mismatched type errors in MySQL type tests [[@abonander]]
* [[#1537]]: Fix missing re-export of `PgCopyIn` [[@akiradeveloper]]
* [[#1566]]: Match `~/.pgpass` password after URL parsing and fix user and database ordering [[@D1plo1d]]
* [[#1582]]: `cargo sqlx prepare`: Append to existing `RUSTFLAGS` instead of overwriting [[@tkintscher]]
* [[#1587]]: SQLite: if set, send `PRAGMA key` on a new connection before anything else. [[@parazyd]]
    * This should fix problems with being unable to open databases using SQLCipher.
    

[#1228]: https://github.com/launchbadge/sqlx/pull/1228
[#1343]: https://github.com/launchbadge/sqlx/pull/1343
[#1385]: https://github.com/launchbadge/sqlx/pull/1385
[#1474]: https://github.com/launchbadge/sqlx/pull/1474
[#1475]: https://github.com/launchbadge/sqlx/pull/1475
[#1479]: https://github.com/launchbadge/sqlx/pull/1479
[#1483]: https://github.com/launchbadge/sqlx/pull/1483
[#1497]: https://github.com/launchbadge/sqlx/pull/1497
[#1498]: https://github.com/launchbadge/sqlx/pull/1498
[#1501]: https://github.com/launchbadge/sqlx/pull/1501
[#1508]: https://github.com/launchbadge/sqlx/pull/1508 
[#1511]: https://github.com/launchbadge/sqlx/pull/1511
[#1514]: https://github.com/launchbadge/sqlx/pull/1514
[#1517]: https://github.com/launchbadge/sqlx/pull/1517
[#1523]: https://github.com/launchbadge/sqlx/pull/1523
[#1526]: https://github.com/launchbadge/sqlx/pull/1526
[#1535]: https://github.com/launchbadge/sqlx/pull/1535
[#1537]: https://github.com/launchbadge/sqlx/pull/1537
[#1539]: https://github.com/launchbadge/sqlx/pull/1539
[#1551]: https://github.com/launchbadge/sqlx/pull/1551
[#1557]: https://github.com/launchbadge/sqlx/pull/1557
[#1562]: https://github.com/launchbadge/sqlx/pull/1562
[#1566]: https://github.com/launchbadge/sqlx/pull/1566
[#1571]: https://github.com/launchbadge/sqlx/pull/1571
[#1572]: https://github.com/launchbadge/sqlx/pull/1572
[#1582]: https://github.com/launchbadge/sqlx/pull/1582
[#1584]: https://github.com/launchbadge/sqlx/pull/1584
[#1587]: https://github.com/launchbadge/sqlx/pull/1587
[#1591]: https://github.com/launchbadge/sqlx/pull/1591
[#1592]: https://github.com/launchbadge/sqlx/pull/1592
[#1601]: https://github.com/launchbadge/sqlx/pull/1601
[0.5.10-prs]: https://github.com/launchbadge/sqlx/pulls?page=1&q=is%3Apr+merged%3A2021-10-02..2021-12-31+sort%3Acreated-asc

## 0.5.9 - 2021-10-01

A hotfix release to address the issue of the `sqlx` crate itself still depending on older versions of `sqlx-core` and 
`sqlx-macros`.

No other changes from `0.5.8`.

## 0.5.8 - 2021-10-01 (Yanked; use 0.5.9)

[A total of 24 pull requests][0.5.8-prs] were merged this release cycle! Some highlights: 

* [[#1289]] Support the `immutable` option on SQLite connections [[@djmarcin]]
* [[#1295]] Support custom initial options for SQLite [[@ghassmo]]
    * Allows specifying custom `PRAGMA`s and overriding those set by SQLx.
* [[#1345]] Initial support for Postgres `COPY FROM/TO`[[@montanalow], [@abonander]]
* [[#1439]] Handle multiple waiting results correctly in MySQL [[@eagletmt]]

[#1289]: https://github.com/launchbadge/sqlx/pull/1289
[#1295]: https://github.com/launchbadge/sqlx/pull/1295
[#1345]: https://github.com/launchbadge/sqlx/pull/1345
[#1439]: https://github.com/launchbadge/sqlx/pull/1439
[0.5.8-prs]: https://github.com/launchbadge/sqlx/pulls?q=is%3Apr+is%3Amerged+merged%3A2021-08-21..2021-10-01

## 0.5.7 - 2021-08-20

* [[#1392]] use `resolve_path` when getting path for `include_str!()` [[@abonander]]
    * Fixes a regression introduced by [[#1332]].
* [[#1393]] avoid recursively spawning tasks in `PgListener::drop()` [[@abonander]]
    * Fixes a panic that occurs when `PgListener` is dropped in `async fn main()`.

[#1392]: https://github.com/launchbadge/sqlx/pull/1392
[#1393]: https://github.com/launchbadge/sqlx/pull/1393

## 0.5.6 - 2021-08-16

A large bugfix release, including but not limited to:

* [[#1329]] Implement `MACADDR` type for Postgres [[@nomick]]
* [[#1363]] Fix `PortalSuspended` for array of composite types in Postgres [[@AtkinsChang]]
* [[#1320]] Reimplement `sqlx::Pool` internals using `futures-intrusive` [[@abonander]]
    * This addresses a number of deadlocks/stalls on acquiring connections from the pool.
* [[#1332]] Macros: tell the compiler about external files/env vars to watch [[@abonander]]
    * Includes `sqlx build-script` to create a `build.rs` to watch `migrations/` for changes.
    * Nightly users can try `RUSTFLAGS=--cfg sqlx_macros_unstable` to tell the compiler 
      to watch `migrations/` for changes instead of using a build script. 
    * See the new section in the docs for `sqlx::migrate!()` for details.
* [[#1351]] Fix a few sources of segfaults/errors in SQLite driver [[@abonander]]
    * Includes contributions from [[@link2ext]] and [[@madadam]].
* [[#1323]] Keep track of column typing in SQLite EXPLAIN parsing [[@marshoepial]]
    * This fixes errors in the macros when using `INSERT/UPDATE/DELETE ... RETURNING ...` in SQLite.
    
[A total of 25 pull requests][0.5.6-prs] were merged this release cycle!

[#1329]: https://github.com/launchbadge/sqlx/pull/1329
[#1363]: https://github.com/launchbadge/sqlx/pull/1363
[#1320]: https://github.com/launchbadge/sqlx/pull/1320
[#1332]: https://github.com/launchbadge/sqlx/pull/1332
[#1351]: https://github.com/launchbadge/sqlx/pull/1351
[#1323]: https://github.com/launchbadge/sqlx/pull/1323
[0.5.6-prs]: https://github.com/launchbadge/sqlx/pulls?q=is%3Apr+is%3Amerged+merged%3A2021-05-24..2021-08-17

## 0.5.5 - 2021-05-24

-   [[#1242]] Fix infinite loop at compile time when using query macros [[@toshokan]]

[#1242]: https://github.com/launchbadge/sqlx/pull/1242

## 0.5.4 - 2021-05-22

-   [[#1235]] Fix compilation with rustls from an eager update to webpki [[@ETCaton]]

[#1235]: https://github.com/launchbadge/sqlx/pull/1235

## 0.5.3 - 2021-05-21

-   [[#1211]] Even more tweaks and fixes to the Pool internals [[@abonander]]

-   [[#1213]] Add support for bytes and `chrono::NaiveDateTime` to `Any` [[@guylapid]]

-   [[#1224]] Add support for `chrono::DateTime<Local>` to `Any` with `MySQL` [[@NatPRoach]]

-   [[#1216]] Skip empty lines and comments in pgpass files [[@feikesteenbergen]]

-   [[#1218]] Add support for `PgMoney` to the compile-time type-checking [[@iamsiddhant05]]

[#1211]: https://github.com/launchbadge/sqlx/pull/1211
[#1213]: https://github.com/launchbadge/sqlx/pull/1213
[#1216]: https://github.com/launchbadge/sqlx/pull/1216
[#1218]: https://github.com/launchbadge/sqlx/pull/1218
[#1224]: https://github.com/launchbadge/sqlx/pull/1224

## 0.5.2 - 2021-04-15

-   [[#1149]] Tweak and optimize Pool internals [[@abonander]]

-   [[#1132]] Remove `'static` bound on `Connection::transaction` [[@argv-minus-one]]

-   [[#1128]] Fix `-y` flag for `sqlx db reset -y` [[@qqwa]]

-   [[#1099]] [[#1097]] Truncate buffer when `BufStream` is dropped [[@Diggsey]]

[#1132]: https://github.com/launchbadge/sqlx/pull/1132
[#1149]: https://github.com/launchbadge/sqlx/pull/1149
[#1128]: https://github.com/launchbadge/sqlx/pull/1128
[#1099]: https://github.com/launchbadge/sqlx/pull/1099
[#1097]: https://github.com/launchbadge/sqlx/issues/1097

### PostgreSQL

-   [[#1170]] Remove `Self: Type` bounds in `Encode` / `Decode` implementations for arrays [[@jplatte]]

    Enables working around the lack of support for user-defined array types:

    ```rust
    #[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 _,
    )
    ```

-   [[#1141]] Use `u16::MAX` instead of `i16::MAX` for a check against the largest number of parameters in a query [[@crajcan]]

-   [[#1112]] Add support for `DOMAIN` types [[@demurgos]]

-   [[#1100]] Explicitly `UNLISTEN` before returning connections to the pool in `PgListener` [[@Diggsey]]

[#1170]: https://github.com/launchbadge/sqlx/pull/1170
[#1141]: https://github.com/launchbadge/sqlx/pull/1141
[#1112]: https://github.com/launchbadge/sqlx/pull/1112
[#1100]: https://github.com/launchbadge/sqlx/pull/1100

### SQLite

-   [[#1161]] Catch `SQLITE_MISUSE` on connection close and panic [[@link2xt]]

-   [[#1160]] Do not cast pointers to `i32` (cast to `usize`) [[@link2xt]]

-   [[#1156]] Reset the statement when `fetch_many` stream is dropped [[@link2xt]]

[#1161]: https://github.com/launchbadge/sqlx/pull/1161
[#1160]: https://github.com/launchbadge/sqlx/pull/1160
[#1156]: https://github.com/launchbadge/sqlx/pull/1156

## 0.5.1 - 2021-02-04

-   Update sqlx-rt to 0.3.

## 0.5.0 - 2021-02-04

### Changes

-   [[#983]] [[#1022]] Upgrade async runtime dependencies [[@seryl], [@ant32], [@jplatte], [@robjtede]]

    -   tokio 1.0
    -   actix-rt 2.0

-   [[#854]] Allow chaining `map` and `try_map` [[@jplatte]]

    Additionally enables calling these combinators with the macros:

    ```rust
    let ones: Vec<i32> = query!("SELECT 1 as foo")
        .map(|row| row.foo)
        .fetch_all(&mut conn).await?;
    ```

-   [[#940]] Rename the `#[sqlx(rename)]` attribute used to specify the type name on the database
    side to `#[sqlx(type_name)]` [[@jplatte]].

-   [[#976]] Rename the `DbDone` types to `DbQueryResult`. [[@jplatte]]

-   [[#976]] Remove the `Done` trait. The `.rows_affected()` method is now available as an inherent
    method on `PgQueryResult`, `MySqlQueryResult` and so on. [[@jplatte]]

-   [[#1007]] Remove `any::AnyType` (and replace with directly implementing `Type<Any>`) [[@jplatte]]

### Added

-   [[#998]] [[#821]] Add `.constraint()` to `DatabaseError` [[@fl9]]

-   [[#919]] For SQLite, add support for unsigned integers [[@dignifiedquire]]

### Fixes

-   [[#1002]] For SQLite, `GROUP BY` in `query!` caused an infinite loop at compile time. [[@pymongo]]

-   [[#979]] For MySQL, fix support for non-default authentication. [[@sile]]

-   [[#918]] Recover from dropping `wait_for_conn` inside Pool. [[@antialize]]

[#821]: https://github.com/launchbadge/sqlx/issues/821
[#918]: https://github.com/launchbadge/sqlx/pull/918
[#919]: https://github.com/launchbadge/sqlx/pull/919
[#983]: https://github.com/launchbadge/sqlx/pull/983
[#940]: https://github.com/launchbadge/sqlx/pull/940
[#976]: https://github.com/launchbadge/sqlx/pull/976
[#979]: https://github.com/launchbadge/sqlx/pull/979
[#998]: https://github.com/launchbadge/sqlx/pull/998
[#983]: https://github.com/launchbadge/sqlx/pull/983
[#1002]: https://github.com/launchbadge/sqlx/pull/1002
[#1007]: https://github.com/launchbadge/sqlx/pull/1007
[#1022]: https://github.com/launchbadge/sqlx/pull/1022

## 0.4.2 - 2020-12-19

-   [[#908]] Fix `whoami` crash on FreeBSD platform [[@fundon]] [[@AldaronLau]]

-   [[#895]] Decrement pool size when connection is released [[@andrewwhitehead]]

-   [[#878]] Fix `conn.transaction` wrapper [[@hamza1311]]

    ```rust
    conn.transaction(|transaction: &mut Transaction<Database> | {
        // ...
    });
    ```

-   [[#874]] Recognize `1` as `true` for `SQLX_OFFLINE [[@Pleto]]

-   [[#747]] [[#867]] Replace `lru-cache` with `hashlink` [[@chertov]]

-   [[#860]] Add `rename_all` to `FromRow` and add `camelCase` and `PascalCase` [[@framp]]

-   [[#839]] Add (optional) support for `bstr::BStr`, `bstr::BString`, and `git2::Oid` [[@joshtriplett]]

#### SQLite

-   [[#893]] Fix memory leak if `create_collation` fails [[@slumber]]

-   [[#852]] Fix potential 100% CPU usage in `fetch_one` / `fetch_optional` [[@markazmierczak]]

-   [[#850]] Add `synchronous` option to `SqliteConnectOptions` [[@markazmierczak]]

#### PostgreSQL

-   [[#889]] Fix decimals (one more time) [[@slumber]]

-   [[#876]] Add support for `BYTEA[]` to compile-time type-checking [[@augustocdias]]

-   [[#845]] Fix path for `&[NaiveTime]` in `query!` macros [[@msrd0]]

#### MySQL

-   [[#880]] Consider `utf8mb4_general_ci` as a string [[@mcronce]]

[#908]: https://github.com/launchbadge/sqlx/pull/908
[#895]: https://github.com/launchbadge/sqlx/pull/895
[#893]: https://github.com/launchbadge/sqlx/pull/893
[#889]: https://github.com/launchbadge/sqlx/pull/889
[#880]: https://github.com/launchbadge/sqlx/pull/880
[#878]: https://github.com/launchbadge/sqlx/pull/878
[#876]: https://github.com/launchbadge/sqlx/pull/876
[#874]: https://github.com/launchbadge/sqlx/pull/874
[#867]: https://github.com/launchbadge/sqlx/pull/867
[#860]: https://github.com/launchbadge/sqlx/pull/860
[#854]: https://github.com/launchbadge/sqlx/pull/854
[#852]: https://github.com/launchbadge/sqlx/pull/852
[#850]: https://github.com/launchbadge/sqlx/pull/850
[#845]: https://github.com/launchbadge/sqlx/pull/845
[#839]: https://github.com/launchbadge/sqlx/pull/839
[#747]: https://github.com/launchbadge/sqlx/issues/747

## 0.4.1 – 2020-11-13

Fix docs.rs build by enabling a runtime feature in the docs.rs metadata in `Cargo.toml`.

## 0.4.0 - 2020-11-12

-   [[#774]] Fix usage of SQLx derives with other derive crates [[@NyxCode]]

-   [[#762]] Fix `migrate!()` (with no params) [[@esemeniuc]]

-   [[#755]] Add `kebab-case` to `rename_all` [[@iamsiddhant05]]

-   [[#735]] Support `rustls` [[@jplatte]]

    Adds `-native-tls` or `-rustls` on each runtime feature:

    ```toml
    # previous
    features = [ "runtime-async-std" ]

    # now
    features = [ "runtime-async-std-native-tls" ]
    ```

-   [[#718]] Support tuple structs with `#[derive(FromRow)]` [[@dvermd]]

#### SQLite

-   [[#789]] Support `$NNN` parameters [[@nitsky]]

-   [[#784]] Use `futures_channel::oneshot` in worker for big perf win [[@markazmierczak]]

#### PostgreSQL

-   [[#781]] Fix decimal conversions handling of `0.01` [[@pimeys]]

-   [[#745]] Always prefer parsing of the non-localized notice severity field [[@dstoeckel]]

-   [[#742]] Enable `Vec<DateTime<Utc>>` with chrono [[@mrcd]]

#### MySQL

-   [[#743]] Consider `utf8mb4_bin` as a string [[@digorithm]]

-   [[#739]] Fix minor protocol detail with `iteration-count` that was blocking Vitess [[@mcronce]]

[#774]: https://github.com/launchbadge/sqlx/pull/774
[#789]: https://github.com/launchbadge/sqlx/pull/789
[#784]: https://github.com/launchbadge/sqlx/pull/784
[#781]: https://github.com/launchbadge/sqlx/pull/781
[#762]: https://github.com/launchbadge/sqlx/pull/762
[#755]: https://github.com/launchbadge/sqlx/pull/755
[#745]: https://github.com/launchbadge/sqlx/pull/745
[#743]: https://github.com/launchbadge/sqlx/pull/743
[#742]: https://github.com/launchbadge/sqlx/pull/742
[#735]: https://github.com/launchbadge/sqlx/pull/735
[#739]: https://github.com/launchbadge/sqlx/pull/739
[#718]: https://github.com/launchbadge/sqlx/pull/718

## 0.4.0-beta.1 - 2020-07-27

### Highlights

-   Enable compile-time type checking from cached metadata to enable building
    in an environment without access to a development database (e.g., Docker, CI).

-   Initial support for **Microsoft SQL Server**. If there is something missing that you need,
    open an issue. We are happy to help.

-   SQL migrations, both with a CLI tool and programmatically loading migrations at runtime.

-   Runtime-determined database driver, `Any`, to support compile-once and run with a database
    driver selected at runtime.

-   Support for user-defined types and more generally overriding the inferred Rust type from SQL
    with compile-time SQL verification.

### Fixed

#### MySQL

-   [[#418]] Support zero dates and times [[@blackwolf12333]]

### Added

-   [[#174]] Inroduce a builder to construct connections to bypass the URL parsing

    ```rust
    // MSSQL
    let conn = MssqlConnectOptions::new()
        .host("localhost")
        .database("master")
        .username("sa")
        .password("Password")
        .connect().await?;

    // SQLite
    let conn = SqliteConnectOptions::from_str("sqlite://a.db")?
        .foreign_keys(false)
        .connect().await?;
    ```

-   [[#127]] Get the last ID or Row ID inserted for MySQL or SQLite

    ```rust
    // MySQL
    let id: u64 = query!("INSERT INTO table ( col ) VALUES ( ? )", val)
        .execute(&mut conn).await?
        .last_insert_id(); // LAST_INSERT_ID()

    // SQLite
    let id: i64 = query!("INSERT INTO table ( col ) VALUES ( ?1 )", val)
        .execute(&mut conn).await?
        .last_insert_rowid(); // sqlite3_last_insert_rowid()
    ```

-   [[#263]] Add hooks to the Pool: `after_connect`, `before_release`, and `after_acquire`

    ```rust
    // PostgreSQL
    let pool = PgPoolOptions::new()
        .after_connect(|conn| Box::pin(async move {
            conn.execute("SET application_name = 'your_app';").await?;
            conn.execute("SET search_path = 'my_schema';").await?;

            Ok(())
        }))
        .connect("postgres:// …").await?
    ```

-   [[#308]] [[#495]] Extend `derive(FromRow)` with support for `#[sqlx(default)]` on fields to allow reading in a partial query [[@OriolMunoz]]

-   [[#454]] [[#456]] Support `rust_decimal::Decimal` as an alternative to `bigdecimal::BigDecimal` for `NUMERIC` columns in MySQL and PostgreSQL [[@pimeys]]

-   [[#181]] Column names and type information is now accessible from `Row` via `Row::columns()` or `Row::column(name)`

#### PostgreSQL

-   [[#197]] [[#271]] Add initial support for `INTERVAL` (full support pending a `time::Period` type) [[@dimtion]]

#### MySQL

-   [[#449]] [[#450]] Support Unix Domain Sockets (UDS) for MySQL [[@pimeys]]

#### SQLite

-   Types are now inferred for expressions. This means its now possible to use `query!` and `query_as!` for:

    ```rust
    let row = query!("SELECT 10 as _1, x + 5 as _2 FROM table").fetch_one(&mut conn).await?;

    assert_eq!(row._1, 10);
    assert_eq!(row._2, 5); // 5 + x?
    ```

-   [[#167]] Support `foreign_keys` explicitly with a `foreign_keys(true)` method available on `SqliteConnectOptions` which is a builder
    for new SQLite connections (and can be passed into `PoolOptions` to build a pool).

    ```rust
    let conn = SqliteConnectOptions::new()
        .foreign_keys(true) // on by default
        .connect().await?;
    ```

-   [[#430]] [[#438]] Add method to get the raw SQLite connection handle [[@agentsim]]

    ```rust
    // conn is `SqliteConnection`
    // this is not unsafe, but what you do with the handle will be
    let ptr: *mut libsqlite3::sqlite3 = conn.as_raw_handle();
    ```

-   [[#164]] Support `TIMESTAMP`, `DATETIME`, `DATE`, and `TIME` via `chrono` in SQLite [[@felipesere]] [[@meteficha]]

### Changed

-   `Transaction` now mutably borrows a connection instead of owning it. This enables a new (or nested) transaction to be started from `&mut conn`.

-   [[#145]] [[#444]] Use a least-recently-used (LRU) cache to limit the growth of the prepared statement cache for SQLite, MySQL, and PostgreSQL [[@pimeys]]

#### SQLite

-   [[#499]] `INTEGER` now resolves to `i64` instead of `i32`, `INT4` will still resolve to `i32`

### Removed

[#127]: https://github.com/launchbadge/sqlx/issues/127
[#174]: https://github.com/launchbadge/sqlx/issues/174
[#145]: https://github.com/launchbadge/sqlx/issues/145
[#164]: https://github.com/launchbadge/sqlx/issues/164
[#167]: https://github.com/launchbadge/sqlx/issues/167
[#181]: https://github.com/launchbadge/sqlx/issues/181
[#197]: https://github.com/launchbadge/sqlx/issues/197
[#263]: https://github.com/launchbadge/sqlx/issues/263
[#308]: https://github.com/launchbadge/sqlx/issues/308
[#418]: https://github.com/launchbadge/sqlx/issues/418
[#430]: https://github.com/launchbadge/sqlx/issues/430
[#449]: https://github.com/launchbadge/sqlx/issues/449
[#499]: https://github.com/launchbadge/sqlx/issues/499
[#454]: https://github.com/launchbadge/sqlx/issues/454
[#271]: https://github.com/launchbadge/sqlx/pull/271
[#444]: https://github.com/launchbadge/sqlx/pull/444
[#438]: https://github.com/launchbadge/sqlx/pull/438
[#495]: https://github.com/launchbadge/sqlx/pull/495
[#495]: https://github.com/launchbadge/sqlx/pull/495

## 0.3.5 - 2020-05-06

### Fixed

-   [[#259]] Handle percent-encoded paths for SQLite [[@g-s-k]]

-   [[#281]] Deallocate SQLite statements before closing the SQLite connection [[@hasali19]]

-   [[#284]] Fix handling of `0` for `BigDecimal` in PostgreSQL and MySQL [[@abonander]]

### Added

-   [[#256]] Add `query_unchecked!` and `query_file_unchecked!` with similar semantics to `query_as_unchecked!` [[@meh]]

-   [[#252]] [[#297]] Derive several traits for the `Json<T>` wrapper type [[@meh]]

-   [[#261]] Add support for `#[sqlx(rename_all = "snake_case")]` to `#[derive(Type)]` [[@shssoichiro]]

-   [[#253]] Add support for UNIX domain sockets to PostgreSQL [[@Nilix007]]

-   [[#251]] Add support for textual JSON on MySQL [[@blackwolf12333]]

-   [[#275]] [[#268]] Optionally log formatted SQL queries on execution [[@shssoichiro]]

-   [[#267]] Support Cargo.toml relative `.env` files; allows for each crate in a workspace to use their own `.env` file and thus their own `DATABASE_URL` [[@xyzd]]

[#252]: https://github.com/launchbadge/sqlx/pull/252
[#261]: https://github.com/launchbadge/sqlx/pull/261
[#256]: https://github.com/launchbadge/sqlx/pull/256
[#259]: https://github.com/launchbadge/sqlx/pull/259
[#253]: https://github.com/launchbadge/sqlx/pull/253
[#297]: https://github.com/launchbadge/sqlx/pull/297
[#251]: https://github.com/launchbadge/sqlx/pull/251
[#275]: https://github.com/launchbadge/sqlx/pull/275
[#267]: https://github.com/launchbadge/sqlx/pull/267
[#268]: https://github.com/launchbadge/sqlx/pull/268
[#281]: https://github.com/launchbadge/sqlx/pull/281
[#284]: https://github.com/launchbadge/sqlx/pull/284

## 0.3.4 - 2020-04-10

### Fixed

-   [[#241]] Type name for custom enum is not always attached to TypeInfo in PostgreSQL

-   [[#237]] [[#238]] User-defined type name matching is now case-insensitive in PostgreSQL [[@qtbeee]]

-   [[#231]] Handle empty queries (and those with comments) in SQLite

-   [[#228]] Provide `MapRow` implementations for functions (enables `.map(|row| ...)` over `.try_map(|row| ...)`)

### Added

-   [[#234]] Add support for `NUMERIC` in MySQL with the `bigdecimal` crate [[@xiaopengli89]]

-   [[#227]] Support `#[sqlx(rename = "new_name")]` on struct fields within a `FromRow` derive [[@sidred]]

[#228]: https://github.com/launchbadge/sqlx/issues/228
[#231]: https://github.com/launchbadge/sqlx/issues/231
[#237]: https://github.com/launchbadge/sqlx/issues/237
[#241]: https://github.com/launchbadge/sqlx/issues/241
[#227]: https://github.com/launchbadge/sqlx/pull/227
[#234]: https://github.com/launchbadge/sqlx/pull/234
[#238]: https://github.com/launchbadge/sqlx/pull/238

## 0.3.3 - 2020-04-01

### Fixed

-   [[#214]] Handle percent-encoded usernames in a database URL [[@jamwaffles]]

### Changed

-   [[#216]] Mark `Cursor`, `Query`, `QueryAs`, `query::Map`, and `Transaction` as `#[must_use]` [[@Ace4896]]

-   [[#213]] Remove matches dependency and use matches macro from std [[@nrjais]]

[#216]: https://github.com/launchbadge/sqlx/pull/216
[#214]: https://github.com/launchbadge/sqlx/pull/214
[#213]: https://github.com/launchbadge/sqlx/pull/213

## 0.3.2 - 2020-03-31

### Fixed

-   [[#212]] Removed sneaky `println!` in `MySqlCursor`

[#212]: https://github.com/launchbadge/sqlx/issues/212

## 0.3.1 - 2020-03-30

### Fixed

-   [[#203]] Allow an empty password for MySQL

-   [[#204]] Regression in error reporting for invalid SQL statements on PostgreSQL

-   [[#200]] Fixes the incorrect handling of raw (`r#...`) fields of a struct in the `FromRow` derive [[@sidred]]

[#200]: https://github.com/launchbadge/sqlx/pull/200
[#203]: https://github.com/launchbadge/sqlx/issues/203
[#204]: https://github.com/launchbadge/sqlx/issues/204

## 0.3.0 - 2020-03-29

### Breaking Changes

-   `sqlx::Row` now has a lifetime (`'c`) tied to the database connection. In effect, this means that you cannot store `Row`s or collect
    them into a collection. `Query` (returned from `sqlx::query()`) has `map()` which takes a function to map from the `Row` to
    another type to make this transition easier.

    In 0.2.x

    ```rust
    let rows = sqlx::query("SELECT 1")
        .fetch_all(&mut conn).await?;
    ```

    In 0.3.x

    ```rust
    let values: Vec<i32> = sqlx::query("SELECT 1")
        .map(|row: PgRow| row.get(0))
        .fetch_all(&mut conn).await?;
    ```

    To assist with the above, `sqlx::query_as()` now supports querying directly into tuples (up to 9 elements) or
    struct types with a `#[derive(FromRow)]`.

    ```rust
    // This extension trait is needed until a rust bug is fixed
    use sqlx::postgres::PgQueryAs;

    let values: Vec<(i32, bool)> = sqlx::query_as("SELECT 1, false")
        .fetch_all(&mut conn).await?;
    ```

-   `HasSqlType<T>: Database` is now `T: Type<Database>` to mirror `Encode` and `Decode`

-   `Query::fetch` (returned from `query()`) now returns a new `Cursor` type. `Cursor` is a Stream-like type where the
    item type borrows into the stream (which itself borrows from connection). This means that using `query().fetch()` you can now
    stream directly from the database with **zero-copy** and **zero-allocation**.

-   Remove `PgTypeInfo::with_oid` and replace with `PgTypeInfo::with_name`

### Added

-   Results from the database are now zero-copy and no allocation beyond a shared read buffer
    for the TCP stream ( in other words, almost no per-query allocation ). Bind arguments still
    do allocate a buffer per query.

-   [[#129]] Add support for [SQLite](https://sqlite.org/index.html). Generated code should be very close to normal use of the C API.

    -   Adds `Sqlite`, `SqliteConnection`, `SqlitePool`, and other supporting types

-   [[#97]] [[#134]] Add support for user-defined types. [[@Freax13]]

    -   Rust-only domain types or transparent wrappers around SQL types. These may be used _transparently_ inplace of
        the SQL type.

        ```rust
        #[derive(sqlx::Type)]
        #[repr(transparent)]
        struct Meters(i32);
        ```

    -   Enumerations may be defined in Rust and can match SQL by integer discriminant or variant name.

        ```rust
        #[derive(sqlx::Type)]
        #[repr(i32)] // Expects a INT in SQL
        enum Color { Red = 1, Green = 2, Blue = 3 }
        ```

        ```rust
        #[derive(sqlx::Type)]
        #[sqlx(rename = "TEXT")] // May also be the name of a user defined enum type
        #[sqlx(rename_all = "lowercase")] // similar to serde rename_all
        enum Color { Red, Green, Blue } // expects 'red', 'green', or 'blue'
        ```

    -   **Postgres** further supports user-defined composite types.

        ```rust
        #[derive(sqlx::Type)]
        #[sqlx(rename = "interface_type")]
        struct InterfaceType {
            name: String,
            supplier_id: i32,
            price: f64
        }
        ```

-   [[#98]] [[#131]] Add support for asynchronous notifications in Postgres (`LISTEN` / `NOTIFY`). [[@thedodd]]

    -   Supports automatic reconnection on connection failure.

    -   `PgListener` implements `Executor` and may be used to execute queries. Be careful however as if the
        intent is to handle and process messages rapidly you don't want to be tying up the connection
        for too long. Messages received during queries are buffered and will be delivered on the next call
        to `recv()`.

    ```rust
    let mut listener = PgListener::new(DATABASE_URL).await?;

    listener.listen("topic").await?;

    loop {
        let message = listener.recv().await?;

        println!("payload = {}", message.payload);
    }
    ```

-   Add _unchecked_ variants of the query macros. These will still verify the SQL for syntactic and
    semantic correctness with the current database but they will not check the input or output types.

    This is intended as a temporary solution until `query_as!` is able to support user defined types.

    -   `query_as_unchecked!`
    -   `query_file_as_unchecked!`

-   Add support for many more types in Postgres

    -   `JSON`, `JSONB` [[@oeb25]]
    -   `INET`, `CIDR` [[@PoiScript]]
    -   Arrays [[@oeb25]]
    -   Composites ( Rust tuples or structs with a `#[derive(Type)]` )
    -   `NUMERIC` [[@abonander]]
    -   `OID` (`u32`)
    -   `"CHAR"` (`i8`)
    -   `TIMESTAMP`, `TIMESTAMPTZ`, etc. with the `time` crate [[@utter-step]]
    -   Enumerations ( Rust enums with a `#[derive(Type)]` ) [[@Freax13]]

### Changed

-   `Query` (and `QueryAs`; returned from `query()`, `query_as()`, `query!()`, and `query_as!()`) now will accept both `&mut Connection` or
    `&Pool` where as in 0.2.x they required `&mut &Pool`.

-   `Executor` now takes any value that implements `Execute` as a query. `Execute` is implemented for `Query` and `QueryAs` to mean
    exactly what they've meant so far, a prepared SQL query. However, `Execute` is also implemented for just `&str` which now performs
    a raw or unprepared SQL query. You can further use this to fetch `Row`s from the database though it is not as efficient as the
    prepared API (notably Postgres and MySQL send data back in TEXT mode as opposed to in BINARY mode).

    ```rust
    use sqlx::Executor;

    // Set the time zone parameter
    conn.execute("SET TIME ZONE LOCAL;").await

    // Demonstrate two queries at once with the raw API
    let mut cursor = conn.fetch("SELECT 1; SELECT 2");
    let row = cursor.next().await?.unwrap();
    let value: i32 = row.get(0); // 1
    let row = cursor.next().await?.unwrap();
    let value: i32 = row.get(0); // 2
    ```

### Removed

-   `Query` (returned from `query()`) no longer has `fetch_one`, `fetch_optional`, or `fetch_all`. You _must_ map the row using `map()` and then
    you will have a `query::Map` value that has the former methods available.

    ```rust
    let values: Vec<i32> = sqlx::query("SELECT 1")
        .map(|row: PgRow| row.get(0))
        .fetch_all(&mut conn).await?;
    ```

### Fixed

-   [[#62]] [[#130]] [[#135]] Remove explicit set of `IntervalStyle`. Allow usage of SQLx for CockroachDB and potentially PgBouncer. [[@bmisiak]]

-   [[#108]] Allow nullable and borrowed values to be used as arguments in `query!` and `query_as!`. For example, where the column would
    resolve to `String` in Rust (TEXT, VARCHAR, etc.), you may now use `Option<String>`, `Option<&str>`, or `&str` instead. [[@abonander]]

-   [[#108]] Make unknown type errors far more informative. As an example, trying to `SELECT` a `DATE` column will now try and tell you about the
    `chrono` feature. [[@abonander]]

    ```
    optional feature `chrono` required for type DATE of column #1 ("now")
    ```

[#62]: https://github.com/launchbadge/sqlx/issues/62
[#130]: https://github.com/launchbadge/sqlx/issues/130
[#98]: https://github.com/launchbadge/sqlx/pull/98
[#97]: https://github.com/launchbadge/sqlx/pull/97
[#134]: https://github.com/launchbadge/sqlx/pull/134
[#129]: https://github.com/launchbadge/sqlx/pull/129
[#131]: https://github.com/launchbadge/sqlx/pull/131
[#135]: https://github.com/launchbadge/sqlx/pull/135
[#108]: https://github.com/launchbadge/sqlx/pull/108

## 0.2.6 - 2020-03-10

### Added

-   [[#114]] Export `sqlx_core::Transaction` [[@thedodd]]

### Fixed

-   [[#125]] [[#126]] Fix statement execution in MySQL if it contains NULL statement values [[@repnop]]

-   [[#105]] [[#109]] Allow trailing commas in query macros [[@timmythetiny]]

[#105]: https://github.com/launchbadge/sqlx/pull/105
[#109]: https://github.com/launchbadge/sqlx/pull/109
[#114]: https://github.com/launchbadge/sqlx/pull/114
[#125]: https://github.com/launchbadge/sqlx/pull/125
[#126]: https://github.com/launchbadge/sqlx/pull/126
[@timmythetiny]: https://github.com/timmythetiny
[@thedodd]: https://github.com/thedodd

## 0.2.5 - 2020-02-01

### Fixed

-   Fix decoding of Rows containing NULLs in Postgres [#104]

-   After a large review and some battle testing by [@ianthetechie](https://github.com/ianthetechie)
    of the `Pool`, a live leaking issue was found. This has now been fixed by [@abonander] in [#84] which
    included refactoring to make the pool internals less brittle (using RAII instead of manual
    work is one example) and to help any future contributors when changing the pool internals.

-   Passwords are now being percent-decoded before being presented to the server [[@repnop]]

-   [@100] Fix `FLOAT` and `DOUBLE` decoding in MySQL

[#84]: https://github.com/launchbadge/sqlx/issues/84
[#100]: https://github.com/launchbadge/sqlx/issues/100
[#104]: https://github.com/launchbadge/sqlx/issues/104

### Added

-   [[#72]] Add `PgTypeInfo::with_oid` to allow simple construction of `PgTypeInfo` which enables `HasSqlType`
    to be implemented by downstream consumers of SQLx [[@jplatte]]

-   [[#96]] Add support for returning columns from `query!` with a name of a rust keyword by
    using raw identifiers [[@yaahc]]

-   [[#71]] Implement derives for `Encode` and `Decode`. This is the first step to supporting custom types in SQLx. [[@Freax13]]

[#72]: https://github.com/launchbadge/sqlx/issues/72
[#96]: https://github.com/launchbadge/sqlx/issues/96
[#71]: https://github.com/launchbadge/sqlx/issues/71

## 0.2.4 - 2020-01-18

### Fixed

-   Fix decoding of Rows containing NULLs in MySQL (and add an integration test so this doesn't break again)

## 0.2.3 - 2020-01-18

### Fixed

-   Fix `query!` when used on a query that does not return results

## 0.2.2 - 2020-01-16

### Added

-   [[#57]] Add support for unsigned integers and binary types in `query!` for MySQL [[@mehcode]]

[#57]: https://github.com/launchbadge/sqlx/issues/57

### Fixed

-   Fix stall when requesting TLS from a Postgres server that explicitly does not support TLS (such as postgres running inside docker) [[@abonander]]

-   [[#66]] Declare used features for `tokio` in `sqlx-macros` explicitly

[#66]: https://github.com/launchbadge/sqlx/issues/66

## 0.2.1 - 2020-01-16

### Fixed

-   [[#64], [#65]] Fix decoding of Rows containing NULLs in MySQL [[@danielakhterov]]

[#64]: https://github.com/launchbadge/sqlx/pull/64
[#65]: https://github.com/launchbadge/sqlx/pull/65

-   [[#55]] Use a shared tokio runtime for the `query!` macro compile-time execution (under the `runtime-tokio` feature) [[@udoprog]]

[#55]: https://github.com/launchbadge/sqlx/pull/55

## 0.2.0 - 2020-01-15

### Fixed

-   https://github.com/launchbadge/sqlx/issues/47

### Added

-   Support Tokio through an optional `runtime-tokio` feature.

-   Support SQL transactions. You may now use the `begin()` function on `Pool` or `Connection` to
    start a new SQL transaction. This returns `sqlx::Transaction` which will `ROLLBACK` on `Drop`
    or can be explicitly `COMMIT` using `commit()`.

-   Support TLS connections.

## 0.1.4 - 2020-01-11

### Fixed

-   https://github.com/launchbadge/sqlx/issues/43

-   https://github.com/launchbadge/sqlx/issues/40

### Added

-   Support for `SCRAM-SHA-256` authentication in Postgres [#37](https://github.com/launchbadge/sqlx/pull/37) [@danielakhterov](https://github.com/danielakhterov)

-   Implement `Debug` for Pool [#42](https://github.com/launchbadge/sqlx/pull/42) [@prettynatty](https://github.com/prettynatty)

## 0.1.3 - 2020-01-06

### Fixed

-   https://github.com/launchbadge/sqlx/issues/30

## 0.1.2 - 2020-01-03

### Added

-   Support for Authentication in MySQL 5+ including the newer authentication schemes now default in MySQL 8: `mysql_native_password`, `sha256_password`, and `caching_sha2_password`.

-   [`Chrono`](https://github.com/chronotope/chrono) support for MySQL was only partially implemented (was missing `NaiveTime` and `DateTime<Utc>`).

-   `Vec<u8>` (and `[u8]`) support for MySQL (`BLOB`) and Postgres (`BYTEA`).

[@abonander]: https://github.com/abonander
[@danielakhterov]: https://github.com/danielakhterov
[@mehcode]: https://github.com/mehcode
[@udoprog]: https://github.com/udoprog
[@jplatte]: https://github.com/jplatte
[@yaahc]: https://github.com/yaahc
[@freax13]: https://github.com/Freax13
[@repnop]: https://github.com/repnop
[@bmisiak]: https://github.com/bmisiak
[@oeb25]: https://github.com/oeb25
[@poiscript]: https://github.com/PoiScript
[@utter-step]: https://github.com/utter-step
[@sidred]: https://github.com/sidred
[@ace4896]: https://github.com/Ace4896
[@jamwaffles]: https://github.com/jamwaffles
[@nrjais]: https://github.com/nrjais
[@qtbeee]: https://github.com/qtbeee
[@xiaopengli89]: https://github.com/xiaopengli89
[@meh]: https://github.com/meh
[@shssoichiro]: https://github.com/shssoichiro
[@nilix007]: https://github.com/Nilix007
[@g-s-k]: https://github.com/g-s-k
[@blackwolf12333]: https://github.com/blackwolf12333
[@xyzd]: https://github.com/xyzd
[@hasali19]: https://github.com/hasali19
[@oriolmunoz]: https://github.com/OriolMunoz
[@pimeys]: https://github.com/pimeys
[@agentsim]: https://github.com/agentsim
[@meteficha]: https://github.com/meteficha
[@felipesere]: https://github.com/felipesere
[@dimtion]: https://github.com/dimtion
[@fundon]: https://github.com/fundon
[@aldaronlau]: https://github.com/AldaronLau
[@andrewwhitehead]: https://github.com/andrewwhitehead
[@slumber]: https://github.com/slumber
[@mcronce]: https://github.com/mcronce
[@hamza1311]: https://github.com/hamza1311
[@augustocdias]: https://github.com/augustocdias
[@pleto]: https://github.com/Pleto
[@chertov]: https://github.com/chertov
[@framp]: https://github.com/framp
[@markazmierczak]: https://github.com/markazmierczak
[@msrd0]: https://github.com/msrd0
[@joshtriplett]: https://github.com/joshtriplett
[@nyxcode]: https://github.com/NyxCode
[@nitsky]: https://github.com/nitsky
[@esemeniuc]: https://github.com/esemeniuc
[@iamsiddhant05]: https://github.com/iamsiddhant05
[@dstoeckel]: https://github.com/dstoeckel
[@mrcd]: https://github.com/mrcd
[@dvermd]: https://github.com/dvermd
[@seryl]: https://github.com/seryl
[@ant32]: https://github.com/ant32
[@robjtede]: https://github.com/robjtede
[@pymongo]: https://github.com/pymongo
[@sile]: https://github.com/sile
[@fl9]: https://github.com/fl9
[@antialize]: https://github.com/antialize
[@dignifiedquire]: https://github.com/dignifiedquire
[@argv-minus-one]: https://github.com/argv-minus-one
[@qqwa]: https://github.com/qqwa
[@diggsey]: https://github.com/Diggsey
[@crajcan]: https://github.com/crajcan
[@demurgos]: https://github.com/demurgos
[@link2xt]: https://github.com/link2xt
[@guylapid]: https://github.com/guylapid
[@natproach]: https://github.com/NatPRoach
[@feikesteenbergen]: https://github.com/feikesteenbergen
[@etcaton]: https://github.com/ETCaton
[@toshokan]: https://github.com/toshokan
[@nomick]: https://github.com/nomick
[@marshoepial]: https://github.com/marshoepial
[@link2ext]: https://github.com/link2ext
[@madadam]: https://github.com/madadam
[@AtkinsChang]: https://github.com/AtkinsChang
[@djmarcin]: https://github.com/djmarcin
[@ghassmo]: https://github.com/ghassmo
[@eagletmt]: https://github.com/eagletmt
[@
Download .txt
gitextract_7wdu157x/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── examples.yml
│       ├── sqlx-cli.yml
│       └── sqlx.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── FAQ.md
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── benches/
│   └── sqlite/
│       └── describe.rs
├── clippy.toml
├── contrib/
│   └── ide/
│       └── vscode/
│           └── settings.json
├── examples/
│   ├── .gitignore
│   ├── mysql/
│   │   └── todos/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       ├── migrations/
│   │       │   └── 20200718111257_todos.sql
│   │       └── src/
│   │           └── main.rs
│   ├── postgres/
│   │   ├── axum-social-with-tests/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   ├── 1_user.sql
│   │   │   │   ├── 2_post.sql
│   │   │   │   └── 3_comment.sql
│   │   │   ├── src/
│   │   │   │   ├── http/
│   │   │   │   │   ├── error.rs
│   │   │   │   │   ├── mod.rs
│   │   │   │   │   ├── post/
│   │   │   │   │   │   ├── comment.rs
│   │   │   │   │   │   └── mod.rs
│   │   │   │   │   └── user.rs
│   │   │   │   ├── lib.rs
│   │   │   │   ├── main.rs
│   │   │   │   └── password.rs
│   │   │   └── tests/
│   │   │       ├── comment.rs
│   │   │       ├── common.rs
│   │   │       ├── fixtures/
│   │   │       │   ├── comments.sql
│   │   │       │   ├── posts.sql
│   │   │       │   └── users.sql
│   │   │       ├── post.rs
│   │   │       └── user.rs
│   │   ├── chat/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── files/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   └── 20220712221654_files.sql
│   │   │   ├── queries/
│   │   │   │   ├── insert_seed_data.sql
│   │   │   │   └── list_all_posts.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── json/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   └── 20200824190010_json.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listen/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── mockable-todos/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── docker-compose.yml
│   │   │   ├── migrations/
│   │   │   │   └── 20200718111257_todos.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── multi-database/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── accounts/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   ├── 02_account.sql
│   │   │   │   │   └── 03_session.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── payments/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   └── 02_payment.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── sqlx.toml
│   │   │   └── src/
│   │   │       ├── main.rs
│   │   │       └── migrations/
│   │   │           ├── 01_setup.sql
│   │   │           └── 02_purchase.sql
│   │   ├── multi-tenant/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── accounts/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   ├── 02_account.sql
│   │   │   │   │   └── 03_session.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── payments/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── migrations/
│   │   │   │   │   ├── 01_setup.sql
│   │   │   │   │   └── 02_payment.sql
│   │   │   │   ├── sqlx.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   ├── sqlx.toml
│   │   │   └── src/
│   │   │       ├── main.rs
│   │   │       └── migrations/
│   │   │           ├── 01_setup.sql
│   │   │           └── 02_purchase.sql
│   │   ├── preferred-crates/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── sqlx.toml
│   │   │   ├── src/
│   │   │   │   ├── main.rs
│   │   │   │   └── migrations/
│   │   │   │       ├── 01_setup.sql
│   │   │   │       └── 02_users.sql
│   │   │   ├── uses-rust-decimal/
│   │   │   │   ├── Cargo.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   └── uses-time/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── lib.rs
│   │   ├── todos/
│   │   │   ├── Cargo.toml
│   │   │   ├── README.md
│   │   │   ├── migrations/
│   │   │   │   └── 20200718111257_todos.sql
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── transaction/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       ├── migrations/
│   │       │   └── 20200718111257_todos.sql
│   │       └── src/
│   │           └── main.rs
│   ├── sqlite/
│   │   ├── extension/
│   │   │   ├── Cargo.toml
│   │   │   ├── download-extension.sh
│   │   │   ├── migrations/
│   │   │   │   └── 20250203094951_addresses.sql
│   │   │   ├── sqlx.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── todos/
│   │       ├── Cargo.toml
│   │       ├── README.md
│   │       ├── migrations/
│   │       │   └── 20200718111257_todos.sql
│   │       └── src/
│   │           └── main.rs
│   └── x.py
├── gen-changelog.sh
├── rust-toolchain.toml
├── sqlx-cli/
│   ├── Cargo.toml
│   ├── README.md
│   ├── src/
│   │   ├── bin/
│   │   │   ├── cargo-sqlx.rs
│   │   │   └── sqlx.rs
│   │   ├── completions.rs
│   │   ├── database.rs
│   │   ├── lib.rs
│   │   ├── metadata.rs
│   │   ├── migrate.rs
│   │   ├── opt.rs
│   │   └── prepare.rs
│   └── tests/
│       ├── add.rs
│       ├── assets/
│       │   ├── config_default_type_reversible.toml
│       │   ├── config_default_versioning_sequential.toml
│       │   ├── config_default_versioning_timestamp.toml
│       │   └── sample_metadata.json
│       ├── common/
│       │   └── mod.rs
│       ├── ignored-chars/
│       │   ├── BOM/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   ├── CRLF/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   ├── LF/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   ├── oops-all-tabs/
│       │   │   ├── .gitattributes
│       │   │   ├── 1_user.sql
│       │   │   ├── 2_post.sql
│       │   │   └── 3_comment.sql
│       │   └── sqlx.toml
│       ├── migrate.rs
│       └── migrations_reversible/
│           ├── 20230101000000_test1.down.sql
│           ├── 20230101000000_test1.up.sql
│           ├── 20230201000000_test2.down.sql
│           ├── 20230201000000_test2.up.sql
│           ├── 20230301000000_test3.down.sql
│           ├── 20230301000000_test3.up.sql
│           ├── 20230401000000_test4.down.sql
│           ├── 20230401000000_test4.up.sql
│           ├── 20230501000000_test5.down.sql
│           └── 20230501000000_test5.up.sql
├── sqlx-core/
│   ├── Cargo.toml
│   └── src/
│       ├── acquire.rs
│       ├── any/
│       │   ├── arguments.rs
│       │   ├── column.rs
│       │   ├── connection/
│       │   │   ├── backend.rs
│       │   │   ├── executor.rs
│       │   │   └── mod.rs
│       │   ├── database.rs
│       │   ├── driver.rs
│       │   ├── error.rs
│       │   ├── kind.rs
│       │   ├── migrate.rs
│       │   ├── mod.rs
│       │   ├── options.rs
│       │   ├── query_result.rs
│       │   ├── row.rs
│       │   ├── statement.rs
│       │   ├── transaction.rs
│       │   ├── type_info.rs
│       │   ├── types/
│       │   │   ├── blob.rs
│       │   │   ├── bool.rs
│       │   │   ├── float.rs
│       │   │   ├── int.rs
│       │   │   ├── mod.rs
│       │   │   └── str.rs
│       │   └── value.rs
│       ├── arguments.rs
│       ├── column.rs
│       ├── common/
│       │   ├── mod.rs
│       │   └── statement_cache.rs
│       ├── config/
│       │   ├── common.rs
│       │   ├── drivers.rs
│       │   ├── macros.rs
│       │   ├── migrate.rs
│       │   ├── mod.rs
│       │   ├── reference.toml
│       │   └── tests.rs
│       ├── connection.rs
│       ├── database.rs
│       ├── decode.rs
│       ├── describe.rs
│       ├── encode.rs
│       ├── error.rs
│       ├── executor.rs
│       ├── ext/
│       │   ├── async_stream.rs
│       │   ├── mod.rs
│       │   └── ustr.rs
│       ├── from_row.rs
│       ├── fs.rs
│       ├── io/
│       │   ├── buf.rs
│       │   ├── buf_mut.rs
│       │   ├── buf_stream.rs
│       │   ├── decode.rs
│       │   ├── encode.rs
│       │   ├── mod.rs
│       │   ├── read_buf.rs
│       │   └── write_and_flush.rs
│       ├── lib.rs
│       ├── logger.rs
│       ├── migrate/
│       │   ├── error.rs
│       │   ├── migrate.rs
│       │   ├── migration.rs
│       │   ├── migration_type.rs
│       │   ├── migrator.rs
│       │   ├── mod.rs
│       │   └── source.rs
│       ├── net/
│       │   ├── mod.rs
│       │   ├── socket/
│       │   │   ├── buffered.rs
│       │   │   └── mod.rs
│       │   └── tls/
│       │       ├── mod.rs
│       │       ├── tls_native_tls.rs
│       │       ├── tls_rustls.rs
│       │       └── util.rs
│       ├── pool/
│       │   ├── connection.rs
│       │   ├── executor.rs
│       │   ├── inner.rs
│       │   ├── maybe.rs
│       │   ├── mod.rs
│       │   └── options.rs
│       ├── query.rs
│       ├── query_as.rs
│       ├── query_builder.rs
│       ├── query_scalar.rs
│       ├── raw_sql.rs
│       ├── row.rs
│       ├── rt/
│       │   ├── mod.rs
│       │   ├── rt_async_io/
│       │   │   ├── mod.rs
│       │   │   ├── socket.rs
│       │   │   └── timeout.rs
│       │   └── rt_tokio/
│       │       ├── mod.rs
│       │       └── socket.rs
│       ├── sql_str.rs
│       ├── statement.rs
│       ├── sync.rs
│       ├── testing/
│       │   ├── fixtures.rs
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── bstr.rs
│       │   ├── json.rs
│       │   ├── mod.rs
│       │   ├── non_zero.rs
│       │   └── text.rs
│       └── value.rs
├── sqlx-macros/
│   ├── Cargo.toml
│   └── src/
│       └── lib.rs
├── sqlx-macros-core/
│   ├── Cargo.toml
│   ├── clippy.toml
│   └── src/
│       ├── common.rs
│       ├── database/
│       │   ├── impls.rs
│       │   └── mod.rs
│       ├── derives/
│       │   ├── attributes.rs
│       │   ├── decode.rs
│       │   ├── encode.rs
│       │   ├── mod.rs
│       │   ├── row.rs
│       │   └── type.rs
│       ├── lib.rs
│       ├── migrate.rs
│       ├── query/
│       │   ├── args.rs
│       │   ├── cache.rs
│       │   ├── data.rs
│       │   ├── input.rs
│       │   ├── metadata.rs
│       │   ├── mod.rs
│       │   └── output.rs
│       └── test_attr.rs
├── sqlx-mysql/
│   ├── Cargo.toml
│   └── src/
│       ├── any.rs
│       ├── arguments.rs
│       ├── collation.rs
│       ├── column.rs
│       ├── connection/
│       │   ├── auth.rs
│       │   ├── establish.rs
│       │   ├── executor.rs
│       │   ├── mod.rs
│       │   ├── stream.rs
│       │   └── tls.rs
│       ├── database.rs
│       ├── error.rs
│       ├── io/
│       │   ├── buf.rs
│       │   ├── buf_mut.rs
│       │   └── mod.rs
│       ├── lib.rs
│       ├── migrate.rs
│       ├── options/
│       │   ├── connect.rs
│       │   ├── mod.rs
│       │   ├── parse.rs
│       │   └── ssl_mode.rs
│       ├── protocol/
│       │   ├── auth.rs
│       │   ├── capabilities.rs
│       │   ├── connect/
│       │   │   ├── auth_switch.rs
│       │   │   ├── handshake.rs
│       │   │   ├── handshake_response.rs
│       │   │   ├── mod.rs
│       │   │   └── ssl_request.rs
│       │   ├── mod.rs
│       │   ├── packet.rs
│       │   ├── response/
│       │   │   ├── eof.rs
│       │   │   ├── err.rs
│       │   │   ├── mod.rs
│       │   │   ├── ok.rs
│       │   │   └── status.rs
│       │   ├── row.rs
│       │   ├── statement/
│       │   │   ├── execute.rs
│       │   │   ├── mod.rs
│       │   │   ├── prepare.rs
│       │   │   ├── prepare_ok.rs
│       │   │   ├── row.rs
│       │   │   └── stmt_close.rs
│       │   └── text/
│       │       ├── column.rs
│       │       ├── mod.rs
│       │       ├── ping.rs
│       │       ├── query.rs
│       │       ├── quit.rs
│       │       └── row.rs
│       ├── query_result.rs
│       ├── row.rs
│       ├── statement.rs
│       ├── testing/
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── bigdecimal.rs
│       │   ├── bool.rs
│       │   ├── bytes.rs
│       │   ├── chrono.rs
│       │   ├── float.rs
│       │   ├── inet.rs
│       │   ├── int.rs
│       │   ├── json.rs
│       │   ├── mod.rs
│       │   ├── mysql_time.rs
│       │   ├── rust_decimal.rs
│       │   ├── str.rs
│       │   ├── text.rs
│       │   ├── time.rs
│       │   ├── uint.rs
│       │   └── uuid.rs
│       └── value.rs
├── sqlx-postgres/
│   ├── Cargo.toml
│   └── src/
│       ├── advisory_lock.rs
│       ├── any.rs
│       ├── arguments.rs
│       ├── bind_iter.rs
│       ├── column.rs
│       ├── connection/
│       │   ├── describe.rs
│       │   ├── establish.rs
│       │   ├── executor.rs
│       │   ├── mod.rs
│       │   ├── resolve.rs
│       │   ├── sasl.rs
│       │   ├── stream.rs
│       │   └── tls.rs
│       ├── copy.rs
│       ├── database.rs
│       ├── error.rs
│       ├── io/
│       │   ├── buf_mut.rs
│       │   └── mod.rs
│       ├── lib.rs
│       ├── listener.rs
│       ├── message/
│       │   ├── authentication.rs
│       │   ├── backend_key_data.rs
│       │   ├── bind.rs
│       │   ├── close.rs
│       │   ├── command_complete.rs
│       │   ├── copy.rs
│       │   ├── data_row.rs
│       │   ├── describe.rs
│       │   ├── execute.rs
│       │   ├── flush.rs
│       │   ├── mod.rs
│       │   ├── notification.rs
│       │   ├── parameter_description.rs
│       │   ├── parameter_status.rs
│       │   ├── parse.rs
│       │   ├── parse_complete.rs
│       │   ├── password.rs
│       │   ├── query.rs
│       │   ├── ready_for_query.rs
│       │   ├── response.rs
│       │   ├── row_description.rs
│       │   ├── sasl.rs
│       │   ├── ssl_request.rs
│       │   ├── startup.rs
│       │   ├── sync.rs
│       │   └── terminate.rs
│       ├── migrate.rs
│       ├── options/
│       │   ├── connect.rs
│       │   ├── doc.md
│       │   ├── mod.rs
│       │   ├── parse.rs
│       │   ├── pgpass.rs
│       │   └── ssl_mode.rs
│       ├── query_result.rs
│       ├── row.rs
│       ├── statement.rs
│       ├── testing/
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── array.rs
│       │   ├── bigdecimal-range.md
│       │   ├── bigdecimal.rs
│       │   ├── bit_vec.rs
│       │   ├── bool.rs
│       │   ├── bytes.rs
│       │   ├── chrono/
│       │   │   ├── date.rs
│       │   │   ├── datetime.rs
│       │   │   ├── mod.rs
│       │   │   └── time.rs
│       │   ├── citext.rs
│       │   ├── cube.rs
│       │   ├── float.rs
│       │   ├── geometry/
│       │   │   ├── box.rs
│       │   │   ├── circle.rs
│       │   │   ├── line.rs
│       │   │   ├── line_segment.rs
│       │   │   ├── mod.rs
│       │   │   ├── path.rs
│       │   │   ├── point.rs
│       │   │   └── polygon.rs
│       │   ├── hstore.rs
│       │   ├── int.rs
│       │   ├── interval.rs
│       │   ├── ipnet/
│       │   │   ├── ipaddr.rs
│       │   │   ├── ipnet.rs
│       │   │   └── mod.rs
│       │   ├── ipnetwork/
│       │   │   ├── ipaddr.rs
│       │   │   ├── ipnetwork.rs
│       │   │   └── mod.rs
│       │   ├── json.rs
│       │   ├── lquery.rs
│       │   ├── ltree.rs
│       │   ├── mac_address.rs
│       │   ├── mod.rs
│       │   ├── money.rs
│       │   ├── numeric.rs
│       │   ├── oid.rs
│       │   ├── range.rs
│       │   ├── record.rs
│       │   ├── rust_decimal-range.md
│       │   ├── rust_decimal.rs
│       │   ├── str.rs
│       │   ├── text.rs
│       │   ├── time/
│       │   │   ├── date.rs
│       │   │   ├── datetime.rs
│       │   │   ├── mod.rs
│       │   │   └── time.rs
│       │   ├── time_tz.rs
│       │   ├── tuple.rs
│       │   ├── uuid.rs
│       │   └── void.rs
│       └── value.rs
├── sqlx-sqlite/
│   ├── Cargo.toml
│   └── src/
│       ├── any.rs
│       ├── arguments.rs
│       ├── column.rs
│       ├── connection/
│       │   ├── collation.rs
│       │   ├── describe.rs
│       │   ├── deserialize.rs
│       │   ├── establish.rs
│       │   ├── execute.rs
│       │   ├── executor.rs
│       │   ├── explain.rs
│       │   ├── handle.rs
│       │   ├── intmap.rs
│       │   ├── mod.rs
│       │   ├── preupdate_hook.rs
│       │   └── worker.rs
│       ├── database.rs
│       ├── error.rs
│       ├── lib.rs
│       ├── logger.rs
│       ├── migrate.rs
│       ├── options/
│       │   ├── auto_vacuum.rs
│       │   ├── connect.rs
│       │   ├── journal_mode.rs
│       │   ├── locking_mode.rs
│       │   ├── mod.rs
│       │   ├── parse.rs
│       │   └── synchronous.rs
│       ├── query_result.rs
│       ├── regexp.rs
│       ├── row.rs
│       ├── statement/
│       │   ├── handle.rs
│       │   ├── mod.rs
│       │   ├── unlock_notify.rs
│       │   └── virtual.rs
│       ├── testing/
│       │   └── mod.rs
│       ├── transaction.rs
│       ├── type_checking.rs
│       ├── type_info.rs
│       ├── types/
│       │   ├── bool.rs
│       │   ├── bytes.rs
│       │   ├── chrono.rs
│       │   ├── float.rs
│       │   ├── int.rs
│       │   ├── json.rs
│       │   ├── mod.rs
│       │   ├── str.rs
│       │   ├── text.rs
│       │   ├── time.rs
│       │   ├── uint.rs
│       │   └── uuid.rs
│       └── value.rs
├── sqlx-test/
│   ├── Cargo.toml
│   └── src/
│       └── lib.rs
├── src/
│   ├── any/
│   │   ├── install_drivers_note.md
│   │   └── mod.rs
│   ├── lib.md
│   ├── lib.rs
│   ├── macros/
│   │   ├── mod.rs
│   │   └── test.md
│   ├── spec_error.rs
│   └── ty_match.rs
└── tests/
    ├── .dockerignore
    ├── .env
    ├── .gitignore
    ├── README.md
    ├── any/
    │   ├── any.rs
    │   └── pool.rs
    ├── certs/
    │   ├── .gitignore
    │   ├── README.md
    │   ├── ca.crt
    │   ├── client.crt
    │   ├── keys/
    │   │   ├── ca.key
    │   │   ├── client.key
    │   │   └── server.key
    │   └── server.crt
    ├── docker-compose.yml
    ├── docker.py
    ├── fixtures/
    │   ├── mysql/
    │   │   ├── posts.sql
    │   │   └── users.sql
    │   └── postgres/
    │       ├── posts.sql
    │       └── users.sql
    ├── migrate/
    │   ├── macro.rs
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   └── migrations_simple/
    │       ├── 20220721115250_add_test_table.sql
    │       └── 20220721115524_convert_type.sql
    ├── mssql/
    │   ├── Dockerfile
    │   ├── configure-db.sh
    │   ├── describe.rs
    │   ├── entrypoint.sh
    │   ├── macros.rs
    │   ├── mssql-2017.dockerfile
    │   ├── mssql.rs
    │   ├── setup.sql
    │   └── types.rs
    ├── mysql/
    │   ├── Dockerfile
    │   ├── derives.rs
    │   ├── describe.rs
    │   ├── error.rs
    │   ├── fixtures/
    │   │   ├── comments.sql
    │   │   ├── posts.sql
    │   │   └── users.sql
    │   ├── macros.rs
    │   ├── migrate.rs
    │   ├── migrations/
    │   │   ├── 1_user.sql
    │   │   ├── 2_post.sql
    │   │   └── 3_comment.sql
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   ├── migrations_simple/
    │   │   ├── 20220721115250_add_test_table.sql
    │   │   └── 20220721115524_convert_type.sql
    │   ├── my.cnf
    │   ├── mysql.rs
    │   ├── rustsec.rs
    │   ├── setup-mariadb.sql
    │   ├── setup.sql
    │   ├── test-attr.rs
    │   └── types.rs
    ├── postgres/
    │   ├── Dockerfile
    │   ├── derives.rs
    │   ├── describe.rs
    │   ├── error.rs
    │   ├── fixtures/
    │   │   ├── comments.sql
    │   │   ├── posts.sql
    │   │   ├── rustsec/
    │   │   │   └── 2024_0363.sql
    │   │   └── users.sql
    │   ├── macros.rs
    │   ├── migrate.rs
    │   ├── migrations/
    │   │   ├── 0_setup.sql
    │   │   ├── 1_user.sql
    │   │   ├── 2_post.sql
    │   │   └── 3_comment.sql
    │   ├── migrations_no_tx/
    │   │   └── 0_create_db.sql
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   ├── migrations_simple/
    │   │   ├── 20220721115250_add_test_table.sql
    │   │   └── 20220721115524_convert_type.sql
    │   ├── pg_hba.conf
    │   ├── postgres.rs
    │   ├── query_builder.rs
    │   ├── rustsec.rs
    │   ├── setup.sql
    │   ├── test-attr.rs
    │   ├── test-query.sql
    │   └── types.rs
    ├── sqlite/
    │   ├── .gitignore
    │   ├── any.rs
    │   ├── derives.rs
    │   ├── describe.rs
    │   ├── error.rs
    │   ├── fixtures/
    │   │   ├── comments.sql
    │   │   ├── posts.sql
    │   │   └── users.sql
    │   ├── macros.rs
    │   ├── migrate.rs
    │   ├── migrations/
    │   │   ├── 1_user.sql
    │   │   ├── 2_post.sql
    │   │   └── 3_comment.sql
    │   ├── migrations_no_tx/
    │   │   └── 0_vacuum.sql
    │   ├── migrations_no_tx_reversible/
    │   │   ├── 0_vacuum.down.sql
    │   │   └── 0_vacuum.up.sql
    │   ├── migrations_reversible/
    │   │   ├── 20220721124650_add_table.down.sql
    │   │   ├── 20220721124650_add_table.up.sql
    │   │   ├── 20220721125033_modify_column.down.sql
    │   │   └── 20220721125033_modify_column.up.sql
    │   ├── migrations_simple/
    │   │   ├── 20220721115250_add_test_table.sql
    │   │   └── 20220721115524_convert_type.sql
    │   ├── rustsec.rs
    │   ├── setup.sql
    │   ├── sqlcipher.rs
    │   ├── sqlite.rs
    │   ├── test-attr.rs
    │   └── types.rs
    ├── ui/
    │   ├── mysql/
    │   │   └── gated/
    │   │       ├── chrono.rs
    │   │       └── chrono.stderr
    │   ├── postgres/
    │   │   ├── deprecated_rename.rs
    │   │   ├── deprecated_rename.stderr
    │   │   ├── gated/
    │   │   │   ├── chrono.rs
    │   │   │   ├── chrono.stderr
    │   │   │   ├── ipnetwork.rs
    │   │   │   ├── ipnetwork.stderr
    │   │   │   ├── uuid.rs
    │   │   │   └── uuid.stderr
    │   │   ├── issue_30.rs
    │   │   ├── issue_30.stderr
    │   │   ├── unsupported-type.rs
    │   │   ├── unsupported-type.stderr
    │   │   ├── wrong_param_type.rs
    │   │   └── wrong_param_type.stderr
    │   └── sqlite/
    │       ├── expression-column-type.rs
    │       └── expression-column-type.stderr
    ├── ui-tests.rs
    └── x.py
Download .txt
Showing preview only (437K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5028 symbols across 494 files)

FILE: benches/sqlite/describe.rs
  function do_describe_trivial (line 10) | async fn do_describe_trivial(db: &std::cell::RefCell<SqliteConnection>) {
  function do_describe_recursive (line 14) | async fn do_describe_recursive(db: &std::cell::RefCell<SqliteConnection>) {
  function do_describe_insert (line 36) | async fn do_describe_insert(db: &std::cell::RefCell<SqliteConnection>) {
  function do_describe_insert_fks (line 43) | async fn do_describe_insert_fks(db: &std::cell::RefCell<SqliteConnection...
  function init_connection (line 50) | async fn init_connection() -> SqliteConnection {
  function describe_trivial (line 78) | fn describe_trivial(c: &mut Criterion) {
  function describe_recursive (line 93) | fn describe_recursive(c: &mut Criterion) {
  function describe_insert (line 108) | fn describe_insert(c: &mut Criterion) {
  function describe_insert_fks (line 123) | fn describe_insert_fks(c: &mut Criterion) {

FILE: examples/mysql/todos/migrations/20200718111257_todos.sql
  type todos (line 1) | CREATE TABLE IF NOT EXISTS todos

FILE: examples/mysql/todos/src/main.rs
  type Args (line 6) | struct Args {
  type Command (line 12) | enum Command {
  function main (line 18) | async fn main() -> anyhow::Result<()> {
  function add_todo (line 45) | async fn add_todo(pool: &MySqlPool, description: String) -> anyhow::Resu...
  function complete_todo (line 61) | async fn complete_todo(pool: &MySqlPool, id: u64) -> anyhow::Result<bool> {
  function list_todos (line 77) | async fn list_todos(pool: &MySqlPool) -> anyhow::Result<()> {

FILE: examples/postgres/axum-social-with-tests/migrations/1_user.sql
  type "user" (line 1) | create table "user"

FILE: examples/postgres/axum-social-with-tests/migrations/2_post.sql
  type post (line 1) | create table post (
  type post (line 8) | create index on post(created_at desc)

FILE: examples/postgres/axum-social-with-tests/migrations/3_comment.sql
  type comment (line 1) | create table comment (
  type comment (line 9) | create index on comment(post_id, created_at)

FILE: examples/postgres/axum-social-with-tests/src/http/error.rs
  type Error (line 10) | pub enum Error {
    method status_code (line 66) | fn status_code(&self) -> StatusCode {
  method into_response (line 33) | fn into_response(self) -> Response {

FILE: examples/postgres/axum-social-with-tests/src/http/mod.rs
  type Result (line 12) | pub type Result<T, E = Error> = ::std::result::Result<T, E>;
  function app (line 14) | pub fn app(db: PgPool) -> Router {
  function serve (line 21) | pub async fn serve(db: PgPool) -> anyhow::Result<()> {

FILE: examples/postgres/axum-social-with-tests/src/http/post/comment.rs
  function router (line 18) | pub fn router() -> Router {
  type CreateCommentRequest (line 27) | struct CreateCommentRequest {
  type Comment (line 36) | struct Comment {
  function create_post_comment (line 46) | async fn create_post_comment(
  function get_post_comments (line 78) | async fn get_post_comments(

FILE: examples/postgres/axum-social-with-tests/src/http/post/mod.rs
  function router (line 19) | pub fn router() -> Router {
  type CreatePostRequest (line 27) | struct CreatePostRequest {
  type Post (line 36) | struct Post {
  function create_post (line 46) | async fn create_post(
  function get_posts (line 76) | async fn get_posts(db: Extension<PgPool>) -> Result<Json<Vec<Post>>> {

FILE: examples/postgres/axum-social-with-tests/src/http/user.rs
  type UserId (line 14) | pub type UserId = Uuid;
  function router (line 16) | pub fn router() -> Router {
  type UserAuth (line 26) | pub struct UserAuth {
    method verify (line 67) | pub async fn verify(self, db: impl PgExecutor<'_> + Send) -> Result<Us...
  function create_user (line 35) | async fn create_user(db: Extension<PgPool>, Json(req): Json<UserAuth>) -...

FILE: examples/postgres/axum-social-with-tests/src/main.rs
  function main (line 5) | async fn main() -> anyhow::Result<()> {

FILE: examples/postgres/axum-social-with-tests/src/password.rs
  function hash (line 7) | pub async fn hash(password: String) -> anyhow::Result<String> {
  function verify (line 19) | pub async fn verify(password: String, hash: String) -> anyhow::Result<bo...

FILE: examples/postgres/axum-social-with-tests/tests/comment.rs
  function test_create_comment (line 17) | async fn test_create_comment(db: PgPool) {
  function test_list_comments (line 94) | async fn test_list_comments(db: PgPool) {

FILE: examples/postgres/axum-social-with-tests/tests/common.rs
  type RequestBuilderExt (line 12) | pub trait RequestBuilderExt {
    method json (line 13) | fn json(self, json: serde_json::Value) -> Request<Body>;
    method empty_body (line 15) | fn empty_body(self) -> Request<Body>;
    method json (line 19) | fn json(self, json: serde_json::Value) -> Request<Body> {
    method empty_body (line 25) | fn empty_body(self) -> Request<Body> {
  function response_json (line 30) | pub async fn response_json(resp: &mut Response<BoxBody>) -> serde_json::...
  function expect_string (line 52) | pub fn expect_string(value: &serde_json::Value) -> &str {
  function expect_uuid (line 59) | pub fn expect_uuid(value: &serde_json::Value) -> Uuid {
  function expect_rfc3339_timestamp (line 66) | pub fn expect_rfc3339_timestamp(value: &serde_json::Value) -> OffsetDate...

FILE: examples/postgres/axum-social-with-tests/tests/post.rs
  function test_create_post (line 17) | async fn test_create_post(db: PgPool) {
  function test_list_posts (line 87) | async fn test_list_posts(db: PgPool) {

FILE: examples/postgres/axum-social-with-tests/tests/user.rs
  function test_create_user (line 17) | async fn test_create_user(db: PgPool) {

FILE: examples/postgres/chat/src/main.rs
  type ChatApp (line 22) | struct ChatApp {
    method new (line 29) | fn new(pool: PgPool) -> Self {
    method run (line 37) | async fn run<B: Backend>(
    method ui (line 89) | fn ui(&mut self, frame: &mut Frame, messages: Vec<ListItem>) {
  function main (line 131) | async fn main() -> Result<(), Box<dyn Error>> {
  function notify (line 167) | async fn notify(pool: &PgPool, s: &str) -> Result<(), sqlx::Error> {

FILE: examples/postgres/files/migrations/20220712221654_files.sql
  type users (line 1) | CREATE TABLE IF NOT EXISTS users
  type posts (line 7) | CREATE TABLE IF NOT EXISTS posts

FILE: examples/postgres/files/src/main.rs
  type PostWithAuthorQuery (line 5) | struct PostWithAuthorQuery {
  method fmt (line 14) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  function main (line 30) | async fn main() -> anyhow::Result<()> {

FILE: examples/postgres/json/migrations/20200824190010_json.sql
  type people (line 1) | CREATE TABLE IF NOT EXISTS people

FILE: examples/postgres/json/src/main.rs
  type Args (line 10) | struct Args {
  type Command (line 16) | enum Command {
  type Person (line 21) | struct Person {
  type Row (line 28) | struct Row {
  function main (line 34) | async fn main() -> anyhow::Result<()> {
  function add_person (line 61) | async fn add_person(pool: &PgPool, person: Person) -> anyhow::Result<i64> {
  function list_people (line 76) | async fn list_people(pool: &PgPool) -> anyhow::Result<()> {

FILE: examples/postgres/listen/src/main.rs
  constant LISTEN_DURATION (line 11) | const LISTEN_DURATION: Duration = Duration::from_secs(5);
  function main (line 14) | async fn main() -> Result<(), Box<dyn std::error::Error>> {
  function notify (line 80) | async fn notify(pool: &PgPool) {

FILE: examples/postgres/mockable-todos/migrations/20200718111257_todos.sql
  type todos (line 1) | CREATE TABLE IF NOT EXISTS todos

FILE: examples/postgres/mockable-todos/src/main.rs
  type Args (line 7) | struct Args {
  type Command (line 13) | enum Command {
  function main (line 19) | async fn main() -> anyhow::Result<()> {
  function handle_command (line 29) | async fn handle_command(
  type TodoRepo (line 63) | pub trait TodoRepo {
    method add_todo (line 64) | async fn add_todo(&self, description: String) -> anyhow::Result<i64>;
    method complete_todo (line 65) | async fn complete_todo(&self, id: i64) -> anyhow::Result<bool>;
    method list_todos (line 66) | async fn list_todos(&self) -> anyhow::Result<()>;
    method add_todo (line 83) | async fn add_todo(&self, description: String) -> anyhow::Result<i64> {
    method complete_todo (line 98) | async fn complete_todo(&self, id: i64) -> anyhow::Result<bool> {
    method list_todos (line 114) | async fn list_todos(&self) -> anyhow::Result<()> {
  type PostgresTodoRepo (line 69) | struct PostgresTodoRepo {
    method new (line 74) | fn new(pg_pool: PgPool) -> Self {
  function test_mocked_add (line 144) | async fn test_mocked_add() {

FILE: examples/postgres/multi-database/accounts/migrations/01_setup.sql
  function set_updated_at (line 10) | create or replace function set_updated_at()

FILE: examples/postgres/multi-database/accounts/migrations/02_account.sql
  type account (line 1) | create table account

FILE: examples/postgres/multi-database/accounts/migrations/03_session.sql
  type session (line 1) | create table session

FILE: examples/postgres/multi-database/accounts/src/lib.rs
  type AccountId (line 13) | pub struct AccountId(pub Uuid);
  type SessionToken (line 17) | pub struct SessionToken(pub String);
    constant LEN (line 288) | const LEN: usize = 32;
    method generate (line 290) | fn generate() -> Self {
  type Session (line 19) | pub struct Session {
  type AccountsManager (line 25) | pub struct AccountsManager {
    method setup (line 112) | pub async fn setup(
    method hash_password (line 133) | async fn hash_password(&self, password: String) -> Result<PasswordHash...
    method verify_password (line 157) | async fn verify_password(
    method create (line 187) | pub async fn create(
    method create_session (line 218) | pub async fn create_session(
    method auth_session (line 273) | pub async fn auth_session(
  type CreateAccountError (line 64) | pub enum CreateAccountError {
  type CreateSessionError (line 76) | pub enum CreateSessionError {
  type GeneralError (line 90) | pub enum GeneralError {

FILE: examples/postgres/multi-database/payments/migrations/01_setup.sql
  function set_updated_at (line 10) | create or replace function set_updated_at()

FILE: examples/postgres/multi-database/payments/migrations/02_payment.sql
  type payment (line 17) | create table payment

FILE: examples/postgres/multi-database/payments/src/lib.rs
  type PaymentId (line 9) | pub struct PaymentId(pub Uuid);
  type PaymentStatus (line 14) | pub enum PaymentStatus {
  type Payment (line 27) | pub struct Payment {
  type PaymentsManager (line 39) | pub struct PaymentsManager {
    method setup (line 44) | pub async fn setup(opts: PgConnectOptions) -> sqlx::Result<Self> {
    method create (line 57) | pub async fn create(
    method get (line 117) | pub async fn get(&self, payment_id: PaymentId) -> sqlx::Result<Option<...

FILE: examples/postgres/multi-database/src/main.rs
  function main (line 9) | async fn main() -> eyre::Result<()> {

FILE: examples/postgres/multi-database/src/migrations/01_setup.sql
  function set_updated_at (line 10) | create or replace function set_updated_at()

FILE: examples/postgres/multi-database/src/migrations/02_purchase.sql
  type purchase (line 1) | create table purchase

FILE: examples/postgres/multi-tenant/accounts/migrations/01_setup.sql
  function accounts (line 10) | create or replace function accounts.set_updated_at()

FILE: examples/postgres/multi-tenant/accounts/migrations/02_account.sql
  type accounts (line 1) | create table accounts.account

FILE: examples/postgres/multi-tenant/accounts/migrations/03_session.sql
  type accounts (line 1) | create table accounts.session

FILE: examples/postgres/multi-tenant/accounts/src/lib.rs
  type AccountId (line 12) | pub struct AccountId(pub Uuid);
  type SessionToken (line 16) | pub struct SessionToken(pub String);
    constant LEN (line 279) | const LEN: usize = 32;
    method generate (line 281) | fn generate() -> Self {
  type Session (line 18) | pub struct Session {
  type AccountsManager (line 23) | pub struct AccountsManager {
    method setup (line 107) | pub async fn setup(
    method hash_password (line 121) | async fn hash_password(&self, password: String) -> Result<PasswordHash...
    method verify_password (line 145) | async fn verify_password(
    method create (line 175) | pub async fn create(
    method create_session (line 207) | pub async fn create_session(
    method auth_session (line 263) | pub async fn auth_session(
  type CreateAccountError (line 59) | pub enum CreateAccountError {
  type CreateSessionError (line 71) | pub enum CreateSessionError {
  type GeneralError (line 85) | pub enum GeneralError {

FILE: examples/postgres/multi-tenant/payments/migrations/01_setup.sql
  function payments (line 10) | create or replace function payments.set_updated_at()

FILE: examples/postgres/multi-tenant/payments/migrations/02_payment.sql
  type payments (line 17) | create table payments.payment

FILE: examples/postgres/multi-tenant/payments/src/lib.rs
  type PaymentId (line 8) | pub struct PaymentId(pub Uuid);
  type PaymentStatus (line 13) | pub enum PaymentStatus {
  type Payment (line 26) | pub struct Payment {
  function migrate (line 39) | pub async fn migrate(db: impl Acquire<'_, Database = Postgres>) -> sqlx:...
  function create (line 44) | pub async fn create(
  function get (line 101) | pub async fn get(db: &mut PgConnection, payment_id: PaymentId) -> sqlx::...

FILE: examples/postgres/multi-tenant/src/main.rs
  function main (line 8) | async fn main() -> eyre::Result<()> {

FILE: examples/postgres/multi-tenant/src/migrations/01_setup.sql
  function set_updated_at (line 10) | create or replace function set_updated_at()

FILE: examples/postgres/multi-tenant/src/migrations/02_purchase.sql
  type purchase (line 1) | create table purchase

FILE: examples/postgres/preferred-crates/src/main.rs
  type SessionData (line 8) | struct SessionData {
  type User (line 13) | struct User {
  constant SESSION_DURATION (line 23) | const SESSION_DURATION: Duration = Duration::from_secs(60 * 60);
  function main (line 26) | async fn main() -> anyhow::Result<()> {

FILE: examples/postgres/preferred-crates/src/migrations/01_setup.sql
  function set_updated_at (line 10) | create or replace function set_updated_at()

FILE: examples/postgres/preferred-crates/src/migrations/02_users.sql
  type users (line 1) | create table users(
  type users_username_unique (line 9) | create unique index users_username_unique on users(lower(username))

FILE: examples/postgres/preferred-crates/uses-rust-decimal/src/lib.rs
  type Purchase (line 5) | pub struct Purchase {
  function create_table (line 16) | pub async fn create_table(e: impl PgExecutor<'_>) -> sqlx::Result<()> {
  function create_purchase (line 34) | pub async fn create_purchase(
  function get_purchase (line 50) | pub async fn get_purchase(e: impl PgExecutor<'_>, id: Uuid) -> sqlx::Res...

FILE: examples/postgres/preferred-crates/uses-time/src/lib.rs
  type Session (line 11) | pub struct Session<D> {
  function create_table (line 19) | pub async fn create_table(e: impl PgExecutor<'_>) -> sqlx::Result<()> {
  function create_session (line 35) | pub async fn create_session<D: Serialize>(
  function get_session (line 67) | pub async fn get_session<D: DeserializeOwned + Send + Unpin + 'static>(

FILE: examples/postgres/todos/migrations/20200718111257_todos.sql
  type todos (line 1) | CREATE TABLE IF NOT EXISTS todos

FILE: examples/postgres/todos/src/main.rs
  type Args (line 6) | struct Args {
  type Command (line 12) | enum Command {
  function main (line 18) | async fn main() -> anyhow::Result<()> {
  function add_todo (line 45) | async fn add_todo(pool: &PgPool, description: String) -> anyhow::Result<...
  function complete_todo (line 60) | async fn complete_todo(pool: &PgPool, id: i64) -> anyhow::Result<bool> {
  function list_todos (line 76) | async fn list_todos(pool: &PgPool) -> anyhow::Result<()> {

FILE: examples/postgres/transaction/migrations/20200718111257_todos.sql
  type todos (line 1) | CREATE TABLE IF NOT EXISTS todos

FILE: examples/postgres/transaction/src/main.rs
  function insert_and_verify (line 3) | async fn insert_and_verify(
  function explicit_rollback_example (line 27) | async fn explicit_rollback_example(
  function implicit_rollback_example (line 40) | async fn implicit_rollback_example(
  function commit_example (line 52) | async fn commit_example(
  function main (line 66) | async fn main() -> Result<(), Box<dyn std::error::Error>> {

FILE: examples/sqlite/extension/migrations/20250203094951_addresses.sql
  type addresses (line 1) | create table addresses (address text, family integer)

FILE: examples/sqlite/extension/src/main.rs
  function main (line 9) | async fn main() -> anyhow::Result<()> {

FILE: examples/sqlite/todos/migrations/20200718111257_todos.sql
  type todos (line 1) | CREATE TABLE IF NOT EXISTS todos

FILE: examples/sqlite/todos/src/main.rs
  type Args (line 6) | struct Args {
  type Command (line 12) | enum Command {
  function main (line 18) | async fn main() -> anyhow::Result<()> {
  function add_todo (line 45) | async fn add_todo(pool: &SqlitePool, description: String) -> anyhow::Res...
  function complete_todo (line 63) | async fn complete_todo(pool: &SqlitePool, id: i64) -> anyhow::Result<boo...
  function list_todos (line 79) | async fn list_todos(pool: &SqlitePool) -> anyhow::Result<()> {

FILE: examples/x.py
  function run (line 28) | def run(command, env=None, cwd=None, display=None):
  function sqlx (line 45) | def sqlx(command, url, cwd=None):
  function project (line 50) | def project(name, database=None, driver=None):

FILE: sqlx-cli/src/bin/cargo-sqlx.rs
  type Cli (line 10) | enum Cli {
  function main (line 15) | async fn main() {

FILE: sqlx-cli/src/bin/sqlx.rs
  function main (line 6) | async fn main() {

FILE: sqlx-cli/src/completions.rs
  function run (line 8) | pub fn run(shell: Shell) {

FILE: sqlx-cli/src/database.rs
  function create (line 10) | pub async fn create(connect_opts: &ConnectOpts) -> anyhow::Result<()> {
  function drop (line 28) | pub async fn drop(connect_opts: &ConnectOpts, confirm: bool, force: bool...
  function reset (line 48) | pub async fn reset(
  function setup (line 59) | pub async fn setup(
  function ask_to_continue_drop (line 68) | async fn ask_to_continue_drop(db_url: String) -> bool {

FILE: sqlx-cli/src/lib.rs
  function maybe_apply_dotenv (line 47) | pub fn maybe_apply_dotenv() {
  function run (line 59) | pub async fn run(opt: Opt) -> anyhow::Result<()> {
  function do_run (line 79) | async fn do_run(opt: Opt) -> anyhow::Result<()> {
  function connect (line 215) | async fn connect(config: &Config, opts: &ConnectOpts) -> anyhow::Result<...
  function retry_connect_errors (line 226) | async fn retry_connect_errors<'a, F, Fut, T>(

FILE: sqlx-cli/src/metadata.rs
  type Package (line 19) | pub struct Package {
    method name (line 25) | pub fn name(&self) -> &str {
    method src_paths (line 29) | pub fn src_paths(&self) -> &[PathBuf] {
    method from (line 35) | fn from(package: &MetadataPackage) -> Self {
  type Metadata (line 48) | pub struct Metadata {
    method from_current_directory (line 70) | pub fn from_current_directory(cargo: &OsStr) -> anyhow::Result<Self> {
    method package (line 82) | pub fn package(&self, id: &MetadataId) -> Option<&Package> {
    method entries (line 86) | pub fn entries(&self) -> btree_map::Iter<'_, MetadataId, Package> {
    method workspace_members (line 90) | pub fn workspace_members(&self) -> &[MetadataId] {
    method workspace_root (line 94) | pub fn workspace_root(&self) -> &Path {
    method target_directory (line 98) | pub fn target_directory(&self) -> &Path {
    method current_package (line 102) | pub fn current_package(&self) -> Option<&Package> {
    method all_dependents_of (line 107) | pub fn all_dependents_of(&self, id: &MetadataId) -> BTreeSet<&Metadata...
    method all_dependents_of_helper (line 113) | fn all_dependents_of_helper<'this>(
  type Err (line 129) | type Err = anyhow::Error;
  method from_str (line 131) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  function manifest_dir (line 183) | pub(crate) fn manifest_dir(cargo: &OsStr) -> anyhow::Result<PathBuf> {

FILE: sqlx-cli/src/migrate.rs
  function add (line 14) | pub async fn add(opts: AddMigrationOpts) -> anyhow::Result<()> {
  function create_file (line 92) | fn create_file(
  function short_checksum (line 118) | fn short_checksum(checksum: &[u8]) -> String {
  function info (line 126) | pub async fn info(
  function validate_applied_migrations (line 196) | fn validate_applied_migrations(
  function run (line 216) | pub async fn run(
  function revert (line 318) | pub async fn revert(
  function build_script (line 422) | pub fn build_script(

FILE: sqlx-cli/src/opt.rs
  constant HELP_STYLES (line 16) | const HELP_STYLES: Styles = Styles::styled()
  type Opt (line 24) | pub struct Opt {
  type Command (line 35) | pub enum Command {
  type DatabaseOpt (line 86) | pub struct DatabaseOpt {
  type DatabaseCommand (line 92) | pub enum DatabaseCommand {
  type MigrateOpt (line 152) | pub struct MigrateOpt {
  type MigrateCommand (line 158) | pub enum MigrateCommand {
  type AddMigrationOpts (line 304) | pub struct AddMigrationOpts {
    method reversible (line 516) | pub fn reversible(&self, config: &Config, migrator: &Migrator) -> bool {
    method version_prefix (line 534) | pub fn version_prefix(&self, config: &Config, migrator: &Migrator) -> ...
  type MigrationSourceOpt (line 336) | pub struct MigrationSourceOpt {
    method resolve_path (line 345) | pub fn resolve_path<'a>(&'a self, config: &'a Config) -> &'a str {
    method resolve (line 353) | pub async fn resolve(&self, config: &Config) -> Result<Migrator, Migra...
  type ConnectOpts (line 364) | pub struct ConnectOpts {
    method expect_db_url (line 417) | pub fn expect_db_url(&self) -> anyhow::Result<&str> {
    method populate_db_url (line 424) | pub fn populate_db_url(&mut self, config: &Config) -> anyhow::Result<(...
  type NoDotenvOpt (line 391) | pub struct NoDotenvOpt {
  type ConfigOpt (line 401) | pub struct ConfigOpt {
    method load_config (line 458) | pub async fn load_config(&self) -> anyhow::Result<Config> {
  type Confirmation (line 484) | pub struct Confirmation {
  type IgnoreMissing (line 493) | pub struct IgnoreMissing {
  type Target (line 500) | type Target = bool;
  method deref (line 502) | fn deref(&self) -> &Self::Target {
  type Output (line 508) | type Output = bool;
  method not (line 510) | fn not(self) -> Self::Output {
  function next_timestamp (line 571) | fn next_timestamp() -> String {
  function fmt_sequential (line 575) | fn fmt_sequential(version: i64) -> String {

FILE: sqlx-cli/src/prepare.rs
  type PrepareCtx (line 15) | pub struct PrepareCtx<'a> {
  function prepare_dir (line 27) | fn prepare_dir(&self) -> anyhow::Result<PathBuf> {
  function run (line 36) | pub async fn run(
  function prepare (line 71) | async fn prepare(ctx: &PrepareCtx<'_>) -> anyhow::Result<()> {
  function prepare_check (line 99) | async fn prepare_check(ctx: &PrepareCtx<'_>) -> anyhow::Result<()> {
  function run_prepare_step (line 153) | fn run_prepare_step(ctx: &PrepareCtx, cache_dir: &Path) -> anyhow::Resul...
  type ProjectRecompileAction (line 208) | struct ProjectRecompileAction {
  function setup_minimal_project_recompile (line 222) | fn setup_minimal_project_recompile(
  function minimal_project_clean (line 255) | fn minimal_project_clean(
  function minimal_project_recompile_action (line 285) | fn minimal_project_recompile_action(metadata: &Metadata, all: bool) -> P...
  function glob_query_files (line 344) | fn glob_query_files(path: impl AsRef<Path>) -> anyhow::Result<Vec<PathBu...
  function load_json_file (line 358) | fn load_json_file(path: impl AsRef<Path>) -> anyhow::Result<serde_json::...
  function check_backend (line 365) | async fn check_backend(config: &Config, opts: &ConnectOpts) -> anyhow::R...
  function minimal_project_recompile_action_works (line 376) | fn minimal_project_recompile_action_works() -> anyhow::Result<()> {

FILE: sqlx-cli/tests/add.rs
  type FileName (line 10) | struct FileName {
    method partial_cmp (line 17) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
    method assert_is_timestamp (line 27) | fn assert_is_timestamp(&self) {
    method from (line 36) | fn from(path: PathBuf) -> Self {
  type AddMigrationsResult (line 49) | struct AddMigrationsResult(Vec<FileName>);
    method len (line 51) | fn len(&self) -> usize {
    method assert_is_reversible (line 54) | fn assert_is_reversible(&self) {
    method assert_is_not_reversible (line 69) | fn assert_is_not_reversible(&self) {
    type Output (line 78) | type Output = FileName;
    method index (line 80) | fn index(&self, index: usize) -> &Self::Output {
  type AddMigrations (line 85) | struct AddMigrations {
    method new (line 91) | fn new() -> anyhow::Result<Self> {
    method with_config (line 98) | fn with_config(mut self, filename: &str) -> anyhow::Result<Self> {
    method run (line 112) | fn run(
    method fs_output (line 150) | fn fs_output(&self) -> anyhow::Result<AddMigrationsResult> {
  function recurse_files (line 161) | fn recurse_files(path: impl AsRef<Path>) -> anyhow::Result<Vec<PathBuf>> {
  function add_migration_error_ambiguous (line 183) | fn add_migration_error_ambiguous() -> anyhow::Result<()> {
  function add_migration_sequential (line 197) | fn add_migration_sequential() -> anyhow::Result<()> {
  function add_migration_sequential_reversible (line 221) | fn add_migration_sequential_reversible() -> anyhow::Result<()> {
  function add_migration_timestamp (line 251) | fn add_migration_timestamp() -> anyhow::Result<()> {
  function add_migration_timestamp_reversible (line 275) | fn add_migration_timestamp_reversible() -> anyhow::Result<()> {
  function add_migration_config_default_type_reversible (line 322) | fn add_migration_config_default_type_reversible() -> anyhow::Result<()> {
  function add_migration_config_default_versioning_sequential (line 347) | fn add_migration_config_default_versioning_sequential() -> anyhow::Resul...
  function add_migration_config_default_versioning_timestamp (line 367) | fn add_migration_config_default_versioning_timestamp() -> anyhow::Result...

FILE: sqlx-cli/tests/common/mod.rs
  type TestDatabase (line 10) | pub struct TestDatabase {
    method new (line 17) | pub fn new(name: &str, migrations: &str) -> Self {
    method set_migrations (line 53) | pub fn set_migrations(&mut self, migrations: &str) {
    method connection_string (line 57) | pub fn connection_string(&self) -> String {
    method run_migration (line 61) | pub fn run_migration(&self, revert: bool, version: Option<i64>, dry_ru...
    method applied_migrations (line 91) | pub async fn applied_migrations(&self) -> Vec<i64> {
    method migrate_info (line 106) | pub fn migrate_info(&self) -> Assert {
  method drop (line 127) | fn drop(&mut self) {

FILE: sqlx-cli/tests/ignored-chars/BOM/1_user.sql
  type user (line 1) | create table user

FILE: sqlx-cli/tests/ignored-chars/BOM/2_post.sql
  type post (line 1) | create table post
  type post_created_at (line 10) | create index post_created_at on post (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/BOM/3_comment.sql
  type comment (line 1) | create table comment
  type comment_created_at (line 10) | create index comment_created_at on comment (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/CRLF/1_user.sql
  type user (line 1) | create table user

FILE: sqlx-cli/tests/ignored-chars/CRLF/2_post.sql
  type post (line 1) | create table post
  type post_created_at (line 10) | create index post_created_at on post (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/CRLF/3_comment.sql
  type comment (line 1) | create table comment
  type comment_created_at (line 10) | create index comment_created_at on comment (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/LF/1_user.sql
  type user (line 1) | create table user

FILE: sqlx-cli/tests/ignored-chars/LF/2_post.sql
  type post (line 1) | create table post
  type post_created_at (line 10) | create index post_created_at on post (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/LF/3_comment.sql
  type comment (line 1) | create table comment
  type comment_created_at (line 10) | create index comment_created_at on comment (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/oops-all-tabs/1_user.sql
  type user (line 1) | create table user

FILE: sqlx-cli/tests/ignored-chars/oops-all-tabs/2_post.sql
  type post (line 1) | create table post
  type post_created_at (line 10) | create index post_created_at on post (created_at desc)

FILE: sqlx-cli/tests/ignored-chars/oops-all-tabs/3_comment.sql
  type comment (line 1) | create table comment
  type comment_created_at (line 10) | create index comment_created_at on comment (created_at desc)

FILE: sqlx-cli/tests/migrate.rs
  function run_reversible_migrations (line 6) | async fn run_reversible_migrations() {
  function revert_migrations (line 78) | async fn revert_migrations() {
  function ignored_chars (line 144) | async fn ignored_chars() {

FILE: sqlx-cli/tests/migrations_reversible/20230101000000_test1.up.sql
  type test1 (line 1) | CREATE TABLE test1(x INTEGER PRIMARY KEY)

FILE: sqlx-cli/tests/migrations_reversible/20230201000000_test2.up.sql
  type test2 (line 1) | CREATE TABLE test2(x INTEGER PRIMARY KEY)

FILE: sqlx-cli/tests/migrations_reversible/20230301000000_test3.up.sql
  type test3 (line 1) | CREATE TABLE test3(x INTEGER PRIMARY KEY)

FILE: sqlx-cli/tests/migrations_reversible/20230401000000_test4.up.sql
  type test4 (line 1) | CREATE TABLE test4(x INTEGER PRIMARY KEY)

FILE: sqlx-cli/tests/migrations_reversible/20230501000000_test5.up.sql
  type test5 (line 1) | CREATE TABLE test5(x INTEGER PRIMARY KEY)

FILE: sqlx-core/src/acquire.rs
  type Acquire (line 70) | pub trait Acquire<'c> {
    method acquire (line 75) | fn acquire(self) -> BoxFuture<'c, Result<Self::Connection, Error>>;
    method begin (line 77) | fn begin(self) -> BoxFuture<'c, Result<Transaction<'c, Self::Database>...
  type Database (line 81) | type Database = DB;
  type Connection (line 83) | type Connection = PoolConnection<DB>;
  function acquire (line 85) | fn acquire(self) -> BoxFuture<'static, Result<Self::Connection, Error>> {
  function begin (line 89) | fn begin(self) -> BoxFuture<'static, Result<Transaction<'a, DB>, Error>> {

FILE: sqlx-core/src/any/arguments.rs
  type AnyArguments (line 10) | pub struct AnyArguments {
    method convert_into (line 40) | pub fn convert_into<'a, A: Arguments>(self) -> Result<A, BoxDynError>
  type Database (line 16) | type Database = Any;
  method reserve (line 18) | fn reserve(&mut self, additional: usize, _size: usize) {
  method add (line 22) | fn add<'t, T>(&mut self, value: T) -> Result<(), BoxDynError>
  method len (line 30) | fn len(&self) -> usize {
  type AnyArgumentBuffer (line 36) | pub struct AnyArgumentBuffer(#[doc(hidden)] pub Vec<AnyValueKind>);

FILE: sqlx-core/src/any/column.rs
  type AnyColumn (line 6) | pub struct AnyColumn {
  type Database (line 18) | type Database = Any;
  method ordinal (line 20) | fn ordinal(&self) -> usize {
  method name (line 24) | fn name(&self) -> &str {
  method type_info (line 28) | fn type_info(&self) -> &AnyTypeInfo {

FILE: sqlx-core/src/any/connection/backend.rs
  type AnyConnectionBackend (line 8) | pub trait AnyConnectionBackend: std::any::Any + Debug + Send + 'static {
    method name (line 10) | fn name(&self) -> &str;
    method close (line 17) | fn close(self: Box<Self>) -> BoxFuture<'static, crate::Result<()>>;
    method close_hard (line 23) | fn close_hard(self: Box<Self>) -> BoxFuture<'static, crate::Result<()>>;
    method ping (line 26) | fn ping(&mut self) -> BoxFuture<'_, crate::Result<()>>;
    method begin (line 35) | fn begin(&mut self, statement: Option<SqlStr>) -> BoxFuture<'_, crate:...
    method commit (line 37) | fn commit(&mut self) -> BoxFuture<'_, crate::Result<()>>;
    method rollback (line 39) | fn rollback(&mut self) -> BoxFuture<'_, crate::Result<()>>;
    method start_rollback (line 41) | fn start_rollback(&mut self);
    method get_transaction_depth (line 49) | fn get_transaction_depth(&self) -> usize {
    method is_in_transaction (line 59) | fn is_in_transaction(&self) -> bool {
    method cached_statements_size (line 64) | fn cached_statements_size(&self) -> usize {
    method clear_cached_statements (line 70) | fn clear_cached_statements(&mut self) -> BoxFuture<'_, crate::Result<(...
    method shrink_buffers (line 77) | fn shrink_buffers(&mut self);
    method flush (line 80) | fn flush(&mut self) -> BoxFuture<'_, crate::Result<()>>;
    method should_flush (line 83) | fn should_flush(&self) -> bool;
    method as_migrate (line 86) | fn as_migrate(&mut self) -> crate::Result<&mut (dyn crate::migrate::Mi...
    method fetch_many (line 96) | fn fetch_many(
    method fetch_optional (line 103) | fn fetch_optional(
    method prepare_with (line 110) | fn prepare_with<'c, 'q: 'c>(
    method describe (line 117) | fn describe(

FILE: sqlx-core/src/any/connection/executor.rs
  type Database (line 12) | type Database = Any;
  function fetch_many (line 14) | fn fetch_many<'e, 'q: 'e, E>(
  function fetch_optional (line 30) | fn fetch_optional<'e, 'q: 'e, E>(
  function prepare_with (line 47) | fn prepare_with<'e>(
  function describe (line 59) | fn describe<'e>(

FILE: sqlx-core/src/any/connection/mod.rs
  type AnyConnection (line 27) | pub struct AnyConnection {
    method backend_name (line 33) | pub fn backend_name(&self) -> &str {
    method connect (line 37) | pub(crate) fn connect(options: &AnyConnectOptions) -> BoxFuture<'_, cr...
    method connect_with_driver_config (line 49) | pub async fn connect_with_driver_config(
    method connect_with_db (line 62) | pub(crate) fn connect_with_db<'a, DB: Database>(
    method get_migrate (line 87) | pub(crate) fn get_migrate(
  type Database (line 95) | type Database = Any;
  type Options (line 97) | type Options = AnyConnectOptions;
  method close (line 99) | fn close(self) -> impl Future<Output = Result<(), Error>> + Send + 'stat...
  method close_hard (line 103) | fn close_hard(self) -> impl Future<Output = Result<(), Error>> + Send + ...
  method ping (line 107) | fn ping(&mut self) -> impl Future<Output = Result<(), Error>> + Send + '_ {
  method begin (line 111) | fn begin(
  method begin_with (line 120) | fn begin_with(
  method cached_statements_size (line 130) | fn cached_statements_size(&self) -> usize {
  method clear_cached_statements (line 134) | fn clear_cached_statements(&mut self) -> impl Future<Output = crate::Res...
  method shrink_buffers (line 138) | fn shrink_buffers(&mut self) {
  method flush (line 143) | fn flush(&mut self) -> impl Future<Output = Result<(), Error>> + Send + ...
  method should_flush (line 148) | fn should_flush(&self) -> bool {

FILE: sqlx-core/src/any/database.rs
  type Any (line 10) | pub struct Any;
  type Connection (line 13) | type Connection = AnyConnection;
  type TransactionManager (line 15) | type TransactionManager = AnyTransactionManager;
  type Row (line 17) | type Row = AnyRow;
  type QueryResult (line 19) | type QueryResult = AnyQueryResult;
  type Column (line 21) | type Column = AnyColumn;
  type TypeInfo (line 23) | type TypeInfo = AnyTypeInfo;
  type Value (line 25) | type Value = AnyValue;
  type ValueRef (line 26) | type ValueRef<'r> = AnyValueRef<'r>;
  type Arguments (line 28) | type Arguments = AnyArguments;
  type ArgumentBuffer (line 29) | type ArgumentBuffer = AnyArgumentBuffer;
  type Statement (line 31) | type Statement = AnyStatement;
  constant NAME (line 33) | const NAME: &'static str = "Any";
  constant URL_SCHEMES (line 35) | const URL_SCHEMES: &'static [&'static str] = &[];

FILE: sqlx-core/src/any/driver.rs
  type AnyDriver (line 28) | pub struct AnyDriver {
    method without_migrate (line 41) | pub const fn without_migrate<DB: Database>() -> Self
    method with_migrate (line 56) | pub const fn with_migrate<DB: Database>() -> Self
    method with_migrate (line 66) | pub const fn with_migrate<DB: Database + crate::migrate::MigrateDataba...
    method get_migrate_database (line 83) | pub fn get_migrate_database(&self) -> crate::Result<&AnyMigrateDatabas...
  method fmt (line 90) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  type AnyMigrateDatabase (line 98) | pub struct AnyMigrateDatabase {
    method create_database (line 106) | pub fn create_database<'a>(&self, url: &'a str) -> BoxFuture<'a, crate...
    method database_exists (line 110) | pub fn database_exists<'a>(&self, url: &'a str) -> BoxFuture<'a, crate...
    method drop_database (line 114) | pub fn drop_database<'a>(&self, url: &'a str) -> BoxFuture<'a, crate::...
    method force_drop_database (line 118) | pub fn force_drop_database<'a>(&self, url: &'a str) -> BoxFuture<'a, c...
  function install_drivers (line 129) | pub fn install_drivers(
  function from_url_str (line 138) | pub(crate) fn from_url_str(url: &str) -> crate::Result<&'static AnyDrive...
  function from_url (line 142) | pub(crate) fn from_url(url: &Url) -> crate::Result<&'static AnyDriver> {

FILE: sqlx-core/src/any/error.rs
  function mismatched_types (line 9) | pub(super) fn mismatched_types<T: Type<Any>>(ty: &AnyTypeInfo) -> BoxDyn...

FILE: sqlx-core/src/any/kind.rs
  type AnyKind (line 12) | pub enum AnyKind {
  type Err (line 27) | type Err = Error;
  method from_str (line 29) | fn from_str(url: &str) -> Result<Self, Self::Err> {

FILE: sqlx-core/src/any/migrate.rs
  method create_database (line 9) | async fn create_database(url: &str) -> Result<(), Error> {
  method database_exists (line 16) | async fn database_exists(url: &str) -> Result<bool, Error> {
  method drop_database (line 23) | async fn drop_database(url: &str) -> Result<(), Error> {
  method force_drop_database (line 30) | async fn force_drop_database(url: &str) -> Result<(), Error> {
  method create_schema_if_not_exists (line 39) | fn create_schema_if_not_exists<'e>(
  method ensure_migrations_table (line 50) | fn ensure_migrations_table<'e>(
  method dirty_version (line 61) | fn dirty_version<'e>(
  method list_applied_migrations (line 68) | fn list_applied_migrations<'e>(
  method lock (line 79) | fn lock(&mut self) -> BoxFuture<'_, Result<(), MigrateError>> {
  method unlock (line 83) | fn unlock(&mut self) -> BoxFuture<'_, Result<(), MigrateError>> {
  method apply (line 87) | fn apply<'e>(
  method revert (line 95) | fn revert<'e>(

FILE: sqlx-core/src/any/mod.rs
  type AnyPool (line 50) | pub type AnyPool = crate::pool::Pool<Any>;
  type AnyPoolOptions (line 52) | pub type AnyPoolOptions = crate::pool::PoolOptions<Any>;
  type AnyExecutor (line 55) | pub trait AnyExecutor<'c>: Executor<'c, Database = Any> {}
  function encode_by_ref (line 72) | fn encode_by_ref(

FILE: sqlx-core/src/any/options.rs
  type AnyConnectOptions (line 19) | pub struct AnyConnectOptions {
  type Err (line 24) | type Err = Error;
  method from_str (line 26) | fn from_str(url: &str) -> Result<Self, Self::Err> {
  type Connection (line 37) | type Connection = AnyConnection;
  method from_url (line 39) | fn from_url(url: &Url) -> Result<Self, Error> {
  method to_url_lossy (line 46) | fn to_url_lossy(&self) -> Url {
  method connect (line 51) | fn connect(&self) -> impl Future<Output = Result<AnyConnection, Error>> ...
  method log_statements (line 55) | fn log_statements(mut self, level: LevelFilter) -> Self {
  method log_slow_statements (line 60) | fn log_slow_statements(mut self, level: LevelFilter, duration: Duration)...

FILE: sqlx-core/src/any/query_result.rs
  type AnyQueryResult (line 4) | pub struct AnyQueryResult {
    method rows_affected (line 12) | pub fn rows_affected(&self) -> u64 {
    method last_insert_id (line 16) | pub fn last_insert_id(&self) -> Option<i64> {
    method extend (line 22) | fn extend<T: IntoIterator<Item = AnyQueryResult>>(&mut self, iter: T) {

FILE: sqlx-core/src/any/row.rs
  type AnyRow (line 15) | pub struct AnyRow {
    method map_from (line 82) | pub fn map_from<'a, R: Row>(
  type Database (line 25) | type Database = Any;
  method columns (line 27) | fn columns(&self) -> &[AnyColumn] {
  method try_get_raw (line 31) | fn try_get_raw<I>(&self, index: I) -> Result<<Self::Database as Database...
  method try_get (line 46) | fn try_get<'r, T, I>(&'r self, index: I) -> Result<T, Error>
  function index (line 67) | fn index(&self, row: &AnyRow) -> Result<usize, Error> {
  function decode (line 140) | fn decode<'r, DB: Database, T: Decode<'r, DB>>(

FILE: sqlx-core/src/any/statement.rs
  type AnyStatement (line 13) | pub struct AnyStatement {
    method try_from_statement (line 62) | pub fn try_from_statement<S>(
  type Database (line 25) | type Database = Any;
  method into_sql (line 27) | fn into_sql(self) -> SqlStr {
  method sql (line 31) | fn sql(&self) -> &SqlStr {
  method parameters (line 35) | fn parameters(&self) -> Option<Either<&[AnyTypeInfo], usize>> {
  method columns (line 43) | fn columns(&self) -> &[AnyColumn] {
  function index (line 51) | fn index(&self, statement: &AnyStatement) -> Result<usize, Error> {

FILE: sqlx-core/src/any/transaction.rs
  type AnyTransactionManager (line 9) | pub struct AnyTransactionManager;
  type Database (line 12) | type Database = Any;
  method begin (line 14) | fn begin(
  method commit (line 21) | fn commit(conn: &mut AnyConnection) -> impl Future<Output = Result<(), E...
  method rollback (line 25) | fn rollback(conn: &mut AnyConnection) -> impl Future<Output = Result<(),...
  method start_rollback (line 29) | fn start_rollback(conn: &mut AnyConnection) {
  method get_transaction_depth (line 33) | fn get_transaction_depth(conn: &<Self::Database as Database>::Connection...

FILE: sqlx-core/src/any/type_info.rs
  type AnyTypeInfo (line 8) | pub struct AnyTypeInfo {
    method kind (line 14) | pub fn kind(&self) -> AnyTypeInfoKind {
  type AnyTypeInfoKind (line 20) | pub enum AnyTypeInfoKind {
    method is_integer (line 61) | pub fn is_integer(&self) -> bool {
  method is_null (line 33) | fn is_null(&self) -> bool {
  method name (line 37) | fn name(&self) -> &str {
  method fmt (line 55) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {

FILE: sqlx-core/src/any/types/blob.rs
  function type_info (line 10) | fn type_info() -> AnyTypeInfo {
  function encode_by_ref (line 18) | fn encode_by_ref(
  function decode (line 28) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...
  function type_info (line 37) | fn type_info() -> AnyTypeInfo {
  function encode_by_ref (line 43) | fn encode_by_ref(
  function decode (line 53) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...

FILE: sqlx-core/src/any/types/bool.rs
  function type_info (line 9) | fn type_info() -> AnyTypeInfo {
  function encode_by_ref (line 17) | fn encode_by_ref(
  function decode (line 27) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...

FILE: sqlx-core/src/any/types/float.rs
  function type_info (line 9) | fn type_info() -> AnyTypeInfo {
  function encode_by_ref (line 17) | fn encode_by_ref(&self, buf: &mut AnyArgumentBuffer) -> Result<IsNull, B...
  function decode (line 24) | fn decode(value: AnyValueRef<'r>) -> Result<Self, BoxDynError> {
  function type_info (line 33) | fn type_info() -> AnyTypeInfo {
  function encode_by_ref (line 41) | fn encode_by_ref(
  function decode (line 51) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...

FILE: sqlx-core/src/any/types/int.rs
  function type_info (line 9) | fn type_info() -> AnyTypeInfo {
  function compatible (line 15) | fn compatible(ty: &AnyTypeInfo) -> bool {
  function encode_by_ref (line 21) | fn encode_by_ref(
  function decode (line 31) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...
  function type_info (line 37) | fn type_info() -> AnyTypeInfo {
  function compatible (line 43) | fn compatible(ty: &AnyTypeInfo) -> bool {
  function encode_by_ref (line 49) | fn encode_by_ref(
  function decode (line 59) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...
  function type_info (line 65) | fn type_info() -> AnyTypeInfo {
  function compatible (line 71) | fn compatible(ty: &AnyTypeInfo) -> bool {
  function encode_by_ref (line 77) | fn encode_by_ref(
  function decode (line 87) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...

FILE: sqlx-core/src/any/types/mod.rs
  function test_type_impls (line 27) | fn test_type_impls() {

FILE: sqlx-core/src/any/types/str.rs
  function type_info (line 11) | fn type_info() -> AnyTypeInfo {
  function encode (line 19) | fn encode(self, buf: &mut <Any as Database>::ArgumentBuffer) -> Result<I...
  function encode_by_ref (line 27) | fn encode_by_ref(
  function decode (line 36) | fn decode(value: <Any as Database>::ValueRef<'a>) -> Result<Self, BoxDyn...
  method type_info (line 45) | fn type_info() -> AnyTypeInfo {
  method encode (line 51) | fn encode(self, buf: &mut <Any as Database>::ArgumentBuffer) -> Result<I...
  method encode_by_ref (line 56) | fn encode_by_ref(
  method decode (line 66) | fn decode(value: <Any as Database>::ValueRef<'r>) -> Result<Self, BoxDyn...

FILE: sqlx-core/src/any/value.rs
  type AnyValueKind (line 11) | pub enum AnyValueKind {
    method type_info (line 25) | fn type_info(&self) -> AnyTypeInfo {
    method unexpected (line 42) | pub(in crate::any) fn unexpected<Expected: Type<Any>>(&self) -> Result...
    method try_integer (line 46) | pub(in crate::any) fn try_integer<T>(&self) -> Result<T, BoxDynError>
  type AnyValue (line 63) | pub struct AnyValue {
  type AnyValueRef (line 69) | pub struct AnyValueRef<'a> {
  type Database (line 74) | type Database = Any;
  method as_ref (line 76) | fn as_ref(&self) -> <Self::Database as Database>::ValueRef<'_> {
  method type_info (line 80) | fn type_info(&self) -> Cow<'_, <Self::Database as Database>::TypeInfo> {
  method is_null (line 84) | fn is_null(&self) -> bool {
  type Database (line 90) | type Database = Any;
  function to_owned (line 92) | fn to_owned(&self) -> <Self::Database as Database>::Value {
  function type_info (line 98) | fn type_info(&self) -> Cow<'_, <Self::Database as Database>::TypeInfo> {
  function is_null (line 102) | fn is_null(&self) -> bool {

FILE: sqlx-core/src/arguments.rs
  type Arguments (line 12) | pub trait Arguments: Send + Sized + Default {
    method reserve (line 17) | fn reserve(&mut self, additional: usize, size: usize);
    method add (line 20) | fn add<'t, T>(&mut self, value: T) -> Result<(), BoxDynError>
    method len (line 25) | fn len(&self) -> usize;
    method format_placeholder (line 27) | fn format_placeholder<W: Write>(&self, writer: &mut W) -> fmt::Result {
  type IntoArguments (line 32) | pub trait IntoArguments<DB: Database>: Sized + Send {
    method into_arguments (line 33) | fn into_arguments(self) -> <DB as Database>::Arguments;
  type ImmutableArguments (line 52) | pub struct ImmutableArguments<DB: Database>(pub <DB as Database>::Argume...
  function into_arguments (line 55) | fn into_arguments(self) -> <DB as Database>::Arguments {

FILE: sqlx-core/src/column.rs
  type Column (line 7) | pub trait Column: 'static + Send + Sync + Debug {
    method ordinal (line 14) | fn ordinal(&self) -> usize;
    method name (line 20) | fn name(&self) -> &str;
    method type_info (line 23) | fn type_info(&self) -> &<Self::Database as Database>::TypeInfo;
    method origin (line 34) | fn origin(&self) -> ColumnOrigin {
  type TableColumn (line 42) | pub struct TableColumn {
  type ColumnOrigin (line 52) | pub enum ColumnOrigin {
    method table_column (line 72) | pub fn table_column(&self) -> Option<&TableColumn> {
  type ColumnIndex (line 92) | pub trait ColumnIndex<T: ?Sized>: Debug {
    method index (line 98) | fn index(&self, container: &T) -> Result<usize, Error>;
  function index (line 103) | fn index(&self, row: &T) -> Result<usize, Error> {

FILE: sqlx-core/src/common/mod.rs
  type DebugFn (line 8) | pub struct DebugFn<F: ?Sized>(pub F);
  type Target (line 11) | type Target = F;
  method deref (line 13) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 19) | fn deref_mut(&mut self) -> &mut Self::Target {
  method fmt (line 25) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {

FILE: sqlx-core/src/common/statement_cache.rs
  type StatementCache (line 6) | pub struct StatementCache<T> {
  function new (line 12) | pub fn new(capacity: usize) -> Self {
  function get_mut (line 20) | pub fn get_mut(&mut self, k: &str) -> Option<&mut T> {
  function insert (line 27) | pub fn insert(&mut self, k: &str, v: T) -> Option<T> {
  function len (line 42) | pub fn len(&self) -> usize {
  function is_empty (line 46) | pub fn is_empty(&self) -> bool {
  function remove_lru (line 51) | pub fn remove_lru(&mut self) -> Option<T> {
  function clear (line 56) | pub fn clear(&mut self) {
  function contains_key (line 61) | pub fn contains_key(&mut self, k: &str) -> bool {
  function capacity (line 66) | pub fn capacity(&self) -> usize {
  function is_enabled (line 72) | pub fn is_enabled(&self) -> bool {

FILE: sqlx-core/src/config/common.rs
  type Config (line 8) | pub struct Config {
    method database_url_var (line 46) | pub fn database_url_var(&self) -> &str {

FILE: sqlx-core/src/config/drivers.rs
  type Config (line 20) | pub struct Config {
  type MySqlConfig (line 49) | pub struct MySqlConfig {
  type PgConfig (line 60) | pub struct PgConfig {
  type SqliteConfig (line 71) | pub struct SqliteConfig {
  type ExternalDriverConfig (line 111) | pub struct ExternalDriverConfig {
    method try_parse (line 122) | pub fn try_parse<T: serde::de::DeserializeOwned>(
    method try_parse (line 137) | pub fn try_parse<T>(&self, _name: &str) -> Result<Option<T>, TryParseE...
  type TryParseError (line 117) | pub type TryParseError = Box<dyn Error + Send + Sync + 'static>;

FILE: sqlx-core/src/config/macros.rs
  type Config (line 12) | pub struct Config {
    method type_override (line 372) | pub fn type_override(&self, type_name: &str) -> Option<&str> {
    method column_override (line 378) | pub fn column_override(&self, table: &str, column: &str) -> Option<&st...
  type PreferredCrates (line 236) | pub struct PreferredCrates {
  type DateTimeCrate (line 297) | pub enum DateTimeCrate {
    method is_inferred (line 389) | pub fn is_inferred(&self) -> bool {
    method crate_name (line 394) | pub fn crate_name(&self) -> Option<&str> {
  type NumericCrate (line 326) | pub enum NumericCrate {
    method is_inferred (line 406) | pub fn is_inferred(&self) -> bool {
    method crate_name (line 411) | pub fn crate_name(&self) -> Option<&str> {
  type SqlType (line 352) | pub type SqlType = Box<str>;
  type TableName (line 357) | pub type TableName = Box<str>;
  type ColumnName (line 362) | pub type ColumnName = Box<str>;
  type RustType (line 367) | pub type RustType = Box<str>;

FILE: sqlx-core/src/config/migrate.rs
  type Config (line 21) | pub struct Config {
    method migrations_dir (line 199) | pub fn migrations_dir(&self) -> &str {
    method table_name (line 203) | pub fn table_name(&self) -> &str {
    method to_resolve_config (line 207) | pub fn to_resolve_config(&self) -> crate::migrate::ResolveConfig {
  type MigrationDefaults (line 127) | pub struct MigrationDefaults {
  type DefaultMigrationType (line 156) | pub enum DefaultMigrationType {
  type DefaultVersioning (line 176) | pub enum DefaultVersioning {

FILE: sqlx-core/src/config/mod.rs
  type Config (line 55) | pub struct Config {
    method try_from_crate_or_default (line 160) | pub fn try_from_crate_or_default() -> Result<Self, ConfigError> {
    method try_from_path_or_default (line 169) | pub fn try_from_path_or_default(path: PathBuf) -> Result<Self, ConfigE...
    method try_from_path (line 185) | pub fn try_from_path(path: PathBuf) -> Result<Self, ConfigError> {
    method read_from (line 190) | fn read_from(path: PathBuf) -> Result<Self, ConfigError> {
    method read_from (line 210) | fn read_from(path: PathBuf) -> Result<Self, ConfigError> {
  type ConfigError (line 79) | pub enum ConfigError {
    method from_io (line 130) | pub fn from_io(path: impl Into<PathBuf>, error: io::Error) -> Self {
    method not_found_path (line 142) | pub fn not_found_path(&self) -> Option<&Path> {
  function get_crate_path (line 219) | fn get_crate_path() -> Result<PathBuf, ConfigError> {

FILE: sqlx-core/src/config/tests.rs
  function reference_parses_as_config (line 5) | fn reference_parses_as_config() {
  function assert_common_config (line 16) | fn assert_common_config(config: &config::common::Config) {
  function assert_drivers_config (line 20) | fn assert_drivers_config(config: &config::drivers::Config) {
  function assert_macros_config (line 39) | fn assert_macros_config(config: &config::macros::Config) {
  function assert_migrate_config (line 95) | fn assert_migrate_config(config: &config::migrate::Config) {

FILE: sqlx-core/src/connection.rs
  type Connection (line 16) | pub trait Connection: Send {
    method close (line 37) | fn close(self) -> impl Future<Output = Result<(), Error>> + Send + 'st...
    method close_hard (line 43) | fn close_hard(self) -> impl Future<Output = Result<(), Error>> + Send ...
    method ping (line 46) | fn ping(&mut self) -> impl Future<Output = Result<(), Error>> + Send +...
    method begin (line 51) | fn begin(
    method begin_with (line 61) | fn begin_with(
    method is_in_transaction (line 78) | fn is_in_transaction(&self) -> bool {
    method transaction (line 99) | fn transaction<'a, F, R, E>(
    method cached_statements_size (line 132) | fn cached_statements_size(&self) -> usize
    method clear_cached_statements (line 141) | fn clear_cached_statements(&mut self) -> impl Future<Output = Result<(...
    method shrink_buffers (line 160) | fn shrink_buffers(&mut self);
    method flush (line 163) | fn flush(&mut self) -> impl Future<Output = Result<(), Error>> + Send ...
    method should_flush (line 166) | fn should_flush(&self) -> bool;
    method connect (line 173) | fn connect(url: &str) -> impl Future<Output = Result<Self, Error>> + S...
    method connect_with (line 183) | fn connect_with(
  type LogSettings (line 195) | pub struct LogSettings {
    method log_statements (line 212) | pub fn log_statements(&mut self, level: LevelFilter) {
    method log_slow_statements (line 215) | pub fn log_slow_statements(&mut self, level: LevelFilter, duration: Du...
  method default (line 202) | fn default() -> Self {
  type ConnectOptions (line 221) | pub trait ConnectOptions: 'static + Send + Sync + FromStr<Err = Error> +...
    method from_url (line 225) | fn from_url(url: &Url) -> Result<Self, Error>;
    method to_url_lossy (line 252) | fn to_url_lossy(&self) -> Url {
    method connect (line 257) | fn connect(&self) -> impl Future<Output = Result<Self::Connection, Err...
    method log_statements (line 262) | fn log_statements(self, level: LevelFilter) -> Self;
    method log_slow_statements (line 266) | fn log_slow_statements(self, level: LevelFilter, duration: Duration) -...
    method disable_statement_logging (line 269) | fn disable_statement_logging(self) -> Self {
    method __unstable_apply_driver_config (line 275) | fn __unstable_apply_driver_config(

FILE: sqlx-core/src/database.rs
  type Database (line 72) | pub trait Database: 'static + Sized + Send + Debug {
    constant NAME (line 107) | const NAME: &'static str;
    constant URL_SCHEMES (line 110) | const URL_SCHEMES: &'static [&'static str];
  type HasStatementCache (line 114) | pub trait HasStatementCache {}

FILE: sqlx-core/src/decode.rs
  type Decode (line 65) | pub trait Decode<'r, DB: Database>: Sized {
    method decode (line 67) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDy...
  function decode (line 76) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDynE...
  function decode (line 135) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDynE...

FILE: sqlx-core/src/describe.rs
  type Describe (line 21) | pub struct Describe<DB: Database> {
  function columns (line 29) | pub fn columns(&self) -> &[DB::Column] {
  function column (line 36) | pub fn column(&self, index: usize) -> &DB::Column {
  function parameters (line 45) | pub fn parameters(&self) -> Option<Either<&[DB::TypeInfo], usize>> {
  function nullable (line 53) | pub fn nullable(&self, column: usize) -> Option<bool> {
  function try_into_any (line 61) | pub fn try_into_any(self) -> crate::Result<Describe<crate::any::Any>>

FILE: sqlx-core/src/encode.rs
  type IsNull (line 13) | pub enum IsNull {
    method is_null (line 24) | pub fn is_null(&self) -> bool {
  type Encode (line 30) | pub trait Encode<'q, DB: Database> {
    method encode (line 32) | fn encode(self, buf: &mut <DB as Database>::ArgumentBuffer) -> Result<...
    method encode_by_ref (line 43) | fn encode_by_ref(
    method produces (line 48) | fn produces(&self) -> Option<DB::TypeInfo> {
    method size_hint (line 55) | fn size_hint(&self) -> usize {
  function encode (line 65) | fn encode(self, buf: &mut <DB as Database>::ArgumentBuffer) -> Result<Is...
  function encode_by_ref (line 70) | fn encode_by_ref(
  function produces (line 78) | fn produces(&self) -> Option<DB::TypeInfo> {
  function size_hint (line 83) | fn size_hint(&self) -> usize {
  function encode (line 181) | fn encode(self, buf: &mut <DB as Database>::ArgumentBuffer) -> Result<Is...
  function encode_by_ref (line 186) | fn encode_by_ref(
  function produces (line 194) | fn produces(&self) -> Option<DB::TypeInfo> {
  function size_hint (line 199) | fn size_hint(&self) -> usize {

FILE: sqlx-core/src/error.rs
  type Result (line 15) | pub type Result<T, E = Error> = ::std::result::Result<T, E>;
  type BoxDynError (line 19) | pub type BoxDynError = Box<dyn StdError + 'static + Send + Sync>;
  type UnexpectedNullError (line 27) | pub struct UnexpectedNullError;
  type Error (line 32) | pub enum Error {
    method into_database_error (line 137) | pub fn into_database_error(self) -> Option<Box<dyn DatabaseError + 'st...
    method as_database_error (line 144) | pub fn as_database_error(&self) -> Option<&(dyn DatabaseError + 'stati...
    method protocol (line 153) | pub fn protocol(err: impl Display) -> Self {
    method database (line 159) | pub fn database(err: impl DatabaseError) -> Self {
    method config (line 165) | pub fn config(err: impl StdError + Send + Sync + 'static) -> Self {
    method tls (line 169) | pub(crate) fn tls(err: impl Into<Box<dyn StdError + Send + Sync + 'sta...
    method decode (line 175) | pub fn decode(err: impl Into<Box<dyn StdError + Send + Sync + 'static>...
    method from (line 325) | fn from(error: E) -> Self {
    method from (line 333) | fn from(error: crate::migrate::MigrateError) -> Self {
  function mismatched_types (line 180) | pub fn mismatched_types<DB: Database, T: Type<DB>>(ty: &DB::TypeInfo) ->...
  type ErrorKind (line 197) | pub enum ErrorKind {
  type DatabaseError (line 213) | pub trait DatabaseError: 'static + Send + Sync + StdError {
    method message (line 215) | fn message(&self) -> &str;
    method code (line 218) | fn code(&self) -> Option<Cow<'_, str>> {
    method as_error (line 223) | fn as_error(&self) -> &(dyn StdError + Send + Sync + 'static);
    method as_error_mut (line 226) | fn as_error_mut(&mut self) -> &mut (dyn StdError + Send + Sync + 'stat...
    method into_error (line 229) | fn into_error(self: Box<Self>) -> Box<dyn StdError + Send + Sync + 'st...
    method is_transient_in_connect_phase (line 232) | fn is_transient_in_connect_phase(&self) -> bool {
    method constraint (line 241) | fn constraint(&self) -> Option<&str> {
    method table (line 249) | fn table(&self) -> Option<&str> {
    method kind (line 257) | fn kind(&self) -> ErrorKind;
    method is_unique_violation (line 260) | fn is_unique_violation(&self) -> bool {
    method is_foreign_key_violation (line 265) | fn is_foreign_key_violation(&self) -> bool {
    method is_check_violation (line 270) | fn is_check_violation(&self) -> bool {
  function downcast_ref (line 284) | pub fn downcast_ref<E: DatabaseError>(&self) -> &E {
  function downcast (line 297) | pub fn downcast<E: DatabaseError>(self: Box<Self>) -> Box<E> {
  function try_downcast_ref (line 305) | pub fn try_downcast_ref<E: DatabaseError>(&self) -> Option<&E> {
  function try_downcast (line 311) | pub fn try_downcast<E: DatabaseError>(self: Box<Self>) -> Result<Box<E>,...

FILE: sqlx-core/src/executor.rs
  type Executor (line 33) | pub trait Executor<'c>: Send + Debug + Sized {
    method execute (line 37) | fn execute<'e, 'q: 'e, E>(
    method execute_many (line 49) | fn execute_many<'e, 'q: 'e, E>(
    method fetch (line 68) | fn fetch<'e, 'q: 'e, E>(
    method fetch_many (line 88) | fn fetch_many<'e, 'q: 'e, E>(
    method fetch_all (line 103) | fn fetch_all<'e, 'q: 'e, E>(
    method fetch_one (line 115) | fn fetch_one<'e, 'q: 'e, E>(
    method fetch_optional (line 134) | fn fetch_optional<'e, 'q: 'e, E>(
    method prepare (line 151) | fn prepare<'e>(
    method prepare_with (line 166) | fn prepare_with<'e>(
    method describe (line 181) | fn describe<'e>(
  type Execute (line 196) | pub trait Execute<'q, DB: Database>: Send + Sized {
    method sql (line 198) | fn sql(self) -> SqlStr;
    method statement (line 201) | fn statement(&self) -> Option<&DB::Statement>;
    method take_arguments (line 210) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argume...
    method persistent (line 213) | fn persistent(&self) -> bool;
  method sql (line 221) | fn sql(self) -> SqlStr {
  method statement (line 226) | fn statement(&self) -> Option<&DB::Statement> {
  method take_arguments (line 231) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argument...
  method persistent (line 236) | fn persistent(&self) -> bool {
  function sql (line 246) | fn sql(self) -> SqlStr {
  function statement (line 251) | fn statement(&self) -> Option<&DB::Statement> {
  function take_arguments (line 256) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argument...
  function persistent (line 261) | fn persistent(&self) -> bool {

FILE: sqlx-core/src/ext/async_stream.rs
  type TryAsyncStream (line 19) | pub struct TryAsyncStream<'a, T> {
  function new (line 25) | pub fn new<F, Fut>(f: F) -> Self
  type Yielder (line 39) | pub struct Yielder<T> {
  function new (line 46) | fn new() -> Self {
  function duplicate (line 53) | fn duplicate(&self) -> Self {
  function r#yield (line 60) | pub async fn r#yield(&self, val: T) {
  function take (line 90) | fn take(&self) -> Option<T> {
  type Item (line 99) | type Item = Result<T, Error>;
  method poll_next (line 101) | fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Opt...

FILE: sqlx-core/src/ext/ustr.rs
  type UStr (line 11) | pub enum UStr {
    method new (line 17) | pub fn new(s: &str) -> Self {
    method strip_prefix (line 22) | pub fn strip_prefix(this: &Self, prefix: &str) -> Option<Self> {
    method borrow (line 53) | fn borrow(&self) -> &str {
    method eq (line 59) | fn eq(&self, other: &UStr) -> bool {
    method from (line 66) | fn from(s: &'static str) -> Self {
    method from (line 72) | fn from(value: &'a UStr) -> Self {
    method from (line 79) | fn from(s: String) -> Self {
    method deserialize (line 102) | fn deserialize<D>(deserializer: D) -> Result<Self, <D as serde::Deseri...
    method serialize (line 112) | fn serialize<S>(
  type Target (line 31) | type Target = str;
  method deref (line 34) | fn deref(&self) -> &str {
  method hash (line 44) | fn hash<H: Hasher>(&self, state: &mut H) {
  method fmt (line 86) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  method fmt (line 93) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {

FILE: sqlx-core/src/from_row.rs
  type FromRow (line 309) | pub trait FromRow<'r, R: Row>: Sized {
    method from_row (line 310) | fn from_row(row: &'r R) -> Result<Self, Error>;
  function from_row (line 318) | fn from_row(_: &'r R) -> Result<Self, Error> {

FILE: sqlx-core/src/fs.rs
  type ReadDir (line 8) | pub struct ReadDir {
    method next (line 63) | pub async fn next(&mut self) -> io::Result<Option<DirEntry>> {
  type DirEntry (line 12) | pub struct DirEntry {
  function read (line 24) | pub async fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
  function read_to_string (line 29) | pub async fn read_to_string<P: AsRef<Path>>(path: P) -> io::Result<Strin...
  function create_dir_all (line 34) | pub async fn create_dir_all<P: AsRef<Path>>(path: P) -> io::Result<()> {
  function remove_file (line 39) | pub async fn remove_file<P: AsRef<Path>>(path: P) -> io::Result<()> {
  function remove_dir (line 44) | pub async fn remove_dir<P: AsRef<Path>>(path: P) -> io::Result<()> {
  function remove_dir_all (line 49) | pub async fn remove_dir_all<P: AsRef<Path>>(path: P) -> io::Result<()> {
  function read_dir (line 54) | pub async fn read_dir(path: PathBuf) -> io::Result<ReadDir> {

FILE: sqlx-core/src/io/buf.rs
  type BufExt (line 8) | pub trait BufExt: Buf {
    method get_bytes_nul (line 10) | fn get_bytes_nul(&mut self) -> Result<Bytes, Error>;
    method get_bytes (line 13) | fn get_bytes(&mut self, len: usize) -> Bytes;
    method get_str_nul (line 16) | fn get_str_nul(&mut self) -> Result<String, Error>;
    method get_str (line 19) | fn get_str(&mut self, len: usize) -> Result<String, Error>;
    method get_bytes_nul (line 23) | fn get_bytes_nul(&mut self) -> Result<Bytes, Error> {
    method get_bytes (line 34) | fn get_bytes(&mut self, len: usize) -> Bytes {
    method get_str_nul (line 41) | fn get_str_nul(&mut self) -> Result<String, Error> {
    method get_str (line 49) | fn get_str(&mut self, len: usize) -> Result<String, Error> {

FILE: sqlx-core/src/io/buf_mut.rs
  type BufMutExt (line 3) | pub trait BufMutExt: BufMut {
    method put_str_nul (line 4) | fn put_str_nul(&mut self, s: &str);
    method put_str_nul (line 8) | fn put_str_nul(&mut self, s: &str) {

FILE: sqlx-core/src/io/buf_stream.rs
  type BufStream (line 14) | pub struct BufStream<S>
  function new (line 32) | pub fn new(stream: S) -> Self {
  function write (line 40) | pub fn write<'en, T>(&mut self, value: T)
  function write_with (line 47) | pub fn write_with<'en, T, C>(&mut self, value: T, context: C)
  function flush (line 54) | pub fn flush(&mut self) -> WriteAndFlush<'_, S> {
  function read (line 61) | pub async fn read<'de, T>(&mut self, cnt: usize) -> Result<T, Error>
  function read_with (line 68) | pub async fn read_with<'de, T, C>(&mut self, cnt: usize, context: C) -> ...
  function read_raw (line 75) | pub async fn read_raw(&mut self, cnt: usize) -> Result<BytesMut, Error> {
  function read_raw_into (line 82) | pub async fn read_raw_into(&mut self, buf: &mut BytesMut, cnt: usize) ->...
  type Target (line 91) | type Target = S;
  method deref (line 93) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 102) | fn deref_mut(&mut self) -> &mut Self::Target {

FILE: sqlx-core/src/io/decode.rs
  type ProtocolDecode (line 5) | pub trait ProtocolDecode<'de, Context = ()>
    method decode (line 9) | fn decode(buf: Bytes) -> Result<Self, Error>
    method decode_with (line 16) | fn decode_with(buf: Bytes, context: Context) -> Result<Self, Error>;
  method decode_with (line 20) | fn decode_with(buf: Bytes, _: ()) -> Result<Self, Error> {
  function decode_with (line 26) | fn decode_with(_: Bytes, _: ()) -> Result<(), Error> {

FILE: sqlx-core/src/io/encode.rs
  type ProtocolEncode (line 1) | pub trait ProtocolEncode<'en, Context = ()> {
    method encode (line 2) | fn encode(&self, buf: &mut Vec<u8>) -> Result<(), crate::Error>
    method encode_with (line 9) | fn encode_with(&self, buf: &mut Vec<u8>, context: Context) -> Result<(...
  function encode_with (line 13) | fn encode_with(&self, buf: &mut Vec<u8>, _context: C) -> Result<(), crat...

FILE: sqlx-core/src/io/read_buf.rs
  type ReadBuf (line 4) | pub trait ReadBuf: BufMut {
    method init_mut (line 6) | fn init_mut(&mut self) -> &mut [u8];
    method init_mut (line 11) | fn init_mut(&mut self) -> &mut [u8] {
    method init_mut (line 18) | fn init_mut(&mut self) -> &mut [u8] {
  function test_read_buf_bytes_mut (line 30) | fn test_read_buf_bytes_mut() {

FILE: sqlx-core/src/io/write_and_flush.rs
  type WriteAndFlush (line 10) | pub struct WriteAndFlush<'a, S> {
  type Output (line 16) | type Output = Result<(), Error>;
  method poll (line 18) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  method drop (line 40) | fn drop(&mut self) {

FILE: sqlx-core/src/logger.rs
  function private_level_filter_to_levels (line 42) | pub fn private_level_filter_to_levels(
  function private_level_filter_to_trace_level (line 57) | pub(crate) fn private_level_filter_to_trace_level(
  type QueryLogger (line 63) | pub struct QueryLogger {
    method new (line 72) | pub fn new(sql: SqlStr, settings: LogSettings) -> Self {
    method increment_rows_returned (line 82) | pub fn increment_rows_returned(&mut self) {
    method increase_rows_affected (line 86) | pub fn increase_rows_affected(&mut self, n: u64) {
    method sql (line 90) | pub fn sql(&self) -> &SqlStr {
    method finish (line 94) | pub fn finish(&self) {
  method drop (line 158) | fn drop(&mut self) {
  function parse_query_summary (line 163) | pub fn parse_query_summary(sql: &str) -> String {

FILE: sqlx-core/src/migrate/error.rs
  type MigrateError (line 5) | pub enum MigrateError {

FILE: sqlx-core/src/migrate/migrate.rs
  type MigrateDatabase (line 7) | pub trait MigrateDatabase {
    method create_database (line 10) | fn create_database(url: &str) -> impl Future<Output = Result<(), Error...
    method database_exists (line 14) | fn database_exists(url: &str) -> impl Future<Output = Result<bool, Err...
    method drop_database (line 18) | fn drop_database(url: &str) -> impl Future<Output = Result<(), Error>>...
    method force_drop_database (line 22) | fn force_drop_database(_url: &str) -> impl Future<Output = Result<(), ...
  type Migrate (line 28) | pub trait Migrate {
    method create_schema_if_not_exists (line 30) | fn create_schema_if_not_exists<'e>(
    method ensure_migrations_table (line 37) | fn ensure_migrations_table<'e>(
    method dirty_version (line 44) | fn dirty_version<'e>(
    method list_applied_migrations (line 50) | fn list_applied_migrations<'e>(
    method lock (line 58) | fn lock(&mut self) -> BoxFuture<'_, Result<(), MigrateError>>;
    method unlock (line 62) | fn unlock(&mut self) -> BoxFuture<'_, Result<(), MigrateError>>;
    method apply (line 67) | fn apply<'e>(
    method revert (line 76) | fn revert<'e>(

FILE: sqlx-core/src/migrate/migration.rs
  type Migration (line 9) | pub struct Migration {
    method new (line 19) | pub fn new(
    method with_checksum (line 38) | pub(crate) fn with_checksum(
  type AppliedMigration (line 58) | pub struct AppliedMigration {
  function checksum (line 63) | pub fn checksum(sql: &str) -> Vec<u8> {
  function checksum_fragments (line 67) | pub fn checksum_fragments<'a>(fragments: impl Iterator<Item = &'a str>) ...
  function fragments_checksum_equals_full_checksum (line 78) | fn fragments_checksum_equals_full_checksum() {

FILE: sqlx-core/src/migrate/migration_type.rs
  type MigrationType (line 5) | pub enum MigrationType {
    method from_filename (line 19) | pub fn from_filename(filename: &str) -> Self {
    method is_reversible (line 29) | pub fn is_reversible(&self) -> bool {
    method is_up_migration (line 37) | pub fn is_up_migration(&self) -> bool {
    method is_down_migration (line 45) | pub fn is_down_migration(&self) -> bool {
    method label (line 53) | pub fn label(&self) -> &'static str {
    method suffix (line 61) | pub fn suffix(&self) -> &'static str {
    method file_content (line 69) | pub fn file_content(&self) -> &'static str {
    method infer (line 78) | pub fn infer(migrator: &Migrator, reversible: bool) -> MigrationType {

FILE: sqlx-core/src/migrate/migrator.rs
  type Migrator (line 14) | pub struct Migrator {
    constant DEFAULT (line 35) | pub const DEFAULT: Migrator = Migrator {
    method new (line 62) | pub async fn new<'s, S>(source: S) -> Result<Self, MigrateError>
    method with_migrations (line 89) | pub fn with_migrations(mut migrations: Vec<Migration>) -> Self {
    method dangerous_set_table_name (line 112) | pub fn dangerous_set_table_name(&mut self, table_name: impl Into<Cow<'...
    method create_schema (line 125) | pub fn create_schema(&mut self, schema_name: impl Into<Cow<'static, st...
    method set_ignore_missing (line 131) | pub fn set_ignore_missing(&mut self, ignore_missing: bool) -> &mut Self {
    method set_locking (line 144) | pub fn set_locking(&mut self, locking: bool) -> &mut Self {
    method iter (line 150) | pub fn iter(&self) -> slice::Iter<'_, Migration> {
    method version_exists (line 155) | pub fn version_exists(&self, version: i64) -> bool {
    method run (line 177) | pub async fn run<'a, A>(&self, migrator: A) -> Result<(), MigrateError>
    method run_to (line 186) | pub async fn run_to<'a, A>(&self, target: i64, migrator: A) -> Result<...
    method run_direct (line 197) | pub async fn run_direct<C>(&self, target: Option<i64>, conn: &mut C) -...
    method undo (line 275) | pub async fn undo<'a, A>(&self, migrator: A, target: i64) -> Result<()...
  function validate_applied_migrations (line 324) | fn validate_applied_migrations(

FILE: sqlx-core/src/migrate/source.rs
  type MigrationSource (line 27) | pub trait MigrationSource<'s>: Debug {
    method resolve (line 28) | fn resolve(self) -> BoxFuture<'s, Result<Vec<Migration>, BoxDynError>>;
  function resolve (line 32) | fn resolve(self) -> BoxFuture<'s, Result<Vec<Migration>, BoxDynError>> {
  method resolve (line 40) | fn resolve(self) -> BoxFuture<'static, Result<Vec<Migration>, BoxDynErro...
  type ResolveWith (line 61) | pub struct ResolveWith<S>(pub S, pub ResolveConfig);
  function resolve (line 64) | fn resolve(self) -> BoxFuture<'s, Result<Vec<Migration>, BoxDynError>> {
  type ResolveError (line 80) | pub struct ResolveError {
  type ResolveConfig (line 88) | pub struct ResolveConfig {
    method new (line 94) | pub fn new() -> Self {
    method ignore_char (line 115) | pub fn ignore_char(&mut self, c: char) -> &mut Self {
    method ignore_chars (line 135) | pub fn ignore_chars(&mut self, chars: impl IntoIterator<Item = char>) ...
    method ignored_chars (line 143) | pub fn ignored_chars(&self) -> impl Iterator<Item = char> + '_ {
  function resolve_blocking (line 151) | pub fn resolve_blocking(path: &Path) -> Result<Vec<(Migration, PathBuf)>...
  function resolve_blocking_with_config (line 156) | pub fn resolve_blocking_with_config(
  function checksum_with (line 257) | fn checksum_with(sql: &str, ignored_chars: &BTreeSet<char>) -> Vec<u8> {
  function checksum_with_ignored_chars (line 267) | fn checksum_with_ignored_chars() {

FILE: sqlx-core/src/net/socket/buffered.rs
  constant DEFAULT_BUF_SIZE (line 10) | const DEFAULT_BUF_SIZE: usize = 8192;
  type BufferedSocket (line 12) | pub struct BufferedSocket<S> {
  type WriteBuffer (line 18) | pub struct WriteBuffer {
    method sanity_check (line 162) | fn sanity_check(&self) {
    method buf_mut (line 168) | pub fn buf_mut(&mut self) -> &mut Vec<u8> {
    method init_remaining_mut (line 174) | pub fn init_remaining_mut(&mut self) -> &mut [u8] {
    method put_slice (line 180) | pub fn put_slice(&mut self, slice: &[u8]) {
    method advance (line 193) | pub fn advance(&mut self, amt: usize) {
    method read_from (line 209) | pub async fn read_from(&mut self, mut source: impl AsyncRead + Unpin) ...
    method is_empty (line 225) | pub fn is_empty(&self) -> bool {
    method is_full (line 229) | pub fn is_full(&self) -> bool {
    method get (line 233) | pub fn get(&self) -> &[u8] {
    method get_mut (line 237) | pub fn get_mut(&mut self) -> &mut [u8] {
    method shrink (line 241) | pub fn shrink(&mut self) {
    method consume (line 257) | fn consume(&mut self, amt: usize) {
  type ReadBuffer (line 24) | pub struct ReadBuffer {
    method read (line 278) | async fn read(&mut self, len: usize, socket: &mut impl Socket) -> io::...
    method reserve (line 303) | fn reserve(&mut self, amt: usize) {
    method advance (line 309) | fn advance(&mut self, amt: usize) {
    method shrink (line 313) | fn shrink(&mut self) {
  function new (line 30) | pub fn new(socket: S) -> Self
  function read_buffered (line 48) | pub async fn read_buffered(&mut self, len: usize) -> Result<BytesMut, Er...
  function try_read (line 69) | pub async fn try_read<F, R>(&mut self, mut try_read: F) -> Result<R, Error>
  function write_buffer (line 83) | pub fn write_buffer(&self) -> &WriteBuffer {
  function write_buffer_mut (line 87) | pub fn write_buffer_mut(&mut self) -> &mut WriteBuffer {
  function read (line 91) | pub async fn read<'de, T>(&mut self, byte_len: usize) -> Result<T, Error>
  function read_with (line 98) | pub async fn read_with<'de, T, C>(&mut self, byte_len: usize, context: C...
  function write (line 106) | pub fn write<'en, T>(&mut self, value: T) -> Result<(), Error>
  function write_with (line 114) | pub fn write_with<'en, T, C>(&mut self, value: T, context: C) -> Result<...
  function flush (line 125) | pub async fn flush(&mut self) -> io::Result<()> {
  function shutdown (line 137) | pub async fn shutdown(&mut self) -> io::Result<()> {
  function shrink_buffers (line 142) | pub fn shrink_buffers(&mut self) {
  function into_inner (line 148) | pub fn into_inner(self) -> S {
  function boxed (line 152) | pub fn boxed(self) -> BufferedSocket<Box<dyn Socket>> {

FILE: sqlx-core/src/net/socket/mod.rs
  type Socket (line 15) | pub trait Socket: Send + Sync + Unpin + 'static {
    method try_read (line 16) | fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize>;
    method try_write (line 18) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize>;
    method poll_read_ready (line 20) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result...
    method poll_write_ready (line 22) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Resul...
    method poll_flush (line 24) | fn poll_flush(&mut self, _cx: &mut Context<'_>) -> Poll<io::Result<()>> {
    method poll_shutdown (line 29) | fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
    method read (line 31) | fn read<'a, B: ReadBuf>(&'a mut self, buf: &'a mut B) -> Read<'a, Self...
    method write (line 38) | fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self>
    method flush (line 45) | fn flush(&mut self) -> Flush<'_, Self>
    method shutdown (line 52) | fn shutdown(&mut self) -> Shutdown<'_, Self>
    method try_read (line 159) | fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
    method try_write (line 163) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
    method poll_read_ready (line 167) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result...
    method poll_write_ready (line 171) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Resul...
    method poll_flush (line 175) | fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
    method poll_shutdown (line 179) | fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  type Read (line 60) | pub struct Read<'a, S: ?Sized, B> {
  type Output (line 70) | type Output = io::Result<usize>;
  method poll (line 72) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  type Write (line 88) | pub struct Write<'a, S: ?Sized> {
  type Output (line 97) | type Output = io::Result<usize>;
  method poll (line 99) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  type Flush (line 115) | pub struct Flush<'a, S: ?Sized> {
  type Output (line 120) | type Output = io::Result<()>;
  method poll (line 122) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  type Shutdown (line 127) | pub struct Shutdown<'a, S: ?Sized> {
  type Output (line 135) | type Output = io::Result<()>;
  method poll (line 137) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  type WithSocket (line 142) | pub trait WithSocket {
    method with_socket (line 145) | fn with_socket<S: Socket>(self, socket: S) -> impl Future<Output = Sel...
    type Output (line 151) | type Output = Box<dyn Socket>;
    method with_socket (line 153) | async fn with_socket<S: Socket>(self, socket: S) -> Self::Output {
  type SocketIntoBox (line 148) | pub struct SocketIntoBox;
  function connect_tcp (line 184) | pub async fn connect_tcp<Ws: WithSocket>(
  function connect_tcp_async_io (line 211) | async fn connect_tcp_async_io(host: &str, port: u16) -> crate::Result<im...
  function connect_uds (line 255) | pub async fn connect_uds<P: AsRef<Path>, Ws: WithSocket>(

FILE: sqlx-core/src/net/tls/mod.rs
  type CertificateInput (line 19) | pub enum CertificateInput {
    method from (line 27) | fn from(value: String) -> Self {
    method data (line 42) | async fn data(&self) -> Result<Vec<u8>, std::io::Error> {
    method fmt (line 52) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type TlsConfig (line 60) | pub struct TlsConfig<'a> {
  function handshake (line 69) | pub async fn handshake<S, Ws>(
  function available (line 95) | pub fn available() -> bool {
  function error_if_unavailable (line 99) | pub fn error_if_unavailable() -> crate::Result<()> {

FILE: sqlx-core/src/net/tls/tls_native_tls.rs
  type NativeTlsSocket (line 13) | pub struct NativeTlsSocket<S: Socket> {
  method try_read (line 18) | fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
  method try_write (line 22) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method poll_read_ready (line 26) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  method poll_write_ready (line 30) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  method poll_shutdown (line 34) | fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
  function handshake (line 42) | pub async fn handshake<S: Socket>(

FILE: sqlx-core/src/net/tls/tls_rustls.rs
  type RustlsSocket (line 25) | pub struct RustlsSocket<S: Socket> {
  function poll_complete_io (line 32) | fn poll_complete_io(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  function complete_io (line 43) | async fn complete_io(&mut self) -> io::Result<()> {
  method try_read (line 49) | fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
  method try_write (line 53) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method poll_read_ready (line 61) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  method poll_write_ready (line 65) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  method poll_flush (line 69) | fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
  method poll_shutdown (line 73) | fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
  function handshake (line 90) | pub async fn handshake<S>(socket: S, tls_config: TlsConfig<'_>) -> Resul...
  function certs_from_pem (line 197) | fn certs_from_pem(pem: Vec<u8>) -> Result<Vec<CertificateDer<'static>>, ...
  function private_key_from_pem (line 203) | fn private_key_from_pem(pem: Vec<u8>) -> Result<PrivateKeyDer<'static>, ...
  function import_root_certs (line 212) | fn import_root_certs() -> RootCertStore {
  function import_root_certs (line 217) | fn import_root_certs() -> RootCertStore {
  function import_root_certs (line 235) | fn import_root_certs() -> RootCertStore {
  type DummyTlsVerifier (line 240) | struct DummyTlsVerifier {
  method verify_server_cert (line 245) | fn verify_server_cert(
  method verify_tls12_signature (line 256) | fn verify_tls12_signature(
  method verify_tls13_signature (line 270) | fn verify_tls13_signature(
  method supported_verify_schemes (line 284) | fn supported_verify_schemes(&self) -> Vec<rustls::SignatureScheme> {
  type NoHostnameTlsVerifier (line 292) | pub struct NoHostnameTlsVerifier {
  method verify_server_cert (line 297) | fn verify_server_cert(
  method verify_tls12_signature (line 319) | fn verify_tls12_signature(
  method verify_tls13_signature (line 328) | fn verify_tls13_signature(
  method supported_verify_schemes (line 337) | fn supported_verify_schemes(&self) -> Vec<rustls::SignatureScheme> {

FILE: sqlx-core/src/net/tls/util.rs
  type StdSocket (line 7) | pub struct StdSocket<S> {
  function new (line 14) | pub fn new(socket: S) -> Self {
  function poll_ready (line 22) | pub fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()...
  function ready (line 36) | pub async fn ready(&mut self) -> io::Result<()> {
  method read (line 42) | fn read(&mut self, mut buf: &mut [u8]) -> io::Result<usize> {
  method write (line 52) | fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method flush (line 59) | fn flush(&mut self) -> io::Result<()> {

FILE: sqlx-core/src/pool/connection.rs
  constant CLOSE_ON_DROP_TIMEOUT (line 16) | const CLOSE_ON_DROP_TIMEOUT: Duration = Duration::from_secs(5);
  type PoolConnection (line 21) | pub struct PoolConnection<DB: Database> {
  type Live (line 27) | pub(super) struct Live<DB: Database> {
  type Idle (line 32) | pub(super) struct Idle<DB: Database> {
  type Floating (line 38) | pub(super) struct Floating<DB: Database, C> {
  constant EXPECT_MSG (line 43) | const EXPECT_MSG: &str = "BUG: inner connection already taken!";
  method fmt (line 46) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  type Target (line 53) | type Target = DB::Connection;
  method deref (line 55) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 61) | fn deref_mut(&mut self) -> &mut Self::Target {
  function as_ref (line 67) | fn as_ref(&self) -> &DB::Connection {
  function as_mut (line 73) | fn as_mut(&mut self) -> &mut DB::Connection {
  function close (line 86) | pub async fn close(mut self) -> Result<(), Error> {
  function close_on_drop (line 97) | pub fn close_on_drop(&mut self) {
  function detach (line 113) | pub fn detach(mut self) -> DB::Connection {
  function leak (line 122) | pub fn leak(mut self) -> DB::Connection {
  function take_live (line 126) | fn take_live(&mut self) -> Live<DB> {
  function return_to_pool (line 134) | pub fn return_to_pool(&mut self) -> impl Future<Output = ()> + Send + 's...
  function take_and_close (line 157) | fn take_and_close(&mut self) -> impl Future<Output = ()> + Send + 'static {
  type Database (line 180) | type Database = DB;
  type Connection (line 182) | type Connection = &'c mut <DB as Database>::Connection;
  function acquire (line 185) | fn acquire(self) -> futures_core::future::BoxFuture<'c, Result<Self::Con...
  function begin (line 190) | fn begin(
  method drop (line 200) | fn drop(&mut self) {
  function float (line 214) | pub fn float(self, pool: Arc<PoolInner<DB>>) -> Floating<DB, Self> {
  function into_idle (line 222) | pub fn into_idle(self) -> Idle<DB> {
  type Target (line 231) | type Target = Live<DB>;
  method deref (line 233) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 239) | fn deref_mut(&mut self) -> &mut Self::Target {
  function new_live (line 245) | pub fn new_live(conn: DB::Connection, guard: DecrementSizeGuard<DB>) -> ...
  function reattach (line 255) | pub fn reattach(self) -> PoolConnection<DB> {
  function release (line 268) | pub fn release(self) {
  function return_to_pool (line 275) | async fn return_to_pool(mut self) -> bool {
  function close (line 330) | pub async fn close(self) {
  function close_hard (line 337) | pub async fn close_hard(self) {
  function detach (line 341) | pub fn detach(self) -> DB::Connection {
  function into_idle (line 345) | pub fn into_idle(self) -> Floating<DB, Idle<DB>> {
  function metadata (line 352) | pub fn metadata(&self) -> PoolConnectionMetadata {
  function from_idle (line 361) | pub fn from_idle(
  function ping (line 372) | pub async fn ping(&mut self) -> Result<(), Error> {
  function into_live (line 376) | pub fn into_live(self) -> Floating<DB, Live<DB>> {
  function close (line 383) | pub async fn close(self) -> DecrementSizeGuard<DB> {
  function close_hard (line 390) | pub async fn close_hard(self) -> DecrementSizeGuard<DB> {
  function metadata (line 396) | pub fn metadata(&self) -> PoolConnectionMetadata {
  type Target (line 410) | type Target = C;
  method deref (line 412) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 418) | fn deref_mut(&mut self) -> &mut Self::Target {

FILE: sqlx-core/src/pool/executor.rs
  type Database (line 16) | type Database = DB;
  function fetch_many (line 18) | fn fetch_many<'e, 'q: 'e, E>(
  function fetch_optional (line 39) | fn fetch_optional<'e, 'q: 'e, E>(
  function prepare_with (line 51) | fn prepare_with<'e>(
  function describe (line 66) | fn describe<'e>(

FILE: sqlx-core/src/pool/inner.rs
  type PoolInner (line 25) | pub(crate) struct PoolInner<DB: Database> {
  function new_arc (line 39) | pub(super) fn new_arc(
  function size (line 74) | pub(super) fn size(&self) -> u32 {
  function num_idle (line 78) | pub(super) fn num_idle(&self) -> usize {
  function is_closed (line 87) | pub(super) fn is_closed(&self) -> bool {
  function mark_closed (line 91) | fn mark_closed(&self) {
  function close (line 96) | pub(super) fn close(self: &Arc<Self>) -> impl Future<Output = ()> + '_ {
  function close_event (line 121) | pub(crate) fn close_event(&self) -> CloseEvent {
  function acquire_permit (line 131) | async fn acquire_permit(self: &Arc<Self>) -> Result<AsyncSemaphoreReleas...
  function parent (line 177) | fn parent(&self) -> Option<&Pool<DB>> {
  function try_acquire (line 182) | pub(super) fn try_acquire(self: &Arc<Self>) -> Option<Floating<DB, Idle<...
  function pop_idle (line 192) | fn pop_idle<'a>(
  function release (line 204) | pub(super) fn release(&self, floating: Floating<DB, Live<DB>>) {
  function try_increment_size (line 223) | pub(super) fn try_increment_size<'a>(
  function acquire (line 246) | pub(super) async fn acquire(self: &Arc<Self>) -> Result<Floating<DB, Liv...
  function connect (line 325) | pub(super) async fn connect(
  function try_min_connections (line 400) | pub async fn try_min_connections(self: &Arc<Self>, deadline: Instant) ->...
  function min_connections_maintenance (line 424) | pub async fn min_connections_maintenance(self: &Arc<Self>, deadline: Opt...
  method drop (line 442) | fn drop(&mut self) {
  function is_beyond_max_lifetime (line 453) | pub(super) fn is_beyond_max_lifetime<DB: Database>(
  function is_beyond_idle_timeout (line 463) | fn is_beyond_idle_timeout<DB: Database>(idle: &Idle<DB>, options: &PoolO...
  function check_idle_conn (line 469) | async fn check_idle_conn<DB: Database>(
  function spawn_maintenance_tasks (line 507) | fn spawn_maintenance_tasks<DB: Database>(pool: &Arc<PoolInner<DB>>) {
  type DecrementSizeGuard (line 581) | pub(in crate::pool) struct DecrementSizeGuard<DB: Database> {
  function new_permit (line 588) | pub fn new_permit(pool: Arc<PoolInner<DB>>) -> Self {
  function from_permit (line 595) | pub fn from_permit(pool: Arc<PoolInner<DB>>, permit: AsyncSemaphoreRelea...
  function release_permit (line 604) | fn release_permit(self) {
  function cancel (line 609) | pub fn cancel(mut self) {
  method drop (line 615) | fn drop(&mut self) {

FILE: sqlx-core/src/pool/maybe.rs
  type MaybePoolConnection (line 5) | pub enum MaybePoolConnection<'c, DB: Database> {
  type Target (line 12) | type Target = DB::Connection;
  method deref (line 15) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 25) | fn deref_mut(&mut self) -> &mut Self::Target {
  function from (line 34) | fn from(v: PoolConnection<DB>) -> Self {
  function from (line 40) | fn from(v: &'c mut DB::Connection) -> Self {

FILE: sqlx-core/src/pool/mod.rs
  type Pool (line 260) | pub struct Pool<DB: Database>(pub(crate) Arc<PoolInner<DB>>);
  type CloseEvent (line 265) | pub struct CloseEvent {
    method do_until (line 595) | pub async fn do_until<Fut: Future>(&mut self, fut: Fut) -> Result<Fut:...
  function connect (line 284) | pub async fn connect(url: &str) -> Result<Self, Error> {
  function connect_with (line 295) | pub async fn connect_with(
  function connect_lazy (line 317) | pub fn connect_lazy(url: &str) -> Result<Self, Error> {
  function connect_lazy_with (line 330) | pub fn connect_lazy_with(options: <DB::Connection as Connection>::Option...
  function acquire (line 357) | pub fn acquire(&self) -> impl Future<Output = Result<PoolConnection<DB>,...
  function try_acquire (line 366) | pub fn try_acquire(&self) -> Option<PoolConnection<DB>> {
  function begin (line 371) | pub async fn begin(&self) -> Result<Transaction<'static, DB>, Error> {
  function try_begin (line 380) | pub async fn try_begin(&self) -> Result<Option<Transaction<'static, DB>>...
  function begin_with (line 391) | pub async fn begin_with(
  function try_begin_with (line 404) | pub async fn try_begin_with(
  function close (line 441) | pub fn close(&self) -> impl Future<Output = ()> + '_ {
  function is_closed (line 446) | pub fn is_closed(&self) -> bool {
  function close_event (line 530) | pub fn close_event(&self) -> CloseEvent {
  function size (line 535) | pub fn size(&self) -> u32 {
  function num_idle (line 540) | pub fn num_idle(&self) -> usize {
  function connect_options (line 545) | pub fn connect_options(&self) -> Arc<<DB::Connection as Connection>::Opt...
  function set_connect_options (line 555) | pub fn set_connect_options(&self, connect_options: <DB::Connection as Co...
  function options (line 567) | pub fn options(&self) -> &PoolOptions<DB> {
  method clone (line 574) | fn clone(&self) -> Self {
  function fmt (line 580) | fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Output (line 626) | type Output = ();
  method poll (line 628) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  method is_terminated (line 644) | fn is_terminated(&self) -> bool {
  function deadline_as_timeout (line 652) | fn deadline_as_timeout(deadline: Instant) -> Result<Duration, Error> {
  function assert_pool_traits (line 660) | fn assert_pool_traits() {

FILE: sqlx-core/src/pool/options.rs
  type PoolOptions (line 45) | pub struct PoolOptions<DB: Database> {
  method clone (line 94) | fn clone(&self) -> Self {
  type PoolConnectionMetadata (line 117) | pub struct PoolConnectionMetadata {
  method default (line 131) | fn default() -> Self {
  function new (line 143) | pub fn new() -> Self {
  function max_connections (line 173) | pub fn max_connections(mut self, max: u32) -> Self {
  function get_max_connections (line 179) | pub fn get_max_connections(&self) -> u32 {
  function min_connections (line 205) | pub fn min_connections(mut self, min: u32) -> Self {
  function get_min_connections (line 211) | pub fn get_min_connections(&self) -> u32 {
  function acquire_time_level (line 220) | pub fn acquire_time_level(mut self, level: LevelFilter) -> Self {
  function acquire_slow_level (line 227) | pub fn acquire_slow_level(mut self, level: LevelFilter) -> Self {
  function acquire_slow_threshold (line 237) | pub fn acquire_slow_threshold(mut self, threshold: Duration) -> Self {
  function get_acquire_slow_threshold (line 244) | pub fn get_acquire_slow_threshold(&self) -> Duration {
  function acquire_timeout (line 261) | pub fn acquire_timeout(mut self, timeout: Duration) -> Self {
  function get_acquire_timeout (line 267) | pub fn get_acquire_timeout(&self) -> Duration {
  function max_lifetime (line 285) | pub fn max_lifetime(mut self, lifetime: impl Into<Option<Duration>>) -> ...
  function get_max_lifetime (line 291) | pub fn get_max_lifetime(&self) -> Option<Duration> {
  function idle_timeout (line 300) | pub fn idle_timeout(mut self, timeout: impl Into<Option<Duration>>) -> S...
  function get_idle_timeout (line 306) | pub fn get_idle_timeout(&self) -> Option<Duration> {
  function test_before_acquire (line 314) | pub fn test_before_acquire(mut self, test: bool) -> Self {
  function get_test_before_acquire (line 320) | pub fn get_test_before_acquire(&self) -> bool {
  function __fair (line 337) | pub fn __fair(mut self, fair: bool) -> Self {
  function after_connect (line 380) | pub fn after_connect<F>(mut self, callback: F) -> Self
  function before_acquire (line 435) | pub fn before_acquire<F>(mut self, callback: F) -> Self
  function after_release (line 492) | pub fn after_release<F>(mut self, callback: F) -> Self
  function parent (line 511) | pub fn parent(mut self, pool: Pool<DB>) -> Self {
  function connect (line 528) | pub async fn connect(self, url: &str) -> Result<Pool<DB>, Error> {
  function connect_with (line 537) | pub async fn connect_with(
  function connect_lazy (line 571) | pub fn connect_lazy(self, url: &str) -> Result<Pool<DB>, Error> {
  function connect_lazy_with (line 579) | pub fn connect_lazy_with(self, options: <DB::Connection as Connection>::...
  method fmt (line 586) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {

FILE: sqlx-core/src/query.rs
  type Query (line 18) | pub struct Query<'q, DB: Database, A> {
  type Map (line 37) | pub struct Map<'q, DB: Database, F, A> {
  function sql (line 48) | fn sql(self) -> SqlStr {
  function statement (line 55) | fn statement(&self) -> Option<&DB::Statement> {
  function take_arguments (line 63) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argument...
  function persistent (line 71) | fn persistent(&self) -> bool {
  function bind (line 87) | pub fn bind<'t, T: Encode<'t, DB> + Type<DB>>(mut self, value: T) -> Self {
  function try_bind (line 104) | pub fn try_bind<'t, T: Encode<'t, DB> + Type<DB>>(
  function get_arguments (line 113) | fn get_arguments(&mut self) -> Result<&mut DB::Arguments, BoxDynError> {
  function persistent (line 138) | pub fn persistent(mut self, value: bool) -> Self {
  function map (line 156) | pub fn map<F, O>(
  function try_map (line 172) | pub fn try_map<F, O>(self, f: F) -> Map<'q, DB, F, A>
  function execute (line 185) | pub async fn execute<'e, 'c: 'e, E>(self, executor: E) -> Result<DB::Que...
  function execute_many (line 197) | pub async fn execute_many<'e, 'c: 'e, E>(
  function fetch (line 211) | pub fn fetch<'e, 'c: 'e, E>(self, executor: E) -> BoxStream<'e, Result<D...
  function fetch_many (line 227) | pub fn fetch_many<'e, 'c: 'e, E>(
  function fetch_all (line 247) | pub async fn fetch_all<'e, 'c: 'e, E>(self, executor: E) -> Result<Vec<D...
  function fetch_one (line 269) | pub async fn fetch_one<'e, 'c: 'e, E>(self, executor: E) -> Result<DB::R...
  function fetch_optional (line 291) | pub async fn fetch_optional<'e, 'c: 'e, E>(self, executor: E) -> Result<...
  function sql (line 307) | fn sql(self) -> SqlStr {
  function statement (line 312) | fn statement(&self) -> Option<&DB::Statement> {
  function take_arguments (line 317) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argument...
  function persistent (line 322) | fn persistent(&self) -> bool {
  function map (line 341) | pub fn map<G, P>(
  function try_map (line 357) | pub fn try_map<G, P>(
  function fetch (line 373) | pub fn fetch<'e, 'c: 'e, E>(self, executor: E) -> BoxStream<'e, Result<O...
  function fetch_many (line 397) | pub fn fetch_many<'e, 'c: 'e, E>(
  function fetch_all (line 431) | pub async fn fetch_all<'e, 'c: 'e, E>(self, executor: E) -> Result<Vec<O...
  function fetch_one (line 454) | pub async fn fetch_one<'e, 'c: 'e, E>(self, executor: E) -> Result<O, Er...
  function fetch_optional (line 484) | pub async fn fetch_optional<'e, 'c: 'e, E>(mut self, executor: E) -> Res...
  function query_statement (line 503) | pub fn query_statement<DB>(statement: &DB::Statement) -> Query<'_, DB, <...
  function query_statement_with (line 516) | pub fn query_statement_with<DB, A>(statement: &DB::Statement, arguments:...
  function query (line 653) | pub fn query<'a, DB>(sql: impl SqlSafeStr) -> Query<'a, DB, <DB as Datab...
  function query_with (line 668) | pub fn query_with<'q, DB, A>(sql: impl SqlSafeStr, arguments: A) -> Quer...
  function query_with_result (line 677) | pub fn query_with_result<'q, DB, A>(

FILE: sqlx-core/src/query_as.rs
  type QueryAs (line 20) | pub struct QueryAs<'q, DB: Database, O, A> {
  function sql (line 31) | fn sql(self) -> SqlStr {
  function statement (line 36) | fn statement(&self) -> Option<&DB::Statement> {
  function take_arguments (line 41) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argument...
  function persistent (line 46) | fn persistent(&self) -> bool {
  function bind (line 55) | pub fn bind<T: 'q + Encode<'q, DB> + Type<DB>>(mut self, value: T) -> Se...
  function persistent (line 75) | pub fn persistent(mut self, value: bool) -> Self {
  function fetch (line 90) | pub fn fetch<'e, 'c: 'e, E>(self, executor: E) -> BoxStream<'e, Result<O...
  function fetch_many (line 107) | pub fn fetch_many<'e, 'c: 'e, E>(
  function fetch_all (line 136) | pub async fn fetch_all<'e, 'c: 'e, E>(self, executor: E) -> Result<Vec<O...
  function fetch_one (line 159) | pub async fn fetch_one<'e, 'c: 'e, E>(self, executor: E) -> Result<O, Er...
  function fetch_optional (line 184) | pub async fn fetch_optional<'e, 'c: 'e, E>(self, executor: E) -> Result<...
  function query_as (line 341) | pub fn query_as<'q, DB, O>(sql: impl SqlSafeStr) -> QueryAs<'q, DB, O, <...
  function query_as_with (line 359) | pub fn query_as_with<'q, DB, O, A>(sql: impl SqlSafeStr, arguments: A) -...
  function query_as_with_result (line 370) | pub fn query_as_with_result<'q, DB, O, A>(
  function query_statement_as (line 386) | pub fn query_statement_as<DB, O>(
  function query_statement_as_with (line 400) | pub fn query_statement_as_with<'q, DB, O, A>(

FILE: sqlx-core/src/query_builder.rs
  type QueryBuilder (line 28) | pub struct QueryBuilder<DB>
  method default (line 38) | fn default() -> Self {
  constant ERROR (line 47) | const ERROR: &str = "BUG: query must not be shared at this point in time";
  function new (line 56) | pub fn new(init: impl Into<String>) -> Self
  function with_arguments (line 73) | pub fn with_arguments<A>(init: impl Into<String>, arguments: A) -> Self
  function sanity_check (line 88) | fn sanity_check(&self) {
  function push (line 122) | pub fn push(&mut self, sql: impl Display) -> &mut Self {
  function push_bind (line 155) | pub fn push_bind<'t, T>(&mut self, value: T) -> &mut Self
  function separated (line 202) | pub fn separated<Sep>(&mut self, separator: Sep) -> Separated<'_, DB, Sep>
  function push_values (line 312) | pub fn push_values<I, F>(&mut self, tuples: I, mut push_tuple: F) -> &mu...
  function push_tuples (line 424) | pub fn push_tuples<I, F>(&mut self, tuples: I, mut push_tuple: F) -> &mu...
  function build (line 459) | pub fn build(&mut self) -> Query<'_, DB, <DB as Database>::Arguments> {
  function build_query_as (line 482) | pub fn build_query_as<'q, T: FromRow<'q, DB::Row>>(
  function build_query_scalar (line 503) | pub fn build_query_scalar<'q, T>(
  function reset (line 519) | pub fn reset(&mut self) -> &mut Self {
  function sql (line 530) | pub fn sql(&self) -> SqlStr {
  function into_string (line 535) | pub fn into_string(self) -> String {
  function into_sql (line 540) | pub fn into_sql(self) -> SqlStr {
  type Separated (line 549) | pub struct Separated<'qb, DB, Sep>
  function push (line 566) | pub fn push(&mut self, sql: impl Display) -> &mut Self {
  function push_unseparated (line 581) | pub fn push_unseparated(&mut self, sql: impl Display) -> &mut Self {
  function push_bind (line 589) | pub fn push_bind<'t, T>(&mut self, value: T) -> &mut Self
  function push_bind_unseparated (line 607) | pub fn push_bind_unseparated<'t, T>(&mut self, value: T) -> &mut Self

FILE: sqlx-core/src/query_scalar.rs
  type QueryScalar (line 20) | pub struct QueryScalar<'q, DB: Database, O, A> {
  function sql (line 29) | fn sql(self) -> SqlStr {
  function statement (line 33) | fn statement(&self) -> Option<&DB::Statement> {
  function take_arguments (line 38) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argument...
  function persistent (line 43) | fn persistent(&self) -> bool {
  function bind (line 52) | pub fn bind<T: 'q + Encode<'q, DB> + Type<DB>>(mut self, value: T) -> Se...
  function persistent (line 72) | pub fn persistent(mut self, value: bool) -> Self {
  function fetch (line 89) | pub fn fetch<'e, 'c: 'e, E>(self, executor: E) -> BoxStream<'e, Result<O...
  function fetch_many (line 104) | pub fn fetch_many<'e, 'c: 'e, E>(
  function fetch_all (line 130) | pub async fn fetch_all<'e, 'c: 'e, E>(self, executor: E) -> Result<Vec<O...
  function fetch_one (line 158) | pub async fn fetch_one<'e, 'c: 'e, E>(self, executor: E) -> Result<O, Er...
  function fetch_optional (line 182) | pub async fn fetch_optional<'e, 'c: 'e, E>(self, executor: E) -> Result<...
  function query_scalar (line 322) | pub fn query_scalar<'q, DB, O>(
  function query_scalar_with (line 341) | pub fn query_scalar_with<'q, DB, O, A>(
  function query_scalar_with_result (line 355) | pub fn query_scalar_with_result<'q, DB, O, A>(
  function query_statement_scalar (line 370) | pub fn query_statement_scalar<DB, O>(
  function query_statement_scalar_with (line 383) | pub fn query_statement_scalar_with<'q, DB, O, A>(

FILE: sqlx-core/src/raw_sql.rs
  type RawSql (line 20) | pub struct RawSql(SqlStr);
    method sql (line 124) | fn sql(self) -> SqlStr {
    method statement (line 128) | fn statement(&self) -> Option<&<DB as Database>::Statement> {
    method take_arguments (line 132) | fn take_arguments(&mut self) -> Result<Option<<DB as Database>::Argume...
    method persistent (line 136) | fn persistent(&self) -> bool {
    method execute (line 144) | pub async fn execute<'e, E, DB>(self, executor: E) -> crate::Result<DB...
    method execute_many (line 154) | pub fn execute_many<'e, E, DB>(
    method fetch (line 169) | pub fn fetch<'e, E, DB>(self, executor: E) -> BoxStream<'e, Result<DB:...
    method fetch_many (line 182) | pub fn fetch_many<'e, E, DB>(
    method fetch_all (line 201) | pub fn fetch_all<'e, E, DB>(self, executor: E) -> BoxFuture<'e, crate:...
    method fetch_one (line 222) | pub fn fetch_one<'e, E, DB>(self, executor: E) -> BoxFuture<'e, crate:...
    method fetch_optional (line 243) | pub async fn fetch_optional<'e, E, DB>(self, executor: E) -> crate::Re...
  function raw_sql (line 119) | pub fn raw_sql(sql: impl SqlSafeStr) -> RawSql {

FILE: sqlx-core/src/row.rs
  type Row (line 15) | pub trait Row: Unpin + Send + Sync + 'static {
    method is_empty (line 20) | fn is_empty(&self) -> bool {
    method len (line 26) | fn len(&self) -> usize {
    method column (line 39) | fn column<I>(&self, index: I) -> &<Self::Database as Database>::Column
    method try_column (line 47) | fn try_column<I>(&self, index: I) -> Result<&<Self::Database as Databa...
    method columns (line 55) | fn columns(&self) -> &[<Self::Database as Database>::Column];
    method get (line 69) | fn get<'r, T, I>(&'r self, index: I) -> T
    method get_unchecked (line 89) | fn get_unchecked<'r, T, I>(&'r self, index: I) -> T
    method try_get (line 112) | fn try_get<'r, T, I>(&'r self, index: I) -> Result<T, Error>
    method try_get_unchecked (line 153) | fn try_get_unchecked<'r, T, I>(&'r self, index: I) -> Result<T, Error>
    method try_get_raw (line 176) | fn try_get_raw<I>(&self, index: I) -> Result<<Self::Database as Databa...
  function debug_row (line 181) | pub fn debug_row<R>(row: &R, f: &mut std::fmt::Formatter<'_>) -> std::fm...

FILE: sqlx-core/src/rt/mod.rs
  type TimeoutError (line 17) | pub struct TimeoutError;
  type JoinHandle (line 19) | pub enum JoinHandle<T> {
  function timeout (line 34) | pub async fn timeout<F: Future>(duration: Duration, f: F) -> Result<F::O...
  function sleep (line 54) | pub async fn sleep(duration: Duration) {
  function spawn (line 70) | pub fn spawn<F>(fut: F) -> JoinHandle<F::Output>
  function spawn_blocking (line 94) | pub fn spawn_blocking<F, R>(f: F) -> JoinHandle<R>
  function yield_now (line 117) | pub async fn yield_now() {
  function test_block_on (line 147) | pub fn test_block_on<F: Future>(f: F) -> F::Output {
  function missing_rt (line 164) | pub const fn missing_rt<T>(_unused: T) -> ! {
  type Output (line 173) | type Output = T;
  method poll (line 176) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  method drop (line 201) | fn drop(&mut self) {

FILE: sqlx-core/src/rt/rt_async_io/socket.rs
  method try_read (line 13) | fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
  method try_write (line 17) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method poll_read_ready (line 21) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  method poll_write_ready (line 25) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  method poll_shutdown (line 29) | fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll<io::Result<()...
  method try_read (line 36) | fn try_read(&mut self, buf: &mut dyn ReadBuf) -> io::Result<usize> {
  method try_write (line 40) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method poll_read_ready (line 44) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  method poll_write_ready (line 48) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  method poll_shutdown (line 52) | fn poll_shutdown(&mut self, _cx: &mut Context<'_>) -> Poll<io::Result<()...

FILE: sqlx-core/src/rt/rt_async_io/timeout.rs
  function sleep (line 7) | pub async fn sleep(duration: Duration) {
  function timeout (line 11) | pub async fn timeout<F: Future>(duration: Duration, future: F) -> Result...
  function timeout_future (line 18) | fn timeout_future(duration: Duration) -> impl Future {

FILE: sqlx-core/src/rt/rt_tokio/mod.rs
  function available (line 3) | pub fn available() -> bool {

FILE: sqlx-core/src/rt/rt_tokio/socket.rs
  method try_read (line 12) | fn try_read(&mut self, mut buf: &mut dyn ReadBuf) -> io::Result<usize> {
  method try_write (line 17) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method poll_read_ready (line 21) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  method poll_write_ready (line 25) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  method poll_shutdown (line 29) | fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
  method try_read (line 36) | fn try_read(&mut self, mut buf: &mut dyn ReadBuf) -> io::Result<usize> {
  method try_write (line 40) | fn try_write(&mut self, buf: &[u8]) -> io::Result<usize> {
  method poll_read_ready (line 44) | fn poll_read_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<(...
  method poll_write_ready (line 48) | fn poll_write_ready(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<...
  method poll_shutdown (line 52) | fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {

FILE: sqlx-core/src/sql_str.rs
  type SqlSafeStr (line 47) | pub trait SqlSafeStr {
    method into_sql_str (line 49) | fn into_sql_str(self) -> SqlStr;
    method into_sql_str (line 54) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 81) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 87) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 94) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 102) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 109) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 115) | fn into_sql_str(self) -> SqlStr {
    method into_sql_str (line 158) | fn into_sql_str(self) -> SqlStr {
  type AssertSqlSafe (line 74) | pub struct AssertSqlSafe<T>(pub T);
  type SqlStr (line 130) | pub struct SqlStr(Repr);
    method as_str (line 166) | pub fn as_str(&self) -> &str {
    method from_static (line 176) | pub const fn from_static(sql: &'static str) -> Self {
    method as_ref (line 183) | fn as_ref(&self) -> &str {
    method borrow (line 190) | fn borrow(&self) -> &str {
    method eq (line 199) | fn eq(&self, other: &T) -> bool {
  type Repr (line 133) | enum Repr {
  method clone (line 146) | fn clone(&self) -> Self {
  method hash (line 207) | fn hash<H: Hasher>(&self, state: &mut H) {

FILE: sqlx-core/src/statement.rs
  type Statement (line 20) | pub trait Statement: Send + Sync + Clone {
    method into_sql (line 24) | fn into_sql(self) -> SqlStr;
    method sql (line 27) | fn sql(&self) -> &SqlStr;
    method parameters (line 33) | fn parameters(&self) -> Option<Either<&[<Self::Database as Database>::...
    method columns (line 36) | fn columns(&self) -> &[<Self::Database as Database>::Column];
    method column (line 47) | fn column<I>(&self, index: I) -> &<Self::Database as Database>::Column
    method try_column (line 55) | fn try_column<I>(&self, index: I) -> Result<&<Self::Database as Databa...
    method query (line 62) | fn query(&self) -> Query<'_, Self::Database, <Self::Database as Databa...
    method query_with (line 64) | fn query_with<A>(&self, arguments: A) -> Query<'_, Self::Database, A>
    method query_as (line 68) | fn query_as<O>(
    method query_as_with (line 74) | fn query_as_with<'s, O, A>(&'s self, arguments: A) -> QueryAs<'s, Self...
    method query_scalar (line 79) | fn query_scalar<O>(
    method query_scalar_with (line 85) | fn query_scalar_with<'s, O, A>(&'s self, arguments: A) -> QueryScalar<...

FILE: sqlx-core/src/sync.rs
  type AsyncSemaphore (line 9) | pub struct AsyncSemaphore {
    method new (line 35) | pub fn new(fair: bool, permits: usize) -> Self {
    method permits (line 63) | pub fn permits(&self) -> usize {
    method acquire (line 82) | pub async fn acquire(&self, permits: u32) -> AsyncSemaphoreReleaser<'_> {
    method try_acquire (line 111) | pub fn try_acquire(&self, permits: u32) -> Option<AsyncSemaphoreReleas...
    method release (line 134) | pub fn release(&self, permits: usize) {
  type AsyncSemaphoreReleaser (line 154) | pub struct AsyncSemaphoreReleaser<'a> {
  function disarm (line 187) | pub fn disarm(self) {

FILE: sqlx-core/src/testing/fixtures.rs
  type Result (line 13) | pub type Result<T, E = FixtureError> = std::result::Result<T, E>;
  type FixtureSnapshot (line 20) | pub struct FixtureSnapshot<DB> {
  type FixtureError (line 27) | pub struct FixtureError(String);
  type Fixture (line 29) | pub struct Fixture<DB> {
  type FixtureOp (line 34) | enum FixtureOp {
  type TableName (line 43) | type TableName = Arc<str>;
  type ColumnName (line 44) | type ColumnName = Arc<str>;
  type Value (line 45) | type Value = String;
  type Table (line 47) | struct Table {
  function additive_fixture (line 73) | pub fn additive_fixture(&self) -> Result<Fixture<DB>> {
  function calculate_visit_order (line 95) | fn calculate_visit_order(&self) -> Result<Vec<TableName>> {
  method to_string (line 117) | fn to_string(&self) -> String {
  function foreign_key_depth (line 157) | fn foreign_key_depth(
  function test_additive_fixture (line 200) | fn test_additive_fixture() -> Result<()> {

FILE: sqlx-core/src/testing/mod.rs
  type TestSupport (line 17) | pub trait TestSupport: Database {
    method test_context (line 27) | fn test_context(
    method cleanup_test (line 31) | fn cleanup_test(db_name: &str) -> impl Future<Output = Result<(), Erro...
    method cleanup_test_dbs (line 39) | fn cleanup_test_dbs() -> impl Future<Output = Result<Option<usize>, Er...
    method snapshot (line 44) | fn snapshot(
    method db_name (line 49) | fn db_name(args: &TestArgs) -> String {
  type TestFixture (line 60) | pub struct TestFixture {
  type TestArgs (line 65) | pub struct TestArgs {
    method new (line 156) | pub fn new(test_path: &'static str) -> Self {
    method migrator (line 164) | pub fn migrator(&mut self, migrator: &'static Migrator) {
    method fixtures (line 168) | pub fn fixtures(&mut self, fixtures: &'static [TestFixture]) {
  type TestFn (line 71) | pub trait TestFn {
    method run_test (line 74) | fn run_test(self, args: TestArgs) -> Self::Output;
    type Output (line 95) | type Output = Fut::Output;
    method run_test (line 97) | fn run_test(self, args: TestArgs) -> Self::Output {
    type Output (line 110) | type Output = Fut::Output;
    method run_test (line 112) | fn run_test(self, args: TestArgs) -> Self::Output {
    type Output (line 133) | type Output = Fut::Output;
    method run_test (line 135) | fn run_test(self, args: TestArgs) -> Self::Output {
    type Output (line 144) | type Output = Fut::Output;
    method run_test (line 146) | fn run_test(self, args: TestArgs) -> Self::Output {
  type TestTermination (line 77) | pub trait TestTermination {
    method is_success (line 78) | fn is_success(&self) -> bool;
    method is_success (line 174) | fn is_success(&self) -> bool {
    method is_success (line 180) | fn is_success(&self) -> bool {
  type TestContext (line 81) | pub struct TestContext<DB: Database> {
  function run_test_with_pool (line 185) | fn run_test_with_pool<DB, F, Fut>(args: TestArgs, test_fn: F) -> Fut::Ou...
  function run_test (line 215) | fn run_test<DB, F, Fut>(args: TestArgs, test_fn: F) -> Fut::Output
  function setup_test_db (line 246) | async fn setup_test_db<DB: Database>(

FILE: sqlx-core/src/transaction.rs
  type TransactionManager (line 15) | pub trait TransactionManager {
    method begin (line 25) | fn begin(
    method commit (line 31) | fn commit(
    method rollback (line 36) | fn rollback(
    method start_rollback (line 41) | fn start_rollback(conn: &mut <Self::Database as Database>::Connection);
    method get_transaction_depth (line 49) | fn get_transaction_depth(conn: &<Self::Database as Database>::Connecti...
  type Transaction (line 86) | pub struct Transaction<'c, DB>
  function begin (line 99) | pub fn begin(
  function commit (line 120) | pub async fn commit(mut self) -> Result<(), Error> {
  function rollback (line 128) | pub async fn rollback(mut self) -> Result<(), Error> {
  method fmt (line 211) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  type Target (line 221) | type Target = DB::Connection;
  method deref (line 224) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 234) | fn deref_mut(&mut self) -> &mut Self::Target {
  function as_mut (line 244) | fn as_mut(&mut self) -> &mut DB::Connection {
  type Database (line 250) | type Database = DB;
  type Connection (line 252) | type Connection = &'t mut <DB as Database>::Connection;
  function acquire (line 255) | fn acquire(self) -> BoxFuture<'t, Result<Self::Connection, Error>> {
  function begin (line 260) | fn begin(self) -> BoxFuture<'t, Result<Transaction<'t, DB>, Error>> {
  method drop (line 269) | fn drop(&mut self) {
  function begin_ansi_transaction_sql (line 282) | pub fn begin_ansi_transaction_sql(depth: usize) -> SqlStr {
  function commit_ansi_transaction_sql (line 290) | pub fn commit_ansi_transaction_sql(depth: usize) -> SqlStr {
  function rollback_ansi_transaction_sql (line 298) | pub fn rollback_ansi_transaction_sql(depth: usize) -> SqlStr {

FILE: sqlx-core/src/type_checking.rs
  type ParamChecking (line 12) | pub enum ParamChecking {
  type TypeChecking (line 22) | pub trait TypeChecking: Database {
    constant PARAM_CHECKING (line 24) | const PARAM_CHECKING: ParamChecking;
    method param_type_for_id (line 30) | fn param_type_for_id(
    method return_type_for_id (line 38) | fn return_type_for_id(
    method get_feature_gate (line 45) | fn get_feature_gate(info: &Self::TypeInfo) -> Option<&'static str>;
    method fmt_value_debug (line 50) | fn fmt_value_debug(value: &<Self as Database>::Value) -> FmtValue<'_, ...
  type Result (line 53) | pub type Result<T, E = Error> = std::result::Result<T, E>;
  type Error (line 56) | pub enum Error {
  type FmtValue (line 70) | pub struct FmtValue<'v, DB>
  function debug (line 87) | pub fn debug<T>(value: &'v <DB as Database>::Value) -> Self
  function unknown (line 116) | pub fn unknown(value: &'v <DB as Database>::Value) -> Self
  method fmt (line 142) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {

FILE: sqlx-core/src/type_info.rs
  type TypeInfo (line 4) | pub trait TypeInfo: Debug + Display + Clone + PartialEq<Self> + Send + S...
    method is_null (line 5) | fn is_null(&self) -> bool;
    method name (line 10) | fn name(&self) -> &str;
    method type_compatible (line 15) | fn type_compatible(&self, other: &Self) -> bool
    method is_void (line 23) | fn is_void(&self) -> bool {

FILE: sqlx-core/src/types/bstr.rs
  method type_info (line 16) | fn type_info() -> DB::TypeInfo {
  method compatible (line 20) | fn compatible(ty: &DB::TypeInfo) -> bool {
  method decode (line 30) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDynE...
  function encode_by_ref (line 40) | fn encode_by_ref(
  method encode_by_ref (line 53) | fn encode_by_ref(

FILE: sqlx-core/src/types/json.rs
  type Json (line 87) | pub struct Json<T: ?Sized>(pub T);
  function into_inner (line 91) | pub fn into_inner(self) -> T {
  function from (line 97) | fn from(value: T) -> Self {
  type Target (line 103) | type Target = T;
  method deref (line 105) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 111) | fn deref_mut(&mut self) -> &mut Self::Target {
  function as_ref (line 117) | fn as_ref(&self) -> &T {
  function as_mut (line 123) | fn as_mut(&mut self) -> &mut T {
  function encode_to_string (line 131) | pub fn encode_to_string(&self) -> Result<String, serde_json::Error> {
  function encode_to (line 135) | pub fn encode_to(&self, buf: &mut Vec<u8>) -> Result<(), serde_json::Err...
  function decode_from_string (line 146) | pub fn decode_from_string(s: &'a str) -> Result<Self, BoxDynError> {
  function decode_from_bytes (line 150) | pub fn decode_from_bytes(bytes: &'a [u8]) -> Result<Self, BoxDynError> {
  method type_info (line 160) | fn type_info() -> DB::TypeInfo {
  method compatible (line 164) | fn compatible(ty: &DB::TypeInfo) -> bool {
  method encode_by_ref (line 174) | fn encode_by_ref(
  method decode (line 187) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDynE...
  method type_info (line 197) | fn type_info() -> DB::TypeInfo {
  method compatible (line 201) | fn compatible(ty: &DB::TypeInfo) -> bool {
  method encode_by_ref (line 211) | fn encode_by_ref(
  function encode_by_ref (line 224) | fn encode_by_ref(
  function encode_by_ref (line 237) | fn encode_by_ref(
  function decode (line 250) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDynE...
  function decode (line 260) | fn decode(value: <DB as Database>::ValueRef<'r>) -> Result<Self, BoxDynE...

FILE: sqlx-core/src/types/mod.rs
  type Type (line 211) | pub trait Type<DB: Database> {
    method type_info (line 219) | fn type_info() -> DB::TypeInfo;
    method compatible (line 230) | fn compatible(ty: &DB::TypeInfo) -> bool {
  function type_info (line 237) | fn type_info() -> DB::TypeInfo {
  function compatible (line 241) | fn compatible(ty: &DB::TypeInfo) -> bool {
  function type_info (line 248) | fn type_info() -> DB::TypeInfo {
  function compatible (line 252) | fn compatible(ty: &DB::TypeInfo) -> bool {
  function type_info (line 283) | fn type_info() -> DB::TypeInfo {
  function compatible (line 287) | fn compatible(ty: &DB::TypeInfo) -> bool {

FILE: sqlx-core/src/types/text.rs
  type Text (line 74) | pub struct Text<T>(pub T);
  function into_inner (line 78) | pub fn into_inner(self) -> T {
  type Target (line 84) | type Target = T;
  method deref (line 86) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 92) | fn deref_mut(&mut self) -> &mut Self::Target {

FILE: sqlx-core/src/value.rs
  type Value (line 9) | pub trait Value {
    method as_ref (line 13) | fn as_ref(&self) -> <Self::Database as Database>::ValueRef<'_>;
    method type_info (line 16) | fn type_info(&self) -> Cow<'_, <Self::Database as Database>::TypeInfo>;
    method is_null (line 19) | fn is_null(&self) -> bool;
    method decode (line 29) | fn decode<'r, T>(&'r self) -> T
    method decode_unchecked (line 47) | fn decode_unchecked<'r, T>(&'r self) -> T
    method try_decode (line 63) | fn try_decode<'r, T>(&'r self) -> Result<T, Error>
    method try_decode_unchecked (line 90) | fn try_decode_unchecked<'r, T>(&'r self) -> Result<T, Error>
  type ValueRef (line 99) | pub trait ValueRef<'r>: Sized {
    method to_owned (line 106) | fn to_owned(&self) -> <Self::Database as Database>::Value;
    method type_info (line 109) | fn type_info(&self) -> Cow<'_, <Self::Database as Database>::TypeInfo>;
    method is_null (line 112) | fn is_null(&self) -> bool;

FILE: sqlx-macros-core/src/common.rs
  function resolve_path (line 4) | pub(crate) fn resolve_path(path: impl AsRef<Path>, err_span: Span) -> sy...

FILE: sqlx-macros-core/src/database/mod.rs
  type DatabaseExt (line 16) | pub trait DatabaseExt: Database + TypeChecking {
    constant DATABASE_PATH (line 17) | const DATABASE_PATH: &'static str;
    constant ROW_PATH (line 18) | const ROW_PATH: &'static str;
    method db_path (line 20) | fn db_path() -> syn::Path {
    method row_path (line 24) | fn row_path() -> syn::Path {
    method describe_blocking (line 28) | fn describe_blocking(
  type CachingDescribeBlocking (line 36) | pub struct CachingDescribeBlocking<DB: DatabaseExt> {
  function new (line 43) | pub const fn new() -> Self {
  function describe (line 49) | pub fn describe(

FILE: sqlx-macros-core/src/derives/attributes.rs
  type TypeName (line 31) | pub struct TypeName {
    method get (line 37) | pub fn get(&self) -> TokenStream {
  type RenameAll (line 45) | pub enum RenameAll {
  type SqlxContainerAttributes (line 55) | pub struct SqlxContainerAttributes {
  type JsonAttribute (line 64) | pub enum JsonAttribute {
  type SqlxChildAttributes (line 69) | pub struct SqlxChildAttributes {
  function parse_container_attributes (line 78) | pub fn parse_container_attributes(input: &[Attribute]) -> syn::Result<Sq...
  function parse_child_attributes (line 146) | pub fn parse_child_attributes(input: &[Attribute]) -> syn::Result<SqlxCh...
  function check_transparent_attributes (line 203) | pub fn check_transparent_attributes(
  function check_enum_attributes (line 226) | pub fn check_enum_attributes(input: &DeriveInput) -> syn::Result<SqlxCon...
  function check_weak_enum_attributes (line 238) | pub fn check_weak_enum_attributes(
  function check_strong_enum_attributes (line 265) | pub fn check_strong_enum_attributes(
  function check_struct_attributes (line 276) | pub fn check_struct_attributes(

FILE: sqlx-macros-core/src/derives/decode.rs
  function expand_derive_decode (line 15) | pub fn expand_derive_decode(input: &DeriveInput) -> syn::Result<TokenStr...
  function expand_derive_decode_transparent (line 49) | fn expand_derive_decode_transparent(
  function expand_derive_decode_weak_enum (line 100) | fn expand_derive_decode_weak_enum(
  function expand_derive_decode_strong_enum (line 147) | fn expand_derive_decode_strong_enum(
  function expand_derive_decode_struct (line 263) | fn expand_derive_decode_struct(

FILE: sqlx-macros-core/src/derives/encode.rs
  function expand_derive_encode (line 15) | pub fn expand_derive_encode(input: &DeriveInput) -> syn::Result<TokenStr...
  function expand_derive_encode_transparent (line 50) | fn expand_derive_encode_transparent(
  function expand_derive_encode_weak_enum (line 108) | fn expand_derive_encode_weak_enum(
  function expand_derive_encode_strong_enum (line 147) | fn expand_derive_encode_strong_enum(
  function expand_derive_encode_struct (line 201) | fn expand_derive_encode_struct(

FILE: sqlx-macros-core/src/derives/mod.rs
  function expand_derive_type_encode_decode (line 17) | pub fn expand_derive_type_encode_decode(input: &DeriveInput) -> syn::Res...
  function rename_all (line 27) | pub(crate) fn rename_all(s: &str, pattern: RenameAll) -> String {

FILE: sqlx-macros-core/src/derives/row.rs
  function expand_derive_from_row (line 13) | pub fn expand_derive_from_row(input: &DeriveInput) -> syn::Result<TokenS...
  function expand_derive_from_row_struct (line 39) | fn expand_derive_from_row_struct(
  function expand_derive_from_row_struct_unnamed (line 245) | fn expand_derive_from_row_struct_unnamed(

FILE: sqlx-macros-core/src/derives/type.rs
  function expand_derive_type (line 13) | pub fn expand_derive_type(input: &DeriveInput) -> syn::Result<TokenStrea...
  function expand_derive_has_sql_type_transparent (line 55) | fn expand_derive_has_sql_type_transparent(
  function expand_derive_has_sql_type_weak_enum (line 143) | fn expand_derive_has_sql_type_weak_enum(
  function expand_derive_has_sql_type_strong_enum (line 180) | fn expand_derive_has_sql_type_strong_enum(
  function expand_derive_has_sql_type_struct (line 242) | fn expand_derive_has_sql_type_struct(
  function type_name (line 278) | fn type_name(ident: &Ident, explicit_name: Option<&TypeName>) -> TokenSt...

FILE: sqlx-macros-core/src/lib.rs
  type Error (line 28) | pub type Error = Box<dyn std::error::Error>;
  type Result (line 30) | pub type Result<T, E = Error> = std::result::Result<T, E>;
  constant FOSS_DRIVERS (line 48) | pub const FOSS_DRIVERS: &[QueryDriver] = &[
  function block_on (line 57) | pub fn block_on<F>(f: F) -> F::Output
  function env (line 89) | pub fn env(var: &str) -> Result<String> {
  function env_opt (line 95) | pub fn env_opt(var: &str) -> Result<Option<String>> {
  function manifest_dir (line 111) | pub fn manifest_dir() -> Result<PathBuf> {

FILE: sqlx-macros-core/src/migrate.rs
  constant DEFAULT_PATH (line 12) | pub const DEFAULT_PATH: &str = "./migrations";
  type QuoteMigrationType (line 14) | pub struct QuoteMigrationType(MigrationType);
  method to_tokens (line 17) | fn to_tokens(&self, tokens: &mut TokenStream) {
  type QuoteMigration (line 29) | struct QuoteMigration {
  method to_tokens (line 35) | fn to_tokens(&self, tokens: &mut TokenStream) {
  function default_path (line 86) | pub fn default_path(config: &Config) -> &str {
  function expand (line 94) | pub fn expand(path_arg: Option<LitStr>) -> crate::Result<TokenStream> {
  function expand_with_path (line 105) | pub fn expand_with_path(config: &Config, path: &Path) -> crate::Result<T...

FILE: sqlx-macros-core/src/query/args.rs
  function quote_args (line 15) | pub fn quote_args<DB: DatabaseExt>(
  function get_param_type (line 108) | fn get_param_type<DB: DatabaseExt>(
  function get_type_override (line 179) | fn get_type_override(expr: &Expr) -> Option<&Type> {
  function strip_wildcard (line 187) | fn strip_wildcard(expr: Expr) -> Expr {

FILE: sqlx-macros-core/src/query/cache.rs
  type MtimeCache (line 7) | pub struct MtimeCache<T> {
  type MtimeCacheBuilder (line 11) | pub struct MtimeCacheBuilder {
    method new (line 59) | fn new() -> Self {
    method add_path (line 69) | pub fn add_path(&mut self, path: PathBuf) {
    method any_modified (line 80) | fn any_modified(&self) -> bool {
  type MtimeCacheInner (line 15) | struct MtimeCacheInner<T> {
  function new (line 21) | pub fn new() -> Self {
  function get_or_try_init (line 28) | pub fn get_or_try_init<E>(
  function get_mtime (line 93) | fn get_mtime(path: &Path) -> Option<SystemTime> {

FILE: sqlx-macros-core/src/query/data.rs
  type QueryData (line 20) | pub struct QueryData<DB: Database> {
  function from_describe (line 29) | pub fn from_describe(query: &str, describe: Describe<DB>) -> Self {
  type SerializeDbName (line 39) | struct SerializeDbName<DB>(PhantomData<DB>);
  method default (line 42) | fn default() -> Self {
  method fmt (line 48) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  method fmt (line 54) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  method serialize (line 60) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type DynQueryData (line 73) | pub struct DynQueryData {
    method from_data_file (line 83) | pub fn from_data_file(path: &Path, query: &str) -> crate::Result<Self> {
  function from_dyn_data (line 117) | pub fn from_dyn_data(dyn_data: DynQueryData) -> crate::Result<Self> {
  function save_in (line 139) | pub(super) fn save_in(&self, dir: &Path) -> crate::Result<()> {
  function hash_string (line 209) | pub(super) fn hash_string(query: &str) -> String {

FILE: sqlx-macros-core/src/query/input.rs
  type QueryMacroInput (line 10) | pub struct QueryMacroInput {
  type QuerySrc (line 24) | enum QuerySrc {
    method resolve (line 113) | fn resolve(self, source_span: Span) -> syn::Result<String> {
    method file_path (line 120) | fn file_path(&self, source_span: Span) -> syn::Result<Option<String>> {
  type RecordType (line 29) | pub enum RecordType {
  method parse (line 36) | fn parse(input: ParseStream) -> syn::Result<Self> {
  function read_file_src (line 142) | fn read_file_src(source: &str, source_span: Span) -> syn::Result<String> {

FILE: sqlx-macros-core/src/query/metadata.rs
  type Metadata (line 10) | pub struct Metadata {
    method env (line 24) | pub fn env(&self) -> crate::Result<Arc<MacrosEnv>> {
    method workspace_root (line 29) | pub fn workspace_root(&self) -> PathBuf {
  type MacrosEnv (line 17) | pub struct MacrosEnv {
  function try_for_crate (line 58) | pub fn try_for_crate() -> crate::Result<Arc<Metadata>> {
  function load_env (line 92) | fn load_env(
  function is_truthy_bool (line 160) | fn is_truthy_bool(val: &str) -> bool {

FILE: sqlx-macros-core/src/query/mod.rs
  type QueryDriver (line 28) | pub struct QueryDriver {
    method new (line 36) | pub const fn new<DB: DatabaseExt>() -> Self
  type QueryDataSource (line 47) | pub enum QueryDataSource<'a> {
  function live (line 56) | pub fn live(database_url: &'a str) -> crate::Result<Self> {
  function matches_driver (line 63) | pub fn matches_driver(&self, driver: &QueryDriver) -> bool {
  function expand_input (line 73) | pub fn expand_input<'a>(
  function expand_with (line 151) | fn expand_with<DB: DatabaseExt>(
  type DescribeExt (line 173) | trait DescribeExt: serde::Serialize + serde::de::DeserializeOwned {}
  type Warnings (line 181) | struct Warnings {
  function expand_with_data (line 186) | fn expand_with_data<DB: DatabaseExt>(

FILE: sqlx-macros-core/src/query/output.rs
  type RustColumn (line 19) | pub struct RustColumn {
  type ColumnType (line 25) | pub(super) enum ColumnType {
    method is_wildcard (line 32) | pub(super) fn is_wildcard(&self) -> bool {
  method to_tokens (line 38) | fn to_tokens(&self, tokens: &mut TokenStream) {
  type DisplayColumn (line 47) | struct DisplayColumn<'a> {
  type ColumnDecl (line 53) | struct ColumnDecl {
    method parse (line 347) | fn parse(col_name: &str) -> crate::Result<Self> {
  type ColumnOverride (line 58) | struct ColumnOverride {
  type ColumnNullabilityOverride (line 64) | enum ColumnNullabilityOverride {
  type ColumnTypeOverride (line 70) | enum ColumnTypeOverride {
  method fmt (line 77) | fn fmt(&self, f: &mut Formatter) -> fmt::Result {
  function columns_to_rust (line 82) | pub fn columns_to_rust<DB: DatabaseExt>(
  function column_to_rust (line 92) | fn column_to_rust<DB: DatabaseExt>(
  function quote_query_as (line 139) | pub fn quote_query_as<DB: DatabaseExt>(
  function quote_query_scalar (line 206) | pub fn quote_query_scalar<DB: DatabaseExt>(
  function get_column_type (line 245) | fn get_column_type<DB: DatabaseExt>(
  method parse (line 374) | fn parse(input: ParseStream) -> syn::Result<Self> {
  function parse_ident (line 407) | fn parse_ident(name: &str) -> crate::Result<Ident> {

FILE: sqlx-macros-core/src/test_attr.rs
  type Args (line 6) | struct Args {
  type FixturesType (line 12) | enum FixturesType {
  type MigrationsOpt (line 20) | enum MigrationsOpt {
  type AttributeArgs (line 27) | type AttributeArgs = syn::punctuated::Punctuated<syn::Meta, syn::Token![...
  function expand (line 29) | pub fn expand(args: TokenStream, input: syn::ItemFn) -> crate::Result<To...
  function expand_simple (line 63) | fn expand_simple(input: syn::ItemFn) -> TokenStream {
  function expand_advanced (line 79) | fn expand_advanced(args: AttributeArgs, input: syn::ItemFn) -> crate::Re...
  function parse_args (line 192) | fn parse_args(attr_args: AttributeArgs) -> syn::Result<Args> {
  function parse_fixtures_args (line 311) | fn parse_fixtures_args(
  function parse_fixtures_path_args (line 364) | fn parse_fixtures_path_args(
  function parse_fixtures_scripts_args (line 379) | fn parse_fixtures_scripts_args(
  function add_sql_extension_if_missing (line 398) | fn add_sql_extension_if_missing(fixture: &mut String) {

FILE: sqlx-macros/src/lib.rs
  function expand_query (line 9) | pub fn expand_query(input: TokenStream) -> TokenStream {
  function derive_encode (line 27) | pub fn derive_encode(tokenstream: TokenStream) -> TokenStream {
  function derive_decode (line 37) | pub fn derive_decode(tokenstream: TokenStream) -> TokenStream {
  function derive_type (line 47) | pub fn derive_type(tokenstream: TokenStream) -> TokenStream {
  function derive_from_row (line 57) | pub fn derive_from_row(input: TokenStream) -> TokenStream {
  function migrate (line 68) | pub fn migrate(input: TokenStream) -> TokenStream {
  function test (line 87) | pub fn test(args: TokenStream, input: TokenStream) -> TokenStream {

FILE: sqlx-mysql/src/any.rs
  method name (line 24) | fn name(&self) -> &str {
  method close (line 28) | fn close(self: Box<Self>) -> BoxFuture<'static, sqlx_core::Result<()>> {
  method close_hard (line 32) | fn close_hard(self: Box<Self>) -> BoxFuture<'static, sqlx_core::Result<(...
  method ping (line 36) | fn ping(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method begin (line 40) | fn begin(&mut self, statement: Option<SqlStr>) -> BoxFuture<'_, sqlx_cor...
  method commit (line 44) | fn commit(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method rollback (line 48) | fn rollback(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method start_rollback (line 52) | fn start_rollback(&mut self) {
  method get_transaction_depth (line 56) | fn get_transaction_depth(&self) -> usize {
  method shrink_buffers (line 60) | fn shrink_buffers(&mut self) {
  method flush (line 64) | fn flush(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method should_flush (line 68) | fn should_flush(&self) -> bool {
  method as_migrate (line 73) | fn as_migrate(
  method fetch_many (line 79) | fn fetch_many(
  method fetch_optional (line 105) | fn fetch_optional(
  method prepare_with (line 131) | fn prepare_with<'c, 'q: 'c>(
  method describe (line 144) | fn describe(
  type Error (line 156) | type Error = sqlx_core::Error;
  method try_from (line 158) | fn try_from(type_info: &'a MySqlTypeInfo) -> Result<Self, Self::Error> {
  type Error (line 185) | type Error = sqlx_core::Error;
  method try_from (line 187) | fn try_from(column: &'a MySqlColumn) -> Result<Self, Self::Error> {
  type Error (line 199) | type Error = sqlx_core::Error;
  method try_from (line 201) | fn try_from(row: &'a MySqlRow) -> Result<Self, Self::Error> {
  type Error (line 207) | type Error = sqlx_core::Error;
  method try_from (line 209) | fn try_from(any_opts: &'a AnyConnectOptions) -> Result<Self, Self::Error> {
  function map_result (line 216) | fn map_result(result: MySqlQueryResult) -> AnyQueryResult {

FILE: sqlx-mysql/src/arguments.rs
  type MySqlArguments (line 10) | pub struct MySqlArguments {
    method add (line 17) | pub(crate) fn add<'q, T>(&mut self, value: T) -> Result<(), BoxDynError>
  type Database (line 41) | type Database = MySql;
  method reserve (line 43) | fn reserve(&mut self, len: usize, size: usize) {
  method add (line 48) | fn add<'t, T>(&mut self, value: T) -> Result<(), BoxDynError>
  method len (line 55) | fn len(&self) -> usize {
  type NullBitMap (line 61) | pub(crate) struct NullBitMap {
    method push (line 67) | fn push(&mut self, is_null: IsNull) {
  type Target (line 81) | type Target = [u8];
  method deref (line 83) | fn deref(&self) -> &Self::Target {
  function null_bit_map_should_push_is_null (line 93) | fn null_bit_map_should_push_is_null() {

FILE: sqlx-mysql/src/collation.rs
  type Collation (line 41) | pub struct Collation(pub u16);
    constant BINARY (line 45) | pub const BINARY: Self = Collation(63);
    constant UTF8MB4_GENERAL_CI (line 48) | pub const UTF8MB4_GENERAL_CI: Self = Collation(45);

FILE: sqlx-mysql/src/column.rs
  type MySqlColumn (line 8) | pub struct MySqlColumn {
  type Database (line 22) | type Database = MySql;
  method ordinal (line 24) | fn ordinal(&self) -> usize {
  method name (line 28) | fn name(&self) -> &str {
  method type_info (line 32) | fn type_info(&self) -> &MySqlTypeInfo {
  method origin (line 36) | fn origin(&self) -> ColumnOrigin {

FILE: sqlx-mysql/src/connection/auth.rs
  method scramble (line 16) | pub(super) async fn scramble(
  method handle (line 39) | pub(super) async fn handle(
  function scramble_sha1 (line 77) | fn scramble_sha1(
  function scramble_sha256 (line 105) | fn scramble_sha256(
  function encrypt_rsa (line 132) | async fn encrypt_rsa<'s>(
  function xor_eq (line 172) | fn xor_eq(x: &mut [u8], y: &[u8]) {
  function to_asciz (line 180) | fn to_asciz(s: &str) -> Vec<u8> {
  function parse_rsa_pub_key (line 189) | fn parse_rsa_pub_key(key: &[u8]) -> Result<RsaPublicKey, Error> {

FILE: sqlx-mysql/src/connection/establish.rs
  method establish (line 15) | pub(crate) async fn establish(options: &MySqlConnectOptions) -> Result<S...
  type DoHandshake (line 37) | struct DoHandshake<'a> {
  function new (line 42) | fn new(options: &'a MySqlConnectOptions) -> Result<Self, Error> {
  function do_handshake (line 55) | async fn do_handshake<S: Socket>(self, socket: S) -> Result<MySqlStream,...
  type Output (line 171) | type Output = Result<MySqlStream, Error>;
  method with_socket (line 173) | async fn with_socket<S: Socket>(self, socket: S) -> Self::Output {

FILE: sqlx-mysql/src/connection/executor.rs
  method prepare_statement (line 29) | async fn prepare_statement(
  method get_or_prepare_statement (line 76) | async fn get_or_prepare_statement(
  method run (line 103) | pub(crate) async fn run<'e, 'c: 'e, 'q: 'e>(
  type Database (line 280) | type Database = MySql;
  function fetch_many (line 282) | fn fetch_many<'e, 'q, E>(
  function fetch_optional (line 308) | fn fetch_optional<'e, 'q, E>(self, query: E) -> BoxFuture<'e, Result<Opt...
  function prepare_with (line 328) | fn prepare_with<'e>(
  function describe (line 362) | fn describe<'e>(
  function recv_result_columns (line 398) | async fn recv_result_columns(
  function recv_next_result_column (line 417) | fn recv_next_result_column(def: &ColumnDefinition, ordinal: usize) -> Re...
  function recv_result_metadata (line 455) | async fn recv_result_metadata(

FILE: sqlx-mysql/src/connection/mod.rs
  constant MAX_PACKET_SIZE (line 24) | const MAX_PACKET_SIZE: u32 = 1024;
  constant INITIAL_CHARSET (line 31) | const INITIAL_CHARSET: u8 = Collation::UTF8MB4_GENERAL_CI.0 as u8;
  type MySqlConnection (line 34) | pub struct MySqlConnection {
    method in_transaction (line 55) | pub(crate) fn in_transaction(&self) -> bool {
  type MySqlConnectionInner (line 38) | pub(crate) struct MySqlConnectionInner {
  method fmt (line 63) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  type Database (line 69) | type Database = MySql;
  type Options (line 71) | type Options = MySqlConnectOptions;
  method close (line 73) | async fn close(mut self) -> Result<(), Error> {
  method close_hard (line 80) | async fn close_hard(mut self) -> Result<(), Error> {
  method ping (line 85) | async fn ping(&mut self) -> Result<(), Error> {
  method flush (line 94) | fn flush(&mut self) -> impl Future<Output = Result<(), Error>> + Send + ...
  method cached_statements_size (line 98) | fn cached_statements_size(&self) -> usize {
  method clear_cached_statements (line 102) | async fn clear_cached_statements(&mut self) -> Result<(), Error> {
  method should_flush (line 116) | fn should_flush(&self) -> bool {
  method begin (line 120) | fn begin(
  method begin_with (line 126) | fn begin_with(
  method shrink_buffers (line 136) | fn shrink_buffers(&mut self) {

FILE: sqlx-mysql/src/connection/stream.rs
  type MySqlStream (line 14) | pub struct MySqlStream<S = Box<dyn Socket>> {
  type Waiting (line 25) | pub(crate) enum Waiting {
  function with_socket (line 34) | pub(crate) fn with_socket(options: &MySqlConnectOptions, socket: S) -> S...
  function wait_until_ready (line 62) | pub(crate) async fn wait_until_ready(&mut self) -> Result<(), Error> {
  function send_packet (line 101) | pub(crate) async fn send_packet<'en, T>(&mut self, payload: T) -> Result...
  function write_packet (line 111) | pub(crate) fn write_packet<'en, T>(&mut self, payload: T) -> Result<(), ...
  function recv_packet_part (line 119) | async fn recv_packet_part(&mut self) -> Result<Bytes, Error> {
  function recv_packet (line 141) | pub(crate) async fn recv_packet(&mut self) -> Result<Packet<Bytes>, Erro...
  function recv (line 177) | pub(crate) async fn recv<'de, T>(&mut self) -> Result<T, Error>
  function recv_ok (line 184) | pub(crate) async fn recv_ok(&mut self) -> Result<OkPacket, Error> {
  function maybe_recv_eof (line 188) | pub(crate) async fn maybe_recv_eof(&mut self) -> Result<Option<EofPacket...
  function skip_result_metadata (line 196) | async fn skip_result_metadata(&mut self, mut packet: Packet<Bytes>) -> R...
  function boxed_socket (line 208) | pub fn boxed_socket(self) -> MySqlStream {
  type Target (line 221) | type Target = BufferedSocket<S>;
  method deref (line 223) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 229) | fn deref_mut(&mut self) -> &mut Self::Target {

FILE: sqlx-mysql/src/connection/tls.rs
  type MapStream (line 10) | struct MapStream {
  function maybe_upgrade (line 17) | pub(super) async fn maybe_upgrade<S: Socket>(
  type Output (line 90) | type Output = MySqlStream;
  method with_socket (line 92) | async fn with_socket<S: Socket>(self, socket: S) -> Self::Output {

FILE: sqlx-mysql/src/database.rs
  type MySql (line 10) | pub struct MySql;
  type Connection (line 13) | type Connection = MySqlConnection;
  type TransactionManager (line 15) | type TransactionManager = MySqlTransactionManager;
  type Row (line 17) | type Row = MySqlRow;
  type QueryResult (line 19) | type QueryResult = MySqlQueryResult;
  type Column (line 21) | type Column = MySqlColumn;
  type TypeInfo (line 23) | type TypeInfo = MySqlTypeInfo;
  type Value (line 25) | type Value = MySqlValue;
  type ValueRef (line 26) | type ValueRef<'r> = MySqlValueRef<'r>;
  type Arguments (line 28) | type Arguments = MySqlArguments;
  type ArgumentBuffer (line 29) | type ArgumentBuffer = Vec<u8>;
  type Statement (line 31) | type Statement = MySqlStatement;
  constant NAME (line 33) | const NAME: &'static str = "MySQL";
  constant URL_SCHEMES (line 35) | const URL_SCHEMES: &'static [&'static str] = &["mysql", "mariadb"];

FILE: sqlx-mysql/src/error.rs
  type MySqlDatabaseError (line 11) | pub struct MySqlDatabaseError(pub(super) ErrPacket);
    method code (line 15) | pub fn code(&self) -> Option<&str> {
    method number (line 24) | pub fn number(&self) -> u16 {
    method message (line 29) | pub fn message(&self) -> &str {
  method fmt (line 35) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  method fmt (line 45) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  method message (line 58) | fn message(&self) -> &str {
  method code (line 63) | fn code(&self) -> Option<Cow<'_, str>> {
  method as_error (line 68) | fn as_error(&self) -> &(dyn StdError + Send + Sync + 'static) {
  method as_error_mut (line 73) | fn as_error_mut(&mut self) -> &mut (dyn StdError + Send + Sync + 'static) {
  method into_error (line 78) | fn into_error(self: Box<Self>) -> Box<dyn StdError + Send + Sync + 'stat...
  method kind (line 82) | fn kind(&self) -> ErrorKind {
  constant ER_DUP_KEY (line 124) | pub const ER_DUP_KEY: u16 = 1022;
  constant ER_DUP_ENTRY (line 127) | pub const ER_DUP_ENTRY: u16 = 1062;
  constant ER_DUP_UNIQUE (line 131) | pub const ER_DUP_UNIQUE: u16 = 1169;
  constant ER_DUP_ENTRY_WITH_KEY_NAME (line 135) | pub const ER_DUP_ENTRY_WITH_KEY_NAME: u16 = 1586;
  constant ER_DUP_UNKNOWN_IN_INDEX (line 141) | pub const ER_DUP_UNKNOWN_IN_INDEX: u16 = 1859;
  constant ER_NO_REFERENCED_ROW (line 144) | pub const ER_NO_REFERENCED_ROW: u16 = 1216;
  constant ER_ROW_IS_REFERENCED (line 146) | pub const ER_ROW_IS_REFERENCED: u16 = 1217;
  constant ER_ROW_IS_REFERENCED_2 (line 149) | pub const ER_ROW_IS_REFERENCED_2: u16 = 1451;
  constant ER_NO_REFERENCED_ROW_2 (line 152) | pub const ER_NO_REFERENCED_ROW_2: u16 = 1452;
  constant ER_FK_COLUMN_NOT_NULL (line 154) | pub const ER_FK_COLUMN_NOT_NULL: u16 = 1830;
  constant ER_FK_CANNOT_DELETE_PARENT (line 156) | pub const ER_FK_CANNOT_DELETE_PARENT: u16 = 1834;
  constant ER_BAD_NULL_ERROR (line 159) | pub const ER_BAD_NULL_ERROR: u16 = 1048;
  constant ER_NO_DEFAULT_FOR_FIELD (line 161) | pub const ER_NO_DEFAULT_FOR_FIELD: u16 = 1364;
  constant ER_CHECK_CONSTRAINT_VIOLATED (line 166) | pub const ER_CHECK_CONSTRAINT_VIOLATED: u16 = 3819;
  constant ER_CONSTRAINT_FAILED (line 175) | pub const ER_CONSTRAINT_FAILED: u16 = 4025;

FILE: sqlx-mysql/src/io/buf.rs
  type MySqlBufExt (line 6) | pub trait MySqlBufExt: Buf {
    method get_uint_lenenc (line 11) | fn get_uint_lenenc(&mut self) -> Result<u64, Error>;
    method get_str_lenenc (line 15) | fn get_str_lenenc(&mut self) -> Result<String, Error>;
    method get_bytes_lenenc (line 18) | fn get_bytes_lenenc(&mut self) -> Result<Bytes, Error>;
    method get_uint_lenenc (line 22) | fn get_uint_lenenc(&mut self) -> Result<u64, Error> {
    method get_str_lenenc (line 60) | fn get_str_lenenc(&mut self) -> Result<String, Error> {
    method get_bytes_lenenc (line 68) | fn get_bytes_lenenc(&mut self) -> Result<Bytes, Error> {

FILE: sqlx-mysql/src/io/buf_mut.rs
  type MySqlBufMutExt (line 3) | pub trait MySqlBufMutExt: BufMut {
    method put_uint_lenenc (line 4) | fn put_uint_lenenc(&mut self, v: u64);
    method put_str_lenenc (line 6) | fn put_str_lenenc(&mut self, v: &str);
    method put_bytes_lenenc (line 8) | fn put_bytes_lenenc(&mut self, v: &[u8]);
    method put_uint_lenenc (line 12) | fn put_uint_lenenc(&mut self, v: u64) {
    method put_str_lenenc (line 35) | fn put_str_lenenc(&mut self, v: &str) {
    method put_bytes_lenenc (line 39) | fn put_bytes_lenenc(&mut self, v: &[u8]) {
  function test_encodes_int_lenenc_u8 (line 46) | fn test_encodes_int_lenenc_u8() {
  function test_encodes_int_lenenc_u16 (line 54) | fn test_encodes_int_lenenc_u16() {
  function test_encodes_int_lenenc_u24 (line 62) | fn test_encodes_int_lenenc_u24() {
  function test_encodes_int_lenenc_u64 (line 70) | fn test_encodes_int_lenenc_u64() {
  function test_encodes_int_lenenc_fb (line 78) | fn test_encodes_int_lenenc_fb() {
  function test_encodes_int_lenenc_fc (line 86) | fn test_encodes_int_lenenc_fc() {
  function test_encodes_int_lenenc_fd (line 94) | fn test_encodes_int_lenenc_fd() {
  function test_encodes_int_lenenc_fe (line 102) | fn test_encodes_int_lenenc_fe() {
  function test_encodes_int_lenenc_ff (line 110) | fn test_encodes_int_lenenc_ff() {
  function test_encodes_string_lenenc (line 118) | fn test_encodes_string_lenenc() {
  function test_encodes_byte_lenenc (line 126) | fn test_encodes_byte_lenenc() {

FILE: sqlx-mysql/src/lib.rs
  type MySqlPool (line 54) | pub type MySqlPool = crate::pool::Pool<MySql>;
  type MySqlPoolOptions (line 57) | pub type MySqlPoolOptions = crate::pool::PoolOptions<MySql>;
  type MySqlExecutor (line 60) | pub trait MySqlExecutor<'c>: Executor<'c, Database = MySql> {}
  type MySqlTransaction (line 64) | pub type MySqlTransaction<'c> = crate::transaction::Transaction<'c, MySql>;

FILE: sqlx-mysql/src/migrate.rs
  function parse_for_maintenance (line 17) | fn parse_for_maintenance(url: &str) -> Result<(MySqlConnectOptions, Stri...
  method create_database (line 35) | async fn create_database(url: &str) -> Result<(), Error> {
  method database_exists (line 46) | async fn database_exists(url: &str) -> Result<bool, Error> {
  method drop_database (line 60) | async fn drop_database(url: &str) -> Result<(), Error> {
  method create_schema_if_not_exists (line 75) | fn create_schema_if_not_exists<'e>(
  method ensure_migrations_table (line 90) | fn ensure_migrations_table<'e>(
  method dirty_version (line 114) | fn dirty_version<'e>(
  method list_applied_migrations (line 130) | fn list_applied_migrations<'e>(
  method lock (line 154) | fn lock(&mut self) -> BoxFuture<'_, Result<(), MigrateError>> {
  method unlock (line 175) | fn unlock(&mut self) -> BoxFuture<'_, Result<(), MigrateError>> {
  method apply (line 190) | fn apply<'e>(
  method revert (line 265) | fn revert<'e>(
  function current_database (line 313) | async fn current_database(conn: &mut MySqlConnection) -> Result<String, ...
  function generate_lock_id (line 319) | fn generate_lock_id(database_name: &str) -> String {

FILE: sqlx-mysql/src/options/connect.rs
  type Connection (line 11) | type Connection = MySqlConnection;
  method from_url (line 13) | fn from_url(url: &Url) -> Result<Self, Error> {
  method to_url_lossy (line 17) | fn to_url_lossy(&self) -> Url {
  method connect (line 21) | async fn connect(&self) -> Result<Self::Connection, Error>
  method log_statements (line 94) | fn log_statements(mut self, level: LevelFilter) -> Self {
  method log_slow_statements (line 99) | fn log_slow_statements(mut self, level: LevelFilter, duration: Duration)...

FILE: sqlx-mysql/src/options/mod.rs
  type MySqlConnectOptions (line 63) | pub struct MySqlConnectOptions {
    method new (line 93) | pub fn new() -> Self {
    method host (line 121) | pub fn host(mut self, host: &str) -> Self {
    method port (line 129) | pub fn port(mut self, port: u16) -> Self {
    method socket (line 138) | pub fn socket(mut self, path: impl AsRef<Path>) -> Self {
    method username (line 144) | pub fn username(mut self, username: &str) -> Self {
    method password (line 150) | pub fn password(mut self, password: &str) -> Self {
    method database (line 156) | pub fn database(mut self, database: &str) -> Self {
    method ssl_mode (line 174) | pub fn ssl_mode(mut self, mode: MySqlSslMode) -> Self {
    method ssl_ca (line 189) | pub fn ssl_ca(mut self, file_name: impl AsRef<Path>) -> Self {
    method ssl_ca_from_pem (line 204) | pub fn ssl_ca_from_pem(mut self, pem_certificate: Vec<u8>) -> Self {
    method ssl_client_cert (line 219) | pub fn ssl_client_cert(mut self, cert: impl AsRef<Path>) -> Self {
    method ssl_client_cert_from_pem (line 244) | pub fn ssl_client_cert_from_pem(mut self, cert: impl AsRef<[u8]>) -> S...
    method ssl_client_key (line 259) | pub fn ssl_client_key(mut self, key: impl AsRef<Path>) -> Self {
    method ssl_client_key_from_pem (line 284) | pub fn ssl_client_key_from_pem(mut self, key: impl AsRef<[u8]>) -> Self {
    method statement_cache_capacity (line 295) | pub fn statement_cache_capacity(mut self, capacity: usize) -> Self {
    method charset (line 306) | pub fn charset(mut self, charset: &str) -> Self {
    method collation (line 320) | pub fn collation(mut self, collation: &str) -> Self {
    method pipes_as_concat (line 331) | pub fn pipes_as_concat(mut self, flag_val: bool) -> Self {
    method enable_cleartext_plugin (line 346) | pub fn enable_cleartext_plugin(mut self, flag_val: bool) -> Self {
    method no_engine_subsitution (line 352) | pub fn no_engine_subsitution(self, flag_val: bool) -> Self {
    method no_engine_substitution (line 366) | pub fn no_engine_substitution(mut self, flag_val: bool) -> Self {
    method timezone (line 387) | pub fn timezone(mut self, value: impl Into<Option<String>>) -> Self {
    method set_names (line 413) | pub fn set_names(mut self, flag_val: bool) -> Self {
    method get_host (line 430) | pub fn get_host(&self) -> &str {
    method get_port (line 444) | pub fn get_port(&self) -> u16 {
    method get_socket (line 458) | pub fn get_socket(&self) -> Option<&PathBuf> {
    method get_username (line 472) | pub fn get_username(&self) -> &str {
    method get_database (line 486) | pub fn get_database(&self) -> Option<&str> {
    method get_ssl_mode (line 499) | pub fn get_ssl_mode(&self) -> MySqlSslMode {
    method get_charset (line 512) | pub fn get_charset(&self) -> &str {
    method get_collation (line 526) | pub fn get_collation(&self) -> Option<&str> {
  method default (line 86) | fn default() -> Self {

FILE: sqlx-mysql/src/options/parse.rs
  method parse_from_url (line 11) | pub(crate) fn parse_from_url(url: &Url) -> Result<Self, Error> {
  method build_url (line 90) | pub(crate) fn build_url(&self) -> Url {
  type Err (line 151) | type Err = Error;
  method from_str (line 153) | fn from_str(s: &str) -> Result<Self, Error> {
  function it_parses_username_with_at_sign_correctly (line 160) | fn it_parses_username_with_at_sign_correctly() {
  function it_parses_password_with_non_ascii_chars_correctly (line 168) | fn it_parses_password_with_non_ascii_chars_correctly() {
  function it_returns_the_parsed_url (line 176) | fn it_returns_the_parsed_url() {
  function it_parses_timezone (line 189) | fn it_parses_timezone() {

FILE: sqlx-mysql/src/options/ssl_mode.rs
  type MySqlSslMode (line 8) | pub enum MySqlSslMode {
  type Err (line 35) | type Err = Error;
  method from_str (line 37) | fn from_str(s: &str) -> Result<Self, Error> {

FILE: sqlx-mysql/src/protocol/auth.rs
  type AuthPlugin (line 8) | pub enum AuthPlugin {
    method name (line 16) | pub(crate) fn name(self) -> &'static str {
  type Err (line 27) | type Err = Error;
  method from_str (line 29) | fn from_str(s: &str) -> Result<Self, Self::Err> {

FILE: sqlx-mysql/src/protocol/connect/auth_switch.rs
  type AuthSwitchRequest (line 12) | pub struct AuthSwitchRequest {
    method decode_with (line 18) | fn decode_with(mut buf: Bytes, enable_cleartext_plugin: bool) -> Resul...
  type AuthSwitchResponse (line 59) | pub struct AuthSwitchResponse(pub Vec<u8>);
    method encode_with (line 62) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<()...
  function test_decode_auth_switch_packet_data (line 69) | fn test_decode_auth_switch_packet_data() {
  function test_decode_auth_switch_cleartext_disabled (line 79) | fn test_decode_auth_switch_cleartext_disabled() {
  function test_decode_auth_switch_packet_no_data (line 96) | fn test_decode_auth_switch_packet_no_data() {

FILE: sqlx-mysql/src/protocol/connect/handshake.rs
  type Handshake (line 15) | pub(crate) struct Handshake {
    method decode_with (line 31) | fn decode_with(mut buf: Bytes, _: ()) -> Result<Self, Error> {
  function test_decode_handshake_mysql_8_0_18 (line 94) | fn test_decode_handshake_mysql_8_0_18() {
  function test_decode_handshake_mariadb_10_4_7 (line 147) | fn test_decode_handshake_mariadb_10_4_7() {

FILE: sqlx-mysql/src/protocol/connect/handshake_response.rs
  type HandshakeResponse (line 11) | pub struct HandshakeResponse<'a> {
  function encode_with (line 31) | fn encode_with(

FILE: sqlx-mysql/src/protocol/connect/ssl_request.rs
  type SslRequest (line 8) | pub struct SslRequest {
    method encode_with (line 14) | fn encode_with(&self, buf: &mut Vec<u8>, context: Capabilities) -> Res...

FILE: sqlx-mysql/src/protocol/packet.rs
  type Packet (line 12) | pub struct Packet<T>(pub(crate) T);
  function encode_with (line 18) | fn encode_with(
  function decode (line 76) | pub(crate) fn decode<'de, T>(self) -> Result<T, Error>
  function decode_with (line 83) | pub(crate) fn decode_with<'de, T, C>(self, context: C) -> Result<T, Error>
  function ok (line 90) | pub(crate) fn ok(self) -> Result<OkPacket, Error> {
  function eof (line 94) | pub(crate) fn eof(self, capabilities: Capabilities) -> Result<EofPacket,...
  type Target (line 109) | type Target = Bytes;
  method deref (line 111) | fn deref(&self) -> &Bytes {
  method deref_mut (line 117) | fn deref_mut(&mut self) -> &mut Bytes {

FILE: sqlx-mysql/src/protocol/response/eof.rs
  type EofPacket (line 15) | pub struct EofPacket {
    method decode_with (line 22) | fn decode_with(mut buf: Bytes, _: Capabilities) -> Result<Self, Error> {

FILE: sqlx-mysql/src/protocol/response/err.rs
  type ErrPacket (line 12) | pub struct ErrPacket {
    method decode_with (line 19) | fn decode_with(mut buf: Bytes, capabilities: Capabilities) -> Result<S...
  function test_decode_err_packet_out_of_order (line 50) | fn test_decode_err_packet_out_of_order() {
  function test_decode_err_packet_unknown_database (line 62) | fn test_decode_err_packet_unknown_database() {

FILE: sqlx-mysql/src/protocol/response/ok.rs
  type OkPacket (line 10) | pub struct OkPacket {
    method decode_with (line 18) | fn decode_with(mut buf: Bytes, _: ()) -> Result<Self, Error> {
  function test_decode_ok_packet (line 50) | fn test_decode_ok_packet() {
  function test_decode_ok_packet_with_info (line 63) | fn test_decode_ok_packet_with_info() {
  function test_decode_ok_packet_with_extended_info (line 76) | fn test_decode_ok_packet_with_extended_info() {
  function test_decode_ok_packet_truncated (line 89) | fn test_decode_ok_packet_truncated() {

FILE: sqlx-mysql/src/protocol/row.rs
  type Row (line 6) | pub(crate) struct Row {
    method get (line 12) | pub(crate) fn get(&self, index: usize) -> Option<&[u8]> {

FILE: sqlx-mysql/src/protocol/statement/execute.rs
  type Execute (line 9) | pub struct Execute<'q> {
  function encode_with (line 15) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<(), ...

FILE: sqlx-mysql/src/protocol/statement/prepare.rs
  type Prepare (line 6) | pub struct Prepare<'a> {
  function encode_with (line 11) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<(), ...

FILE: sqlx-mysql/src/protocol/statement/prepare_ok.rs
  type PrepareOk (line 10) | pub(crate) struct PrepareOk {
    method decode_with (line 19) | fn decode_with(buf: Bytes, _: Capabilities) -> Result<Self, Error> {

FILE: sqlx-mysql/src/protocol/statement/row.rs
  type BinaryRow (line 14) | pub(crate) struct BinaryRow(pub(crate) Row);
    method decode_with (line 17) | fn decode_with(mut buf: Bytes, columns: &'de [MySqlColumn]) -> Result<...

FILE: sqlx-mysql/src/protocol/statement/stmt_close.rs
  type StmtClose (line 7) | pub struct StmtClose {
    method encode_with (line 12) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<()...

FILE: sqlx-mysql/src/protocol/text/column.rs
  type ColumnType (line 69) | pub enum ColumnType {
    method name (line 174) | pub(crate) fn name(self, flags: ColumnFlags, max_size: Option<u32>) ->...
    method try_from_u16 (line 227) | pub(crate) fn try_from_u16(id: u8) -> Result<Self, Error> {
  type ColumnDefinition (line 104) | pub(crate) struct ColumnDefinition {
    method schema (line 125) | pub(crate) fn schema(&self) -> Result<&str, Error> {
    method table (line 129) | pub(crate) fn table(&self) -> Result<&str, Error> {
    method name (line 133) | pub(crate) fn name(&self) -> Result<&str, Error> {
    method alias (line 137) | pub(crate) fn alias(&self) -> Result<&str, Error> {
    method decode_with (line 143) | fn decode_with(mut buf: Bytes, _: Capabilities) -> Result<Self, Error> {

FILE: sqlx-mysql/src/protocol/text/ping.rs
  type Ping (line 7) | pub(crate) struct Ping;
    method encode_with (line 10) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<()...

FILE: sqlx-mysql/src/protocol/text/query.rs
  type Query (line 7) | pub(crate) struct Query<'q>(pub(crate) &'q str);
  function encode_with (line 10) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<(), ...

FILE: sqlx-mysql/src/protocol/text/quit.rs
  type Quit (line 7) | pub(crate) struct Quit;
    method encode_with (line 10) | fn encode_with(&self, buf: &mut Vec<u8>, _: Capabilities) -> Result<()...

FILE: sqlx-mysql/src/protocol/text/row.rs
  type TextRow (line 10) | pub(crate) struct TextRow(pub(crate) Row);
    method decode_with (line 13) | fn decode_with(mut buf: Bytes, columns: &'de [MySqlColumn]) -> Result<...

FILE: sqlx-mysql/src/query_result.rs
  type MySqlQueryResult (line 4) | pub struct MySqlQueryResult {
    method last_insert_id (line 10) | pub fn last_insert_id(&self) -> u64 {
    method rows_affected (line 14) | pub fn rows_affected(&self) -> u64 {
    method extend (line 20) | fn extend<T: IntoIterator<Item = MySqlQueryResult>>(&mut self, iter: T) {
  function from (line 30) | fn from(done: MySqlQueryResult) -> Self {

FILE: sqlx-mysql/src/row.rs
  type MySqlRow (line 12) | pub struct MySqlRow {
    method fmt (line 53) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type Database (line 20) | type Database = MySql;
  method columns (line 22) | fn columns(&self) -> &[MySqlColumn] {
  method try_get_raw (line 26) | fn try_get_raw<I>(&self, index: I) -> Result<MySqlValueRef<'_>, Error>
  function index (line 44) | fn index(&self, row: &MySqlRow) -> Result<usize, Error> {

FILE: sqlx-mysql/src/statement.rs
  type MySqlStatement (line 14) | pub struct MySqlStatement {
  type MySqlStatementMetadata (line 20) | pub(crate) struct MySqlStatementMetadata {
  type Database (line 27) | type Database = MySql;
  method into_sql (line 29) | fn into_sql(self) -> SqlStr {
  method sql (line 33) | fn sql(&self) -> &SqlStr {
  method parameters (line 37) | fn parameters(&self) -> Option<Either<&[MySqlTypeInfo], usize>> {
  method columns (line 41) | fn columns(&self) -> &[MySqlColumn] {
  function index (line 49) | fn index(&self, statement: &MySqlStatement) -> Result<usize, Error> {

FILE: sqlx-mysql/src/testing/mod.rs
  method test_context (line 23) | fn test_context(
  method cleanup_test (line 29) | async fn cleanup_test(db_name: &str) -> Result<(), Error> {
  method cleanup_test_dbs (line 39) | async fn cleanup_test_dbs() -> Result<Option<usize>, Error> {
  method snapshot (line 92) | async fn snapshot(_conn: &mut Self::Connection) -> Result<FixtureSnapsho...
  function test_context (line 99) | async fn test_context(args: &TestArgs) -> Result<TestContext<MySql>, Err...
  function do_cleanup (line 184) | async fn do_cleanup(conn: &mut MySqlConnection, db_name: &str) -> Result...
  function cleanup_old_dbs (line 195) | async fn cleanup_old_dbs(conn: &mut MySqlConnection) -> Result<(), Error> {
  function once_lock_try_insert_polyfill (line 246) | fn once_lock_try_insert_polyfill<T>(this: &OnceLock<T>, value: T) -> Res...

FILE: sqlx-mysql/src/transaction.rs
  type MySqlTransactionManager (line 12) | pub struct MySqlTransactionManager;
  type Database (line 15) | type Database = MySql;
  method begin (line 17) | async fn begin(conn: &mut MySqlConnection, statement: Option<SqlStr>) ->...
  method commit (line 36) | async fn commit(conn: &mut MySqlConnection) -> Result<(), Error> {
  method rollback (line 47) | async fn rollback(conn: &mut MySqlConnection) -> Result<(), Error> {
  method start_rollback (line 58) | fn start_rollback(conn: &mut MySqlConnection) {
  method get_transaction_depth (line 73) | fn get_transaction_depth(conn: &MySqlConnection) -> usize {

FILE: sqlx-mysql/src/type_info.rs
  type MySqlTypeInfo (line 10) | pub struct MySqlTypeInfo {
    method binary (line 21) | pub(crate) const fn binary(ty: ColumnType) -> Self {
    method __enum (line 31) | pub const fn __enum() -> Self {
    method __type_feature_gate (line 49) | pub fn __type_feature_gate(&self) -> Option<&'static str> {
    method from_column (line 62) | pub(crate) fn from_column(column: &ColumnDefinition) -> Self {
    method eq (line 89) | fn eq(&self, other: &MySqlTypeInfo) -> bool {
  method fmt (line 73) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  method is_null (line 79) | fn is_null(&self) -> bool {
  method name (line 83) | fn name(&self) -> &str {

FILE: sqlx-mysql/src/types/bigdecimal.rs
  method type_info (line 12) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 16) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 22) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 30) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/bool.rs
  function type_info (line 12) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 22) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 36) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 42) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/bytes.rs
  function type_info (line 14) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 18) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 34) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 42) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  function type_info (line 48) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 52) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 58) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 64) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/chrono.rs
  function type_info (line 16) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 20) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 27) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 34) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  function type_info (line 42) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 46) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 53) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 60) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  method type_info (line 66) | fn type_info() -> MySqlTypeInfo {
  method encode_by_ref (line 72) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method size_hint (line 88) | fn size_hint(&self) -> usize {
  method decode (line 98) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  type Error (line 114) | type Error = BoxDynError;
  method try_from (line 116) | fn try_from(time: MySqlTime) -> Result<Self, Self::Error> {
  function from (line 128) | fn from(time: MySqlTime) -> Self {
  type Error (line 135) | type Error = BoxDynError;
  method try_from (line 137) | fn try_from(value: chrono::TimeDelta) -> Result<Self, Self::Error> {
  function type_info (line 153) | fn type_info() -> MySqlTypeInfo {
  function decode (line 159) | fn decode(value: <MySql as Database>::ValueRef<'r>) -> Result<Self, BoxD...
  method type_info (line 165) | fn type_info() -> MySqlTypeInfo {
  method encode_by_ref (line 171) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method size_hint (line 179) | fn size_hint(&self) -> usize {
  method decode (line 185) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  method type_info (line 207) | fn type_info() -> MySqlTypeInfo {
  method encode_by_ref (line 213) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method size_hint (line 226) | fn size_hint(&self) -> usize {
  method decode (line 232) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  function encode_date (line 262) | fn encode_date(date: &NaiveDate, buf: &mut Vec<u8>) -> Result<(), BoxDyn...
  function decode_date (line 279) | fn decode_date(mut buf: &[u8]) -> Result<Option<NaiveDate>, BoxDynError> {
  function encode_time (line 297) | fn encode_time(time: &NaiveTime, include_micros: bool, buf: &mut Vec<u8>) {
  function decode_time (line 311) | fn decode_time(len: u8, mut buf: &[u8]) -> Result<NaiveTime, BoxDynError> {
  function naive_dt_encoded_len (line 331) | fn naive_dt_encoded_len(time: &NaiveDateTime) -> u8 {
  function naive_time_encoded_len (line 354) | fn naive_time_encoded_len(time: &NaiveTime) -> u8 {

FILE: sqlx-mysql/src/types/float.rs
  function real_compatible (line 10) | fn real_compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 16) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 20) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 26) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 30) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 36) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 44) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 52) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 83) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/inet.rs
  method type_info (line 11) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 15) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 21) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 29) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  method type_info (line 39) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 43) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 49) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 57) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  method type_info (line 67) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 71) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 77) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 85) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/int.rs
  function int_compatible (line 10) | fn int_compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 22) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 26) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 32) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 36) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 42) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 46) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 52) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 56) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 62) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 70) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 78) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 86) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function int_decode (line 93) | fn int_decode(value: MySqlValueRef<'_>) -> Result<i64, BoxDynError> {
  function decode (line 118) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 124) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 130) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 136) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/json.rs
  function type_info (line 11) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 18) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 29) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 65) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/mysql_time.rs
  type MySqlTime (line 26) | pub struct MySqlTime {
    constant ZERO (line 104) | pub const ZERO: Self = MySqlTime {
    constant MAX (line 110) | pub const MAX: Self = MySqlTime {
    constant MIN (line 116) | pub const MIN: Self = MySqlTime {
    constant HOURS_MAX (line 123) | pub(crate) const HOURS_MAX: u32 = 838;
    method new (line 136) | pub fn new(
    method with_sign (line 195) | pub fn with_sign(self, sign: MySqlTimeSign) -> Self {
    method sign (line 200) | pub fn sign(&self) -> MySqlTimeSign {
    method is_zero (line 205) | pub fn is_zero(&self) -> bool {
    method is_positive (line 210) | pub fn is_positive(&self) -> bool {
    method is_negative (line 215) | pub fn is_negative(&self) -> bool {
    method is_valid_time_of_day (line 222) | pub fn is_valid_time_of_day(&self) -> bool {
    method hours (line 229) | pub fn hours(&self) -> u32 {
    method minutes (line 234) | pub fn minutes(&self) -> u8 {
    method seconds (line 239) | pub fn seconds(&self) -> u8 {
    method microseconds (line 244) | pub fn microseconds(&self) -> u32 {
    method to_duration (line 251) | pub fn to_duration(&self) -> Option<Duration> {
    method whole_seconds (line 259) | pub(crate) fn whole_seconds(&self) -> u32 {
    method whole_seconds_signed (line 265) | pub(crate) fn whole_seconds_signed(&self) -> i64 {
    method subsec_nanos (line 269) | pub(crate) fn subsec_nanos(&self) -> u32 {
    method encoded_len (line 273) | fn encoded_len(&self) -> u8 {
    method partial_cmp (line 285) | fn partial_cmp(&self, other: &MySqlTime) -> Option<Ordering> {
    method type_info (line 353) | fn type_info() -> MySqlTypeInfo {
    method decode (line 359) | fn decode(value: <MySql as Database>::ValueRef<'r>) -> Result<Self, Bo...
    method encode_by_ref (line 413) | fn encode_by_ref(
    method size_hint (line 447) | fn size_hint(&self) -> usize {
    type Error (line 467) | type Error = MySqlTimeError;
    method try_from (line 469) | fn try_from(value: Duration) -> Result<Self, Self::Error> {
  type TimeMagnitude (line 34) | pub(crate) struct TimeMagnitude {
  constant MAGNITUDE_ZERO (line 41) | const MAGNITUDE_ZERO: TimeMagnitude = TimeMagnitude {
  constant MAGNITUDE_MAX (line 49) | const MAGNITUDE_MAX: TimeMagnitude = TimeMagnitude {
  type MySqlTimeSign (line 59) | pub enum MySqlTimeSign {
    method from_byte (line 493) | fn from_byte(b: u8) -> Result<Self, BoxDynError> {
    method to_byte (line 501) | fn to_byte(self) -> u8 {
    method signum (line 509) | fn signum(&self) -> i32 {
    method is_positive (line 517) | pub fn is_positive(&self) -> bool {
    method is_negative (line 522) | pub fn is_negative(&self) -> bool {
  type MySqlTimeError (line 70) | pub enum MySqlTimeError {
  method cmp (line 291) | fn cmp(&self, other: &Self) -> Ordering {
  method fmt (line 307) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  method fmt (line 528) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  method type_info (line 538) | fn type_info() -> MySqlTypeInfo {
  method decode (line 544) | fn decode(value: <MySql as Database>::ValueRef<'r>) -> Result<Self, BoxD...
  function parse (line 555) | fn parse(text: &str) -> Result<MySqlTime, BoxDynError> {
  function parse_microseconds (line 612) | fn parse_microseconds(micros: &str) -> Result<u32, BoxDynError> {
  function test_display (line 637) | fn test_display() {
  function test_parse_microseconds (line 695) | fn test_parse_microseconds() {

FILE: sqlx-mysql/src/types/rust_decimal.rs
  method type_info (line 12) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 16) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 22) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 30) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/str.rs
  function type_info (line 15) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 25) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 48) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 56) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  method type_info (line 62) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 66) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method decode (line 72) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/text.rs
  function type_info (line 10) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 14) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 23) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function decode (line 45) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/time.rs
  method type_info (line 16) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 20) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 26) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 35) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  method type_info (line 43) | fn type_info() -> MySqlTypeInfo {
  method encode_by_ref (line 49) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method size_hint (line 65) | fn size_hint(&self) -> usize {
  method decode (line 71) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  type Error (line 89) | type Error = BoxDynError;
  method try_from (line 91) | fn try_from(time: MySqlTime) -> Result<Self, Self::Error> {
  function from (line 108) | fn from(time: MySqlTime) -> Self {
  type Error (line 116) | type Error = BoxDynError;
  method try_from (line 118) | fn try_from(value: time::Duration) -> Result<Self, Self::Error> {
  function type_info (line 131) | fn type_info() -> MySqlTypeInfo {
  function decode (line 137) | fn decode(value: <MySql as Database>::ValueRef<'r>) -> Result<Self, BoxD...
  method type_info (line 143) | fn type_info() -> MySqlTypeInfo {
  method encode_by_ref (line 149) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method size_hint (line 157) | fn size_hint(&self) -> usize {
  method decode (line 163) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  method type_info (line 184) | fn type_info() -> MySqlTypeInfo {
  method encode_by_ref (line 190) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method size_hint (line 203) | fn size_hint(&self) -> usize {
  method decode (line 209) | fn decode(value: MySqlValueRef<'r>) -> Result<Self, BoxDynError> {
  function encode_date (line 255) | fn encode_date(date: &Date, buf: &mut Vec<u8>) -> Result<(), BoxDynError> {
  function decode_date (line 267) | fn decode_date(buf: &[u8]) -> Result<Option<Date>, BoxDynError> {
  function encode_time (line 282) | fn encode_time(time: &Time, include_micros: bool, buf: &mut Vec<u8>) {
  function decode_time (line 292) | fn decode_time(mut buf: &[u8]) -> Result<Time, BoxDynError> {
  function primitive_dt_encoded_len (line 312) | fn primitive_dt_encoded_len(time: &PrimitiveDateTime) -> u8 {
  function time_encoded_len (line 329) | fn time_encoded_len(time: &Time) -> u8 {

FILE: sqlx-mysql/src/types/uint.rs
  function uint_type_info (line 10) | fn uint_type_info(ty: ColumnType) -> MySqlTypeInfo {
  function uint_compatible (line 19) | fn uint_compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 33) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 37) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 43) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 47) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 53) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 57) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function type_info (line 63) | fn type_info() -> MySqlTypeInfo {
  function compatible (line 67) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  function encode_by_ref (line 73) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 81) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 89) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function encode_by_ref (line 97) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  function uint_decode (line 104) | fn uint_decode(value: MySqlValueRef<'_>) -> Result<u64, BoxDynError> {
  function decode (line 143) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 149) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 155) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  function decode (line 161) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/types/uuid.rs
  method type_info (line 14) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 18) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 24) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 32) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  method type_info (line 51) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 55) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 61) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 69) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {
  method type_info (line 81) | fn type_info() -> MySqlTypeInfo {
  method compatible (line 85) | fn compatible(ty: &MySqlTypeInfo) -> bool {
  method encode_by_ref (line 91) | fn encode_by_ref(&self, buf: &mut Vec<u8>) -> Result<IsNull, BoxDynError> {
  method decode (line 99) | fn decode(value: MySqlValueRef<'_>) -> Result<Self, BoxDynError> {

FILE: sqlx-mysql/src/value.rs
  type MySqlValueFormat (line 13) | pub enum MySqlValueFormat {
  type MySqlValue (line 20) | pub struct MySqlValue {
  type MySqlValueRef (line 28) | pub struct MySqlValueRef<'r> {
  function format (line 36) | pub(crate) fn format(&self) -> MySqlValueFormat {
  function as_bytes (line 40) | pub(crate) fn as_bytes(&self) -> Result<&'r [u8], BoxDynError> {
  function as_str (line 47) | pub(crate) fn as_str(&self) -> Result<&'r str, BoxDynError> {
  type Database (line 53) | type Database = MySql;
  method as_ref (line 55) | fn as_ref(&self) -> MySqlValueRef<'_> {
  method type_info (line 64) | fn type_info(&self) -> Cow<'_, MySqlTypeInfo> {
  method is_null (line 68) | fn is_null(&self) -> bool {
  type Database (line 74) | type Database = MySql;
  function to_owned (line 76) | fn to_owned(&self) -> MySqlValue {
  function type_info (line 92) | fn type_info(&self) -> Cow<'_, MySqlTypeInfo> {
  function is_null (line 97) | fn is_null(&self) -> bool {
  function is_null (line 102) | fn is_null(value: Option<&[u8]>, ty: &MySqlTypeInfo) -> bool {

FILE: sqlx-postgres/src/advisory_lock.rs
  type PgAdvisoryLock (line 38) | pub struct PgAdvisoryLock {
    method new (line 109) | pub fn new(key_string: impl AsRef<str>) -> Self {
    method with_key (line 164) | pub fn with_key(key: PgAdvisoryLockKey) -> Self {
    method key (line 172) | pub fn key(&self) -> &PgAdvisoryLockKey {
    method acquire (line 202) | pub async fn acquire<C: AsMut<PgConnection>>(
    method try_acquire (line 245) | pub async fn try_acquire<C: AsMut<PgConnection>>(
    method force_release (line 283) | pub async fn force_release<C: AsMut<PgConnection>>(&self, mut conn: C)...
    method get_release_query (line 303) | fn get_release_query(&self) -> &str {
  type PgAdvisoryLockKey (line 58) | pub enum PgAdvisoryLockKey {
    method as_bigint (line 315) | pub fn as_bigint(&self) -> Option<i64> {
  type PgAdvisoryLockGuard (line 81) | pub struct PgAdvisoryLockGuard<C: AsMut<PgConnection>> {
  constant NONE_ERR (line 324) | const NONE_ERR: &str = "BUG: PgAdvisoryLockGuard.conn taken";
  function new (line 327) | fn new(lock: PgAdvisoryLock, conn: C) -> Self {
  function release_now (line 342) | pub async fn release_now(mut self) -> Result<C> {
  function leak (line 361) | pub fn leak(mut self) -> C {
  type Target (line 367) | type Target = PgConnection;
  method deref (line 369) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 381) | fn deref_mut(&mut self) -> &mut Self::Target {
  function as_ref (line 387) | fn as_ref(&self) -> &PgConnection {
  function as_mut (line 399) | fn as_mut(&mut self) -> &mut PgConnection {
  method drop (line 408) | fn drop(&mut self) {

FILE: sqlx-postgres/src/any.rs
  method name (line 26) | fn name(&self) -> &str {
  method close (line 30) | fn close(self: Box<Self>) -> BoxFuture<'static, sqlx_core::Result<()>> {
  method close_hard (line 34) | fn close_hard(self: Box<Self>) -> BoxFuture<'static, sqlx_core::Result<(...
  method ping (line 38) | fn ping(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method begin (line 42) | fn begin(&mut self, statement: Option<SqlStr>) -> BoxFuture<'_, sqlx_cor...
  method commit (line 46) | fn commit(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method rollback (line 50) | fn rollback(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method start_rollback (line 54) | fn start_rollback(&mut self) {
  method get_transaction_depth (line 58) | fn get_transaction_depth(&self) -> usize {
  method shrink_buffers (line 62) | fn shrink_buffers(&mut self) {
  method flush (line 66) | fn flush(&mut self) -> BoxFuture<'_, sqlx_core::Result<()>> {
  method should_flush (line 70) | fn should_flush(&self) -> bool {
  method as_migrate (line 75) | fn as_migrate(
  method fetch_many (line 81) | fn fetch_many(
  method fetch_optional (line 107) | fn fetch_optional(
  method prepare_with (line 131) | fn prepare_with<'c, 'q: 'c>(
  method describe (line 144) | fn describe<'c>(
  type Error (line 188) | type Error = sqlx_core::Error;
  method try_from (line 190) | fn try_from(pg_type: &'a PgTypeInfo) -> Result<Self, Self::Error> {
  type Error (line 214) | type Error = sqlx_core::Error;
  method try_from (line 216) | fn try_from(col: &'a PgColumn) -> Result<Self, Self::Error> {
  type Error (line 232) | type Error = sqlx_core::Error;
  method try_from (line 234) | fn try_from(row: &'a PgRow) -> Result<Self, Self::Error> {
  type Error (line 240) | type Error = sqlx_core::Error;
  method try_from (line 242) | fn try_from(value: &'a AnyConnectOptions) -> Result<Self, Self::Error> {
  function map_result (line 249) | fn map_result(res: PgQueryResult) -> AnyQueryResult {

FILE: sqlx-postgres/src/arguments.rs
  type PgArgumentBuffer (line 26) | pub struct PgArgumentBuffer {
    method encode (line 167) | pub(crate) fn encode<'q, T>(&mut self, value: T) -> Result<(), BoxDynE...
    method patch (line 199) | pub(crate) fn patch<F>(&mut self, callback: F)
    method patch_type_by_name (line 215) | pub(crate) fn patch_type_by_name(&mut self, type_name: &UStr) {
    method patch_array_type (line 227) | pub(crate) fn patch_array_type(&mut self, array: Arc<PgArrayOf>) {
    method snapshot (line 234) | fn snapshot(&self) -> PgArgumentBufferSnapshot {
    method reset_to_snapshot (line 250) | fn reset_to_snapshot(
  type HoleKind (line 50) | enum HoleKind {
  type Patch (line 56) | struct Patch {
    method fmt (line 64) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type PgArguments (line 75) | pub struct PgArguments {
    method add (line 84) | pub(crate) fn add<'q, T>(&mut self, value: T) -> Result<(), BoxDynError>
    method apply_patches (line 110) | pub(crate) async fn apply_patches(
  type Database (line 142) | type Database = Postgres;
  method reserve (line 144) | fn reserve(&mut self, additional: usize, size: usize) {
  method add (line 149) | fn add<'t, T>(&mut self, value: T) -> Result<(), BoxDynError>
  method format_placeholder (line 156) | fn format_placeholder<W: Write>(&self, writer: &mut W) -> fmt::Result {
  method len (line 161) | fn len(&self) -> usize {
  type PgArgumentBufferSnapshot (line 266) | struct PgArgumentBufferSnapshot {
  type Target (line 274) | type Target = Vec<u8>;
  method deref (line 277) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 284) | fn deref_mut(&mut self) -> &mut Self::Target {
  function value_size_int4_checked (line 289) | pub(crate) fn value_size_int4_checked(size: usize) -> Result<i32, String> {

FILE: sqlx-postgres/src/bind_iter.rs
  type PgBindIter (line 11) | pub struct PgBindIter<I>(Cell<Option<I>>);
  type PgBindIterExt (line 55) | pub trait PgBindIterExt: Iterator + Sized {
    method bind_iter (line 56) | fn bind_iter(self) -> PgBindIter<Self>;
    method bind_iter (line 60) | fn bind_iter(self) -> PgBindIter<I> {
  function type_info (line 70) | fn type_info() -> <Postgres as Database>::TypeInfo {
  function compatible (line 73) | fn compatible(ty: &PgTypeInfo) -> bool {
  function encode_inner (line 83) | fn encode_inner(
  function encode_by_ref (line 142) | fn encode_by_ref(&self, buf: &mut PgArgumentBuffer) -> Result<IsNull, Bo...
  function encode (line 145) | fn encode(self, buf: &mut PgArgumentBuffer) -> Result<IsNull, BoxDynError>

FILE: sqlx-postgres/src/column.rs
  type PgColumn (line 9) | pub struct PgColumn {
    method relation_id (line 30) | pub fn relation_id(&self) -> Option<crate::types::Oid> {
    method relation_attribute_no (line 40) | pub fn relation_attribute_no(&self) -> Option<i16> {
  type Database (line 46) | type Database = Postgres;
  method ordinal (line 48) | fn ordinal(&self) -> usize {
  method name (line 52) | fn name(&self) -> &str {
  method type_info (line 56) | fn type_info(&self) -> &PgTypeInfo {
  method origin (line 60) | fn origin(&self) -> ColumnOrigin {

FILE: sqlx-postgres/src/connection/describe.rs
  method is_explain_available (line 13) | fn is_explain_available(&self) -> bool {
  method get_nullable_for_columns (line 21) | pub(crate) async fn get_nullable_for_columns(
  method nullables_from_explain (line 114) | async fn nullables_from_explain(
  function visit_plan (line 163) | fn visit_plan(plan: &Plan, outputs: &[String], nullables: &mut Vec<Optio...
  type Explain (line 190) | enum Explain {
  type Plan (line 212) | struct Plan {
  function explain_parsing (line 224) | fn explain_parsing() {

FILE: sqlx-postgres/src/connection/establish.rs
  method establish (line 18) | pub(crate) async fn establish(options: &PgConnectOptions) -> Result<Self...

FILE: sqlx-postgres/src/connection/executor.rs
  function prepare (line 23) | async fn prepare(
  function recv_desc_params (line 107) | async fn recv_desc_params(conn: &mut PgConnection) -> Result<ParameterDe...
  function recv_desc_rows (line 111) | async fn recv_desc_rows(conn: &mut PgConnection) -> Result<Option<RowDes...
  method wait_for_close_complete (line 134) | pub(super) async fn wait_for_close_complete(&mut self, mut count: usize)...
  method write_sync (line 161) | pub(crate) fn write_sync(&mut self) {
  method get_or_prepare (line 171) | async fn get_or_prepare(
  method run (line 210) | pub(crate) async fn run<'e, 'c: 'e, 'q: 'e>(
  type Database (line 394) | type Database = Postgres;
  function fetch_many (line 396) | fn fetch_many<'e, 'q, E>(
  function fetch_optional (line 425) | fn fetch_optional<'e, 'q, E>(self, mut query: E) -> BoxFuture<'e, Result...
  function prepare_with (line 458) | fn prepare_with<'e>(
  function describe (line 478) | fn describe<'e>(

FILE: sqlx-postgres/src/connection/mod.rs
  type PgConnection (line 38) | pub struct PgConnection {
    method server_version_num (line 89) | pub fn server_version_num(&self) -> Option<u32> {
    method wait_until_ready (line 94) | pub(crate) async fn wait_until_ready(&mut self) -> Result<(), Error> {
    method recv_ready_for_query (line 110) | async fn recv_ready_for_query(&mut self) -> Result<(), Error> {
    method handle_ready_for_query (line 120) | fn handle_ready_for_query(&mut self, message: ReceivedMessage) -> Resu...
    method queue_simple_query (line 136) | pub(crate) fn queue_simple_query(&mut self, query: &str) -> Result<(),...
    method in_transaction (line 143) | pub(crate) fn in_transaction(&self) -> bool {
    method as_mut (line 253) | fn as_mut(&mut self) -> &mut PgConnection {
  type PgConnectionInner (line 42) | pub struct PgConnectionInner {
  type TableColumns (line 81) | pub(crate) struct TableColumns {
  method fmt (line 152) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
  type Database (line 158) | type Database = Postgres;
  type Options (line 160) | type Options = PgConnectOptions;
  method close (line 162) | async fn close(mut self) -> Result<(), Error> {
  method close_hard (line 174) | async fn close_hard(mut self) -> Result<(), Error> {
  method ping (line 180) | async fn ping(&mut self) -> Result<(), Error> {
  method begin (line 190) | fn begin(
  method begin_with (line 196) | fn begin_with(
  method cached_statements_size (line 206) | fn cached_statements_size(&self) -> usize {
  method clear_cached_statements (line 210) | async fn clear_cached_statements(&mut self) -> Result<(), Error> {
  method shrink_buffers (line 233) | fn shrink_buffers(&mut self) {
  method flush (line 238) | fn flush(&mut self) -> impl Future<Output = Result<(), Error>> + Send + ...
  method should_flush (line 243) | fn should_flush(&self) -> bool {

FILE: sqlx-postgres/src/connection/resolve.rs
  type TypType (line 18) | enum TypType {
    type Error (line 28) | type Error = ();
    method try_from (line 30) | fn try_from(t: i8) -> Result<Self, Self::Error> {
  type TypCategory (line 50) | enum TypCategory {
    type Error (line 69) | type Error = ();
    method try_from (line 71) | fn try_from(c: i8) -> Result<Self, Self::Error> {
  method handle_row_description (line 97) | pub(super) async fn handle_row_description(
  method handle_parameter_description (line 148) | pub(super) async fn handle_parameter_description(
  method maybe_fetch_type_info_by_oid (line 161) | async fn maybe_fetch_type_info_by_oid(
  method maybe_fetch_column_origin (line 201) | async fn maybe_fetch_column_origin(
  method fetch_type_by_oid (line 264) | async fn fetch_type_by_oid(&mut self, oid: Oid) -> Result<PgTypeInfo, Er...
  method fetch_enum_by_oid 
Condensed preview — 690 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,150K chars).
[
  {
    "path": ".editorconfig",
    "chars": 140,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\n\n[*.y"
  },
  {
    "path": ".gitattributes",
    "chars": 19,
    "preview": "* text=auto eol=lf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1693,
    "preview": "name: I think I found a bug in SQLx\ndescription: Create a bug-report issue\nlabels: [bug]\nbody:\n  - type: textarea\n    id"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 651,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Enabling some optional features adds unexpected crates to Cargo.loc"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1031,
    "preview": "name: I have a feature request for SQLx\ndescription: Create a feature-request issue\nlabels: [enhancement]\nbody:\n  - type"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 2789,
    "preview": "<!-- \nPR AUTHOR INSTRUCTIONS; PLEASE READ.\n\nGive your pull request an accurate and descriptive title. It should mention "
  },
  {
    "path": ".github/workflows/examples.yml",
    "chars": 14272,
    "preview": "name: Examples\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - '*-dev'\n\njobs:\n  sqlx-cli:\n    name: Buil"
  },
  {
    "path": ".github/workflows/sqlx-cli.yml",
    "chars": 9533,
    "preview": "name: SQLx CLI\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - \"*-dev\"\n\njobs:\n  check:\n    name: Check\n "
  },
  {
    "path": ".github/workflows/sqlx.yml",
    "chars": 18385,
    "preview": "name: SQLx\n\non:\n  pull_request:\n  push:\n    branches:\n      - main\n      - \"*-dev\"\n\njobs:\n  format:\n    name: Format\n   "
  },
  {
    "path": ".gitignore",
    "chars": 326,
    "preview": "# Built artifacts\ntarget/\n\n# Project and editor files\n.vscode/\n.idea/\n*.vim\n*.vi\n\n# Environment\n.env\n\n# Shared-memory an"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 163894,
    "preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Change"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1775,
    "preview": "# How to contribute\n\nSo, you've decided to contribute, that's great!\n\nYou can use this document to figure out how and wh"
  },
  {
    "path": "Cargo.toml",
    "chars": 13674,
    "preview": "[workspace]\nmembers = [\n    \".\",\n    \"sqlx-core\",\n    \"sqlx-macros\",\n    \"sqlx-macros-core\",\n    \"sqlx-test\",\n    \"sqlx-"
  },
  {
    "path": "FAQ.md",
    "chars": 29644,
    "preview": "SQLx Frequently Asked Questions\n===============================\n\n### What database versions does SQLx support?\n\nThis is "
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 10243,
    "preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1060,
    "preview": "Copyright (c) 2020 LaunchBadge, LLC\n\nPermission is hereby granted, free of charge, to any\nperson obtaining a copy of thi"
  },
  {
    "path": "README.md",
    "chars": 18374,
    "preview": "<h1 align=\"center\">SQLx</h1>\n<div align=\"center\">\n <strong>\n   🧰 The Rust SQL Toolkit\n </strong>\n</div>\n\n<br />\n\n<div al"
  },
  {
    "path": "benches/sqlite/describe.rs",
    "chars": 5087,
    "preview": "use criterion::BenchmarkId;\nuse criterion::Criterion;\nuse criterion::{criterion_group, criterion_main};\n\nuse sqlx::sqlit"
  },
  {
    "path": "clippy.toml",
    "chars": 427,
    "preview": "[[disallowed-methods]]\npath = \"core::cmp::Ord::min\"\nreason = '''\ntoo easy to misread `x.min(y)` as \"let the minimum valu"
  },
  {
    "path": "contrib/ide/vscode/settings.json",
    "chars": 60,
    "preview": "{\n    \"rust-analyzer.assist.importMergeBehaviour\": \"last\"\n}\n"
  },
  {
    "path": "examples/.gitignore",
    "chars": 22,
    "preview": "sqlite/todos/todos.db\n"
  },
  {
    "path": "examples/mysql/todos/Cargo.toml",
    "chars": 330,
    "preview": "[package]\nname = \"sqlx-example-mysql-todos\"\nversion = \"0.1.0\"\nedition = \"2021\"\nworkspace = \"../../../\"\n\n[dependencies]\na"
  },
  {
    "path": "examples/mysql/todos/README.md",
    "chars": 420,
    "preview": "# TODOs Example\n\n## Setup\n\n1. Declare the database URL\n\n    ```\n    export DATABASE_URL=\"mysql://root:password@localhost"
  },
  {
    "path": "examples/mysql/todos/migrations/20200718111257_todos.sql",
    "chars": 188,
    "preview": "CREATE TABLE IF NOT EXISTS todos\n(\n    id          BIGINT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,\n    description "
  },
  {
    "path": "examples/mysql/todos/src/main.rs",
    "chars": 2271,
    "preview": "use clap::{Parser, Subcommand};\nuse sqlx::mysql::MySqlPool;\nuse std::env;\n\n#[derive(Parser)]\nstruct Args {\n    #[command"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/Cargo.toml",
    "chars": 891,
    "preview": "[package]\nname = \"sqlx-example-postgres-axum-social\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n# See more keys and their defin"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/README.md",
    "chars": 406,
    "preview": "This example demonstrates how to write integration tests for an API build with [Axum] and SQLx using `#[sqlx::test]`.\n\nS"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/migrations/1_user.sql",
    "chars": 166,
    "preview": "create table \"user\"\n(\n    user_id       uuid primary key default gen_random_uuid(),\n    username      text unique not nu"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/migrations/2_post.sql",
    "chars": 250,
    "preview": "create table post (\n    post_id uuid primary key default gen_random_uuid(),\n    user_id uuid not null references \"user\"("
  },
  {
    "path": "examples/postgres/axum-social-with-tests/migrations/3_comment.sql",
    "chars": 315,
    "preview": "create table comment (\n    comment_id uuid primary key default gen_random_uuid(),\n    post_id uuid not null references p"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/http/error.rs",
    "chars": 2110,
    "preview": "use axum::http::StatusCode;\nuse axum::response::{IntoResponse, Response};\nuse axum::Json;\n\nuse serde_with::DisplayFromSt"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/http/mod.rs",
    "chars": 556,
    "preview": "use anyhow::Context;\nuse axum::{Extension, Router};\nuse sqlx::PgPool;\n\nmod error;\n\nmod post;\nmod user;\n\npub use self::er"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/http/post/comment.rs",
    "chars": 2520,
    "preview": "use axum::extract::Path;\nuse axum::{Extension, Json, Router};\n\nuse axum::routing::get;\n\nuse serde::{Deserialize, Seriali"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/http/post/mod.rs",
    "chars": 2280,
    "preview": "use axum::{Extension, Json, Router};\n\nuse axum::routing::get;\n\nuse serde::{Deserialize, Serialize};\nuse time::OffsetDate"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/http/user.rs",
    "chars": 2761,
    "preview": "use axum::http::StatusCode;\nuse axum::{routing::post, Extension, Json, Router};\nuse rand::Rng;\nuse regex::Regex;\nuse std"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/lib.rs",
    "chars": 29,
    "preview": "pub mod http;\n\nmod password;\n"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/main.rs",
    "chars": 557,
    "preview": "use anyhow::Context;\nuse sqlx::postgres::PgPoolOptions;\n\n#[tokio::main]\nasync fn main() -> anyhow::Result<()> {\n    let "
  },
  {
    "path": "examples/postgres/axum-social-with-tests/src/password.rs",
    "chars": 1143,
    "preview": "use anyhow::{anyhow, Context};\nuse tokio::task;\n\nuse argon2::password_hash::SaltString;\nuse argon2::{password_hash, Argo"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/comment.rs",
    "chars": 4526,
    "preview": "use sqlx::PgPool;\n\nuse sqlx_example_postgres_axum_social::http;\n\nuse axum::http::{Request, StatusCode};\nuse tower::Servi"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/common.rs",
    "chars": 2042,
    "preview": "// This is imported by different tests that use different functions.\n#![allow(dead_code)]\n\nuse axum::body::{Body, BoxBod"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/fixtures/comments.sql",
    "chars": 708,
    "preview": "INSERT INTO public.comment (comment_id, post_id, user_id, content, created_at)\nVALUES\n    -- from: bob\n    ('3a86b8f8-82"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/fixtures/posts.sql",
    "chars": 409,
    "preview": "INSERT INTO public.post (post_id, user_id, content, created_at)\nVALUES\n    -- from: alice\n    ('d9ca2672-24c5-4442-b32f-"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/fixtures/users.sql",
    "chars": 498,
    "preview": "INSERT INTO public.\"user\" (user_id, username, password_hash)\nVALUES\n    -- username: \"alice\"; password: \"rustacean since"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/post.rs",
    "chars": 3424,
    "preview": "use sqlx::PgPool;\n\nuse sqlx_example_postgres_axum_social::http;\n\nuse axum::http::{Request, StatusCode};\nuse tower::Servi"
  },
  {
    "path": "examples/postgres/axum-social-with-tests/tests/user.rs",
    "chars": 2328,
    "preview": "use sqlx::PgPool;\n\nuse sqlx_example_postgres_axum_social::http;\n\nuse axum::http::{Request, StatusCode};\nuse tower::Servi"
  },
  {
    "path": "examples/postgres/chat/Cargo.toml",
    "chars": 350,
    "preview": "[package]\nname = \"sqlx-example-postgres-chat\"\nversion = \"0.1.0\"\nedition = \"2021\"\nworkspace = \"../../../\"\n\n[dependencies]"
  },
  {
    "path": "examples/postgres/chat/README.md",
    "chars": 482,
    "preview": "# Chat Example\n\nNote: this example has an interactive TUI which is not trivial to test automatically,\nso our CI currentl"
  },
  {
    "path": "examples/postgres/chat/src/main.rs",
    "chars": 5291,
    "preview": "use crossterm::{\n    event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode},\n    execute,\n    terminal::"
  },
  {
    "path": "examples/postgres/files/Cargo.toml",
    "chars": 381,
    "preview": "[package]\nname = \"sqlx-example-postgres-files\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n# See more keys and their definitions"
  },
  {
    "path": "examples/postgres/files/README.md",
    "chars": 516,
    "preview": "# Query files Example\n\n## Description\n\nThis example demonstrates storing external files to use for querying data.\nEncaps"
  },
  {
    "path": "examples/postgres/files/migrations/20220712221654_files.sql",
    "chars": 305,
    "preview": "CREATE TABLE IF NOT EXISTS users\n(\n    id       BIGSERIAL PRIMARY KEY,\n    username TEXT NOT NULL\n);\n\nCREATE TABLE IF NO"
  },
  {
    "path": "examples/postgres/files/queries/insert_seed_data.sql",
    "chars": 555,
    "preview": "-- seed some data to work with\nWITH inserted_users_cte AS (\n    INSERT INTO users (username)\n        VALUES ('user1'),\n "
  },
  {
    "path": "examples/postgres/files/queries/list_all_posts.sql",
    "chars": 179,
    "preview": "SELECT p.id as \"post_id\",\n       p.title,\n       p.body,\n       u.id as \"author_id\",\n       u.username as \"author_userna"
  },
  {
    "path": "examples/postgres/files/src/main.rs",
    "chars": 1331,
    "preview": "use sqlx::{query_file, query_file_as, FromRow, PgPool};\nuse std::fmt::{Display, Formatter};\n\n#[derive(FromRow)]\nstruct P"
  },
  {
    "path": "examples/postgres/json/Cargo.toml",
    "chars": 410,
    "preview": "[package]\nname = \"sqlx-example-postgres-json\"\nversion = \"0.1.0\"\nedition = \"2021\"\nworkspace = \"../../../\"\n\n[dependencies]"
  },
  {
    "path": "examples/postgres/json/README.md",
    "chars": 515,
    "preview": "# JSON Example\n\n## Setup\n\n1. Declare the database URL\n\n    ```\n    export DATABASE_URL=\"postgres://postgres:password@loc"
  },
  {
    "path": "examples/postgres/json/migrations/20200824190010_json.sql",
    "chars": 99,
    "preview": "CREATE TABLE IF NOT EXISTS people\n(\n    id     BIGSERIAL PRIMARY KEY,\n    person JSONB NOT NULL\n);\n"
  },
  {
    "path": "examples/postgres/json/src/main.rs",
    "chars": 2009,
    "preview": "use clap::{Parser, Subcommand};\nuse serde::{Deserialize, Serialize};\nuse serde_json::{Map, Value};\nuse sqlx::postgres::P"
  },
  {
    "path": "examples/postgres/listen/Cargo.toml",
    "chars": 340,
    "preview": "[package]\nname = \"sqlx-example-postgres-listen\"\nversion = \"0.1.0\"\nedition = \"2021\"\nworkspace = \"../../../\"\n\n[dependencie"
  },
  {
    "path": "examples/postgres/listen/README.md",
    "chars": 473,
    "preview": "Postgres LISTEN/NOTIFY\n======================\n\n## Usage\n\nDeclare the database URL. This example does not include any rea"
  },
  {
    "path": "examples/postgres/listen/src/main.rs",
    "chars": 3303,
    "preview": "use futures_util::TryStreamExt;\nuse sqlx::postgres::PgListener;\nuse sqlx::{Executor, PgPool};\nuse std::pin::pin;\nuse std"
  },
  {
    "path": "examples/postgres/mockable-todos/Cargo.toml",
    "chars": 404,
    "preview": "[package]\nname = \"sqlx-example-postgres-mockable-todos\"\nversion = \"0.1.0\"\nedition = \"2021\"\nworkspace = \"../../../\"\n\n[dep"
  },
  {
    "path": "examples/postgres/mockable-todos/README.md",
    "chars": 1006,
    "preview": "# Mockable TODOs Example\n\n## Description\n\nThis example is based on the ideas in [this blog post](https://medium.com/bett"
  },
  {
    "path": "examples/postgres/mockable-todos/docker-compose.yml",
    "chars": 322,
    "preview": "version: \"3\"\n\nservices:\n  database:\n    image: \"postgres\"\n    ports:\n      - \"5432:5432\"\n    restart: always\n    environ"
  },
  {
    "path": "examples/postgres/mockable-todos/migrations/20200718111257_todos.sql",
    "chars": 158,
    "preview": "CREATE TABLE IF NOT EXISTS todos\n(\n    id          BIGSERIAL PRIMARY KEY,\n    description TEXT    NOT NULL,\n    done    "
  },
  {
    "path": "examples/postgres/mockable-todos/src/main.rs",
    "chars": 4014,
    "preview": "use async_trait::async_trait;\nuse clap::{Parser, Subcommand};\nuse sqlx::postgres::PgPool;\nuse std::{env, io::Write, sync"
  },
  {
    "path": "examples/postgres/multi-database/Cargo.toml",
    "chars": 785,
    "preview": "[package]\nname = \"sqlx-example-postgres-multi-database\"\nversion.workspace = true\nlicense.workspace = true\nedition.worksp"
  },
  {
    "path": "examples/postgres/multi-database/README.md",
    "chars": 2509,
    "preview": "# Using Multiple Databases with `sqlx.toml`\n\nThis example project involves three crates, each owning a different schema "
  },
  {
    "path": "examples/postgres/multi-database/accounts/Cargo.toml",
    "chars": 643,
    "preview": "[package]\nname = \"sqlx-example-postgres-multi-database-accounts\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nsqlx"
  },
  {
    "path": "examples/postgres/multi-database/accounts/migrations/01_setup.sql",
    "chars": 900,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/multi-database/accounts/migrations/02_account.sql",
    "chars": 295,
    "preview": "create table account\n(\n    account_id    uuid primary key     default gen_random_uuid(),\n    email         text unique n"
  },
  {
    "path": "examples/postgres/multi-database/accounts/migrations/03_session.sql",
    "chars": 217,
    "preview": "create table session\n(\n    session_token text primary key, -- random alphanumeric string\n    account_id    uuid        n"
  },
  {
    "path": "examples/postgres/multi-database/accounts/sqlx.toml",
    "chars": 305,
    "preview": "[common]\ndatabase-url-var = \"ACCOUNTS_DATABASE_URL\"\n\n[macros.table-overrides.'account']\n'account_id' = \"crate::AccountId"
  },
  {
    "path": "examples/postgres/multi-database/accounts/src/lib.rs",
    "chars": 9450,
    "preview": "use argon2::{password_hash, Argon2, PasswordHasher, PasswordVerifier};\nuse password_hash::PasswordHashString;\nuse rand::"
  },
  {
    "path": "examples/postgres/multi-database/payments/Cargo.toml",
    "chars": 455,
    "preview": "[package]\nname = \"sqlx-example-postgres-multi-database-payments\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\n\nsql"
  },
  {
    "path": "examples/postgres/multi-database/payments/migrations/01_setup.sql",
    "chars": 892,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/multi-database/payments/migrations/02_payment.sql",
    "chars": 2946,
    "preview": "-- `payments::PaymentStatus`\n--\n-- Historically at LaunchBadge we preferred not to define enums on the database side bec"
  },
  {
    "path": "examples/postgres/multi-database/payments/sqlx.toml",
    "chars": 226,
    "preview": "[common]\ndatabase-url-var = \"PAYMENTS_DATABASE_URL\"\n\n[macros.table-overrides.'payment']\n'payment_id' = \"crate::PaymentId"
  },
  {
    "path": "examples/postgres/multi-database/payments/src/lib.rs",
    "chars": 4585,
    "preview": "use accounts::{AccountId, AccountsManager};\nuse sqlx::postgres::{PgConnectOptions, PgPoolOptions};\nuse sqlx::{Acquire, P"
  },
  {
    "path": "examples/postgres/multi-database/sqlx.toml",
    "chars": 111,
    "preview": "[migrate]\n# Move `migrations/` to under `src/` to separate it from subcrates.\nmigrations-dir = \"src/migrations\""
  },
  {
    "path": "examples/postgres/multi-database/src/main.rs",
    "chars": 4312,
    "preview": "use accounts::AccountsManager;\nuse color_eyre::eyre;\nuse color_eyre::eyre::{Context, OptionExt};\nuse payments::PaymentsM"
  },
  {
    "path": "examples/postgres/multi-database/src/migrations/01_setup.sql",
    "chars": 900,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/multi-database/src/migrations/02_purchase.sql",
    "chars": 325,
    "preview": "create table purchase\n(\n    purchase_id uuid primary key     default gen_random_uuid(),\n    account_id  uuid        not "
  },
  {
    "path": "examples/postgres/multi-tenant/Cargo.toml",
    "chars": 779,
    "preview": "[package]\nname = \"sqlx-example-postgres-multi-tenant\"\nversion.workspace = true\nlicense.workspace = true\nedition.workspac"
  },
  {
    "path": "examples/postgres/multi-tenant/README.md",
    "chars": 2322,
    "preview": "# Multi-tenant Databases with `sqlx.toml`\n\nThis example project involves three crates, each owning a different schema in"
  },
  {
    "path": "examples/postgres/multi-tenant/accounts/Cargo.toml",
    "chars": 681,
    "preview": "[package]\nname = \"sqlx-example-postgres-multi-tenant-accounts\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\ntokio "
  },
  {
    "path": "examples/postgres/multi-tenant/accounts/migrations/01_setup.sql",
    "chars": 936,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/multi-tenant/accounts/migrations/02_account.sql",
    "chars": 322,
    "preview": "create table accounts.account\n(\n    account_id    uuid primary key     default gen_random_uuid(),\n    email         text"
  },
  {
    "path": "examples/postgres/multi-tenant/accounts/migrations/03_session.sql",
    "chars": 235,
    "preview": "create table accounts.session\n(\n    session_token text primary key, -- random alphanumeric string\n    account_id    uuid"
  },
  {
    "path": "examples/postgres/multi-tenant/accounts/sqlx.toml",
    "chars": 352,
    "preview": "[migrate]\ncreate-schemas = [\"accounts\"]\ntable-name = \"accounts._sqlx_migrations\"\n\n[macros.table-overrides.'accounts.acco"
  },
  {
    "path": "examples/postgres/multi-tenant/accounts/src/lib.rs",
    "chars": 9267,
    "preview": "use argon2::{password_hash, Argon2, PasswordHasher, PasswordVerifier};\nuse password_hash::PasswordHashString;\nuse rand::"
  },
  {
    "path": "examples/postgres/multi-tenant/payments/Cargo.toml",
    "chars": 490,
    "preview": "[package]\nname = \"sqlx-example-postgres-multi-tenant-payments\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\n\nrust_"
  },
  {
    "path": "examples/postgres/multi-tenant/payments/migrations/01_setup.sql",
    "chars": 928,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/multi-tenant/payments/migrations/02_payment.sql",
    "chars": 3052,
    "preview": "-- `payments::PaymentStatus`\n--\n-- Historically at LaunchBadge we preferred not to define enums on the database side bec"
  },
  {
    "path": "examples/postgres/multi-tenant/payments/sqlx.toml",
    "chars": 273,
    "preview": "[migrate]\ncreate-schemas = [\"payments\"]\ntable-name = \"payments._sqlx_migrations\"\n\n[macros.table-overrides.'payments.paym"
  },
  {
    "path": "examples/postgres/multi-tenant/payments/src/lib.rs",
    "chars": 3978,
    "preview": "use accounts::AccountId;\nuse sqlx::{Acquire, PgConnection, Postgres};\nuse time::OffsetDateTime;\nuse uuid::Uuid;\n\n#[deriv"
  },
  {
    "path": "examples/postgres/multi-tenant/sqlx.toml",
    "chars": 111,
    "preview": "[migrate]\n# Move `migrations/` to under `src/` to separate it from subcrates.\nmigrations-dir = \"src/migrations\""
  },
  {
    "path": "examples/postgres/multi-tenant/src/main.rs",
    "chars": 3980,
    "preview": "use accounts::AccountsManager;\nuse color_eyre::eyre;\nuse color_eyre::eyre::{Context, OptionExt};\nuse rand::distributions"
  },
  {
    "path": "examples/postgres/multi-tenant/src/migrations/01_setup.sql",
    "chars": 900,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/multi-tenant/src/migrations/02_purchase.sql",
    "chars": 407,
    "preview": "create table purchase\n(\n    purchase_id uuid primary key     default gen_random_uuid(),\n    account_id  uuid        not "
  },
  {
    "path": "examples/postgres/preferred-crates/Cargo.toml",
    "chars": 915,
    "preview": "[package]\nname = \"sqlx-example-postgres-preferred-crates\"\nversion.workspace = true\nlicense.workspace = true\nedition.work"
  },
  {
    "path": "examples/postgres/preferred-crates/README.md",
    "chars": 3320,
    "preview": "# Usage of `macros.preferred-crates` in `sqlx.toml`\n\n## The Problem\n\nSQLx has many optional features that enable integra"
  },
  {
    "path": "examples/postgres/preferred-crates/sqlx.toml",
    "chars": 295,
    "preview": "[migrate]\n# Move `migrations/` to under `src/` to separate it from subcrates.\nmigrations-dir = \"src/migrations\"\n\n[macros"
  },
  {
    "path": "examples/postgres/preferred-crates/src/main.rs",
    "chars": 2089,
    "preview": "use anyhow::Context;\nuse chrono::{DateTime, Utc};\nuse sqlx::{Connection, PgConnection};\nuse std::time::Duration;\nuse uui"
  },
  {
    "path": "examples/postgres/preferred-crates/src/migrations/01_setup.sql",
    "chars": 900,
    "preview": "-- We try to ensure every table has `created_at` and `updated_at` columns, which can help immensely with debugging\n-- an"
  },
  {
    "path": "examples/postgres/preferred-crates/src/migrations/02_users.sql",
    "chars": 320,
    "preview": "create table users(\n    id uuid primary key default gen_random_uuid(),\n    username text not null,\n    password_hash tex"
  },
  {
    "path": "examples/postgres/preferred-crates/uses-rust-decimal/Cargo.toml",
    "chars": 458,
    "preview": "[package]\nname = \"sqlx-example-postgres-preferred-crates-uses-rust-decimal\"\nversion.workspace = true\nlicense.workspace ="
  },
  {
    "path": "examples/postgres/preferred-crates/uses-rust-decimal/src/lib.rs",
    "chars": 1394,
    "preview": "use chrono::{DateTime, Utc};\nuse sqlx::PgExecutor;\n\n#[derive(sqlx::FromRow, Debug)]\npub struct Purchase {\n    pub id: Uu"
  },
  {
    "path": "examples/postgres/preferred-crates/uses-time/Cargo.toml",
    "chars": 431,
    "preview": "[package]\nname = \"sqlx-example-postgres-preferred-crates-uses-time\"\nversion.workspace = true\nlicense.workspace = true\ned"
  },
  {
    "path": "examples/postgres/preferred-crates/uses-time/src/lib.rs",
    "chars": 1939,
    "preview": "use serde::de::DeserializeOwned;\nuse serde::Serialize;\nuse sqlx::PgExecutor;\nuse std::time::Duration;\nuse time::OffsetDa"
  },
  {
    "path": "examples/postgres/todos/Cargo.toml",
    "chars": 355,
    "preview": "[package]\nname = \"sqlx-example-postgres-todos\"\nversion = \"0.1.0\"\nedition = \"2018\"\nworkspace = \"../../../\"\n\n[dependencies"
  },
  {
    "path": "examples/postgres/todos/README.md",
    "chars": 427,
    "preview": "# TODOs Example\n\n## Setup\n\n1. Declare the database URL\n\n    ```\n    export DATABASE_URL=\"postgres://postgres:password@lo"
  },
  {
    "path": "examples/postgres/todos/migrations/20200718111257_todos.sql",
    "chars": 158,
    "preview": "CREATE TABLE IF NOT EXISTS todos\n(\n    id          BIGSERIAL PRIMARY KEY,\n    description TEXT    NOT NULL,\n    done    "
  },
  {
    "path": "examples/postgres/todos/src/main.rs",
    "chars": 2087,
    "preview": "use clap::{Parser, Subcommand};\nuse sqlx::postgres::PgPool;\nuse std::env;\n\n#[derive(Parser)]\nstruct Args {\n    #[command"
  },
  {
    "path": "examples/postgres/transaction/Cargo.toml",
    "chars": 292,
    "preview": "[package]\nname = \"sqlx-example-postgres-transaction\"\nversion = \"0.1.0\"\nedition = \"2021\"\nworkspace = \"../../../\"\n\n[depend"
  },
  {
    "path": "examples/postgres/transaction/README.md",
    "chars": 315,
    "preview": "# Postgres Transaction Example\n\nA simple example demonstrating how to obtain and roll back a transaction with postgres.\n"
  },
  {
    "path": "examples/postgres/transaction/migrations/20200718111257_todos.sql",
    "chars": 158,
    "preview": "CREATE TABLE IF NOT EXISTS todos\n(\n    id          BIGSERIAL PRIMARY KEY,\n    description TEXT    NOT NULL,\n    done    "
  },
  {
    "path": "examples/postgres/transaction/src/main.rs",
    "chars": 2998,
    "preview": "use sqlx::query;\n\nasync fn insert_and_verify(\n    transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,\n    test_id: "
  },
  {
    "path": "examples/sqlite/extension/Cargo.toml",
    "chars": 442,
    "preview": "[package]\nname = \"sqlx-example-sqlite-extension\"\nversion = \"0.1.0\"\nlicense.workspace = true\nedition.workspace = true\nrep"
  },
  {
    "path": "examples/sqlite/extension/download-extension.sh",
    "chars": 473,
    "preview": "#!/bin/bash\n\n# This grabs a pre-compiled version of the extension used in this\n# example, and stores it in a temporary d"
  },
  {
    "path": "examples/sqlite/extension/migrations/20250203094951_addresses.sql",
    "chars": 1158,
    "preview": "create table addresses (address text, family integer);\n\n-- The `ipfamily` function is provided by the\n-- [ipaddr](https:"
  },
  {
    "path": "examples/sqlite/extension/sqlx.toml",
    "chars": 665,
    "preview": "[common.drivers.sqlite]\n# Including the full path to the extension is somewhat unusual,\n# because normally an extension "
  },
  {
    "path": "examples/sqlite/extension/src/main.rs",
    "chars": 1795,
    "preview": "use std::str::FromStr;\n\nuse sqlx::{\n    query,\n    sqlite::{SqliteConnectOptions, SqlitePool},\n};\n\n#[tokio::main(flavor "
  },
  {
    "path": "examples/sqlite/todos/Cargo.toml",
    "chars": 332,
    "preview": "[package]\nname = \"sqlx-example-sqlite-todos\"\nversion = \"0.1.0\"\nedition = \"2018\"\nworkspace = \"../../../\"\n\n[dependencies]\n"
  },
  {
    "path": "examples/sqlite/todos/README.md",
    "chars": 398,
    "preview": "# TODOs Example\n\n## Setup\n\n1. Declare the database URL\n\n    ```\n    export DATABASE_URL=\"sqlite:todos.db\"\n    ```\n\n2. Cr"
  },
  {
    "path": "examples/sqlite/todos/migrations/20200718111257_todos.sql",
    "chars": 185,
    "preview": "CREATE TABLE IF NOT EXISTS todos\n(\n    id          INTEGER PRIMARY KEY NOT NULL,\n    description TEXT                NOT"
  },
  {
    "path": "examples/sqlite/todos/src/main.rs",
    "chars": 2214,
    "preview": "use clap::{Parser, Subcommand};\nuse sqlx::sqlite::SqlitePool;\nuse std::env;\n\n#[derive(Parser)]\nstruct Args {\n    #[comma"
  },
  {
    "path": "examples/x.py",
    "chars": 2135,
    "preview": "#!/usr/bin/env python3\n\nimport sys\nimport os\nfrom os import path\n\n# base dir of sqlx workspace\ndir_workspace = path.dirn"
  },
  {
    "path": "gen-changelog.sh",
    "chars": 3170,
    "preview": "# Requires Github CLI and `jq`\n# Usage: `./gen-changelog.sh YYYY-mm-dd`\n# Generates changelog entries for all PRs merged"
  },
  {
    "path": "rust-toolchain.toml",
    "chars": 112,
    "preview": "# Note: should NOT increase during a minor/patch release cycle\n[toolchain]\nchannel = \"1.86\"\nprofile = \"minimal\"\n"
  },
  {
    "path": "sqlx-cli/Cargo.toml",
    "chars": 2180,
    "preview": "[package]\nname = \"sqlx-cli\"\nversion.workspace = true\ndescription = \"Command-line utility for SQLx, the Rust SQL toolkit."
  },
  {
    "path": "sqlx-cli/README.md",
    "chars": 4399,
    "preview": "# SQLx CLI\n\nSQLx's associated command-line utility for managing databases, migrations, and enabling \"offline\"\nmode with "
  },
  {
    "path": "sqlx-cli/src/bin/cargo-sqlx.rs",
    "chars": 569,
    "preview": "use clap::Parser;\nuse console::style;\nuse sqlx_cli::Opt;\nuse std::process;\n\n// cargo invokes this binary as `cargo-sqlx "
  },
  {
    "path": "sqlx-cli/src/bin/sqlx.rs",
    "chars": 434,
    "preview": "use clap::Parser;\nuse console::style;\nuse sqlx_cli::Opt;\n\n#[tokio::main]\nasync fn main() {\n    // Checks for `--no-doten"
  },
  {
    "path": "sqlx-cli/src/completions.rs",
    "chars": 206,
    "preview": "use std::io;\n\nuse clap::CommandFactory;\nuse clap_complete::{generate, Shell};\n\nuse crate::opt::Command;\n\npub fn run(shel"
  },
  {
    "path": "sqlx-cli/src/database.rs",
    "chars": 3405,
    "preview": "use crate::opt::{ConnectOpts, MigrationSourceOpt};\nuse crate::{migrate, Config};\nuse console::{style, Term};\nuse dialogu"
  },
  {
    "path": "sqlx-cli/src/lib.rs",
    "chars": 8000,
    "preview": "//! # SQLx CLI\n//!\n//! Command-line utility for the [SQLx](https://github.com/launchbadge/sqlx) ecosystem.\n//!\n//! This "
  },
  {
    "path": "sqlx-cli/src/metadata.rs",
    "chars": 6156,
    "preview": "use std::{\n    collections::{btree_map, BTreeMap, BTreeSet},\n    ffi::OsStr,\n    path::{Path, PathBuf},\n    process::Com"
  },
  {
    "path": "sqlx-cli/src/migrate.rs",
    "chars": 13679,
    "preview": "use crate::config::Config;\nuse crate::opt::{AddMigrationOpts, ConnectOpts, MigrationSourceOpt};\nuse anyhow::{bail, Conte"
  },
  {
    "path": "sqlx-cli/src/opt.rs",
    "chars": 18397,
    "preview": "use crate::config::migrate::{DefaultMigrationType, DefaultVersioning};\nuse crate::config::Config;\nuse anyhow::Context;\nu"
  },
  {
    "path": "sqlx-cli/src/prepare.rs",
    "chars": 13302,
    "preview": "use std::collections::{BTreeSet, HashSet};\nuse std::env;\nuse std::ffi::{OsStr, OsString};\nuse std::fs;\nuse std::path::{P"
  },
  {
    "path": "sqlx-cli/tests/add.rs",
    "chars": 11992,
    "preview": "use anyhow::Context;\nuse assert_cmd::cargo_bin_cmd;\nuse std::cmp::Ordering;\nuse std::fs::read_dir;\nuse std::ops::Index;\n"
  },
  {
    "path": "sqlx-cli/tests/assets/config_default_type_reversible.toml",
    "chars": 48,
    "preview": "[migrate.defaults]\nmigration-type = \"reversible\""
  },
  {
    "path": "sqlx-cli/tests/assets/config_default_versioning_sequential.toml",
    "chars": 54,
    "preview": "[migrate.defaults]\nmigration-versioning = \"sequential\""
  },
  {
    "path": "sqlx-cli/tests/assets/config_default_versioning_timestamp.toml",
    "chars": 53,
    "preview": "[migrate.defaults]\nmigration-versioning = \"timestamp\""
  },
  {
    "path": "sqlx-cli/tests/assets/sample_metadata.json",
    "chars": 869147,
    "preview": "{\n  \"packages\": [\n    {\n      \"name\": \"ahash\",\n      \"version\": \"0.7.6\",\n      \"id\": \"ahash 0.7.6 (registry+https://gith"
  },
  {
    "path": "sqlx-cli/tests/common/mod.rs",
    "chars": 3782,
    "preview": "use assert_cmd::{assert::Assert, Command};\n\nuse sqlx::_unstable::config::Config;\nuse sqlx::{migrate::Migrate, Connection"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/BOM/.gitattributes",
    "chars": 18,
    "preview": "*.sql text eol=lf\n"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/BOM/1_user.sql",
    "chars": 153,
    "preview": "create table user\n(\n    -- integer primary keys are the most efficient in SQLite\n    user_id  integer primary key,\n    "
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/BOM/2_post.sql",
    "chars": 309,
    "preview": "create table post\n(\n    post_id    integer primary key,\n    user_id    integer not null references user (user_id),\n    "
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/BOM/3_comment.sql",
    "chars": 329,
    "preview": "create table comment\n(\n    comment_id integer primary key,\n    post_id    integer not null references post (post_id),\n "
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/CRLF/.gitattributes",
    "chars": 20,
    "preview": "*.sql text eol=crlf\n"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/CRLF/1_user.sql",
    "chars": 158,
    "preview": "create table user\r\n(\r\n    -- integer primary keys are the most efficient in SQLite\r\n    user_id  integer primary key,\r\n "
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/CRLF/2_post.sql",
    "chars": 318,
    "preview": "create table post\r\n(\r\n    post_id    integer primary key,\r\n    user_id    integer not null references user (user_id),\r\n "
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/CRLF/3_comment.sql",
    "chars": 338,
    "preview": "create table comment\r\n(\r\n    comment_id integer primary key,\r\n    post_id    integer not null references post (post_id),"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/LF/.gitattributes",
    "chars": 18,
    "preview": "*.sql text eol=lf\n"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/LF/1_user.sql",
    "chars": 152,
    "preview": "create table user\n(\n    -- integer primary keys are the most efficient in SQLite\n    user_id  integer primary key,\n    u"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/LF/2_post.sql",
    "chars": 308,
    "preview": "create table post\n(\n    post_id    integer primary key,\n    user_id    integer not null references user (user_id),\n    c"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/LF/3_comment.sql",
    "chars": 328,
    "preview": "create table comment\n(\n    comment_id integer primary key,\n    post_id    integer not null references post (post_id),\n  "
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/oops-all-tabs/.gitattributes",
    "chars": 18,
    "preview": "*.sql text eol=lf\n"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/oops-all-tabs/1_user.sql",
    "chars": 143,
    "preview": "create table user\n(\n\t-- integer primary keys are the most efficient in SQLite\n\tuser_id  integer primary key,\n\tusername t"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/oops-all-tabs/2_post.sql",
    "chars": 281,
    "preview": "create table post\n(\n\tpost_id\tinteger primary key,\n\tuser_id\tinteger not null references user (user_id),\n\tcontent\ttext\tnot"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/oops-all-tabs/3_comment.sql",
    "chars": 301,
    "preview": "create table comment\n(\n\tcomment_id integer primary key,\n\tpost_id\tinteger not null references post (post_id),\n\tuser_id\tin"
  },
  {
    "path": "sqlx-cli/tests/ignored-chars/sqlx.toml",
    "chars": 418,
    "preview": "[migrate]\n# Ignore common whitespace characters (beware syntactically significant whitespace!)\n# Space, tab, CR, LF, zer"
  },
  {
    "path": "sqlx-cli/tests/migrate.rs",
    "chars": 5891,
    "preview": "mod common;\n\nuse common::TestDatabase;\n\n#[tokio::test]\nasync fn run_reversible_migrations() {\n    let all_migrations: Ve"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230101000000_test1.down.sql",
    "chars": 18,
    "preview": "DROP TABLE test1;\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230101000000_test1.up.sql",
    "chars": 43,
    "preview": "CREATE TABLE test1(x INTEGER PRIMARY KEY);\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230201000000_test2.down.sql",
    "chars": 18,
    "preview": "DROP TABLE test2;\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230201000000_test2.up.sql",
    "chars": 43,
    "preview": "CREATE TABLE test2(x INTEGER PRIMARY KEY);\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230301000000_test3.down.sql",
    "chars": 18,
    "preview": "DROP TABLE test3;\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230301000000_test3.up.sql",
    "chars": 43,
    "preview": "CREATE TABLE test3(x INTEGER PRIMARY KEY);\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230401000000_test4.down.sql",
    "chars": 18,
    "preview": "DROP TABLE test4;\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230401000000_test4.up.sql",
    "chars": 43,
    "preview": "CREATE TABLE test4(x INTEGER PRIMARY KEY);\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230501000000_test5.down.sql",
    "chars": 18,
    "preview": "DROP TABLE test5;\n"
  },
  {
    "path": "sqlx-cli/tests/migrations_reversible/20230501000000_test5.up.sql",
    "chars": 43,
    "preview": "CREATE TABLE test5(x INTEGER PRIMARY KEY);\n"
  },
  {
    "path": "sqlx-core/Cargo.toml",
    "chars": 4328,
    "preview": "[package]\nname = \"sqlx-core\"\ndescription = \"Core of SQLx, the rust SQL toolkit. Not intended to be used directly.\"\nversi"
  },
  {
    "path": "sqlx-core/src/acquire.rs",
    "chars": 4133,
    "preview": "use crate::database::Database;\nuse crate::error::Error;\nuse crate::pool::{MaybePoolConnection, Pool, PoolConnection};\n\nu"
  },
  {
    "path": "sqlx-core/src/any/arguments.rs",
    "chars": 3625,
    "preview": "use crate::any::value::AnyValueKind;\nuse crate::any::{Any, AnyTypeInfoKind};\nuse crate::arguments::Arguments;\nuse crate:"
  },
  {
    "path": "sqlx-core/src/any/column.rs",
    "chars": 598,
    "preview": "use crate::any::{Any, AnyTypeInfo};\nuse crate::column::Column;\nuse crate::ext::ustr::UStr;\n\n#[derive(Debug, Clone)]\npub "
  },
  {
    "path": "sqlx-core/src/any/connection/backend.rs",
    "chars": 4510,
    "preview": "use crate::any::{AnyArguments, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo};\nuse crate::sql_str::SqlStr;\nuse eithe"
  },
  {
    "path": "sqlx-core/src/any/connection/executor.rs",
    "chars": 1980,
    "preview": "use crate::any::{Any, AnyConnection, AnyQueryResult, AnyRow, AnyStatement, AnyTypeInfo};\nuse crate::error::Error;\nuse cr"
  },
  {
    "path": "sqlx-core/src/any/connection/mod.rs",
    "chars": 4226,
    "preview": "use futures_core::future::BoxFuture;\nuse std::future::Future;\n\nuse crate::any::{Any, AnyConnectOptions};\nuse crate::conn"
  },
  {
    "path": "sqlx-core/src/any/database.rs",
    "chars": 1059,
    "preview": "use crate::any::{\n    AnyArgumentBuffer, AnyArguments, AnyColumn, AnyConnection, AnyQueryResult, AnyRow,\n    AnyStatemen"
  },
  {
    "path": "sqlx-core/src/any/driver.rs",
    "chars": 5308,
    "preview": "use crate::any::connection::AnyConnectionBackend;\nuse crate::any::{AnyConnectOptions, AnyConnection};\nuse crate::common:"
  },
  {
    "path": "sqlx-core/src/any/error.rs",
    "chars": 413,
    "preview": "use std::any::type_name;\n\nuse crate::any::type_info::AnyTypeInfo;\nuse crate::any::Any;\nuse crate::error::BoxDynError;\nus"
  },
  {
    "path": "sqlx-core/src/any/kind.rs",
    "chars": 2585,
    "preview": "// Annoying how deprecation warnings trigger in the same module as the deprecated item.\n#![allow(deprecated)]\n// Cargo f"
  },
  {
    "path": "sqlx-core/src/any/migrate.rs",
    "chars": 2992,
    "preview": "use crate::any::driver;\nuse crate::any::{Any, AnyConnection};\nuse crate::error::Error;\nuse crate::migrate::{AppliedMigra"
  },
  {
    "path": "sqlx-core/src/any/mod.rs",
    "chars": 2461,
    "preview": "//! **SEE DOCUMENTATION BEFORE USE**. Generic database driver with the specific driver selected at runtime.\n//!\n//! The "
  },
  {
    "path": "sqlx-core/src/any/options.rs",
    "chars": 1823,
    "preview": "use crate::any::AnyConnection;\nuse crate::connection::{ConnectOptions, LogSettings};\nuse crate::error::Error;\nuse log::L"
  },
  {
    "path": "sqlx-core/src/any/query_result.rs",
    "chars": 663,
    "preview": "use std::iter::{Extend, IntoIterator};\n\n#[derive(Debug, Default)]\npub struct AnyQueryResult {\n    #[doc(hidden)]\n    pub"
  },
  {
    "path": "sqlx-core/src/any/row.rs",
    "chars": 5083,
    "preview": "use crate::any::error::mismatched_types;\nuse crate::any::{Any, AnyColumn, AnyTypeInfo, AnyTypeInfoKind, AnyValue, AnyVal"
  },
  {
    "path": "sqlx-core/src/any/statement.rs",
    "chars": 2541,
    "preview": "use crate::any::{Any, AnyArguments, AnyColumn, AnyTypeInfo};\nuse crate::column::ColumnIndex;\nuse crate::database::Databa"
  },
  {
    "path": "sqlx-core/src/any/transaction.rs",
    "chars": 1006,
    "preview": "use std::future::Future;\n\nuse crate::any::{Any, AnyConnection};\nuse crate::database::Database;\nuse crate::error::Error;\n"
  },
  {
    "path": "sqlx-core/src/any/type_info.rs",
    "chars": 1214,
    "preview": "use std::fmt::{self, Display, Formatter};\n\nuse crate::type_info::TypeInfo;\n\nuse AnyTypeInfoKind::*;\n\n#[derive(Debug, Clo"
  },
  {
    "path": "sqlx-core/src/any/types/blob.rs",
    "chars": 1573,
    "preview": "use crate::any::{Any, AnyTypeInfo, AnyTypeInfoKind, AnyValueKind};\nuse crate::database::Database;\nuse crate::decode::Dec"
  },
  {
    "path": "sqlx-core/src/any/types/bool.rs",
    "chars": 854,
    "preview": "use crate::any::{Any, AnyTypeInfo, AnyTypeInfoKind, AnyValueKind};\nuse crate::database::Database;\nuse crate::decode::Dec"
  },
  {
    "path": "sqlx-core/src/any/types/float.rs",
    "chars": 1552,
    "preview": "use crate::any::{Any, AnyArgumentBuffer, AnyTypeInfo, AnyTypeInfoKind, AnyValueKind, AnyValueRef};\nuse crate::database::"
  },
  {
    "path": "sqlx-core/src/any/types/int.rs",
    "chars": 2119,
    "preview": "use crate::any::{Any, AnyTypeInfo, AnyTypeInfoKind, AnyValueKind};\nuse crate::database::Database;\nuse crate::decode::Dec"
  },
  {
    "path": "sqlx-core/src/any/types/mod.rs",
    "chars": 1757,
    "preview": "//! Conversions between Rust and standard **SQL** types.\n//!\n//! # Types\n//!\n//! | Rust type                            "
  },
  {
    "path": "sqlx-core/src/any/types/str.rs",
    "chars": 1937,
    "preview": "use crate::any::types::str;\nuse crate::any::{Any, AnyTypeInfo, AnyTypeInfoKind, AnyValueKind};\nuse crate::database::Data"
  }
]

// ... and 490 more files (download for full content)

About this extraction

This page contains the full source code of the launchbadge/sqlx GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 690 files (3.7 MB), approximately 1.0M tokens, and a symbol index with 5028 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!