|
7 | 7 | "math" |
8 | 8 |
|
9 | 9 | . "github.com/go-mysql-org/go-mysql/mysql" |
| 10 | + "github.com/go-mysql-org/go-mysql/utils" |
10 | 11 | "github.com/pingcap/errors" |
11 | 12 | ) |
12 | 13 |
|
@@ -146,37 +147,44 @@ func (s *Stmt) write(args ...interface{}) error { |
146 | 147 | length += len(paramValues[i]) |
147 | 148 | } |
148 | 149 |
|
149 | | - data := make([]byte, 4, 4+length) |
| 150 | + data := utils.BytesBufferGet() |
| 151 | + defer func() { |
| 152 | + utils.BytesBufferPut(data) |
| 153 | + }() |
| 154 | + if data.Len() < length+4 { |
| 155 | + data.Grow(4 + length) |
| 156 | + } |
150 | 157 |
|
151 | | - data = append(data, COM_STMT_EXECUTE) |
152 | | - data = append(data, byte(s.id), byte(s.id>>8), byte(s.id>>16), byte(s.id>>24)) |
| 158 | + data.Write([]byte{0, 0, 0, 0}) |
| 159 | + data.WriteByte(COM_STMT_EXECUTE) |
| 160 | + data.Write([]byte{byte(s.id), byte(s.id >> 8), byte(s.id >> 16), byte(s.id >> 24)}) |
153 | 161 |
|
154 | 162 | //flag: CURSOR_TYPE_NO_CURSOR |
155 | | - data = append(data, 0x00) |
| 163 | + data.WriteByte(0x00) |
156 | 164 |
|
157 | 165 | //iteration-count, always 1 |
158 | | - data = append(data, 1, 0, 0, 0) |
| 166 | + data.Write([]byte{1, 0, 0, 0}) |
159 | 167 |
|
160 | 168 | if s.params > 0 { |
161 | | - data = append(data, nullBitmap...) |
| 169 | + data.Write(nullBitmap) |
162 | 170 |
|
163 | 171 | //new-params-bound-flag |
164 | | - data = append(data, newParamBoundFlag) |
| 172 | + data.WriteByte(newParamBoundFlag) |
165 | 173 |
|
166 | 174 | if newParamBoundFlag == 1 { |
167 | 175 | //type of each parameter, length: num-params * 2 |
168 | | - data = append(data, paramTypes...) |
| 176 | + data.Write(paramTypes) |
169 | 177 |
|
170 | 178 | //value of each parameter |
171 | 179 | for _, v := range paramValues { |
172 | | - data = append(data, v...) |
| 180 | + data.Write(v) |
173 | 181 | } |
174 | 182 | } |
175 | 183 | } |
176 | 184 |
|
177 | 185 | s.conn.ResetSequence() |
178 | 186 |
|
179 | | - return s.conn.WritePacket(data) |
| 187 | + return s.conn.WritePacket(data.Bytes()) |
180 | 188 | } |
181 | 189 |
|
182 | 190 | func (c *Conn) Prepare(query string) (*Stmt, error) { |
|
0 commit comments