Newer
Older
simple-database-kotlin / src / nl / astraeus / database / Database.kt
rnentjes on 18 Oct 2015 1 KB More wrapping
package nl.astraeus.database

import nl.astraeus.database.jdbc.ConnectionPool
import nl.astraeus.database.jdbc.ConnectionProvider
import java.sql.Connection

/**
 * User: rnentjes
 * Date: 18-10-15
 * Time: 16:40
 */

fun begin() {
    if (Persister.transactionActive()) {
        throw IllegalStateException("Already connection active in begin!")
    }

    Persister.begin()
}

fun commit() {
    if (!Persister.transactionActive()) {
        throw IllegalStateException("No connection active in commit!")
    }

    Persister.commit();
}

fun rollback() {
    if (!Persister.transactionActive()) {
        throw IllegalStateException("No connection active in rollback!")
    }

    Persister.rollback();
}

fun connection() = Persister.getConnection()

fun transactionActive() = Persister.transactionActive()

fun transaction(task: () -> Unit) {
    try {
        begin()

        task()

        commit()
    } finally {
        if (transactionActive()) {
            rollback()
        }
    }
}

fun setConnectionProvider(conn: () -> Connection ) {
    ConnectionPool.get().setConnectionProvider(object : ConnectionProvider {
        override fun getConnection(): Connection = conn()
    })
}