aboutsummaryrefslogtreecommitdiff
path: root/database/src/query_syntax.rs
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/query_syntax.rs')
-rw-r--r--database/src/query_syntax.rs10
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(),