~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to libdrizzle-2.0/libdrizzle/libdrizzle.hpp

  • Committer: Olaf van der Spek
  • Date: 2011-08-11 12:49:52 UTC
  • mto: This revision was merged to the branch mainline in revision 2397.
  • Revision ID: olafvdspek@gmail.com-20110811124952-43a9kgwf3366k0kt
Add drizzle::query_c

Show diffs side-by-side

added added

removed removed

Lines of Context:
175
175
  drizzle_con_st b_;
176
176
};
177
177
 
 
178
class query_c
 
179
{
 
180
public:
 
181
  query_c(connection_c& con, const std::string& in = "") :
 
182
    con_(con),
 
183
    in_(in)
 
184
  {
 
185
  }
 
186
 
 
187
  void operator=(const std::string& v)
 
188
  {
 
189
    in_ = v;
 
190
    out_.clear();
 
191
  }
 
192
 
 
193
  void operator+=(const std::string& v)
 
194
  {
 
195
    in_ += v;
 
196
  }
 
197
 
 
198
  query_c& p_name(const std::string& v)
 
199
  {
 
200
    std::vector<char> r(2 * v.size() + 2);
 
201
    r.resize(drizzle_escape_string(&r.front() + 1, v.data(), v.size()) + 2);    
 
202
    r.front() = '`';
 
203
    r.back() = '`';
 
204
    p_raw(&r.front(), r.size());
 
205
    return *this;
 
206
  }
 
207
 
 
208
  query_c& p_raw(const char* v, size_t sz)
 
209
  {
 
210
    size_t i = in_.find('?');
 
211
    assert(i != std::string::npos);
 
212
    if (i == std::string::npos)
 
213
      return *this;
 
214
    out_.append(in_.substr(0, i));
 
215
    in_.erase(0, i + 1);
 
216
    out_.append(v, sz);
 
217
    return *this;
 
218
  }
 
219
 
 
220
  query_c& p_raw(const std::string& v)
 
221
  {
 
222
    return p_raw(v.data(), v.size());
 
223
  }
 
224
 
 
225
  query_c& p(const std::string& v)
 
226
  {
 
227
    std::vector<char> r(2 * v.size() + 2);
 
228
    r.resize(drizzle_escape_string(&r.front() + 1, v.data(), v.size()) + 2);    
 
229
    r.front() = '\'';
 
230
    r.back() = '\'';
 
231
    p_raw(&r.front(), r.size());
 
232
    return *this;
 
233
  }
 
234
 
 
235
  query_c& p(long long)
 
236
  {
 
237
    return *this;
 
238
  }
 
239
 
 
240
  drizzle_return_t execute(result_c& result)
 
241
  {
 
242
    return con_.query(result, read());
 
243
  }
 
244
 
 
245
  std::string read() const
 
246
  {
 
247
    return out_ + in_;
 
248
  }
 
249
private:
 
250
  connection_c& con_;
 
251
  std::string in_;
 
252
  std::string out_;
 
253
};
 
254
 
178
255
}