Looking at the documentation for hook_query_alter(), I see that the parameter is reported to implement QueryAlterableInterface; looking at the code of _node_query_node_access_alter(), called by an implementation of hook_query_TAG_alter(), I notice that it is using methods not defined in the QueryAlterableInterface interface, such as $query->getTables().
If I implement hook_query_alter(), or hook_query_TAG_alter(), what methods should I use, and which methods can I effectively use?