~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/null_client.h

  • Committer: Brian Aker
  • Date: 2010-11-11 23:42:09 UTC
  • mto: (1932.2.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 1930.
  • Revision ID: brian@tangent.org-20101111234209-u3j07lya1dhcon45
Adding in concurrent execute support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
#define DRIZZLED_PLUGIN_NULL_CLIENT_H
22
22
 
23
23
#include <drizzled/plugin/client.h>
 
24
#include <vector>
 
25
#include <queue>
 
26
#include <string>
24
27
 
25
28
namespace drizzled
26
29
{
32
35
 */
33
36
class NullClient: public Client
34
37
{
 
38
  typedef std::vector<char> Bytes;
 
39
  typedef std::queue <Bytes> Queue;
 
40
  Queue to_execute;
 
41
  bool is_dead;
 
42
  Bytes packet_buffer;
 
43
 
35
44
public:
 
45
 
 
46
  NullClient() :
 
47
    is_dead(false)
 
48
  {
 
49
  }
 
50
 
36
51
  virtual int getFileDescriptor(void) { return -1; }
37
52
  virtual bool isConnected(void) { return true; }
38
53
  virtual bool isReading(void) { return false; }
40
55
  virtual bool flush(void) { return false; }
41
56
  virtual void close(void) {}
42
57
  virtual bool authenticate(void) { return true; }
43
 
  virtual bool readCommand(char**, uint32_t*) { return false; }
 
58
 
 
59
  virtual bool readCommand(char **packet, uint32_t *packet_length)
 
60
  {
 
61
    while(not to_execute.empty())
 
62
    {
 
63
      Queue::value_type next= to_execute.front();
 
64
      packet_buffer.resize(next.size());
 
65
      memcpy(&packet_buffer[0], &next[0], next.size());
 
66
 
 
67
      *packet= &packet_buffer[0];
 
68
 
 
69
      *packet_length= next.size();
 
70
 
 
71
      to_execute.pop();
 
72
 
 
73
      return true;
 
74
    }
 
75
 
 
76
    if (not is_dead)
 
77
    {
 
78
      packet_buffer.resize(1);
 
79
      *packet_length= 1;
 
80
      *packet= &packet_buffer[0];
 
81
      is_dead= true;
 
82
 
 
83
      return true;
 
84
    }
 
85
 
 
86
    *packet_length= 0;
 
87
    return false;
 
88
  }
 
89
 
44
90
  virtual void sendOK(void) {}
45
91
  virtual void sendEOF(void) {}
46
92
  virtual void sendError(uint32_t, const char*) {}
56
102
  virtual bool store(const char*) { return false; }
57
103
  virtual bool store(const char*, size_t) { return false; }
58
104
  virtual bool store(const std::string &) { return false; }
59
 
  virtual bool haveMoreData(void) { return false; }
 
105
  virtual bool haveMoreData(void) { return false;}
60
106
  virtual bool haveError(void) { return false; }
61
107
  virtual bool wasAborted(void) { return false; }
 
108
 
 
109
  void pushSQL(const std::string &arg)
 
110
  {
 
111
    Bytes byte;
 
112
    byte.resize(arg.size()+2); // +1 for the COM_QUERY
 
113
    byte[0]= COM_QUERY;
 
114
    memcpy(&byte[1], arg.c_str(), arg.size());
 
115
    byte.push_back(';');
 
116
    to_execute.push(byte);
 
117
  }
62
118
};
63
119
 
64
120
} /* namespace plugin */