org.mariadb.jdbc.client.context.RedoContext Maven / Gradle / Ivy
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (c) 2012-2014 Monty Program Ab
// Copyright (c) 2015-2021 MariaDB Corporation Ab
package org.mariadb.jdbc.client.context;
import org.mariadb.jdbc.Configuration;
import org.mariadb.jdbc.client.PrepareCache;
import org.mariadb.jdbc.client.impl.TransactionSaver;
import org.mariadb.jdbc.export.ExceptionFactory;
import org.mariadb.jdbc.message.ClientMessage;
import org.mariadb.jdbc.message.client.RedoableClientMessage;
import org.mariadb.jdbc.message.server.InitialHandshakePacket;
import org.mariadb.jdbc.util.constants.ServerStatus;
/** Redo addition to Context */
public class RedoContext extends BaseContext {
private final TransactionSaver transactionSaver;
/**
* Constructor
*
* @param handshake server handshake
* @param clientCapabilities client capabilities
* @param conf configuration
* @param exceptionFactory connection exception factory
* @param prepareCache LRU prepare cache
*/
public RedoContext(
InitialHandshakePacket handshake,
long clientCapabilities,
Configuration conf,
ExceptionFactory exceptionFactory,
PrepareCache prepareCache) {
super(handshake, clientCapabilities, conf, exceptionFactory, prepareCache);
this.transactionSaver = new TransactionSaver(conf.transactionReplaySize());
}
/**
* Set server status
*
* @param serverStatus server status
*/
public void setServerStatus(int serverStatus) {
this.serverStatus = serverStatus;
if ((serverStatus & ServerStatus.IN_TRANSACTION) == 0) transactionSaver.clear();
}
/**
* Save client message
*
* @param msg client message
*/
public void saveRedo(ClientMessage msg) {
if (msg instanceof RedoableClientMessage) {
RedoableClientMessage redoMsg = (RedoableClientMessage) msg;
redoMsg.saveParameters();
transactionSaver.add(redoMsg);
}
}
/**
* Save client messages
*
* @param msgs client messages
*/
public void saveRedo(ClientMessage[] msgs) {
for (ClientMessage msg : msgs) saveRedo(msg);
}
/**
* Get transaction saver cache
*
* @return transaction saver cache
*/
public TransactionSaver getTransactionSaver() {
return transactionSaver;
}
}