All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.topicus.jdbc.CloudSpannerSavepoint Maven / Gradle / Ivy

There is a newer version: 1.1.6
Show newest version
package nl.topicus.jdbc;

import java.sql.SQLException;
import java.sql.Savepoint;
import java.util.concurrent.atomic.AtomicInteger;

import nl.topicus.jdbc.shaded.com.google.common.base.Preconditions;
import nl.topicus.jdbc.shaded.com.google.rpc.Code;

import nl.topicus.jdbc.exception.CloudSpannerSQLException;

/**
 * Savepoint implementation for Google Cloud Spanner JDBC driver
 * 
 * @author loite
 *
 */
class CloudSpannerSavepoint implements Savepoint
{
	private static final AtomicInteger CURRENT_ID = new AtomicInteger(0);

	private final String name;

	private final Integer id;

	static CloudSpannerSavepoint named(String name)
	{
		Preconditions.checkNotNull(name);
		return new CloudSpannerSavepoint(name);
	}

	static CloudSpannerSavepoint generated()
	{
		return new CloudSpannerSavepoint(CURRENT_ID.incrementAndGet());
	}

	private CloudSpannerSavepoint(int id)
	{
		this.id = id;
		this.name = null;
	}

	private CloudSpannerSavepoint(String name)
	{
		this.id = null;
		this.name = name;
	}

	private boolean isNamed()
	{
		return name != null;
	}

	@Override
	public int hashCode()
	{
		return isNamed() ? name.hashCode() : id.hashCode();
	}

	@Override
	public boolean equals(Object o)
	{
		if (!(o instanceof CloudSpannerSavepoint))
			return false;
		CloudSpannerSavepoint other = (CloudSpannerSavepoint) o;
		if (this.isNamed())
			return other.isNamed() && this.name.equals(other.name);
		return this.id.equals(other.id);
	}

	@Override
	public int getSavepointId() throws SQLException
	{
		if (isNamed())
			throw new CloudSpannerSQLException("This is a named savepoint", Code.FAILED_PRECONDITION);
		return id;
	}

	@Override
	public String getSavepointName() throws SQLException
	{
		if (!isNamed())
			throw new CloudSpannerSQLException("This is not a named savepoint", Code.FAILED_PRECONDITION);
		return name;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy