Utils.java

/*
 * SPDX-FileCopyrightText: 2026 kaumei.io
 * SPDX-License-Identifier: Apache-2.0
 */
package io.kaumei.jdbc.tx.internal;

import io.kaumei.jdbc.tx.KaumeiTxException;
import org.jspecify.annotations.Nullable;

import java.sql.Connection;

final class Utils {

    private Utils() {

    }

    static Throwable addSuppressed(@Nullable Throwable exp, Throwable added) {
        if (exp == null) {
            if (added instanceof RuntimeException) {
                return added;
            } else if (added instanceof Error) {
                return added;
            } else {
                return new KaumeiTxException(added.getMessage(), added);
            }
        }
        if (exp != added) {
            exp.addSuppressed(added);
        }
        return exp;
    }

    static void throwUnchecked(Throwable exp) {
        if (exp instanceof RuntimeException e) {
            throw e;
        } else if (exp instanceof Error e) {
            throw e;
        } else {
            throw new KaumeiTxException(exp.getMessage(), exp);
        }
    }

    static @Nullable Throwable close(Connection con, @Nullable Throwable exp) {
        try {
            con.close();
            return exp;
        } catch (Throwable e) {
            return addSuppressed(exp, e);
        }
    }

}