github.com/vnforks/kid/v5@v5.22.1-0.20200408055009-b89d99c65676/store/sqlstore/utils.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package sqlstore
     5  
     6  import (
     7  	"database/sql"
     8  	"strconv"
     9  	"strings"
    10  
    11  	"github.com/mattermost/gorp"
    12  	"github.com/vnforks/kid/v5/mlog"
    13  )
    14  
    15  var escapeLikeSearchChar = []string{
    16  	"%",
    17  	"_",
    18  }
    19  
    20  func sanitizeSearchTerm(term string, escapeChar string) string {
    21  	term = strings.Replace(term, escapeChar, "", -1)
    22  
    23  	for _, c := range escapeLikeSearchChar {
    24  		term = strings.Replace(term, c, escapeChar+c, -1)
    25  	}
    26  
    27  	return term
    28  }
    29  
    30  // Converts a list of strings into a list of query parameters and a named parameter map that can
    31  // be used as part of a SQL query.
    32  func MapStringsToQueryParams(list []string, paramPrefix string) (string, map[string]interface{}) {
    33  	var keys strings.Builder
    34  	params := make(map[string]interface{}, len(list))
    35  	for i, entry := range list {
    36  		if keys.Len() > 0 {
    37  			keys.WriteString(",")
    38  		}
    39  
    40  		key := paramPrefix + strconv.Itoa(i)
    41  		keys.WriteString(":" + key)
    42  		params[key] = entry
    43  	}
    44  
    45  	return "(" + keys.String() + ")", params
    46  }
    47  
    48  // finalizeTransaction ensures a transaction is closed after use, rolling back if not already committed.
    49  func finalizeTransaction(transaction *gorp.Transaction) {
    50  	// Rollback returns sql.ErrTxDone if the transaction was already closed.
    51  	if err := transaction.Rollback(); err != nil && err != sql.ErrTxDone {
    52  		mlog.Error("Failed to rollback transaction", mlog.Err(err))
    53  	}
    54  }