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

org.postgresql.adba.operations.PgTransactionOperation Maven / Gradle / Ivy

The newest version!
package org.postgresql.adba.operations;

import java.time.Duration;
import java.util.function.Consumer;
import jdk.incubator.sql2.Operation;
import jdk.incubator.sql2.Submission;
import jdk.incubator.sql2.TransactionCompletion;
import jdk.incubator.sql2.TransactionOutcome;
import org.postgresql.adba.PgSession;
import org.postgresql.adba.PgSubmission;
import org.postgresql.adba.submissions.TransactionSubmission;

public class PgTransactionOperation implements Operation {
  private TransactionCompletion transaction;
  private PgSession connection;
  private Consumer errorHandler;

  public PgTransactionOperation(TransactionCompletion transaction, PgSession connection) {
    this.transaction = transaction;
    this.connection = connection;
  }

  @Override
  public Operation onError(Consumer errorHandler) {
    if (this.errorHandler != null) {
      throw new IllegalStateException("you are not allowed to call onError multiple times");
    }

    this.errorHandler = errorHandler;
    return this;
  }

  @Override
  public Operation timeout(Duration minTime) {
    return this;
  }

  @Override
  public Submission submit() {
    String sql;
    if (transaction.isRollbackOnly()) {
      sql = "ROLLBACK TRANSACTION";
    } else {
      sql = "COMMIT TRANSACTION";
    }
    PgSubmission submission = new TransactionSubmission(this::cancel, errorHandler, sql);
    connection.submit(submission);
    return submission;
  }

  boolean cancel() {
    // todo set life cycle to canceled
    return true;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy