fix: search around error when order by _timestamp asc (#2689)

This commit is contained in:
Hengfei Yang
2024-02-12 11:32:36 +08:00
committed by GitHub
parent 33e0c1ed69
commit 8542dd0c2a
3 changed files with 32 additions and 8 deletions
+14 -3
View File
@@ -134,9 +134,20 @@ pub async fn search(
let mut rpc_req: crate::handler::grpc::cluster_rpc::SearchRequest = req.to_owned().into();
rpc_req.org_id = org_id.to_string();
rpc_req.stream_type = stream_type.to_string();
let resp: SearchService::sql::Sql = crate::service::search::sql::Sql::new(&rpc_req)
.await
.unwrap();
let resp: SearchService::sql::Sql = match crate::service::search::sql::Sql::new(&rpc_req).await
{
Ok(v) => v,
Err(e) => {
return Ok(match e {
errors::Error::ErrorCode(code) => HttpResponse::InternalServerError()
.json(meta::http::HttpResponse::error_code(code)),
_ => HttpResponse::InternalServerError().json(meta::http::HttpResponse::error(
StatusCode::INTERNAL_SERVER_ERROR.into(),
e.to_string(),
)),
});
}
};
// Check permissions on stream
#[cfg(feature = "enterprise")]
+6 -5
View File
@@ -421,11 +421,12 @@ async fn get_fast_mode_ctx(
file_type: FileType,
) -> Result<(SessionContext, Arc<Schema>)> {
let mut files = files.to_vec();
if !sql.meta.order_by.is_empty() && !sql.meta.order_by[0].1 {
files.sort_by(|a, b| b.meta.min_ts.cmp(&a.meta.min_ts));
} else {
let desc = sql.meta.order_by.is_empty() || sql.meta.order_by[0].1;
if desc {
files.sort_by(|a, b| a.meta.min_ts.cmp(&b.meta.min_ts));
}
} else {
files.sort_by(|a, b| b.meta.min_ts.cmp(&a.meta.min_ts));
};
let mut loaded_records = 0;
let mut new_files = Vec::new();
@@ -433,7 +434,7 @@ async fn get_fast_mode_ctx(
for i in (0..files.len()).rev() {
loaded_records += files.get(i).unwrap().meta.records as usize;
new_files.push(files[i].clone());
if loaded_records >= needs {
if loaded_records >= needs && (desc || new_files.len() > 1) {
break;
}
}
+12
View File
@@ -324,8 +324,20 @@ impl Sql {
}
origin_sql = if meta.order_by.is_empty() && !sql_mode.eq(&SqlMode::Full) {
let sort_by = if req_query.sort_by.is_empty() {
meta.order_by = vec![(CONFIG.common.column_timestamp.to_string(), true)];
format!("{} DESC", CONFIG.common.column_timestamp)
} else {
if req_query.sort_by.to_uppercase().ends_with(" DESC") {
meta.order_by = vec![(
req_query.sort_by[0..req_query.sort_by.len() - 5].to_string(),
true,
)];
} else if req_query.sort_by.to_uppercase().ends_with(" ASC") {
meta.order_by = vec![(
req_query.sort_by[0..req_query.sort_by.len() - 4].to_string(),
false,
)];
}
req_query.sort_by.clone()
};
format!(