The init callback is always called first at the beginning of a query, followed by a call to the Section 18.1.2, “change_columns()”. The Section 18.1.6, “end_of_records()” member is always called last at the very end.
For simple non-grouping queries only Section 18.1.3, “send_row()” is called once for each result row.
You cann use the CALLTRACE() procedure to check in which sequence the member functions are called on any query. This procedure will send one result row for each member function call, every row contains a single text field with one of the values add, end_group, end_of_records or send_row.