From 4a2a0830cdc5a8b476f1b072b986c95205b61deb Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 17 Feb 2026 15:16:50 +0100 Subject: ser value sort query --- database/src/query_ser.rs | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) (limited to 'database/src/query_ser.rs') diff --git a/database/src/query_ser.rs b/database/src/query_ser.rs index 7698fdc..498f2ad 100644 --- a/database/src/query_ser.rs +++ b/database/src/query_ser.rs @@ -4,9 +4,8 @@ Copyright (C) 2026 metamuffin */ -use crate::{DEBUG_TAGREG, Filter, Query, Sort}; +use crate::{DEBUG_TAGREG, Filter, MultiBehaviour, Query, Sort, SortOrder}; use jellyobject::{Path, Registry, Tag}; -use std::any::TypeId; impl Query { pub fn show_debug(&self) -> String { @@ -19,10 +18,10 @@ impl Query { pub fn show(&self, reg: &Registry) -> String { let mut o = String::new(); if !matches!(self.filter, Filter::True) { - o += &format!("FILTER {}", self.filter.show(reg)) + o += &format!("FILTER {} ", self.filter.show(reg)) } if !matches!(self.sort, Sort::None) { - o += &format!("SORT {}", self.sort.show(reg)) + o += &format!("SORT {} ", self.sort.show(reg)) } o } @@ -63,7 +62,21 @@ impl Sort { match self { Sort::None => "NONE".to_string(), Sort::Value(vs) => { - todo!() + format!( + "{} BY {} {}", + match vs.order { + SortOrder::Ascending => "ASCENDING", + SortOrder::Descending => "DESCENDING", + }, + match vs.multi { + MultiBehaviour::Count => "COUNT", + MultiBehaviour::First => "FIRST", + MultiBehaviour::ForEach => "EACH", + MultiBehaviour::Max => "MAX", + MultiBehaviour::Min => "MIN", + }, + show_path(reg, &vs.path), + ) } Sort::TextSearch(path, value) => { format!("TEXT SEARCH {} = {value:?}", show_path(reg, path),) @@ -83,10 +96,13 @@ fn show_value(reg: &Registry, tag: Tag, value: &[u8]) -> String { if let Some(info) = reg.info(tag) && let Some(ty) = info.r#type { - if ty == TypeId::of::<&str>() { - format!("{:?}", str::from_utf8(value).unwrap()) - } else { - format!("{value:?}") + use jellyobject::types::*; + match () { + () if ty == STR => format!("{:?}", str::from_utf8(value).unwrap()), + () if ty == U32 => format!("{:?}", u32::from_be_bytes(value.try_into().unwrap())), + () if ty == U64 => format!("{:?}", u64::from_be_bytes(value.try_into().unwrap())), + () if ty == F64 => format!("{:?}", f64::from_be_bytes(value.try_into().unwrap())), + () => format!("{value:?}"), } } else { format!("{value:?}") -- cgit v1.3