Skip to content

Commit 0ffb6eb

Browse files
committed
client: extract capability-to-name function from CapabilityString()
This makes this more flexible and improves the testability of this.
1 parent 8fd2c2a commit 0ffb6eb

File tree

3 files changed

+45
-66
lines changed

3 files changed

+45
-66
lines changed

client/conn.go

Lines changed: 3 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -581,72 +581,9 @@ func (c *Conn) CapabilityString() string {
581581
field := uint32(1 << bits.TrailingZeros32(capability))
582582
capability ^= field
583583

584-
switch field {
585-
case mysql.CLIENT_LONG_PASSWORD:
586-
caps = append(caps, "CLIENT_LONG_PASSWORD")
587-
case mysql.CLIENT_FOUND_ROWS:
588-
caps = append(caps, "CLIENT_FOUND_ROWS")
589-
case mysql.CLIENT_LONG_FLAG:
590-
caps = append(caps, "CLIENT_LONG_FLAG")
591-
case mysql.CLIENT_CONNECT_WITH_DB:
592-
caps = append(caps, "CLIENT_CONNECT_WITH_DB")
593-
case mysql.CLIENT_NO_SCHEMA:
594-
caps = append(caps, "CLIENT_NO_SCHEMA")
595-
case mysql.CLIENT_COMPRESS:
596-
caps = append(caps, "CLIENT_COMPRESS")
597-
case mysql.CLIENT_ODBC:
598-
caps = append(caps, "CLIENT_ODBC")
599-
case mysql.CLIENT_LOCAL_FILES:
600-
caps = append(caps, "CLIENT_LOCAL_FILES")
601-
case mysql.CLIENT_IGNORE_SPACE:
602-
caps = append(caps, "CLIENT_IGNORE_SPACE")
603-
case mysql.CLIENT_PROTOCOL_41:
604-
caps = append(caps, "CLIENT_PROTOCOL_41")
605-
case mysql.CLIENT_INTERACTIVE:
606-
caps = append(caps, "CLIENT_INTERACTIVE")
607-
case mysql.CLIENT_SSL:
608-
caps = append(caps, "CLIENT_SSL")
609-
case mysql.CLIENT_IGNORE_SIGPIPE:
610-
caps = append(caps, "CLIENT_IGNORE_SIGPIPE")
611-
case mysql.CLIENT_TRANSACTIONS:
612-
caps = append(caps, "CLIENT_TRANSACTIONS")
613-
case mysql.CLIENT_RESERVED:
614-
caps = append(caps, "CLIENT_RESERVED")
615-
case mysql.CLIENT_SECURE_CONNECTION:
616-
caps = append(caps, "CLIENT_SECURE_CONNECTION")
617-
case mysql.CLIENT_MULTI_STATEMENTS:
618-
caps = append(caps, "CLIENT_MULTI_STATEMENTS")
619-
case mysql.CLIENT_MULTI_RESULTS:
620-
caps = append(caps, "CLIENT_MULTI_RESULTS")
621-
case mysql.CLIENT_PS_MULTI_RESULTS:
622-
caps = append(caps, "CLIENT_PS_MULTI_RESULTS")
623-
case mysql.CLIENT_PLUGIN_AUTH:
624-
caps = append(caps, "CLIENT_PLUGIN_AUTH")
625-
case mysql.CLIENT_CONNECT_ATTRS:
626-
caps = append(caps, "CLIENT_CONNECT_ATTRS")
627-
case mysql.CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA:
628-
caps = append(caps, "CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA")
629-
case mysql.CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS:
630-
caps = append(caps, "CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS")
631-
case mysql.CLIENT_SESSION_TRACK:
632-
caps = append(caps, "CLIENT_SESSION_TRACK")
633-
case mysql.CLIENT_DEPRECATE_EOF:
634-
caps = append(caps, "CLIENT_DEPRECATE_EOF")
635-
case mysql.CLIENT_OPTIONAL_RESULTSET_METADATA:
636-
caps = append(caps, "CLIENT_OPTIONAL_RESULTSET_METADATA")
637-
case mysql.CLIENT_ZSTD_COMPRESSION_ALGORITHM:
638-
caps = append(caps, "CLIENT_ZSTD_COMPRESSION_ALGORITHM")
639-
case mysql.CLIENT_QUERY_ATTRIBUTES:
640-
caps = append(caps, "CLIENT_QUERY_ATTRIBUTES")
641-
case mysql.MULTI_FACTOR_AUTHENTICATION:
642-
caps = append(caps, "MULTI_FACTOR_AUTHENTICATION")
643-
case mysql.CLIENT_CAPABILITY_EXTENSION:
644-
caps = append(caps, "CLIENT_CAPABILITY_EXTENSION")
645-
case mysql.CLIENT_SSL_VERIFY_SERVER_CERT:
646-
caps = append(caps, "CLIENT_SSL_VERIFY_SERVER_CERT")
647-
case mysql.CLIENT_REMEMBER_OPTIONS:
648-
caps = append(caps, "CLIENT_REMEMBER_OPTIONS")
649-
default:
584+
if capname, ok := mysql.CapNames[field]; ok {
585+
caps = append(caps, capname)
586+
} else {
650587
caps = append(caps, fmt.Sprintf("(%d)", field))
651588
}
652589
}

client/conn_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,3 +237,10 @@ func (s *connTestSuite) TestUseDB() {
237237
err = s.c.UseDB("test")
238238
require.NoError(s.T(), err)
239239
}
240+
241+
func TestCapabilityString(t *testing.T) {
242+
conn := Conn{
243+
capability: mysql.CLIENT_PROTOCOL_41 | mysql.CLIENT_DEPRECATE_EOF,
244+
}
245+
require.Equal(t, "CLIENT_PROTOCOL_41|CLIENT_DEPRECATE_EOF", conn.CapabilityString())
246+
}

mysql/const.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,41 @@ const (
122122
CLIENT_REMEMBER_OPTIONS
123123
)
124124

125+
var CapNames = map[uint32]string{
126+
CLIENT_LONG_PASSWORD: "CLIENT_LONG_PASSWORD",
127+
CLIENT_FOUND_ROWS: "CLIENT_FOUND_ROWS",
128+
CLIENT_LONG_FLAG: "CLIENT_LONG_FLAG",
129+
CLIENT_CONNECT_WITH_DB: "CLIENT_CONNECT_WITH_DB",
130+
CLIENT_NO_SCHEMA: "CLIENT_NO_SCHEMA",
131+
CLIENT_COMPRESS: "CLIENT_COMPRESS",
132+
CLIENT_ODBC: "CLIENT_ODBC",
133+
CLIENT_LOCAL_FILES: "CLIENT_LOCAL_FILES",
134+
CLIENT_IGNORE_SPACE: "CLIENT_IGNORE_SPACE",
135+
CLIENT_PROTOCOL_41: "CLIENT_PROTOCOL_41",
136+
CLIENT_INTERACTIVE: "CLIENT_INTERACTIVE",
137+
CLIENT_SSL: "CLIENT_SSL",
138+
CLIENT_IGNORE_SIGPIPE: "CLIENT_IGNORE_SIGPIPE",
139+
CLIENT_TRANSACTIONS: "CLIENT_TRANSACTIONS",
140+
CLIENT_RESERVED: "CLIENT_RESERVED",
141+
CLIENT_SECURE_CONNECTION: "CLIENT_SECURE_CONNECTION",
142+
CLIENT_MULTI_STATEMENTS: "CLIENT_MULTI_STATEMENTS",
143+
CLIENT_MULTI_RESULTS: "CLIENT_MULTI_RESULTS",
144+
CLIENT_PS_MULTI_RESULTS: "CLIENT_PS_MULTI_RESULTS",
145+
CLIENT_PLUGIN_AUTH: "CLIENT_PLUGIN_AUTH",
146+
CLIENT_CONNECT_ATTRS: "CLIENT_CONNECT_ATTRS",
147+
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA: "CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA",
148+
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS: "CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS",
149+
CLIENT_SESSION_TRACK: "CLIENT_SESSION_TRACK",
150+
CLIENT_DEPRECATE_EOF: "CLIENT_DEPRECATE_EOF",
151+
CLIENT_OPTIONAL_RESULTSET_METADATA: "CLIENT_OPTIONAL_RESULTSET_METADATA",
152+
CLIENT_ZSTD_COMPRESSION_ALGORITHM: "CLIENT_ZSTD_COMPRESSION_ALGORITHM",
153+
CLIENT_QUERY_ATTRIBUTES: "CLIENT_QUERY_ATTRIBUTES",
154+
MULTI_FACTOR_AUTHENTICATION: "MULTI_FACTOR_AUTHENTICATION",
155+
CLIENT_CAPABILITY_EXTENSION: "CLIENT_CAPABILITY_EXTENSION",
156+
CLIENT_SSL_VERIFY_SERVER_CERT: "CLIENT_SSL_VERIFY_SERVER_CERT",
157+
CLIENT_REMEMBER_OPTIONS: "CLIENT_REMEMBER_OPTIONS",
158+
}
159+
125160
const (
126161
MYSQL_TYPE_DECIMAL byte = iota
127162
MYSQL_TYPE_TINY

0 commit comments

Comments
 (0)