From 5009367db422fd470cb36486b6b3deb1163e6e12 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Thu, 22 May 2025 11:26:19 -0400 Subject: [PATCH] Fix FTS smoke test for contentless table --- libmarlin/src/db_tests.rs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/libmarlin/src/db_tests.rs b/libmarlin/src/db_tests.rs index a391fdc..76527e1 100644 --- a/libmarlin/src/db_tests.rs +++ b/libmarlin/src/db_tests.rs @@ -273,16 +273,25 @@ fn tables_exist_and_fts_triggers() { let fid = db::file_id(marlin.conn(), file_path.to_str().unwrap()).unwrap(); db::upsert_attr(marlin.conn(), fid, "color", "blue").unwrap(); - let row: (String, String, String) = marlin + // The FTS index is contentless, so columns return empty strings. Instead + // verify that searching for our tag and attribute yields the file path. + let hits_tag: Vec = marlin .conn() - .query_row( - "SELECT path, tags_text, attrs_text FROM files_fts WHERE rowid = ?1", - [fid], - |r| Ok((r.get(0)?, r.get(1)?, r.get(2)?)), - ) + .prepare("SELECT f.path FROM files_fts JOIN files f ON f.id = files_fts.rowid WHERE files_fts MATCH 'foo'") + .unwrap() + .query_map([], |r| r.get(0)) + .unwrap() + .collect::, _>>() .unwrap(); + assert!(hits_tag.contains(&file_path.to_string_lossy().into_owned())); - assert_eq!(row.0, file_path.to_str().unwrap()); - assert!(row.1.contains("foo") && row.1.contains("bar")); - assert_eq!(row.2, "color=blue"); + let hits_attr: Vec = marlin + .conn() + .prepare(r#"SELECT f.path FROM files_fts JOIN files f ON f.id = files_fts.rowid WHERE files_fts MATCH '"color=blue"'"#) + .unwrap() + .query_map([], |r| r.get(0)) + .unwrap() + .collect::, _>>() + .unwrap(); + assert!(hits_attr.contains(&file_path.to_string_lossy().into_owned())); }