diff options
Diffstat (limited to 'database/src/query_syntax.rs')
| -rw-r--r-- | database/src/query_syntax.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/database/src/query_syntax.rs b/database/src/query_syntax.rs index 8720912..b192361 100644 --- a/database/src/query_syntax.rs +++ b/database/src/query_syntax.rs @@ -4,10 +4,9 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ -use anyhow::{Error, anyhow, bail}; -use jellyobject::{Path, Tag, Value}; - use crate::{Filter, MultiBehaviour, Query, Sort, SortOrder, ValueSort}; +use anyhow::{Error, anyhow, bail}; +use jellyobject::{Path, Value}; use std::{fmt::Display, str::FromStr}; impl Display for Query<'_> { @@ -55,6 +54,8 @@ impl Display for Sort { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Sort::None => write!(f, "NONE"), + Sort::Random(0) => write!(f, "RANDOM"), + Sort::Random(seed) => write!(f, "RANDOM WITH SEED {seed}"), Sort::Value(ValueSort { multi, order, path, .. }) => { @@ -139,6 +140,8 @@ impl FromStr for Sort { fn from_str(s: &str) -> Result<Self, Self::Err> { Ok(if s == "NONE" { Sort::None + } else if s == "RANDOM" { + Sort::Random(1) } else if let Some(s) = s.strip_prefix("TEXT SEARCH ") && let Some((path, value)) = s.split_once(" = ") { @@ -174,6 +177,7 @@ impl FromStr for Sort { #[test] fn test_parse() { + use jellyobject::Tag; assert_eq!( Query::from_str("FILTER (visi = visi AND kind = vide) SORT DESCENDING BY FIRST rldt") .unwrap(), |