The figure below gives an example of how the proxy might be used when injecting queries into the query queue. Because the proxy sits between the client and MySQL server, what the proxy sends to the server, and the information that the proxy ultimately returns to the client do not have to match or correlate. Once the client has connected to the proxy, the following sequence occurs for each individual query sent by the client.

            The client submits one query to the proxy, the
            read_query() function within the proxy
            is triggered. The function adds the query to the query
            queue.
          
            Once manipulation by read_query() has
            completed, the queries are submitted, sequentially, to the
            MySQL server.
          
            The MySQL server returns the results from each query, one
            result set for each query submitted. The
            read_query_result() function is
            triggered for each result set, and each invocation can
            decide which result set to return to the client
          
For example, you can queue additional queries into the global query queue to be processed by the server. This can be used to add statistical information by adding queries before and after the original query, changing the original query:
SELECT * FROM City;
Into a sequence of queries:
SELECT NOW(); SELECT * FROM City; SELECT NOW();
        You can also modify the original statement, for example to add
        EXPLAIN to each statement
        executed to get information on how the statement was processed,
        again altering our original SQL statement into a number of
        statements:
      
SELECT * FROM City; EXPLAIN SELECT * FROM City;
In both of these examples, the client would have received more result sets than expected. Regardless of how you manipulate the incoming query and the returned result, the number of queries returned by the proxy must match the number of original queries sent by the client.
        You could adjust the client to handle the multiple result sets
        sent by the proxy, but in most cases you will want the existence
        of the proxy to remain transparent. To ensure that the number of
        queries and result sets match, you can use the MySQL Proxy
        read_query_result() to extract the
        additional result set information and return only the result set
        the client originally requested back to the client. You can
        achieve this by giving each query that you add to the query
        queue a unique ID, and then filter out queries that do not match
        the original query ID when processing them with
        read_query_result().
      

User Comments
Add your own comment.