Skip to content

Commit 77de939

Browse files
committed
clippy
1 parent 8ddde2a commit 77de939

3 files changed

Lines changed: 36 additions & 13 deletions

File tree

sqlx-core/src/mssql/connection/executor.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,14 @@ impl<'c> Executor<'c> for &'c mut MssqlConnection {
117117
}
118118
}
119119

120-
Message::DoneInProc(done) => {
121-
if done.status.contains(Status::DONE_COUNT) {
120+
Message::DoneInProc(done)
121+
if done.status.contains(Status::DONE_COUNT) => {
122122
let rows_affected = done.affected_rows;
123123
logger.increase_rows_affected(rows_affected);
124124
r#yield!(Either::Left(MssqlQueryResult {
125125
rows_affected,
126126
}));
127127
}
128-
}
129128

130129
_ => {}
131130
}

sqlx-core/src/mssql/connection/prepare.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,12 @@ pub(crate) async fn prepare(
7777
let message = conn.stream.recv_message().await?;
7878

7979
match message {
80-
Message::DoneProc(done) | Message::Done(done) => {
81-
if !done.status.contains(Status::DONE_MORE) {
80+
Message::DoneProc(done) | Message::Done(done)
81+
if !done.status.contains(Status::DONE_MORE) => {
8282
// done with prepare
8383
conn.stream.handle_done(&done);
8484
break;
8585
}
86-
}
8786

8887
Message::ReturnValue(rv) => {
8988
id = <i32 as Decode<Mssql>>::decode(MssqlValueRef {
@@ -120,13 +119,12 @@ pub(crate) async fn prepare(
120119
let message = conn.stream.recv_message().await?;
121120

122121
match message {
123-
Message::DoneProc(done) | Message::Done(done) => {
124-
if !done.status.contains(Status::DONE_MORE) {
122+
Message::DoneProc(done) | Message::Done(done)
123+
if !done.status.contains(Status::DONE_MORE) => {
125124
// done with unprepare
126125
conn.stream.handle_done(&done);
127126
break;
128127
}
129-
}
130128

131129
_ => {}
132130
}

sqlx-core/src/odbc/connection/mod.rs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ fn collect_columns(prepared: &mut PreparedStatement) -> Result<Vec<OdbcColumn>,
3232
Ok(columns)
3333
}
3434

35+
fn collect_statement_metadata(
36+
prepared: &mut PreparedStatement,
37+
) -> Result<OdbcStatementMetadata, Error> {
38+
Ok(OdbcStatementMetadata {
39+
columns: collect_columns(prepared)?,
40+
parameters: usize::from(prepared.num_params()?),
41+
})
42+
}
43+
3544
pub(super) fn describe_column<S>(stmt: &mut S, index: u16) -> Result<OdbcColumn, Error>
3645
where
3746
S: ResultSetMetadata,
@@ -206,15 +215,32 @@ impl OdbcConnection {
206215
}
207216

208217
pub async fn prepare<'a>(&mut self, sql: &'a str) -> Result<OdbcStatement<'a>, Error> {
218+
let cached = self
219+
.stmt_cache
220+
.get_mut(sql)
221+
.map(|prepared| Arc::clone(prepared));
222+
223+
if let Some(prepared) = cached {
224+
let metadata = spawn_blocking(move || {
225+
let mut prepared = prepared.lock().map_err(|_| {
226+
Error::Protocol("ODBC prepare: failed to lock prepared statement".into())
227+
})?;
228+
collect_statement_metadata(&mut prepared)
229+
})
230+
.await?;
231+
232+
return Ok(OdbcStatement {
233+
sql: Cow::Borrowed(sql),
234+
metadata,
235+
});
236+
}
237+
209238
let conn = Arc::clone(&self.conn);
210239
let sql_owned = sql.to_string();
211240
let sql_clone = sql_owned.clone();
212241
let (prepared, metadata) = spawn_blocking(move || {
213242
let mut prepared = conn.into_prepared(&sql_clone)?;
214-
let metadata = OdbcStatementMetadata {
215-
columns: collect_columns(&mut prepared)?,
216-
parameters: usize::from(prepared.num_params()?),
217-
};
243+
let metadata = collect_statement_metadata(&mut prepared)?;
218244
Ok::<_, Error>((prepared, metadata))
219245
})
220246
.await?;

0 commit comments

Comments
 (0)