tdm_server_rust/repository/
episode_sort.rs1use sea_orm::sea_query::{Expr, SimpleExpr};
4
5pub fn episode_label_sort_sql(column: &str) -> String {
7 format!(
8 r#"CASE WHEN split_part({column}::text, '+', 1) ~ '^[0-9]+(\.[0-9]+)?$' THEN split_part({column}::text, '+', 1)::numeric END"#,
9 column = column
10 )
11}
12
13pub fn episode_label_sort_expr(column: &str) -> SimpleExpr {
15 Expr::cust(episode_label_sort_sql(column))
16}
17
18#[cfg(test)]
19mod tests {
20 use super::episode_label_sort_sql;
21
22 #[test]
23 fn sort_sql_guards_non_numeric() {
24 let sql = episode_label_sort_sql(r#"me."mangaEpisode""#);
25 assert!(sql.contains("~ '^[0-9]+"));
26 assert!(sql.contains("::numeric"));
27 assert!(!sql.contains("CAST(me.\"mangaEpisode\" AS DECIMAL"));
28 }
29}