Skip to content

Commit a6c7a3f

Browse files
committed
mssql rollback after end req test
remove double rollback
1 parent a1def13 commit a6c7a3f

File tree

4 files changed

+31
-38
lines changed

4 files changed

+31
-38
lines changed

src/webserver/database/execute_queries.rs

-11
Original file line numberDiff line numberDiff line change
@@ -112,17 +112,6 @@ pub fn stop_at_first_error(
112112
.take_until(error_rx)
113113
}
114114

115-
pub(crate) async fn rollback_transaction(db_connection: &mut DbConn) {
116-
if let Some(conn) = db_connection.as_mut() {
117-
match conn.execute("ROLLBACK").await {
118-
Ok(r) => log::debug!("Rolled back transaction with result: {:?}", r),
119-
Err(e) => log::debug!("Failed to rollback transaction: {e:?}"),
120-
}
121-
} else {
122-
log::debug!("No connection to rollback a transaction");
123-
}
124-
}
125-
126115
/// Executes the sqlpage pseudo-functions contained in a static simple select
127116
async fn exec_static_simple_select(
128117
columns: &[(String, SimpleSelectValue)],

src/webserver/http.rs

+24-27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::render::{AnyRenderBodyContext, HeaderContext, PageContext};
22
use crate::webserver::content_security_policy::ContentSecurityPolicy;
3-
use crate::webserver::database::execute_queries::{rollback_transaction, stop_at_first_error};
3+
use crate::webserver::database::execute_queries::stop_at_first_error;
44
use crate::webserver::database::{execute_queries::stream_query_results_with_conn, DbItem};
55
use crate::webserver::http_request_info::extract_request_info;
66
use crate::webserver::ErrorWithStatus;
@@ -173,35 +173,32 @@ async fn render_sql(
173173
let database_entries_stream =
174174
stream_query_results_with_conn(&sql_file, &mut req_param, &mut conn);
175175
let database_entries_stream = stop_at_first_error(database_entries_stream);
176-
{
177-
let response_with_writer = build_response_header_and_stream(
178-
Arc::clone(&app_state),
176+
let response_with_writer = build_response_header_and_stream(
177+
Arc::clone(&app_state),
178+
database_entries_stream,
179+
request_context,
180+
)
181+
.await;
182+
match response_with_writer {
183+
Ok(ResponseWithWriter::RenderStream {
184+
http_response,
185+
renderer,
179186
database_entries_stream,
180-
request_context,
181-
)
182-
.await;
183-
match response_with_writer {
184-
Ok(ResponseWithWriter::RenderStream {
185-
http_response,
186-
renderer,
187-
database_entries_stream,
188-
}) => {
189-
resp_send
190-
.send(http_response)
191-
.unwrap_or_else(|e| log::error!("could not send headers {e:?}"));
192-
stream_response(database_entries_stream, renderer).await;
193-
}
194-
Ok(ResponseWithWriter::FinishedResponse { http_response }) => {
195-
resp_send
196-
.send(http_response)
197-
.unwrap_or_else(|e| log::error!("could not send headers {e:?}"));
198-
}
199-
Err(err) => {
200-
send_anyhow_error(&err, resp_send, app_state.config.environment);
201-
}
187+
}) => {
188+
resp_send
189+
.send(http_response)
190+
.unwrap_or_else(|e| log::error!("could not send headers {e:?}"));
191+
stream_response(database_entries_stream, renderer).await;
192+
}
193+
Ok(ResponseWithWriter::FinishedResponse { http_response }) => {
194+
resp_send
195+
.send(http_response)
196+
.unwrap_or_else(|e| log::error!("could not send headers {e:?}"));
197+
}
198+
Err(err) => {
199+
send_anyhow_error(&err, resp_send, app_state.config.environment);
202200
}
203201
}
204-
rollback_transaction(&mut conn).await;
205202
});
206203
resp_recv.await.map_err(ErrorInternalServerError)
207204
}

tests/failed_transaction_mssql.sql

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
BEGIN TRANSACTION;
2+
CREATE TABLE #t(f VARCHAR(100) NOT NULL);
3+
INSERT INTO #t(f) VALUES ($x);
4+
COMMIT TRANSACTION;
5+
6+
SELECT 'text' AS component, f AS contents FROM #t;

tests/index.rs

+1
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ async fn test_transaction_error() -> actix_web::Result<()> {
478478
let data = make_app_data().await;
479479
let path = match data.db.to_string().to_lowercase().as_str() {
480480
"mysql" => "/tests/failed_transaction_mysql.sql",
481+
"mssql" => "/tests/failed_transaction_mssql.sql",
481482
_ => "/tests/failed_transaction.sql",
482483
};
483484
let req = get_request_to_with_data(path, data.clone())

0 commit comments

Comments
 (0)