~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/session_dictionary/processlist.cc

Merge in change for catalog to be displayed properly

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
  plugin::TableFunction::Generator(arg)
53
53
{
54
54
  now= time(NULL);
55
 
 
56
 
  LOCK_thread_count.lock();
57
 
  it= getSessionList().begin();
58
55
}
59
56
 
60
57
ProcesslistTool::Generator::~Generator()
61
58
{
62
 
  LOCK_thread_count.unlock();
63
59
}
64
60
 
65
61
bool ProcesslistTool::Generator::populate()
66
62
{
67
 
  const char *val;
68
 
 
69
 
 
70
 
  while (it != getSessionList().end())
71
 
  {
72
 
    if ((*it)->isViewable())
73
 
    {
74
 
      break;
75
 
    }
76
 
    ++it;
77
 
  }
78
 
 
79
 
  if (it == getSessionList().end())
80
 
    return false;
81
 
 
82
 
  Session *tmp= *it;
83
 
  const SecurityContext *tmp_sctx= &tmp->getSecurityContext();
84
 
 
85
 
 
86
 
  /* ID */
87
 
  push((int64_t) tmp->thread_id);
88
 
 
89
 
 
90
 
  /* USER */
91
 
  if (not tmp_sctx->getUser().empty())
92
 
    push(tmp_sctx->getUser());
93
 
  else 
94
 
    push(_("no user"));
95
 
 
96
 
  /* HOST */
97
 
  push(tmp_sctx->getIp());
98
 
 
99
 
  /* DB */
100
 
  if (! tmp->db.empty())
101
 
  {
102
 
    push(tmp->db);
103
 
  }
104
 
  else
105
 
  {
106
 
    push();
107
 
  }
108
 
 
109
 
  /* COMMAND */
110
 
  if ((val= const_cast<char *>(tmp->killed == Session::KILL_CONNECTION ? "Killed" : 0)))
111
 
  {
112
 
    push(val);
113
 
  }
114
 
  else
115
 
  {
116
 
    push(command_name[tmp->command].str, command_name[tmp->command].length);
117
 
  }
118
 
 
119
 
  /* DRIZZLE_TIME */
120
 
  push(static_cast<uint64_t>(tmp->start_time ?  now - tmp->start_time : 0));
121
 
 
122
 
  /* STATE */
123
 
  val= (char*) (tmp->client->isWriting() ?
124
 
                "Writing to net" :
125
 
                tmp->client->isReading() ?
126
 
                (tmp->command == COM_SLEEP ?
127
 
                 NULL : "Reading from net") :
128
 
                tmp->get_proc_info() ? tmp->get_proc_info() :
129
 
                tmp->getThreadVar() &&
130
 
                tmp->getThreadVar()->current_cond ?
131
 
                "Waiting on cond" : NULL);
132
 
  val ? push(val) : push();
133
 
 
134
 
  /* INFO */
135
 
  size_t length= strlen(tmp->process_list_info);
136
 
  length ?  push(tmp->process_list_info, length) : push();
137
 
 
138
 
  it++;
139
 
 
140
 
  return true;
 
63
  drizzled::SessionPtr tmp;
 
64
 
 
65
  while ((tmp= session_generator))
 
66
  {
 
67
    const SecurityContext *tmp_sctx= &tmp->getSecurityContext();
 
68
    const char *val;
 
69
 
 
70
    /* ID */
 
71
    push((int64_t) tmp->thread_id);
 
72
 
 
73
 
 
74
    /* USER */
 
75
    if (not tmp_sctx->getUser().empty())
 
76
      push(tmp_sctx->getUser());
 
77
    else 
 
78
      push(_("no user"));
 
79
 
 
80
    /* HOST */
 
81
    push(tmp_sctx->getIp());
 
82
 
 
83
    /* DB */
 
84
    if (! tmp->db.empty())
 
85
    {
 
86
      push(tmp->db);
 
87
    }
 
88
    else
 
89
    {
 
90
      push();
 
91
    }
 
92
 
 
93
    /* COMMAND */
 
94
    if ((val= const_cast<char *>(tmp->killed == Session::KILL_CONNECTION ? "Killed" : 0)))
 
95
    {
 
96
      push(val);
 
97
    }
 
98
    else
 
99
    {
 
100
      push(command_name[tmp->command].str, command_name[tmp->command].length);
 
101
    }
 
102
 
 
103
    /* DRIZZLE_TIME */
 
104
    push(static_cast<uint64_t>(tmp->start_time ?  now - tmp->start_time : 0));
 
105
 
 
106
    /* STATE */
 
107
    val= (char*) (tmp->client->isWriting() ?
 
108
                  "Writing to net" :
 
109
                  tmp->client->isReading() ?
 
110
                  (tmp->command == COM_SLEEP ?
 
111
                   NULL : "Reading from net") :
 
112
                  tmp->get_proc_info() ? tmp->get_proc_info() :
 
113
                  tmp->getThreadVar() &&
 
114
                  tmp->getThreadVar()->current_cond ?
 
115
                  "Waiting on cond" : NULL);
 
116
    val ? push(val) : push();
 
117
 
 
118
    /* INFO */
 
119
    size_t length= strlen(tmp->process_list_info);
 
120
    length ?  push(tmp->process_list_info, length) : push();
 
121
 
 
122
    return true;
 
123
  }
 
124
 
 
125
  return false;
141
126
}