* func (c *Conn) HandleCommand() error { if c.Conn == nil { return fmt.Errorf("connection closed") } data, err := c.ReadPacket() if err != nil { c.Close() c.Conn = nil return err } v := c.dispatch(data) err = c.writeValue(v) if c.Conn != nil { c.ResetSequence()
(data []byte)
| 90 | } |
| 91 | */ |
| 92 | func (c *Conn) dispatch(data []byte) any { |
| 93 | cmd := data[0] |
| 94 | data = data[1:] |
| 95 | switch cmd { |
| 96 | case COM_QUIT: |
| 97 | //c.h.CloseConn(c) |
| 98 | c.Close() |
| 99 | c.Conn = nil |
| 100 | return noResponse{} |
| 101 | case COM_QUERY: |
| 102 | if r, err := c.h.HandleQuery(c, hack.String(data)); err != nil { |
| 103 | return err |
| 104 | } else { |
| 105 | return r |
| 106 | } |
| 107 | case COM_PING: |
| 108 | return nil |
| 109 | case COM_INIT_DB: |
| 110 | db := hack.String(data) |
| 111 | if err := c.h.UseDB(c, db); err != nil { |
| 112 | return err |
| 113 | } |
| 114 | c.db = db |
| 115 | return nil |
| 116 | case COM_FIELD_LIST: |
| 117 | index := bytes.IndexByte(data, 0x00) |
| 118 | table := hack.String(data[0:index]) |
| 119 | wildcard := hack.String(data[index+1:]) |
| 120 | |
| 121 | if fs, err := c.h.HandleFieldList(c, table, wildcard); err != nil { |
| 122 | return err |
| 123 | } else { |
| 124 | return fs |
| 125 | } |
| 126 | case COM_STMT_PREPARE: |
| 127 | c.stmtID++ |
| 128 | st := new(Stmt) |
| 129 | st.ID = c.stmtID |
| 130 | st.Query = hack.String(data) |
| 131 | var err error |
| 132 | if st.Params, st.Columns, st.Context, err = c.h.HandleStmtPrepare(c, st.Query); err != nil { |
| 133 | return err |
| 134 | } else { |
| 135 | st.ResetParams() |
| 136 | c.stmts[c.stmtID] = st |
| 137 | return st |
| 138 | } |
| 139 | case COM_STMT_EXECUTE: |
| 140 | if r, err := c.handleStmtExecute(data); err != nil { |
| 141 | return err |
| 142 | } else { |
| 143 | return r |
| 144 | } |
| 145 | case COM_STMT_CLOSE: |
| 146 | if err := c.handleStmtClose(data); err != nil { |
| 147 | return err |
| 148 | } |
| 149 | return noResponse{} |
no test coverage detected