Skip to content
This repository was archived by the owner on Apr 25, 2023. It is now read-only.

chore: sort query params #314

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 57 additions & 55 deletions src/connector/mysql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ impl MysqlUrl {
self.url.port().unwrap_or(3306)
}

/// The connection timeout.
/// The connect timeout.
pub fn connect_timeout(&self) -> Option<Duration> {
self.query_params.connect_timeout
}
Expand Down Expand Up @@ -151,32 +151,22 @@ impl MysqlUrl {
fn parse_query_params(url: &Url) -> Result<MysqlUrlQueryParams, Error> {
let mut ssl_opts = my::SslOpts::default();
ssl_opts = ssl_opts.with_danger_accept_invalid_certs(true);
let mut use_ssl = false;

let mut connect_timeout = Some(Duration::from_secs(5));
let mut connection_limit = None;
let mut use_ssl = false;
let mut pool_timeout = Some(Duration::from_secs(10));

let mut socket = None;
let mut socket_timeout = None;
let mut connect_timeout = Some(Duration::from_secs(5));
let mut pool_timeout = Some(Duration::from_secs(10));
let mut max_connection_lifetime = None;
let mut max_idle_connection_lifetime = Some(Duration::from_secs(300));
let mut prefer_socket = None;

let mut statement_cache_size = 1000;
let mut max_connection_lifetime = None;
let mut max_idle_connection_lifetime = Some(Duration::from_secs(300));

for (k, v) in url.query_pairs() {
match k.as_ref() {
"connection_limit" => {
let as_int: usize = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;

connection_limit = Some(as_int);
}
"statement_cache_size" => {
statement_cache_size = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
}
"sslcert" => {
use_ssl = true;
ssl_opts = ssl_opts.with_root_cert_path(Some(Path::new(&*v).to_path_buf()));
Expand All @@ -189,20 +179,19 @@ impl MysqlUrl {
use_ssl = true;
ssl_opts = ssl_opts.with_password(Some(v.to_string()));
}
"socket" => {
socket = Some(v.replace("(", "").replace(")", ""));
}
"socket_timeout" => {
let as_int = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
socket_timeout = Some(Duration::from_secs(as_int));
}
"prefer_socket" => {
let as_bool = v
.parse::<bool>()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
prefer_socket = Some(as_bool)
"sslaccept" => {
match v.as_ref() {
"strict" => {
ssl_opts = ssl_opts.with_danger_accept_invalid_certs(false);
}
"accept_invalid_certs" => {}
_ => {
tracing::debug!(
message = "Unsupported SSL accept mode, defaulting to `accept_invalid_certs`",
mode = &*v
);
}
};
}
"connect_timeout" => {
let as_int = v
Expand All @@ -214,6 +203,13 @@ impl MysqlUrl {
_ => Some(Duration::from_secs(as_int)),
};
}
"connection_limit" => {
let as_int: usize = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;

connection_limit = Some(as_int);
}
"pool_timeout" => {
let as_int = v
.parse::<u64>()
Expand All @@ -224,19 +220,25 @@ impl MysqlUrl {
_ => Some(Duration::from_secs(as_int)),
};
}
"sslaccept" => {
match v.as_ref() {
"strict" => {
ssl_opts = ssl_opts.with_danger_accept_invalid_certs(false);
}
"accept_invalid_certs" => {}
_ => {
tracing::debug!(
message = "Unsupported SSL accept mode, defaulting to `accept_invalid_certs`",
mode = &*v
);
}
};
"socket" => {
socket = Some(v.replace("(", "").replace(")", ""));
}
"socket_timeout" => {
let as_int = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
socket_timeout = Some(Duration::from_secs(as_int));
}
"prefer_socket" => {
let as_bool = v
.parse::<bool>()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
prefer_socket = Some(as_bool)
}
"statement_cache_size" => {
statement_cache_size = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
}
"max_connection_lifetime" => {
let as_int = v
Expand Down Expand Up @@ -267,17 +269,17 @@ impl MysqlUrl {
}

Ok(MysqlUrlQueryParams {
use_ssl,
ssl_opts,
connect_timeout,
connection_limit,
use_ssl,
pool_timeout,
socket,
socket_timeout,
connect_timeout,
pool_timeout,
max_connection_lifetime,
max_idle_connection_lifetime,
prefer_socket,
statement_cache_size,
max_connection_lifetime,
max_idle_connection_lifetime,
})
}

Expand Down Expand Up @@ -318,17 +320,17 @@ impl MysqlUrl {

#[derive(Debug, Clone)]
pub(crate) struct MysqlUrlQueryParams {
use_ssl: bool,
ssl_opts: my::SslOpts,
connect_timeout: Option<Duration>,
connection_limit: Option<usize>,
use_ssl: bool,
pool_timeout: Option<Duration>,
socket: Option<String>,
socket_timeout: Option<Duration>,
connect_timeout: Option<Duration>,
pool_timeout: Option<Duration>,
max_connection_lifetime: Option<Duration>,
max_idle_connection_lifetime: Option<Duration>,
prefer_socket: Option<bool>,
statement_cache_size: usize,
max_connection_lifetime: Option<Duration>,
max_idle_connection_lifetime: Option<Duration>,
}

impl Mysql {
Expand Down
80 changes: 42 additions & 38 deletions src/connector/postgres.rs
Original file line number Diff line number Diff line change
Expand Up @@ -260,24 +260,31 @@ impl PostgresUrl {
}

fn parse_query_params(url: &Url) -> Result<PostgresUrlQueryParams, Error> {
let mut connection_limit = None;
let mut schema = None;
let mut pg_bouncer = false;

let mut ssl_mode = SslMode::Prefer;
let mut certificate_file = None;
let mut identity_file = None;
let mut identity_password = None;
let mut ssl_accept_mode = SslAcceptMode::AcceptInvalidCerts;
let mut ssl_mode = SslMode::Prefer;
let mut host = None;
let mut socket_timeout = None;

let mut connect_timeout = Some(Duration::from_secs(5));
let mut connection_limit = None;
let mut pool_timeout = Some(Duration::from_secs(10));
let mut pg_bouncer = false;

let mut host = None;
let mut socket_timeout = None;

let mut statement_cache_size = 500;
let mut max_connection_lifetime = None;
let mut max_idle_connection_lifetime = Some(Duration::from_secs(300));

for (k, v) in url.query_pairs() {
match k.as_ref() {
"schema" => {
schema = Some(v.to_string());
}
"pgbouncer" => {
pg_bouncer = v
.parse()
Expand All @@ -302,11 +309,6 @@ impl PostgresUrl {
"sslpassword" => {
identity_password = Some(v.to_string());
}
"statement_cache_size" => {
statement_cache_size = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
}
"sslaccept" => {
match v.as_ref() {
"strict" => {
Expand All @@ -325,24 +327,6 @@ impl PostgresUrl {
}
};
}
"schema" => {
schema = Some(v.to_string());
}
"connection_limit" => {
let as_int: usize = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
connection_limit = Some(as_int);
}
"host" => {
host = Some(v.to_string());
}
"socket_timeout" => {
let as_int = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
socket_timeout = Some(Duration::from_secs(as_int));
}
"connect_timeout" => {
let as_int = v
.parse()
Expand All @@ -354,6 +338,12 @@ impl PostgresUrl {
connect_timeout = Some(Duration::from_secs(as_int));
}
}
"connection_limit" => {
let as_int: usize = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
connection_limit = Some(as_int);
}
"pool_timeout" => {
let as_int = v
.parse()
Expand All @@ -365,6 +355,20 @@ impl PostgresUrl {
pool_timeout = Some(Duration::from_secs(as_int));
}
}
"host" => {
host = Some(v.to_string());
}
"socket_timeout" => {
let as_int = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
socket_timeout = Some(Duration::from_secs(as_int));
}
"statement_cache_size" => {
statement_cache_size = v
.parse()
.map_err(|_| Error::builder(ErrorKind::InvalidConnectionArguments).build())?;
}
"max_connection_lifetime" => {
let as_int = v
.parse()
Expand Down Expand Up @@ -394,20 +398,20 @@ impl PostgresUrl {
}

Ok(PostgresUrlQueryParams {
schema,
pg_bouncer,
ssl_mode,
ssl_params: SslParams {
certificate_file,
identity_file,
ssl_accept_mode,
identity_password: Hidden(identity_password),
},
connection_limit,
schema,
ssl_mode,
host,
connect_timeout,
connection_limit,
pool_timeout,
host,
socket_timeout,
pg_bouncer,
statement_cache_size,
max_connection_lifetime,
max_idle_connection_lifetime,
Expand Down Expand Up @@ -445,15 +449,15 @@ impl PostgresUrl {

#[derive(Debug, Clone)]
pub(crate) struct PostgresUrlQueryParams {
ssl_params: SslParams,
connection_limit: Option<usize>,
schema: Option<String>,
ssl_mode: SslMode,
pg_bouncer: bool,
host: Option<String>,
socket_timeout: Option<Duration>,
ssl_mode: SslMode,
ssl_params: SslParams,
connect_timeout: Option<Duration>,
connection_limit: Option<usize>,
pool_timeout: Option<Duration>,
host: Option<String>,
socket_timeout: Option<Duration>,
statement_cache_size: usize,
max_connection_lifetime: Option<Duration>,
max_idle_connection_lifetime: Option<Duration>,
Expand Down
Loading