mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-06 08:09:24 +00:00
fix: search around error when order by _timestamp asc (#2689)
This commit is contained in:
@@ -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")]
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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!(
|
||||
|
||||
Reference in New Issue
Block a user