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