a52bdc2dcb5068501fbc48696d7ad85e8fb2608e
hiram
  Tue Aug 13 17:57:48 2024 -0700
eliminate the DBG statements and get the query string construction into a dyPrintf refs #32897

diff --git src/hg/hubApi/findGenome.c src/hg/hubApi/findGenome.c
index 4efd1d1..267e352 100644
--- src/hg/hubApi/findGenome.c
+++ src/hg/hubApi/findGenome.c
@@ -80,90 +80,93 @@
 
 static long long multipleWordSearch(struct sqlConnection *conn, char **words, int wordCount, struct jsonWrite *jw, long long *totalMatchCount)
 /* perform search on multiple words, prepare json and return number of matches */
 {
 long long itemCount = 0;
 *totalMatchCount = 0;
 if (wordCount < 0)
     return itemCount;
 
 /* get the words[] into a single string */
 struct dyString *queryDy = dyStringNew(128);
 dyStringPrintf(queryDy, "%s", words[0]);
 for (int i = 1; i < wordCount; ++i)
     dyStringPrintf(queryDy, " %s", words[i]);
 
-char query[4096];
-if (allowAll)
-    sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE);", asmListTable, queryDy->string);
-else
-    sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE) AND browserExists=1;", asmListTable, queryDy->string);
-long long matchCount = sqlQuickLongLong(conn, query);
+struct dyString *query = dyStringNew(64);
+sqlDyStringPrintf(query, "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE)", asmListTable, queryDy->string);
+if (!allowAll)
+    sqlDyStringPrintf(query, " AND browserExists=1");
+long long matchCount = sqlQuickLongLong(conn, query->string);
 if (matchCount > 0)
     {
-    verbose(1, "DBG: matchCount: %lld from search '%s'\n", matchCount, query);
     *totalMatchCount = matchCount;
-    if (allowAll)
-	sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE) ORDER BY priority LIMIT %d;", asmListTable, queryDy->string, maxItemsOutput);
-    else
-	sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE) AND browserExists=1 ORDER BY priority LIMIT %d;", asmListTable, queryDy->string, maxItemsOutput);
-    struct sqlResult *sr = sqlGetResult(conn, query);
+    dyStringFree(&query);
+    query = dyStringNew(64);
+    sqlDyStringPrintf(query, "SELECT * FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE)", asmListTable, queryDy->string);
+    if (!allowAll)
+	sqlDyStringPrintf(query, " AND browserExists=1");
+    sqlDyStringPrintf(query, " ORDER BY priority LIMIT %d;", maxItemsOutput);
+    struct sqlResult *sr = sqlGetResult(conn, query->string);
     itemCount = sqlJsonOut(jw, sr);
-    verbose(1, "DBG: itemCount: %lld from search '%s'\n", itemCount, query);
     sqlFreeResult(&sr);
+    dyStringFree(&query);
     }
 return itemCount;
 }
 
 static long long oneWordSearch(struct sqlConnection *conn, char *searchWord, struct jsonWrite *jw, long long *totalMatchCount)
 /* perform search on a single word, prepare json and return number of matches
  *   and number of potential matches totalMatchCount
  */
 {
-char query[4096];
 long long itemCount = 0;
 *totalMatchCount = 0;
 
-if (allowAll)
-    sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE);", asmListTable, searchWord);
-else
-    sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE) AND browserExists=1;", asmListTable, searchWord);
+struct dyString *query = dyStringNew(64);
+sqlDyStringPrintf(query, "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s' IN BOOLEAN MODE)", asmListTable, searchWord);
+if (!allowAll)
+    sqlDyStringPrintf(query, " AND browserExists=1");
 
-verbose(1, "DBG '%s'\n", query);
-long long matchCount = sqlQuickLongLong(conn, query);
+long long matchCount = sqlQuickLongLong(conn, query->string);
 boolean prefixSearch = FALSE;
 if (matchCount < 1)	/* no match, add the * wild card match to make a prefix match */
     {
-    if (allowAll)
-        sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s*' IN BOOLEAN MODE);", asmListTable, searchWord);
-    else
-        sqlSafef(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s*' IN BOOLEAN MODE) AND browserExists=1;", asmListTable, searchWord);
-    matchCount = sqlQuickLongLong(conn, query);
+    dyStringFree(&query);
+    query = dyStringNew(64);
+    sqlDyStringPrintf(query, "SELECT COUNT(*) FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s*' IN BOOLEAN MODE)", asmListTable, searchWord);
+    if (!allowAll)
+        sqlDyStringPrintf(query, " AND browserExists=1");
+    matchCount = sqlQuickLongLong(conn, query->string);
     if (matchCount > 0)
 	prefixSearch = TRUE;
     }
 if (matchCount < 1)
     return itemCount;
 *totalMatchCount = matchCount;
 
-if (allowAll)
-    sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s%s' IN BOOLEAN MODE) ORDER BY priority LIMIT %d;", asmListTable, searchWord, prefixSearch ? "*" : "", maxItemsOutput);
-else
-    sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s%s' IN BOOLEAN MODE) AND browserExists=1 ORDER BY priority LIMIT %d;", asmListTable, searchWord, prefixSearch ? "*" : "", maxItemsOutput);
-struct sqlResult *sr = sqlGetResult(conn, query);
+dyStringFree(&query);
+query = dyStringNew(64);
+
+sqlDyStringPrintf(query, "SELECT * FROM %s WHERE MATCH(name, commonName, scientificName, clade, description) AGAINST ('%s%s' IN BOOLEAN MODE)", asmListTable, searchWord, prefixSearch ? "*" : "");
+if (!allowAll)
+    sqlDyStringPrintf(query, " AND browserExists=1");
+sqlDyStringPrintf(query, " ORDER BY priority LIMIT %d;", maxItemsOutput);
+struct sqlResult *sr = sqlGetResult(conn, query->string);
 itemCount = sqlJsonOut(jw, sr);
 sqlFreeResult(&sr);
+dyStringFree(&query);
 
 return itemCount;
 }	/*	static long long oneWordSearch(struct sqlConnection *conn, char *searchWord, struct jsonWrite *jw) */
 
 static void elapsedTime(struct jsonWrite *jw)
 {
 long nowTime = clock1000();
 long elapsedTimeMs = nowTime - enteredMainTime;
 jsonWriteNumber(jw, "elapsedTimeMs", elapsedTimeMs);
 }
 
 void apiFindGenome(char *pathString[MAX_PATH_INFO])
 /* 'findGenome' function */
 {
 char *searchString = cgiOptionalString(argGenomeSearchTerm);