summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2012-06-19 18:10:32 +0400
committerSergey Petrunya <psergey@askmonty.org>2012-06-19 18:10:32 +0400
commit6eb2ce58635dded450953bf18123fbd7d9dbfaea (patch)
treed95484e850366c0b5930c350c6dc22b9a698e6a2 /sql
parent1ce0c706b39018c09994ef133fdeeb93d750903c (diff)
downloadmariadb-git-6eb2ce58635dded450953bf18123fbd7d9dbfaea.tar.gz
SHOW EXPLAIN: better comments
Diffstat (limited to 'sql')
-rw-r--r--sql/my_apc.h27
-rw-r--r--sql/sql_class.cc8
-rw-r--r--sql/sql_class.h29
3 files changed, 31 insertions, 33 deletions
diff --git a/sql/my_apc.h b/sql/my_apc.h
index 5de1cf7d8d3..5879a0070d6 100644
--- a/sql/my_apc.h
+++ b/sql/my_apc.h
@@ -75,38 +75,19 @@ private:
*/
Call_request *apc_calls;
-
- /*
- This mutex is used to
- - make queue put/remove operations atomic (one must be in posession of the
- mutex when putting/removing something from the queue)
-
- - make sure that nobody enqueues a request onto an Apc_target which has
- disabled==TRUE. The idea is:
- = requestor must be in possession of the mutex and check that
- disabled==FALSE when he is putting his request into the queue.
- = When the owner (ie. service) thread changes the Apc_target from
- enabled to disabled, it will acquire the mutex, disable the
- Apc_target (preventing any new requests), and then serve all pending
- requests.
- That way, we will never have the situation where the Apc_target is
- disabled, but there are some un-served requests.
- */
- //pthread_mutex_t LOCK_apc_queue;
-
class Call_request
{
public:
apc_func_t func; /* Function to call */
void *func_arg; /* Argument to pass it */
- bool processed;
- //pthread_mutex_t LOCK_request;
- //pthread_cond_t COND_request;
+ /* The caller will actually wait for "processed==TRUE" */
+ bool processed;
/* Condition that will be signalled when the request has been served */
mysql_cond_t COND_request;
-
+
+ /* Double linked-list linkage */
Call_request *next;
Call_request *prev;
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 040712fb42a..d694afebc2c 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -2311,6 +2311,10 @@ int select_send::send_data(List<Item> &items)
//////////////////////////////////////////////////////////////////////////////
+/*
+ Save the data being sent in our internal buffer.
+*/
+
int select_result_explain_buffer::send_data(List<Item> &items)
{
List_iterator_fast<Item> li(items);
@@ -2357,7 +2361,7 @@ int select_result_explain_buffer::send_data(List<Item> &items)
}
-/* Write all strings out to the output, and free them. */
+/* Write the saved resultset to the client (via this->protocol) and free it. */
void select_result_explain_buffer::flush_data()
{
@@ -2373,7 +2377,7 @@ void select_result_explain_buffer::flush_data()
}
-/* Just free all of the accumulated strings */
+/* Free the accumulated resultset */
void select_result_explain_buffer::discard_data()
{
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 345216dcdea..bfbc9e86611 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -1522,16 +1522,29 @@ extern "C" void my_message_sql(uint error, const char *str, myf MyFlags);
class select_result_explain_buffer;
+
+/*
+ SHOW EXPLAIN request object.
+
+ The thread that runs SHOW EXPLAIN statement creates a Show_explain_request
+ object R, and then schedules APC call of
+ Show_explain_request::get_explain_data((void*)&R).
+
+*/
+
class Show_explain_request
{
public:
- THD *target_thd;
- THD *request_thd;
+ THD *target_thd; /* thd that we're running SHOW EXPLAIN for */
+ THD *request_thd; /* thd that run SHOW EXPLAIN command */
+ /* If true, there was some error when producing EXPLAIN output. */
bool failed_to_produce;
-
+
+ /* SHOW EXPLAIN will be stored here */
select_result_explain_buffer *explain_buf;
-
+
+ /* Query that we've got SHOW EXPLAIN for */
String query_str;
static void get_explain_data(void *arg);
@@ -2414,11 +2427,11 @@ public:
/*
- This is what allows this thread to serve as a target for others to
- schedule Async Procedure Calls on.
+ Allows this thread to serve as a target for others to schedule Async
+ Procedure Calls on.
- It's possible to schedule arbitrary C function call but currently this
- facility is used only by SHOW EXPLAIN code (See Show_explain_request)
+ It's possible to schedule arbitrary C++ function calls. Currently, only
+ Show_explain_request uses this.
*/
Apc_target apc_target;