> #ifdef HAVE_REPLICATION
> - if (unlikely(!error && table->s->online_alter_binlog))
> + if (unlikely(!error && table->s->online_alter_binlog &&
> + !table->skip_online_logging))
this doesn't need any juggling with skip_online_logging.
This problem is already solved for, say, long uniques. You can use
this == table->file
condition to filter out individual partitions and have your
binlog_log_row_online_alter called only for the main ha_partition
handler.
This doesn't look reliable -- won't there be any cases when we make a change from another handler, not table->file?
If that never happens, we could add DBUG_ASSERT(this == table->faile) in ha_innodb's/ha_myisam's ha_*_row methods.