Skip to content

Commit

Permalink
WIP feat: reintroduce Pool
Browse files Browse the repository at this point in the history
Signed-off-by: Austin Bonander <austin@launchbadge.com>
  • Loading branch information
abonander committed Apr 30, 2021
1 parent e7664d8 commit e516bf6
Show file tree
Hide file tree
Showing 12 changed files with 1,544 additions and 5 deletions.
27 changes: 27 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions script/enforce-new-mod-style.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bash

# This script scans the project for `mod.rs` files and exits with a nonzero code if it finds any.
#
# You can also call it with `--fix` to replace any `mod.rs` files with their 2018 edition equivalents.
# The new files will be staged for commit for convenience.

FILES=$(find ./ -name mod.rs -print)

if [[ -z $FILES ]]; then
exit 0
fi

if [ "$1" != "--fix" ]; then
echo 'This project uses the Rust 2018 module style. mod.rs files are forbidden.'
echo "Execute \`$0 --fix\` to replace these with their 2018 equivalents and stage for commit."
echo 'Found mod.rs files:'
echo "$FILES"
exit 1
fi

echo 'Fixing Rust 2018 Module Style'

while read -r file; do
dest="$(dirname $file).rs"
echo "$file -> $dest"
mv $file $dest
git add $dest
done <<< $FILES

29 changes: 24 additions & 5 deletions sqlx-core/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ pub enum Error {
/// The database URL is malformed or contains invalid or unsupported
/// values for one or more options; a value of [`ConnectOptions`] failed
/// to be parsed.
ConnectOptions { message: Cow<'static, str>, source: Option<Box<dyn StdError + Send + Sync>> },
ConnectOptions {
message: Cow<'static, str>,
source: Option<Box<dyn StdError + Send + Sync>>,
},

/// An error that was returned from the database, normally from the
/// execution of a SQL command.
Expand Down Expand Up @@ -65,26 +68,40 @@ pub enum Error {
///
Closed,

AcquireTimedOut,

/// An error occurred decoding a SQL value from the database.
Decode(DecodeError),

/// An error occurred encoding a value to be sent to the database.
Encode(EncodeError),

/// An attempt to access a column by index past the end of the row.
ColumnIndexOutOfBounds { index: usize, len: usize },
ColumnIndexOutOfBounds {
index: usize,
len: usize,
},

/// An attempt to access a column by name where no such column is
/// present in the row.
ColumnNotFound { name: Box<str> },
ColumnNotFound {
name: Box<str>,
},

/// An error occurred decoding a SQL value of a specific column
/// from the database.
ColumnDecode { column_index: usize, column_name: Box<str>, source: DecodeError },
ColumnDecode {
column_index: usize,
column_name: Box<str>,
source: DecodeError,
},

/// An error occurred encoding a value for a specific parameter to
/// be sent to the database.
ParameterEncode { parameter: Either<usize, Box<str>>, source: EncodeError },
ParameterEncode {
parameter: Either<usize, Box<str>>,
source: EncodeError,
},
}

impl Error {
Expand Down Expand Up @@ -144,6 +161,8 @@ impl Display for Error {

Self::Closed => f.write_str("Connection or pool is closed"),

Self::AcquireTimedOut => f.write_str("Timeout on acquiring a connection from Pool"),

Self::Decode(error) => {
write!(f, "Decode: {}", error)
}
Expand Down
11 changes: 11 additions & 0 deletions sqlx-core/src/runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ mod tokio_;
pub use actix_::Actix;
#[cfg(feature = "async-std")]
pub use async_std_::AsyncStd;
use std::future::Future;
use std::time::Duration;
#[cfg(feature = "tokio")]
pub use tokio_::Tokio;

Expand Down Expand Up @@ -82,6 +84,15 @@ pub trait Runtime: 'static + Send + Sync + Sized + Debug {
fn connect_unix_async(path: &Path) -> BoxFuture<'_, io::Result<Self::UnixStream>>
where
Self: Async;

#[doc(hidden)]
#[cfg(all(unix, feature = "async"))]
fn timeout_async<'a, F: Future + Send + 'a>(
fut: F,
timeout: Duration,
) -> BoxFuture<'a, Option<F::Output>>
where
Self: Async;
}

/// Marks a [`Runtime`] as being capable of handling asynchronous execution.
Expand Down
10 changes: 10 additions & 0 deletions sqlx-core/src/runtime/tokio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ use futures_util::{AsyncReadExt, AsyncWriteExt, FutureExt, TryFutureExt};

use crate::io::Stream;
use crate::{Async, Runtime};
use std::future::Future;
use std::time::{Duration, Instant};

/// Provides [`Runtime`] for [**Tokio**](https://tokio.rs). Supports only non-blocking operation.
///
Expand Down Expand Up @@ -55,6 +57,14 @@ impl Runtime for Tokio {
fn connect_unix_async(path: &Path) -> BoxFuture<'_, io::Result<Self::UnixStream>> {
UnixStream::connect(path).map_ok(Compat::new).boxed()
}

#[doc(hidden)]
fn timeout_async<'a, F: Future + Send + 'a>(
fut: F,
timeout: Duration,
) -> BoxFuture<'a, Option<F::Output>> {
Box::pin(_tokio::time::timeout(timeout.into(), fut).map(Result::ok))
}
}

impl Async for Tokio {}
Expand Down
10 changes: 10 additions & 0 deletions sqlx/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ async-std = ["async", "sqlx-core/async-std"]
actix = ["async", "sqlx-core/actix"]
tokio = ["async", "sqlx-core/tokio"]

# Connection Pool
pool = ["crossbeam-queue", "parking_lot"]

# MySQL
mysql = ["sqlx-mysql"]
mysql-async = ["async", "mysql", "sqlx-mysql/async"]
Expand All @@ -38,8 +41,15 @@ postgres = ["sqlx-postgres"]
postgres-async = ["async", "postgres", "sqlx-postgres/async"]
postgres-blocking = ["blocking", "postgres", "sqlx-postgres/blocking"]


[dependencies]
sqlx-core = { version = "0.6.0-pre", path = "../sqlx-core" }
sqlx-mysql = { version = "0.6.0-pre", path = "../sqlx-mysql", optional = true }
sqlx-postgres = { version = "0.6.0-pre", path = "../sqlx-postgres", optional = true }
futures-util = { version = "0.3", optional = true, features = ["io"] }

crossbeam-queue = { version = "0.3.1", optional = true }
parking_lot = { version = "0.11", optional = true }

[dev-dependencies]
futures = "0.3.5"
3 changes: 3 additions & 0 deletions sqlx/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@
#[cfg(feature = "blocking")]
pub mod blocking;

#[cfg(feature = "pool")]
pub mod pool;

mod query;
mod query_as;
mod runtime;
Expand Down
Loading

0 comments on commit e516bf6

Please sign in to comment.