diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-17 15:16:50 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-17 15:16:50 +0100 |
| commit | 4a2a0830cdc5a8b476f1b072b986c95205b61deb (patch) | |
| tree | 5547188985eb892bb83a26b75649e5b1103f7bc7 | |
| parent | 7245f956b217abba0c2b0bed507a7ea47d115b07 (diff) | |
| download | jellything-4a2a0830cdc5a8b476f1b072b986c95205b61deb.tar jellything-4a2a0830cdc5a8b476f1b072b986c95205b61deb.tar.bz2 jellything-4a2a0830cdc5a8b476f1b072b986c95205b61deb.tar.zst | |
ser value sort query
| -rw-r--r-- | database/src/lib.rs | 2 | ||||
| -rw-r--r-- | database/src/query_ser.rs | 34 |
2 files changed, 27 insertions, 9 deletions
diff --git a/database/src/lib.rs b/database/src/lib.rs index c09340b..6210a27 100644 --- a/database/src/lib.rs +++ b/database/src/lib.rs @@ -64,6 +64,8 @@ pub enum MultiBehaviour { Min, Count, } + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum SortOrder { Ascending, Descending, 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 <metamuffin.org> */ -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:?}") |