@@ -1855,6 +1855,11 @@ values(?,?,?,?,?,?,?,?,?,?)`, id, "source-1", "collection-1", "actor-1", id, "me
18551855 }
18561856 }
18571857 }
1858+ if _ , err := db .Exec (`insert into item_metadata(item_id, key, value) values
1859+ ('item-000','project','escoffier-labs/brigade'),
1860+ ('item-001','cwd','/workspace/brigade')` ); err != nil {
1861+ t .Fatal (err )
1862+ }
18581863}
18591864
18601865func explainPlan (t * testing.T , db * sql.DB , sqlText string , args ... any ) string {
@@ -2018,6 +2023,38 @@ func TestSearchPlanBoundsFTSCandidatesBeforeJoins(t *testing.T) {
20182023 }
20192024 }
20202025
2026+ projectSQL , projectParams := buildSearchQuery (SearchOpts {Query : "needle" , Project : "workspace" , Limit : 5 })
2027+ projectPlan := explainPlan (t , db , projectSQL , projectParams ... )
2028+ for _ , want := range []string {
2029+ "SCAN fc" ,
2030+ "SEARCH i USING" ,
2031+ "SEARCH im USING COVERING INDEX" ,
2032+ "(item_id=?" ,
2033+ } {
2034+ if ! strings .Contains (projectPlan , want ) {
2035+ t .Fatalf ("project filter plan missing %q:\n %s" , want , projectPlan )
2036+ }
2037+ }
2038+ if strings .Index (projectPlan , "SCAN fc" ) > strings .Index (projectPlan , "SEARCH i USING" ) {
2039+ t .Fatalf ("project filter plan does not keep FTS candidates outermost:\n %s" , projectPlan )
2040+ }
2041+
2042+ exactProject , err := search (db , SearchOpts {Query : "needle" , Project : "escoffier-labs/brigade" , Limit : 5 })
2043+ if err != nil {
2044+ t .Fatalf ("exact project search: %v" , err )
2045+ }
2046+ if len (exactProject ) != 1 || exactProject [0 ].ID != "item-000" {
2047+ t .Fatalf ("exact project results = %#v, want item-000" , exactProject )
2048+ }
2049+
2050+ substringProject , err := search (db , SearchOpts {Query : "needle" , Project : "workspace/brigade" , Limit : 5 })
2051+ if err != nil {
2052+ t .Fatalf ("substring project search: %v" , err )
2053+ }
2054+ if len (substringProject ) != 1 || substringProject [0 ].ID != "item-001" {
2055+ t .Fatalf ("substring project results = %#v, want item-001" , substringProject )
2056+ }
2057+
20212058 results , err := search (db , opts )
20222059 if err != nil {
20232060 t .Fatalf ("search: %v" , err )
0 commit comments