blob: 37b219f6b6c0a823993f4adf378b7163db962391 [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;
import java.sql.Connection;
/** Transaction isolation enumeration */
public enum TransactionIsolation {
/**
* dirty reads and non-repeatable reads are prevented; phantom reads can occur. This level
* prohibits a transaction from reading a row with uncommitted changes in it, and it also
* prohibits the situation where one transaction reads a row, a second transaction alters the row,
* and the first transaction rereads the row, getting different values the second time (a
* "non-repeatable read").
*/
REPEATABLE_READ("REPEATABLE-READ", java.sql.Connection.TRANSACTION_REPEATABLE_READ),
/**
* dirty reads are prevented; non-repeatable reads and phantom reads can occur. This level only
* prohibits a transaction from reading a row with uncommitted changes in it.
*/
READ_COMMITTED("READ-COMMITTED", Connection.TRANSACTION_READ_COMMITTED),
/**
* dirty reads, non-repeatable reads and phantom reads can occur. This level allows a row changed
* by one transaction to be read by another transaction before any changes in that row have been
* committed (a "dirty read"). If any of the changes are rolled back, the second transaction will
* have retrieved an invalid row.
*/
READ_UNCOMMITTED("READ-UNCOMMITTED", Connection.TRANSACTION_READ_UNCOMMITTED),
/**
* dirty reads, non-repeatable reads and phantom reads are prevented. This level includes the
* prohibitions in TRANSACTION_REPEATABLE_READ and further prohibits the situation where one
* transaction reads all rows that satisfy a WHERE condition, a second transaction inserts a row
* that satisfies that WHERE condition, and the first transaction rereads for the same condition,
* retrieving the additional "phantom" row in the second read.
*/
SERIALIZABLE("SERIALIZABLE", Connection.TRANSACTION_SERIALIZABLE);
private final String value;
private final int level;
TransactionIsolation(String value, int level) {
this.value = value;
this.level = level;
}
/**
* Get transaction isolation command
*
* @return transaction isolation command
*/
public String getValue() {
return value;
}
/**
* Get transaction isolation level
*
* @return transaction isolation level
*/
public int getLevel() {
return level;
}
/**
* Get TransactionIsolation from value
*
* @param value value
* @return transaction isolation
*/
public static TransactionIsolation from(String value) {
for (TransactionIsolation transactionIsolation : values()) {
if (transactionIsolation
.value
.replaceAll("[ \\-_]", "")
.equalsIgnoreCase(value.replaceAll("[ \\-_]", ""))) {
return transactionIsolation;
}
}
throw new IllegalArgumentException(
String.format("Wrong argument value '%s' for TransactionIsolation", value));
}
}