File: command.go

package info (click to toggle)
golang-github-ziutek-mymysql 1.5.4%2Bgit20170206.23.0582bcf-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, trixie
  • size: 388 kB
  • sloc: makefile: 8; sh: 2
file content (149 lines) | stat: -rw-r--r-- 3,706 bytes parent folder | download
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)
	}
}*/