github.com/hashicorp/vault/sdk@v0.13.0/database/helper/dbutil/quoteidentifier.go (about) 1 // Copyright (c) 2011-2013, 'pq' Contributors Portions Copyright (C) 2011 Blake 2 // Mizerany 3 // 4 // Permission is hereby granted, free of charge, to any person obtaining a copy 5 // of this software and associated documentation files (the "Software"), to deal 6 // in the Software without restriction, including without limitation the rights 7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 // copies of the Software, and to permit persons to whom the Software is 9 // furnished to do so, subject to the following conditions: 10 // 11 // The above copyright notice and this permission notice shall be included in 12 // all copies or substantial portions of the Software. 13 // 14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 // SOFTWARE. 21 22 // Copied from https://github.com/lib/pq/blob/v1.10.4/conn.go#L1640 23 24 package dbutil 25 26 import "strings" 27 28 // QuoteIdentifier quotes an "identifier" (e.g. a table or a column name) to be 29 // used as part of an SQL statement. For example: 30 // 31 // tblname := "my_table" 32 // data := "my_data" 33 // quoted := pq.QuoteIdentifier(tblname) 34 // err := db.Exec(fmt.Sprintf("INSERT INTO %s VALUES ($1)", quoted), data) 35 // 36 // Any double quotes in name will be escaped. The quoted identifier will be 37 // case sensitive when used in a query. If the input string contains a zero 38 // byte, the result will be truncated immediately before it. 39 func QuoteIdentifier(name string) string { 40 end := strings.IndexRune(name, 0) 41 if end > -1 { 42 name = name[:end] 43 } 44 return `"` + strings.ReplaceAll(name, `"`, `""`) + `"` 45 }