150 lines
3.6 KiB
Go
150 lines
3.6 KiB
Go
package native
|
|
|
|
import (
|
|
"log"
|
|
)
|
|
|
|
//import "log"
|
|
|
|
// _COM_QUIT, _COM_STATISTICS, _COM_PROCESS_INFO, _COM_DEBUG, _COM_PING:
|
|
func (my *Conn) sendCmd(cmd byte) {
|
|
my.seq = 0
|
|
pw := my.newPktWriter(1)
|
|
pw.writeByte(cmd)
|
|
if my.Debug {
|
|
log.Printf("[%2d <-] Command packet: Cmd=0x%x", my.seq-1, cmd)
|
|
}
|
|
}
|
|
|
|
// _COM_QUERY, _COM_INIT_DB, _COM_CREATE_DB, _COM_DROP_DB, _COM_STMT_PREPARE:
|
|
func (my *Conn) sendCmdStr(cmd byte, s string) {
|
|
my.seq = 0
|
|
pw := my.newPktWriter(1 + len(s))
|
|
pw.writeByte(cmd)
|
|
pw.write([]byte(s))
|
|
if my.Debug {
|
|
log.Printf("[%2d <-] Command packet: Cmd=0x%x %s", my.seq-1, cmd, s)
|
|
}
|
|
}
|
|
|
|
// _COM_PROCESS_KILL, _COM_STMT_CLOSE, _COM_STMT_RESET:
|
|
func (my *Conn) sendCmdU32(cmd byte, u uint32) {
|
|
my.seq = 0
|
|
pw := my.newPktWriter(1 + 4)
|
|
pw.writeByte(cmd)
|
|
pw.writeU32(u)
|
|
if my.Debug {
|
|
log.Printf("[%2d <-] Command packet: Cmd=0x%x %d", my.seq-1, cmd, u)
|
|
}
|
|
}
|
|
|
|
func (my *Conn) sendLongData(stmtid uint32, pnum uint16, data []byte) {
|
|
my.seq = 0
|
|
pw := my.newPktWriter(1 + 4 + 2 + len(data))
|
|
pw.writeByte(_COM_STMT_SEND_LONG_DATA)
|
|
pw.writeU32(stmtid) // Statement ID
|
|
pw.writeU16(pnum) // Parameter number
|
|
pw.write(data) // payload
|
|
if my.Debug {
|
|
log.Printf("[%2d <-] SendLongData packet: pnum=%d", my.seq-1, pnum)
|
|
}
|
|
}
|
|
|
|
/*func (my *Conn) sendCmd(cmd byte, argv ...interface{}) {
|
|
// Reset sequence number
|
|
my.seq = 0
|
|
// Write command
|
|
switch cmd {
|
|
case _COM_QUERY, _COM_INIT_DB, _COM_CREATE_DB, _COM_DROP_DB,
|
|
_COM_STMT_PREPARE:
|
|
pw := my.newPktWriter(1 + lenBS(argv[0]))
|
|
writeByte(pw, cmd)
|
|
writeBS(pw, argv[0])
|
|
|
|
case _COM_STMT_SEND_LONG_DATA:
|
|
pw := my.newPktWriter(1 + 4 + 2 + lenBS(argv[2]))
|
|
writeByte(pw, cmd)
|
|
writeU32(pw, argv[0].(uint32)) // Statement ID
|
|
writeU16(pw, argv[1].(uint16)) // Parameter number
|
|
writeBS(pw, argv[2]) // payload
|
|
|
|
case _COM_QUIT, _COM_STATISTICS, _COM_PROCESS_INFO, _COM_DEBUG, _COM_PING:
|
|
pw := my.newPktWriter(1)
|
|
writeByte(pw, cmd)
|
|
|
|
case _COM_FIELD_LIST:
|
|
pay_len := 1 + lenBS(argv[0]) + 1
|
|
if len(argv) > 1 {
|
|
pay_len += lenBS(argv[1])
|
|
}
|
|
|
|
pw := my.newPktWriter(pay_len)
|
|
writeByte(pw, cmd)
|
|
writeNT(pw, argv[0])
|
|
if len(argv) > 1 {
|
|
writeBS(pw, argv[1])
|
|
}
|
|
|
|
case _COM_TABLE_DUMP:
|
|
pw := my.newPktWriter(1 + lenLC(argv[0]) + lenLC(argv[1]))
|
|
writeByte(pw, cmd)
|
|
writeLC(pw, argv[0])
|
|
writeLC(pw, argv[1])
|
|
|
|
case _COM_REFRESH, _COM_SHUTDOWN:
|
|
pw := my.newPktWriter(1 + 1)
|
|
writeByte(pw, cmd)
|
|
writeByte(pw, argv[0].(byte))
|
|
|
|
case _COM_STMT_FETCH:
|
|
pw := my.newPktWriter(1 + 4 + 4)
|
|
writeByte(pw, cmd)
|
|
writeU32(pw, argv[0].(uint32))
|
|
writeU32(pw, argv[1].(uint32))
|
|
|
|
case _COM_PROCESS_KILL, _COM_STMT_CLOSE, _COM_STMT_RESET:
|
|
pw := my.newPktWriter(1 + 4)
|
|
writeByte(pw, cmd)
|
|
writeU32(pw, argv[0].(uint32))
|
|
|
|
case _COM_SET_OPTION:
|
|
pw := my.newPktWriter(1 + 2)
|
|
writeByte(pw, cmd)
|
|
writeU16(pw, argv[0].(uint16))
|
|
|
|
case _COM_CHANGE_USER:
|
|
pw := my.newPktWriter(
|
|
1 + lenBS(argv[0]) + 1 + lenLC(argv[1]) + lenBS(argv[2]) + 1,
|
|
)
|
|
writeByte(pw, cmd)
|
|
writeNT(pw, argv[0]) // User name
|
|
writeLC(pw, argv[1]) // Scrambled password
|
|
writeNT(pw, argv[2]) // Database name
|
|
//writeU16(pw, argv[3]) // Character set number (since 5.1.23?)
|
|
|
|
case _COM_BINLOG_DUMP:
|
|
pay_len := 1 + 4 + 2 + 4
|
|
if len(argv) > 3 {
|
|
pay_len += lenBS(argv[3])
|
|
}
|
|
|
|
pw := my.newPktWriter(pay_len)
|
|
writeByte(pw, cmd)
|
|
writeU32(pw, argv[0].(uint32)) // Start position
|
|
writeU16(pw, argv[1].(uint16)) // Flags
|
|
writeU32(pw, argv[2].(uint32)) // Slave server id
|
|
if len(argv) > 3 {
|
|
writeBS(pw, argv[3])
|
|
}
|
|
|
|
// TODO: case COM_REGISTER_SLAVE:
|
|
|
|
default:
|
|
panic("Unknown code for MySQL command")
|
|
}
|
|
|
|
if my.Debug {
|
|
log.Printf("[%2d <-] Command packet: Cmd=0x%x", my.seq-1, cmd)
|
|
}
|
|
}*/
|