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 }