This repository has been archived by the owner on Jan 19, 2019. It is now read-only.
forked from ziutek/mymysql
/
command.go
149 lines (127 loc) · 3.62 KB
/
command.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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)
}
}*/