~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzledump_data.cc

  • Committer: lbieber at stabletransit
  • Date: 2010-10-15 22:03:32 UTC
  • mfrom: (1856.1.5 build)
  • Revision ID: lbieber@drizzle-build-n02.wc1.dfw1.stabletransit.com-20101015220332-yzt1trfuff2gxkwv
Merge Andrew - Bug #654269: drizzledump doesn't handle foriegn keys 
Merge Andrew - Bug #659103: drizzledump could grab the wrong indexes
Merge Barry - Fixed memory leak in event observer plugin.
Merge Lee - Fix test output for haildb test, instead of No database selected, the message is now No schema selected

Show diffs side-by-side

added added

removed removed

Lines of Context:
79
79
 
80
80
}
81
81
 
 
82
std::ostream& operator <<(std::ostream &os, const DrizzleDumpForeignKey &obj)
 
83
{
 
84
  os << "  CONSTRAINT `" << obj.constraintName << "` FOREIGN KEY ("
 
85
    << obj.parentColumns << ") REFERENCES `" << obj.childTable << "` ("
 
86
    << obj.childColumns << ")";
 
87
 
 
88
  if (not obj.deleteRule.empty())
 
89
    os << " ON DELETE " << obj.deleteRule;
 
90
 
 
91
  if (not obj.updateRule.empty())
 
92
    os << " ON UPDATE " << obj.updateRule;
 
93
 
 
94
  return os;
 
95
}
 
96
 
82
97
std::ostream& operator <<(std::ostream &os, const DrizzleDumpIndex &obj)
83
98
{
84
99
  if (obj.isPrimary)
222
237
  bool new_insert= true;
223
238
  bool first= true;
224
239
  uint64_t rownr= 0;
 
240
  size_t byte_counter= 0;
225
241
 
226
242
  drizzle_row_t row;
227
243
 
256
272
  while((row= drizzle_row_next(obj.result)))
257
273
  {
258
274
    rownr++;
259
 
    if ((rownr % show_progress_size) == 0)
 
275
    if (verbose and (rownr % show_progress_size) == 0)
260
276
    {
261
277
      std::cerr << "-- " << rownr << _(" rows dumped for table ") << obj.table->displayName << std::endl;
262
278
    }
263
279
 
264
280
    size_t* row_sizes= drizzle_row_field_sizes(obj.result);
265
 
    if (not first)
 
281
    for (uint32_t i= 0; i < drizzle_result_column_count(obj.result); i++)
 
282
      byte_counter+= row_sizes[i];
 
283
 
 
284
    if (not first and not new_insert)
266
285
    {
267
286
      if (extended_insert)
268
287
        os << "),(";
269
288
      else
270
289
        os << ");" << std::endl;
 
290
      byte_counter+= 3;
271
291
    }
272
292
    else
273
293
      first= false;
283
303
          os << "IGNORE ";
284
304
      }
285
305
      os << "INTO `" << obj.table->displayName << "` VALUES (";
 
306
      byte_counter+= 28 + obj.table->displayName.length();
286
307
      if (extended_insert)
287
308
        new_insert= false;
288
309
    }
304
325
          /* Hex blob processing or escape text */
305
326
          if (((obj.table->fields[i]->type.compare("BLOB") == 0) or
306
327
            (obj.table->fields[i]->type.compare("VARBINARY") == 0)))
 
328
          {
307
329
            os << obj.convertHex((unsigned char*)row[i], row_sizes[i]);
 
330
            byte_counter+= row_sizes[i];
 
331
          }
308
332
          else
309
333
            os << "'" << DrizzleDumpData::escape(row[i], row_sizes[i]) << "'";
 
334
          byte_counter+= 3;
310
335
        }
311
336
        else
312
337
          os << row[i];
316
341
    }
317
342
    /* Break insert up if it is too long */
318
343
    if (extended_insert and
319
 
      ((os.tellp() - out_position) >= DRIZZLE_MAX_LINE_LENGTH))
 
344
      (byte_counter >= DRIZZLE_MAX_LINE_LENGTH))
320
345
    {
321
346
      os << ");" << std::endl;
322
347
      new_insert= true;
323
 
      out_position= os.tellp();
 
348
      byte_counter= 0;
324
349
    }
325
350
  }
326
351
  os << ");" << std::endl;
410
435
  std::vector<DrizzleDumpIndex*> output_indexes = obj.indexes;
411
436
  for (j= output_indexes.begin(); j != output_indexes.end(); ++j)
412
437
  {
413
 
    os << "," << std::endl;;
 
438
    os << "," << std::endl;
414
439
    DrizzleDumpIndex *index= *j;
415
440
    os << *index;
416
441
  }
 
442
 
 
443
  std::vector<DrizzleDumpForeignKey*>::iterator k;
 
444
  std::vector<DrizzleDumpForeignKey*> output_fkeys = obj.fkeys;
 
445
  for (k= output_fkeys.begin(); k != output_fkeys.end(); ++k)
 
446
  {
 
447
    os << "," << std::endl;
 
448
    DrizzleDumpForeignKey *fkey= *k;
 
449
    os << *fkey;
 
450
  }
 
451
 
417
452
  os << std::endl;
418
453
  os << ") ENGINE=" << obj.engineName << " ";
419
454
  if (obj.autoIncrement > 0)