08228c9a2d84f3d0a30474f1f24598dbb293dfa5
max
  Mon Sep 7 11:29:09 2026 -0700
cdwWebBrowse: do not build 'id IN ()' when no file matches the filters

When a download filter matched no files, findDownloadableFiles() built
SELECT * FROM cdwFile WHERE id IN () which MariaDB rejects with error
1064. Return an empty list instead; both callers already handle it.
Found in the apache error log, email from Erich.

diff --git src/hg/cirm/cdw/cdwWebBrowse/cdwWebBrowse.c src/hg/cirm/cdw/cdwWebBrowse/cdwWebBrowse.c
index 2c021125fb6..26383a10b2b 100644
--- src/hg/cirm/cdw/cdwWebBrowse/cdwWebBrowse.c
+++ src/hg/cirm/cdw/cdwWebBrowse/cdwWebBrowse.c
@@ -924,30 +924,34 @@
 	    sqlDyStringPrintf(facetedWhere, "'%s'", el->val);
 	    if (el->next)
 		sqlDyStringPrintf(facetedWhere, ",");
 	    }
 	sqlDyStringPrintf(facetedWhere, ")");
 	}
     }
 
 
 // get their fileIds
 struct dyString *tagQuery = sqlDyStringCreate("SELECT file_id from %s %-s", table, filteredWhere->string); // trust
 if (!isEmpty(facetedWhere->string))
     sqlDyStringPrintf(tagQuery,  "%-s", facetedWhere->string); // trust because it was created safely
 struct slName *fileIds = sqlQuickList(conn, tagQuery->string);
 
+// no file matched the filters: "id IN ()" is not valid SQL, so return early
+if (fileIds == NULL)
+    return NULL;
+
 // retrieve the cdwFiles objects for these
 struct dyString *fileQuery = sqlDyStringCreate("SELECT * FROM cdwFile WHERE id IN (");
 sqlDyStringPrintValuesList(fileQuery, fileIds);
 sqlDyStringPrintf(fileQuery, ")");
 return cdwFileLoadByQuery(conn, fileQuery->string);
 }
 
 static void continueSearchVars()
 /* print out hidden forms variables for the current search */
 {
 cgiContinueHiddenVar("cdwFileSearch");
 char *fieldNames[128];
 char *tempFileTableFields = cloneString(fileTableFields); // cannot modify string literals
 int fieldCount = chopString(tempFileTableFields, ",", fieldNames, ArraySize(fieldNames));
 int i;