MCPcopy Create free account
hub / github.com/IceFireDB/IceFireDB / handleStmtExecute

Method handleStmtExecute

IceFireDB-SQLProxy/pkg/mysql/server/stmt.go:101–167  ·  view source on GitHub ↗
(data []byte)

Source from the content-addressed store, hash-verified

99}
100
101func (c *Conn) handleStmtExecute(data []byte) (*Result, error) {
102 if len(data) < 9 {
103 return nil, ErrMalformPacket
104 }
105
106 pos := 0
107 id := binary.LittleEndian.Uint32(data[0:4])
108 pos += 4
109
110 s, ok := c.stmts[id]
111 if !ok {
112 return nil, NewDefaultError(ER_UNKNOWN_STMT_HANDLER,
113 strconv.FormatUint(uint64(id), 10), "stmt_execute")
114 }
115
116 flag := data[pos]
117 pos++
118 // now we only support CURSOR_TYPE_NO_CURSOR flag
119 if flag != 0 {
120 return nil, NewError(ER_UNKNOWN_ERROR, fmt.Sprintf("unsupported flag %d", flag))
121 }
122
123 // skip iteration-count, always 1
124 pos += 4
125
126 var nullBitmaps []byte
127 var paramTypes []byte
128 var paramValues []byte
129
130 paramNum := s.Params
131
132 if paramNum > 0 {
133 nullBitmapLen := (s.Params + 7) >> 3
134 if len(data) < (pos + nullBitmapLen + 1) {
135 return nil, ErrMalformPacket
136 }
137 nullBitmaps = data[pos : pos+nullBitmapLen]
138 pos += nullBitmapLen
139
140 // new param bound flag
141 if data[pos] == 1 {
142 pos++
143 if len(data) < (pos + (paramNum << 1)) {
144 return nil, ErrMalformPacket
145 }
146
147 paramTypes = data[pos : pos+(paramNum<<1)]
148 pos += paramNum << 1
149
150 paramValues = data[pos:]
151 }
152
153 if err := c.bindStmtArgs(s, nullBitmaps, paramTypes, paramValues); err != nil {
154 return nil, errors.Trace(err)
155 }
156 }
157
158 var r *Result

Callers 1

dispatchMethod · 0.95

Calls 5

bindStmtArgsMethod · 0.95
HandleStmtExecuteMethod · 0.65
NewDefaultErrorFunction · 0.50
NewErrorFunction · 0.50
ResetParamsMethod · 0.45

Tested by

no test coverage detected