| // 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; |
| } |
| } |