Skip to content

Commit 7768ced

Browse files
dveedenlance6716
andauthored
client: extract capability-to-name function from CapabilityString() (#1079)
This makes this more flexible and improves the testability of this. Co-authored-by: lance6716 <[email protected]>
1 parent 75277c8 commit 7768ced

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
@@ -593,72 +593,9 @@ func (c *Conn) CapabilityString() string {
593593
field := uint32(1 << bits.TrailingZeros32(capability))
594594
capability ^= field
595595

596-
switch field {
597-
case mysql.CLIENT_LONG_PASSWORD:
598-
caps = append(caps, "CLIENT_LONG_PASSWORD")
599-
case mysql.CLIENT_FOUND_ROWS:
600-
caps = append(caps, "CLIENT_FOUND_ROWS")
601-
case mysql.CLIENT_LONG_FLAG:
602-
caps = append(caps, "CLIENT_LONG_FLAG")
603-
case mysql.CLIENT_CONNECT_WITH_DB:
604-
caps = append(caps, "CLIENT_CONNECT_WITH_DB")
605-
case mysql.CLIENT_NO_SCHEMA:
606-
caps = append(caps, "CLIENT_NO_SCHEMA")
607-
case mysql.CLIENT_COMPRESS:
608-
caps = append(caps, "CLIENT_COMPRESS")
609-
case mysql.CLIENT_ODBC:
610-
caps = append(caps, "CLIENT_ODBC")
611-
case mysql.CLIENT_LOCAL_FILES:
612-
caps = append(caps, "CLIENT_LOCAL_FILES")
613-
case mysql.CLIENT_IGNORE_SPACE:
614-
caps = append(caps, "CLIENT_IGNORE_SPACE")
615-
case mysql.CLIENT_PROTOCOL_41:
616-
caps = append(caps, "CLIENT_PROTOCOL_41")
617-
case mysql.CLIENT_INTERACTIVE:
618-
caps = append(caps, "CLIENT_INTERACTIVE")
619-
case mysql.CLIENT_SSL:
620-
caps = append(caps, "CLIENT_SSL")
621-
case mysql.CLIENT_IGNORE_SIGPIPE:
622-
caps = append(caps, "CLIENT_IGNORE_SIGPIPE")
623-
case mysql.CLIENT_TRANSACTIONS:
624-
caps = append(caps, "CLIENT_TRANSACTIONS")
625-
case mysql.CLIENT_RESERVED:
626-
caps = append(caps, "CLIENT_RESERVED")
627-
case mysql.CLIENT_SECURE_CONNECTION:
628-
caps = append(caps, "CLIENT_SECURE_CONNECTION")
629-
case mysql.CLIENT_MULTI_STATEMENTS:
630-
caps = append(caps, "CLIENT_MULTI_STATEMENTS")
631-
case mysql.CLIENT_MULTI_RESULTS:
632-
caps = append(caps, "CLIENT_MULTI_RESULTS")
633-
case mysql.CLIENT_PS_MULTI_RESULTS:
634-
caps = append(caps, "CLIENT_PS_MULTI_RESULTS")
635-
case mysql.CLIENT_PLUGIN_AUTH:
636-
caps = append(caps, "CLIENT_PLUGIN_AUTH")
637-
case mysql.CLIENT_CONNECT_ATTRS:
638-
caps = append(caps, "CLIENT_CONNECT_ATTRS")
639-
case mysql.CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA:
640-
caps = append(caps, "CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA")
641-
case mysql.CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS:
642-
caps = append(caps, "CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS")
643-
case mysql.CLIENT_SESSION_TRACK:
644-
caps = append(caps, "CLIENT_SESSION_TRACK")
645-
case mysql.CLIENT_DEPRECATE_EOF:
646-
caps = append(caps, "CLIENT_DEPRECATE_EOF")
647-
case mysql.CLIENT_OPTIONAL_RESULTSET_METADATA:
648-
caps = append(caps, "CLIENT_OPTIONAL_RESULTSET_METADATA")
649-
case mysql.CLIENT_ZSTD_COMPRESSION_ALGORITHM:
650-
caps = append(caps, "CLIENT_ZSTD_COMPRESSION_ALGORITHM")
651-
case mysql.CLIENT_QUERY_ATTRIBUTES:
652-
caps = append(caps, "CLIENT_QUERY_ATTRIBUTES")
653-
case mysql.MULTI_FACTOR_AUTHENTICATION:
654-
caps = append(caps, "MULTI_FACTOR_AUTHENTICATION")
655-
case mysql.CLIENT_CAPABILITY_EXTENSION:
656-
caps = append(caps, "CLIENT_CAPABILITY_EXTENSION")
657-
case mysql.CLIENT_SSL_VERIFY_SERVER_CERT:
658-
caps = append(caps, "CLIENT_SSL_VERIFY_SERVER_CERT")
659-
case mysql.CLIENT_REMEMBER_OPTIONS:
660-
caps = append(caps, "CLIENT_REMEMBER_OPTIONS")
661-
default:
596+
if capname, ok := mysql.CapNames[field]; ok {
597+
caps = append(caps, capname)
598+
} else {
662599
caps = append(caps, fmt.Sprintf("(%d)", field))
663600
}
664601
}

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)