internal/postgres/symbolsearch: add SearchType.String

SearchType.String is added to provide a human readable name for the
search type in error messages and stats.

For golang/go#44142

Change-Id: I1f23de03d046a5361fb3a58471e0169a25365485
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/341669
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/postgres/symbolsearch.go b/internal/postgres/symbolsearch.go
index 45a096f..5165d94 100644
--- a/internal/postgres/symbolsearch.go
+++ b/internal/postgres/symbolsearch.go
@@ -283,8 +283,8 @@
 
 func runSymbolSearch(ctx context.Context, ddb *database.DB,
 	st symbolsearch.SearchType, q string, limit int, args ...interface{}) (_ []*SearchResult, err error) {
-	defer derrors.Wrap(&err, "runSymbolSearch(ctx, ddb, query, %q, %d)", q, limit)
-	defer middleware.ElapsedStat(ctx, "runSymbolSearch")()
+	defer derrors.Wrap(&err, "runSymbolSearch(ctx, ddb, %q, %q, %d, %v)", st, q, limit, args)
+	defer middleware.ElapsedStat(ctx, fmt.Sprintf("%s-runSymbolSearch", st))()
 
 	ids, err := fetchMatchingSymbolIDs(ctx, ddb, st, q)
 	if err != nil {
@@ -301,8 +301,8 @@
 // symbolsearch.MatchingSymbolIDsQuery. The ids returned will be used by in
 // runSymbolSearch.
 func fetchMatchingSymbolIDs(ctx context.Context, ddb *database.DB, st symbolsearch.SearchType, q string) (_ []int, err error) {
-	defer derrors.Wrap(&err, "fetchMatchingSymbolIDs(ctx, ddb, %d, %q)", st, q)
-	defer middleware.ElapsedStat(ctx, "fetchMatchingSymbolIDs")()
+	defer derrors.Wrap(&err, "fetchMatchingSymbolIDs(ctx, ddb, %q, %q)", st, q)
+	defer middleware.ElapsedStat(ctx, fmt.Sprintf("%s-fetchMatchingSymbolIDs", st))()
 
 	var ids []int
 	collect := func(rows *sql.Rows) error {
@@ -327,8 +327,8 @@
 // symbolsearch.SearchType and args.
 func fetchSymbolSearchResults(ctx context.Context, ddb *database.DB,
 	st symbolsearch.SearchType, ids []int, limit int, args ...interface{}) (results []*SearchResult, err error) {
-	defer derrors.Wrap(&err, "fetchSymbolSearchResults(ctx, ddb, st: %d, ids: %v, limit:  %d, args: %v)", st, ids, limit, args)
-	defer middleware.ElapsedStat(ctx, "fetchSymbolSearchResults")()
+	defer derrors.Wrap(&err, "fetchSymbolSearchResults(ctx, ddb, %q, ids: %v, limit:  %d, args: %v)", st.String(), ids, limit, args)
+	defer middleware.ElapsedStat(ctx, fmt.Sprintf("%s-fetchSymbolSearchResults", st))()
 
 	collect := func(rows *sql.Rows) error {
 		var r SearchResult
diff --git a/internal/postgres/symbolsearch/type.go b/internal/postgres/symbolsearch/type.go
index 2f8c8be..3c75486 100644
--- a/internal/postgres/symbolsearch/type.go
+++ b/internal/postgres/symbolsearch/type.go
@@ -95,3 +95,20 @@
 	// and the results are combined.
 	SearchTypeMultiWordExact
 )
+
+// String returns the name of the search type as a string.
+func (st SearchType) String() string {
+	switch st {
+	case SearchTypeSymbol:
+		return "SearchTypeSymbol"
+	case SearchTypePackageDotSymbol:
+		return "SearchTypePackageDotSymbol"
+	case SearchTypeMultiWordOr:
+		return "SearchTypeMultiWordOr"
+	case SearchTypeMultiWordExact:
+		return "SearchTypeMultiWordExact"
+	default:
+		// This should never happen.
+		return "?unknown?"
+	}
+}