~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzledump_data.cc

  • Committer: Andrew Hutchings
  • Date: 2010-10-15 18:30:08 UTC
  • mto: (1856.1.4 build)
  • mto: This revision was merged to the branch mainline in revision 1857.
  • Revision ID: andrew@linuxjedi.co.uk-20101015183008-zkjr1nz08f8rhgbm
Fix several bugs dumping tables with many rows
Fix error handling on database destination

Show diffs side-by-side

added added

removed removed

Lines of Context:
222
222
  bool new_insert= true;
223
223
  bool first= true;
224
224
  uint64_t rownr= 0;
 
225
  size_t byte_counter= 0;
225
226
 
226
227
  drizzle_row_t row;
227
228
 
256
257
  while((row= drizzle_row_next(obj.result)))
257
258
  {
258
259
    rownr++;
259
 
    if ((rownr % show_progress_size) == 0)
 
260
    if (verbose and (rownr % show_progress_size) == 0)
260
261
    {
261
262
      std::cerr << "-- " << rownr << _(" rows dumped for table ") << obj.table->displayName << std::endl;
262
263
    }
263
264
 
264
265
    size_t* row_sizes= drizzle_row_field_sizes(obj.result);
265
 
    if (not first)
 
266
    for (uint32_t i= 0; i < drizzle_result_column_count(obj.result); i++)
 
267
      byte_counter+= row_sizes[i];
 
268
 
 
269
    if (not first and not new_insert)
266
270
    {
267
271
      if (extended_insert)
268
272
        os << "),(";
269
273
      else
270
274
        os << ");" << std::endl;
 
275
      byte_counter+= 3;
271
276
    }
272
277
    else
273
278
      first= false;
283
288
          os << "IGNORE ";
284
289
      }
285
290
      os << "INTO `" << obj.table->displayName << "` VALUES (";
 
291
      byte_counter+= 28 + obj.table->displayName.length();
286
292
      if (extended_insert)
287
293
        new_insert= false;
288
294
    }
304
310
          /* Hex blob processing or escape text */
305
311
          if (((obj.table->fields[i]->type.compare("BLOB") == 0) or
306
312
            (obj.table->fields[i]->type.compare("VARBINARY") == 0)))
 
313
          {
307
314
            os << obj.convertHex((unsigned char*)row[i], row_sizes[i]);
 
315
            byte_counter+= row_sizes[i];
 
316
          }
308
317
          else
309
318
            os << "'" << DrizzleDumpData::escape(row[i], row_sizes[i]) << "'";
 
319
          byte_counter+= 3;
310
320
        }
311
321
        else
312
322
          os << row[i];
316
326
    }
317
327
    /* Break insert up if it is too long */
318
328
    if (extended_insert and
319
 
      ((os.tellp() - out_position) >= DRIZZLE_MAX_LINE_LENGTH))
 
329
      (byte_counter >= DRIZZLE_MAX_LINE_LENGTH))
320
330
    {
321
331
      os << ");" << std::endl;
322
332
      new_insert= true;
323
 
      out_position= os.tellp();
 
333
      byte_counter= 0;
324
334
    }
325
335
  }
326
336
  os << ");" << std::endl;