ProxySQL implements query parsing in the Query_Processor class. 4 virtual functions are introduced in Query_Processor class: virtual void * query_parser_init(char *query, int query_length, int flags) {return NULL;}; virtual enum MYSQL_COM_QUERY_command query_parser_command_type(void *args) {return MYSQL_COM_QUERY___UNKNOWN;} virtual char * query_parser_first_comment(void *args) { return NULL; } virtual void query_parser_free(void *args) {}; query_parser_init() query_parser_init() get as arguments a pointer to the query, its length, and flags that are specific to Query_Processor implementation or simply ignored. Because multiple implementations of the query parsing should be possible, query_parser_init() returns a generic pointer that should point to a data structure created by query_parser_init() itself. The pointer needs to be passed at the end to query_parser_free() to be freed. query_parser_free() Free the structure originally created by query_parser_init() query_parser_command_type() Accept as argument the structure created by query_parser_init() and returns the type of query processed. query_parser_first_comment() Not implemented yet. In case the filterning need to be performed based on comments in the query, query_parser_first_comment() can return such comment.