use std::fmt::Write;
use crate::types::{DatabaseType, sql_hints::OrderByClause};
pub fn append_order_by(
sql: &mut String,
order_by: Option<&[OrderByClause]>,
db_type: DatabaseType,
) -> crate::Result<bool> {
let Some(clauses) = order_by.filter(|c| !c.is_empty()) else {
return Ok(false);
};
sql.push_str(" ORDER BY ");
for (i, clause) in clauses.iter().enumerate() {
OrderByClause::validate_field_name(&clause.field)?;
if i > 0 {
sql.push_str(", ");
}
let expr = if let Some(ref col) = clause.native_column {
col.clone()
} else {
let key = clause.storage_key();
db_type.typed_json_field_expr(&key, clause.field_type)
};
write!(sql, "{expr} {}", clause.direction.as_sql()).expect("write to String is infallible");
}
Ok(true)
}
#[cfg(test)]
mod tests;