diff --git a/README.md b/README.md
index 2619a2d4..e2a637d4 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,7 @@ SQLx is an async, pure Rust† SQL crate featuring compile-time check
* **Type-safe SQL** (if you want it) without DSLs. Use the `query!()` macro to check your SQL and bind parameters at
compile time. (You can still use dynamic SQL queries if you like.)
- * **Database Agnostic**. Support for [PostgreSQL], [MySQL], and [SQLite].
+ * **Database Agnostic**. Support for [PostgreSQL], [MySQL], [SQLite], and [MSSQL].
* **Pure Rust**. The Postgres and MySQL/MariaDB drivers are written in pure Rust using **zero** unsafe†† code.
@@ -77,6 +77,7 @@ with C, those interactions are `unsafe`.
[PostgreSQL]: http://postgresql.org/
[SQLite]: https://sqlite.org/
[MySQL]: https://www.mysql.com/
+[MSSQL]: https://www.microsoft.com/en-us/sql-server
---
@@ -98,6 +99,8 @@ with C, those interactions are `unsafe`.
* Nested transactions with support for save points.
+ * `Any` database driver for changing the database driver at runtime. An `AnyPool` connects to the driver indicated by the URI scheme.
+
## Install
SQLx is compatible with the [`async-std`] and [`tokio`] runtimes.
@@ -110,7 +113,7 @@ SQLx is compatible with the [`async-std`] and [`tokio`] runtimes.
```toml
# Cargo.toml
[dependencies]
-sqlx = "0.3"
+sqlx = "0.4-beta.1"
```
**tokio**
@@ -118,7 +121,7 @@ sqlx = "0.3"
```toml
# Cargo.toml
[dependencies]
-sqlx = { version = "0.3", default-features = false, features = [ "runtime-tokio", "macros" ] }
+sqlx = { version = "0.4-beta.1", default-features = false, features = [ "runtime-tokio", "macros" ] }
```
#### Cargo Feature Flags
@@ -131,8 +134,12 @@ sqlx = { version = "0.3", default-features = false, features = [ "runtime-tokio"
* `mysql`: Add support for the MySQL (and MariaDB) database server.
+ * `mssql`: Add support for the MSSQL database server.
+
* `sqlite`: Add support for the self-contained [SQLite](https://sqlite.org/) database engine.
+ * `any`: Add support for the `Any` database driver, which can proxy to a database driver at runtime.
+
* `uuid`: Add support for UUID (in Postgres).
* `chrono`: Add support for date and time types from `chrono`.
@@ -154,8 +161,8 @@ sqlx = { version = "0.3", default-features = false, features = [ "runtime-tokio"
```rust
use std::env;
-use sqlx::postgres::PgPool;
-// use sqlx::mysql::MySqlPool;
+use sqlx::postgres::PgPoolOptions;
+// use sqlx::mysql::MySqlPoolOptions;
// etc.
#[async_std::main] // or #[tokio::main]
@@ -181,7 +188,7 @@ async fn main() -> Result<(), sqlx::Error> {
A single connection can be established using any of the database connection types and calling `connect()`.
```rust
-use sqlx::Connect;
+use sqlx::Connection;
let conn = SqliteConnection::connect("sqlite::memory:").await?;
```
@@ -190,7 +197,7 @@ Generally, you will want to instead create a connection pool (`sqlx::Pool`) in o
regulate how many server-side connections it's using.
```rust
-let pool = MySqlPool::new("mysql://user:pass@host/database").await?;
+let pool = MySqlPool::connect("mysql://user:pass@host/database").await?;
```
### Querying
@@ -227,12 +234,16 @@ by ordinal or by name with `row.get()`. As the `Row` retains an immutable borrow
The `fetch` query finalizer returns a stream-like type that iterates through the rows in the result sets.
```rust
-let mut cursor = sqlx::query("SELECT * FROM users WHERE email = ?")
+// provides `try_next`
+use futures::TryStreamExt;
+
+let mut rows = sqlx::query("SELECT * FROM users WHERE email = ?")
.bind(email)
.fetch(&mut conn);
-while let Some(row) = cursor.next().await? {
+while let Some(row) = rows.try_next().await? {
// map the row into a user-defined domain type
+ let email: &str = row.try_get("email")?;
}
```