00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <config.h>
00031 #include <drizzled/plugin.h>
00032 #include <drizzled/statistics_variables.h>
00033 #include <drizzled/session.h>
00034 #include <drizzled/drizzled.h>
00035 #include "status_vars.h"
00036
00037 using namespace drizzled;
00038
00039 StatusVars::StatusVars()
00040 {
00041 status_var_counters= (system_status_var*) malloc(sizeof(system_status_var));
00042 memset(status_var_counters, 0, sizeof(system_status_var));
00043 sent_row_count= 0;
00044 }
00045
00046 StatusVars::StatusVars(const StatusVars &status_vars)
00047 {
00048 status_var_counters= (system_status_var*) malloc(sizeof(system_status_var));
00049 memset(status_var_counters, 0, sizeof(system_status_var));
00050 copySystemStatusVar(status_var_counters, status_vars.status_var_counters);
00051 sent_row_count= 0;
00052 }
00053
00054 StatusVars::~StatusVars()
00055 {
00056 free(status_var_counters);
00057 }
00058
00059 void StatusVars::copySystemStatusVar(system_status_var *to_var,
00060 system_status_var *from_var)
00061 {
00062 uint64_t *end= (uint64_t*) ((unsigned char*) to_var + offsetof(system_status_var,
00063 last_system_status_var) + sizeof(uint64_t));
00064
00065 uint64_t *to= (uint64_t*) to_var;
00066 uint64_t *from= (uint64_t*) from_var;
00067
00068 while (to != end)
00069 {
00070 *(to++)= *(from++);
00071 }
00072 to_var->last_query_cost= from_var->last_query_cost;
00073 }
00074
00075 void StatusVars::merge(StatusVars *status_vars)
00076 {
00077 system_status_var* from_var= status_vars->getStatusVarCounters();
00078
00079 uint64_t *end= (uint64_t*) ((unsigned char*) status_var_counters + offsetof(system_status_var,
00080 last_system_status_var) + sizeof(uint64_t));
00081
00082 uint64_t *to= (uint64_t*) status_var_counters;
00083 uint64_t *from= (uint64_t*) from_var;
00084
00085 while (to != end)
00086 {
00087 *(to++)+= *(from++);
00088 }
00089
00090 sent_row_count+= status_vars->sent_row_count;
00091 }
00092
00093 void StatusVars::reset()
00094 {
00095 memset(status_var_counters, 0, sizeof(system_status_var));
00096 sent_row_count= 0;
00097 }
00098
00099 void StatusVars::logStatusVar(Session *session)
00100 {
00101 copySystemStatusVar(status_var_counters, &session->status_var);
00102 sent_row_count+= session->sent_row_count;
00103 }
00104
00105 bool StatusVars::hasBeenFlushed(Session *session)
00106 {
00107 system_status_var *current_status_var= &session->status_var;
00108
00109
00110 uint64_t current_bytes_received= current_status_var->bytes_received;
00111 uint64_t my_bytes_received= status_var_counters->bytes_received;
00112 if (current_bytes_received < my_bytes_received)
00113 {
00114 return true;
00115 }
00116 else
00117 {
00118 return false;
00119 }
00120 }
00121
00122 void StatusVars::copyGlobalVariables(StatusVars *global_status_vars)
00123 {
00124 system_status_var* from_var= global_status_vars->getStatusVarCounters();
00125 status_var_counters->aborted_connects= from_var->aborted_connects;
00126 status_var_counters->aborted_threads= from_var->aborted_threads;
00127 status_var_counters->connection_time= from_var->connection_time;
00128 }