Description:
The MySQL X protocol internals does not provide a full list of "Capabilities" which are provided if the client uses the CapabilitiesGet message.
It would be convenient to document this more formally.
While it may be that new features arise they should be also documented as that happens.
How to repeat:
Check https://dev.mysql.com/doc/internals/en/x-protocol.html and look for a formal definition of the capabilities exchange that's possible.
Suggested fix:
I notice a few things here.
- provide a list of those current capabilities which may be shown to the client and expected values
- provide an indication of which of these capabilities can be changed by the user as some like tls can be changed (0 or 1) whereas others such as plugin.version obviously is not settable by the client.
- ideally this information should be provided as part of the protocol: e.g. add another property: read_only_capabilities: [ array of property names ] ...., or writeable_properties: [ array of property names ]
- there's no documentation which talks about this now but it would seem best to not expose the mysql plugin version. Expose "functionality" by name etc instead, and also consider only exposing the minimal information possible until authentication has taken place. (there's already an open FR for this)