Skip to content

Commit 7a376d8

Browse files
authored
fix: update session on each resp in sqllogic http client. (#12952)
1 parent fc6b17e commit 7a376d8

File tree

1 file changed

+35
-35
lines changed

1 file changed

+35
-35
lines changed

tests/sqllogictests/src/client/http_client.rs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -77,29 +77,13 @@ impl HttpClient {
7777
let start = Instant::now();
7878

7979
let url = "http://127.0.0.1:8000/v1/query".to_string();
80-
let mut response = self.response(sql, &url, true).await?;
81-
// Set session from response to client
82-
// Then client will same session for different queries.
83-
84-
if response.session.is_some() {
85-
self.session = response.session.clone();
86-
}
87-
88-
if let Some(error) = response.error {
89-
return Err(format_error(error).into());
90-
}
91-
92-
let rows = response.data;
93-
let mut parsed_rows = parser_rows(&rows)?;
80+
let mut parsed_rows = vec![];
81+
let mut response =
82+
self.handle_response(self.post_query(sql, &url).await?, &mut parsed_rows)?;
9483
while let Some(next_uri) = response.next_uri {
95-
let mut url = "http://127.0.0.1:8000".to_string();
96-
url.push_str(&next_uri);
97-
response = self.response(sql, &url, false).await?;
98-
if let Some(error) = response.error {
99-
return Err(format_error(error).into());
100-
}
101-
let rows = response.data;
102-
parsed_rows.append(&mut parser_rows(&rows)?);
84+
let url = format!("http://127.0.0.1:8000{next_uri}");
85+
response =
86+
self.handle_response(self.poll_query_result(&url).await?, &mut parsed_rows)?;
10387
}
10488
// Todo: add types to compare
10589
let mut types = vec![];
@@ -120,32 +104,48 @@ impl HttpClient {
120104
})
121105
}
122106

107+
fn handle_response(
108+
&mut self,
109+
response: QueryResponse,
110+
parsed_rows: &mut Vec<Vec<String>>,
111+
) -> Result<QueryResponse> {
112+
if response.session.is_some() {
113+
self.session = response.session.clone();
114+
}
115+
if let Some(error) = response.error {
116+
Err(format_error(error).into())
117+
} else {
118+
parsed_rows.append(&mut parser_rows(&response.data)?);
119+
Ok(response)
120+
}
121+
}
122+
123123
// Send request and get response by json format
124-
async fn response(&mut self, sql: &str, url: &str, post: bool) -> Result<QueryResponse> {
124+
async fn post_query(&self, sql: &str, url: &str) -> Result<QueryResponse> {
125125
let mut query = HashMap::new();
126126
query.insert("sql", serde_json::to_value(sql)?);
127127
if let Some(session) = &self.session {
128128
query.insert("session", serde_json::to_value(session)?);
129129
}
130-
if post {
131-
return Ok(self
132-
.client
133-
.post(url)
134-
.json(&query)
135-
.basic_auth("root", Some(""))
136-
.send()
137-
.await?
138-
.json::<QueryResponse>()
139-
.await?);
140-
}
141130
Ok(self
142131
.client
143-
.get(url)
132+
.post(url)
144133
.json(&query)
145134
.basic_auth("root", Some(""))
146135
.send()
147136
.await?
148137
.json::<QueryResponse>()
149138
.await?)
150139
}
140+
141+
async fn poll_query_result(&self, url: &str) -> Result<QueryResponse> {
142+
Ok(self
143+
.client
144+
.get(url)
145+
.basic_auth("root", Some(""))
146+
.send()
147+
.await?
148+
.json::<QueryResponse>()
149+
.await?)
150+
}
151151
}

0 commit comments

Comments
 (0)