Skip to content
Merged
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
4 changes: 4 additions & 0 deletions sqlx-core/src/logger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ impl QueryLogger {
self.rows_affected += n;
}

pub fn sql(&self) -> &SqlStr {
&self.sql
}

pub fn finish(&self) {
let elapsed = self.start.elapsed();

Expand Down
11 changes: 7 additions & 4 deletions sqlx-mysql/src/connection/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,14 @@ impl MySqlConnection {
persistent: bool,
) -> Result<impl Stream<Item = Result<Either<MySqlQueryResult, MySqlRow>, Error>> + 'e, Error>
{
let mut logger = QueryLogger::new(sql, self.inner.log_settings.clone());

self.inner.stream.wait_until_ready().await?;
self.inner.stream.waiting.push_back(Waiting::Result);

Ok(try_stream! {
let sql = logger.sql().as_str();

// make a slot for the shared column data
// as long as a reference to a row is not held past one iteration, this enables us
// to re-use this memory freely between result sets
Expand All @@ -120,7 +124,7 @@ impl MySqlConnection {
let (mut column_names, format, mut needs_metadata) = if let Some(arguments) = arguments {
if persistent && self.inner.cache_statement.is_enabled() {
let (id, metadata) = self
.get_or_prepare_statement(sql.as_str())
.get_or_prepare_statement(sql)
.await?;

if arguments.types.len() != metadata.parameters {
Expand All @@ -144,7 +148,7 @@ impl MySqlConnection {
(metadata.column_names, MySqlValueFormat::Binary, false)
} else {
let (id, metadata) = self
.prepare_statement(sql.as_str())
.prepare_statement(sql)
.await?;

if arguments.types.len() != metadata.parameters {
Expand All @@ -171,11 +175,10 @@ impl MySqlConnection {
}
} else {
// https://dev.mysql.com/doc/internals/en/com-query.html
self.inner.stream.send_packet(Query(sql.as_str())).await?;
self.inner.stream.send_packet(Query(sql)).await?;

(Arc::default(), MySqlValueFormat::Text, true)
};
let mut logger = QueryLogger::new(sql, self.inner.log_settings.clone());

loop {
// query response is a meta-packet which may be one of:
Expand Down
14 changes: 5 additions & 9 deletions sqlx-postgres/src/connection/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,9 @@ impl PgConnection {
persistent: bool,
metadata_opt: Option<Arc<PgStatementMetadata>>,
) -> Result<impl Stream<Item = Result<Either<PgQueryResult, PgRow>, Error>> + 'e, Error> {
let mut logger = QueryLogger::new(query, self.inner.log_settings.clone());
let sql = logger.sql().as_str();

// before we continue, wait until we are "ready" to accept more queries
self.wait_until_ready().await?;

Expand All @@ -237,13 +240,7 @@ impl PgConnection {
// prepare the statement if this our first time executing it
// always return the statement ID here
let (statement, metadata_) = self
.get_or_prepare(
query.as_str(),
&arguments.types,
persistent,
metadata_opt,
false,
)
.get_or_prepare(sql, &arguments.types, persistent, metadata_opt, false)
.await?;

metadata = metadata_;
Expand Down Expand Up @@ -296,7 +293,7 @@ impl PgConnection {
PgValueFormat::Binary
} else {
// Query will trigger a ReadyForQuery
self.inner.stream.write_msg(Query(query.as_str()))?;
self.inner.stream.write_msg(Query(sql))?;
self.inner.pending_ready_for_query_count += 1;

// metadata starts out as "nothing"
Expand All @@ -307,7 +304,6 @@ impl PgConnection {
};

self.inner.stream.flush().await?;
let mut logger = QueryLogger::new(query, self.inner.log_settings.clone());

Ok(try_stream! {
loop {
Expand Down
Loading