~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/replication_services.cc

  • Committer: Jay Pipes
  • Date: 2009-10-18 15:31:51 UTC
  • mto: (1234.1.1 push) (1237.2.10 push)
  • mto: This revision was merged to the branch mainline in revision 1193.
  • Revision ID: jpipes@serialcoder-20091018153151-5ix355pnzqib5aa0
Adds functionality to handle REPLACE statements correctly in the replication
service.  REPLACE represents a DELETE of a row followed by an INSERT of new
data into the same row.

Adds a new test case to the transaction_log test case for REPLACE.

The replace test case does not pass and I'm not sure why.  Pushing up to
LP so I can have krow take a looksie...

Show diffs side-by-side

added added

removed removed

Lines of Context:
199
199
                                             Session *in_session) const
200
200
{
201
201
  delete in_transaction;
 
202
  in_session->setStatementMessage(NULL);
202
203
  in_session->setTransactionMessage(NULL);
203
 
  in_session->setStatementMessage(NULL);
204
204
}
205
205
 
206
206
void ReplicationServices::startNormalTransaction(Session *in_session)
262
262
                                            Session *in_session) const
263
263
{
264
264
  statement.set_end_timestamp(in_session->getCurrentTimestamp());
 
265
  in_session->setStatementMessage(NULL);
265
266
}
266
267
 
267
268
void ReplicationServices::rollbackTransaction(Session *in_session)
568
569
  while ((current_field= *table_fields++) != NULL) 
569
570
  {
570
571
    /* 
571
 
     * Add the WHERE clause values now...the fields which return true
572
 
     * for isReadSet() are in the WHERE clause.  For tables with no
573
 
     * primary or unique key, all fields will be returned.
 
572
     * Add the WHERE clause values now...for now, this means the
 
573
     * primary key field value.  Replication only supports tables
 
574
     * with a primary key.
574
575
     */
575
 
    if (current_field->isReadSet())
 
576
    if (in_table->s->primary_key == current_field->field_index)
576
577
    {
577
578
      field_metadata= header->add_key_field_metadata();
578
579
      field_metadata->set_name(current_field->field_name);
601
602
  while ((current_field= *table_fields++) != NULL) 
602
603
  {
603
604
    /* 
604
 
     * Add the WHERE clause values now...the fields which return true
605
 
     * for isReadSet() are in the WHERE clause.  For tables with no
606
 
     * primary or unique key, all fields will be returned.
 
605
     * Add the WHERE clause values now...for now, this means the
 
606
     * primary key field value.  Replication only supports tables
 
607
     * with a primary key.
607
608
     */
608
 
    if (current_field->isReadSet())
 
609
    if (in_table->s->primary_key == current_field->field_index)
609
610
    {
610
611
      string_value= current_field->val_str(string_value);
611
612
      record->add_key_value(string_value->c_ptr());