~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzledump_drizzle.cc

  • Committer: tdavies
  • Date: 2010-10-05 03:25:08 UTC
  • mto: (1816.1.1 build)
  • mto: This revision was merged to the branch mainline in revision 1817.
  • Revision ID: tdavies@molly-20101005032508-pd1cg5nmxziov9wv
change in file: ../drizzled/base.h. Converted C structs key_range and KEY_MULTI_RANGE to C++ classes

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
  if (verbose)
41
41
    std::cerr << _("-- Retrieving table structures for ") << databaseName << "..." << std::endl;
42
42
 
43
 
  query="SELECT TABLE_NAME, TABLE_COLLATION, ENGINE, AUTO_INCREMENT, TABLE_COMMENT FROM DATA_DICTIONARY.TABLES WHERE TABLE_SCHEMA='";
 
43
  query="SELECT TABLE_NAME, TABLE_COLLATION, ENGINE, AUTO_INCREMENT FROM DATA_DICTIONARY.TABLES WHERE TABLE_SCHEMA='";
44
44
  query.append(databaseName);
45
45
  query.append("' ORDER BY TABLE_NAME");
46
46
 
51
51
 
52
52
  while ((row= drizzle_row_next(result)))
53
53
  {
54
 
    size_t* row_sizes= drizzle_row_field_sizes(result);
55
54
    std::string tableName(row[0]);
56
55
    std::string displayName(tableName);
57
56
    cleanTableName(displayName);
63
62
    table->collate= row[1];
64
63
    table->engineName= row[2];
65
64
    table->autoIncrement= boost::lexical_cast<uint64_t>(row[3]);
66
 
    if (row[4])
67
 
      table->comment= DrizzleDumpData::escape(row[4], row_sizes[4]);
68
 
    else
69
 
      table->comment= "";
70
65
    table->database= this;
71
 
    if ((not table->populateFields()) or (not table->populateIndexes()) or
72
 
      (not table->populateFkeys()))
 
66
    if ((not table->populateFields()) or (not table->populateIndexes()))
73
67
    {
74
68
      delete table;
75
69
      if (not ignore_errors)
171
165
  if (verbose)
172
166
    std::cerr << _("-- Retrieving fields for ") << tableName << "..." << std::endl;
173
167
 
174
 
  query= "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_DEFAULT_IS_NULL, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, COLLATION_NAME, IS_AUTO_INCREMENT, ENUM_VALUES, COLUMN_COMMENT FROM DATA_DICTIONARY.COLUMNS WHERE TABLE_SCHEMA='";
 
168
  query= "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_DEFAULT_IS_NULL, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, COLLATION_NAME, IS_AUTO_INCREMENT, ENUM_VALUES FROM DATA_DICTIONARY.COLUMNS WHERE TABLE_SCHEMA='";
175
169
  query.append(database->databaseName);
176
170
  query.append("' AND TABLE_NAME='");
177
171
  query.append(tableName);
202
196
    field->length= (row[5]) ? boost::lexical_cast<uint32_t>(row[5]) : 0;
203
197
    field->decimalPrecision= (row[6]) ? boost::lexical_cast<uint32_t>(row[6]) : 0;
204
198
    field->decimalScale= (row[7]) ? boost::lexical_cast<uint32_t>(row[7]) : 0;
205
 
    field->comment= (row[11]) ? row[11] : "";
 
199
 
206
200
 
207
201
    fields.push_back(field);
208
202
  }
224
218
  if (verbose)
225
219
    std::cerr << _("-- Retrieving indexes for ") << tableName << "..." << std::endl;
226
220
 
227
 
  query= "SELECT INDEX_NAME, COLUMN_NAME, IS_USED_IN_PRIMARY, IS_UNIQUE, COMPARE_LENGTH FROM DATA_DICTIONARY.INDEX_PARTS WHERE TABLE_SCHEMA='";
228
 
  query.append(database->databaseName);
229
 
  query.append("' AND TABLE_NAME='");
 
221
  query= "SELECT INDEX_NAME, COLUMN_NAME, IS_USED_IN_PRIMARY, IS_UNIQUE, COMPARE_LENGTH FROM DATA_DICTIONARY.INDEX_PARTS WHERE TABLE_NAME='";
230
222
  query.append(tableName);
231
223
  query.append("'");
232
224
 
259
251
  return true;
260
252
}
261
253
 
262
 
bool DrizzleDumpTableDrizzle::populateFkeys()
263
 
{
264
 
  drizzle_result_st *result;
265
 
  drizzle_row_t row;
266
 
  std::string query;
267
 
  DrizzleDumpForeignKey *fkey;
268
 
 
269
 
  if (verbose)
270
 
    std::cerr << _("-- Retrieving foreign keys for ") << tableName << "..." << std::endl;
271
 
 
272
 
  query= "SELECT CONSTRAINT_NAME, CONSTRAINT_COLUMNS, REFERENCED_TABLE_NAME, REFERENCED_TABLE_COLUMNS, MATCH_OPTION, DELETE_RULE, UPDATE_RULE FROM DATA_DICTIONARY.FOREIGN_KEYS WHERE CONSTRAINT_SCHEMA='";
273
 
  query.append(database->databaseName);
274
 
  query.append("' AND CONSTRAINT_TABLE='");
275
 
  query.append(tableName);
276
 
  query.append("'");
277
 
 
278
 
  result= dcon->query(query);
279
 
 
280
 
  if (result == NULL)
281
 
    return false;
282
 
 
283
 
  while ((row= drizzle_row_next(result)))
284
 
  {
285
 
    fkey= new DrizzleDumpForeignKey(row[0], dcon);
286
 
    fkey->parentColumns= row[1];
287
 
    fkey->childTable= row[2];
288
 
    fkey->childColumns= row[3];
289
 
    fkey->matchOption= (strcmp(row[4], "NONE") != 0) ? row[4] : "";
290
 
    fkey->deleteRule= (strcmp(row[5], "UNDEFINED") != 0) ? row[5] : "";
291
 
    fkey->updateRule= (strcmp(row[6], "UNDEFINED") != 0) ? row[6] : "";
292
 
 
293
 
    fkeys.push_back(fkey);
294
 
  }
295
 
  dcon->freeResult(result);
296
 
  return true;
297
 
}
298
 
 
299
254
DrizzleDumpData* DrizzleDumpTableDrizzle::getData(void)
300
255
{
301
256
  try
351
306
  result= dcon->query(query);
352
307
 
353
308
  if (result == NULL)
354
 
    throw std::exception();
 
309
    throw 1;
355
310
}
356
311
 
357
312
DrizzleDumpDataDrizzle::~DrizzleDumpDataDrizzle()