public function attach(Operation $operation)
{
if ($operation instanceof RecordUpdate) {
$operationPayload = [['_writeByte', 1], ['_writeShort', $operation->cluster_id], ['_writeLong', (string) $operation->cluster_position], ['_writeChar', $operation->record_type], ['_writeInt', $operation->record_version], ['_writeString', CSV::serialize($operation->record)]];
if ($this->_transport->getProtocolVersion() >= 23) {
$operationPayload[] = ['_writeBoolean', $operation->update_content];
}
$this->_operation_stack[] = $operationPayload;
$this->_pre_operation_records[$operation->record->getRid()->__toString()] = $operation;
} elseif ($operation instanceof RecordDelete) {
$this->_operation_stack[] = [['_writeByte', 2], ['_writeShort', $operation->cluster_id], ['_writeLong', (string) $operation->cluster_position], ['_writeChar', $operation->record_type], ['_writeInt', $operation->record_version]];
} elseif ($operation instanceof RecordCreate) {
$this->_operation_stack[] = [['_writeByte', 3], ['_writeShort', -1], ['_writeLong', (string) $this->_temp_cluster_position_seq], ['_writeChar', $operation->record_type], ['_writeString', CSV::serialize($operation->record)]];
$this->_pre_operation_records[(new ID(-1, $this->_temp_cluster_position_seq))->__toString()] = $operation;
$this->_temp_cluster_position_seq--;
} else {
throw new PhpOrientBadMethodCallException("Wrong command type " . get_class($operation));
}
return $this;
}