344
344
destination->push_back(quoted_identifier);
345
345
destination->append(" SET ");
350
enum message::TransformSqlError
351
message::transformUpdateRecordToSql(const message::UpdateHeader &header,
352
const message::UpdateRecord &record,
353
std::string *destination,
354
enum message::TransformSqlVariant sql_variant)
356
enum message::TransformSqlError error= transformUpdateHeaderToSql(header,
360
char quoted_identifier= '`';
361
if (sql_variant == ANSI)
362
quoted_identifier= '"';
347
364
/* Add field SET list to SQL string... */
348
365
size_t num_set_fields= header.set_field_metadata_size();
365
382
if (should_quote_field_value)
366
383
destination->push_back('\'');
368
destination->append(header.set_value(x));
385
destination->append(record.after_value(x));
370
387
if (should_quote_field_value)
371
388
destination->push_back('\'');
377
enum message::TransformSqlError
378
message::transformUpdateRecordToSql(const message::UpdateHeader &header,
379
const message::UpdateRecord &record,
380
std::string *destination,
381
enum message::TransformSqlVariant sql_variant)
383
enum message::TransformSqlError error= transformUpdateHeaderToSql(header,
387
char quoted_identifier= '`';
388
if (sql_variant == ANSI)
389
quoted_identifier= '"';
391
391
size_t num_key_fields= header.key_field_metadata_size();
393
bool should_quote_field_value= false;
395
393
destination->append(" WHERE ");
396
394
for (x= 0; x < num_key_fields; ++x)
425
423
enum message::TransformSqlError
426
message::transformUpdateStatementToSql(const message::UpdateHeader &header,
427
const message::UpdateData &data,
428
std::string *destination,
429
enum message::TransformSqlVariant sql_variant)
431
enum message::TransformSqlError error= transformUpdateHeaderToSql(header,
435
char quoted_identifier= '`';
436
if (sql_variant == ANSI)
437
quoted_identifier= '"';
439
/* Add WHERE clause to SQL string... */
440
size_t num_key_fields= header.key_field_metadata_size();
441
size_t num_key_records= data.record_size();
443
bool should_quote_field_value= false;
445
destination->append(" WHERE ");
446
for (x= 0; x < num_key_records; ++x)
449
destination->append(" OR "); /* Always OR condition for multiple key records */
451
if (num_key_fields > 1)
452
destination->push_back('(');
454
for (y= 0; y < num_key_fields; ++y)
456
const message::FieldMetadata &field_metadata= header.key_field_metadata(y);
459
destination->append(" AND "); /* Always AND condition with a multi-column PK */
461
destination->push_back(quoted_identifier);
462
destination->append(field_metadata.name());
463
destination->push_back(quoted_identifier);
465
destination->push_back('=');
467
should_quote_field_value= message::shouldQuoteFieldValue(field_metadata.type());
469
if (should_quote_field_value)
470
destination->push_back('\'');
472
destination->append(data.record(x).key_value(y));
474
if (should_quote_field_value)
475
destination->push_back('\'');
477
if (num_key_fields > 1)
478
destination->push_back(')');
483
enum message::TransformSqlError
484
424
message::transformDeleteHeaderToSql(const message::DeleteHeader &header,
485
425
std::string *destination,
486
426
enum message::TransformSqlVariant sql_variant)