1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems, Inc.
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#ifndef DRIZZLED_PLUGIN_NULL_CLIENT_H
21
#define DRIZZLED_PLUGIN_NULL_CLIENT_H
23
#include <drizzled/plugin/client.h>
24
#include<boost/tokenizer.hpp>
35
* This class is an empty client implementation for internal used.
37
class NullClient: public Client
39
typedef std::vector<char> Bytes;
40
typedef std::queue <Bytes> Queue;
52
virtual int getFileDescriptor(void) { return -1; }
53
virtual bool isConnected(void) { return true; }
54
virtual bool isReading(void) { return false; }
55
virtual bool isWriting(void) { return false; }
56
virtual bool flush(void) { return false; }
57
virtual void close(void) {}
58
virtual bool authenticate(void) { return true; }
60
virtual bool readCommand(char **packet, uint32_t *packet_length)
62
while(not to_execute.empty())
64
Queue::value_type next= to_execute.front();
65
packet_buffer.resize(next.size());
66
memcpy(&packet_buffer[0], &next[0], next.size());
68
*packet= &packet_buffer[0];
70
*packet_length= next.size();
79
packet_buffer.resize(1);
81
*packet= &packet_buffer[0];
91
virtual void sendOK(void) {}
92
virtual void sendEOF(void) {}
93
virtual void sendError(const drizzled::error_t, const char*) {}
94
virtual bool sendFields(List<Item>*) { return false; }
95
virtual bool store(Field *) { return false; }
96
virtual bool store(void) { return false; }
97
virtual bool store(int32_t) { return false; }
98
virtual bool store(uint32_t) { return false; }
99
virtual bool store(int64_t) { return false; }
100
virtual bool store(uint64_t) { return false; }
101
virtual bool store(double, uint32_t, String*) { return false; }
102
virtual bool store(const type::Time*) { return false; }
103
virtual bool store(const char*) { return false; }
104
virtual bool store(const char*, size_t) { return false; }
105
virtual bool store(const std::string &) { return false; }
106
virtual bool haveMoreData(void) { return false;}
107
virtual bool haveError(void) { return false; }
108
virtual bool wasAborted(void) { return false; }
110
void pushSQL(const std::string &arg)
113
typedef boost::tokenizer<boost::escaped_list_separator<char> > Tokenizer;
114
Tokenizer tok(arg, boost::escaped_list_separator<char>("\\", ";", "\""));
116
for (Tokenizer::iterator iter= tok.begin(); iter != tok.end(); ++iter)
118
byte.resize((*iter).size() +1); // +1 for the COM_QUERY
120
memcpy(&byte[1], (*iter).c_str(), (*iter).size());
121
to_execute.push(byte);
126
} /* namespace plugin */
127
} /* namespace drizzled */
129
#endif /* DRIZZLED_PLUGIN_NULL_CLIENT_H */