blob: a9c8f54751ef04236d0effc0df362f3cb5b77fc5 [file] [log] [blame]
// 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.impl;
import java.util.Arrays;
import org.mariadb.jdbc.message.client.RedoableClientMessage;
/**
* Transaction cache Huge command are not cached, cache is limited to configuration
* transactionReplaySize commands
*/
public class TransactionSaver {
private final RedoableClientMessage[] buffers;
private int idx = 0;
private boolean dirty = false;
/**
* Constructor
*
* @param transactionReplaySize maximum number of command cached
*/
public TransactionSaver(int transactionReplaySize) {
buffers = new RedoableClientMessage[transactionReplaySize];
}
/**
* Add a command to cache.
*
* @param clientMessage client message
*/
public void add(RedoableClientMessage clientMessage) {
if (idx < buffers.length) {
buffers[idx++] = clientMessage;
} else {
dirty = true;
}
}
/** Transaction finished, clearing cache */
public void clear() {
Arrays.fill(buffers, null);
dirty = false;
idx = 0;
}
/**
* Current transaction cache length
*
* @return cache length
*/
public int getIdx() {
return idx;
}
/**
* Is cache not valid (some commands have not been cached)
*
* @return is dirty
*/
public boolean isDirty() {
return dirty;
}
/**
* cache buffer
*
* @return cached messages
*/
public RedoableClientMessage[] getBuffers() {
return buffers;
}
}