MCPcopy
hub / github.com/pingcap/tidb / escapeBackslashCSV

Function escapeBackslashCSV

dumpling/export/sql_type.go:106–142  ·  view source on GitHub ↗
(s []byte, bf *bytes.Buffer, opt *csvOption)

Source from the content-addressed store, hash-verified

104}
105
106func escapeBackslashCSV(s []byte, bf *bytes.Buffer, opt *csvOption) {
107 var (
108 escape byte
109 last int
110 specCmt byte
111 )
112 if len(opt.delimiter) > 0 {
113 specCmt = opt.delimiter[0] // if csv has a delimiter, we should use backslash to comment the delimiter in field value
114 } else if len(opt.separator) > 0 {
115 specCmt = opt.separator[0] // if csv's delimiter is "", we should escape the separator to avoid error
116 }
117
118 for i := 0; i < len(s); i++ {
119 escape = 0
120
121 switch s[i] {
122 case 0: /* Must be escaped for 'mysql' */
123 escape = '0'
124 case '\r':
125 escape = 'r'
126 case '\n': /* escaped for line terminators */
127 escape = 'n'
128 case '\\':
129 escape = '\\'
130 case specCmt:
131 escape = specCmt
132 }
133
134 if escape != 0 {
135 bf.Write(s[last:i])
136 bf.WriteByte('\\')
137 bf.WriteByte(escape)
138 last = i + 1
139 }
140 }
141 bf.Write(s[last:])
142}
143
144func escapeSQL(s []byte, bf *bytes.Buffer, escapeBackslash bool) { // revive:disable-line:flag-parameter
145 if escapeBackslash {

Callers 1

escapeCSVFunction · 0.85

Calls 1

WriteMethod · 0.65

Tested by

no test coverage detected