mirror of
https://github.com/jlengrand/Exposed.git
synced 2026-03-10 08:11:20 +00:00
Test rework to cover more database/driver versions / jdbc url resolved on Database.connect, instead of lazy field.
This commit is contained in:
@@ -12,7 +12,7 @@ import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import javax.sql.DataSource
|
||||
|
||||
class Database private constructor(val connector: () -> Connection) {
|
||||
class Database private constructor(val url: String , val connector: () -> Connection) {
|
||||
|
||||
internal val metadata: DatabaseMetaData get() = TransactionManager.currentOrNull()?.connection?.metaData ?: with(connector()) {
|
||||
try {
|
||||
@@ -23,8 +23,6 @@ class Database private constructor(val connector: () -> Connection) {
|
||||
}
|
||||
}
|
||||
|
||||
val url: String by lazy { metadata.url }
|
||||
|
||||
var dialect : DatabaseDialect = run {
|
||||
val name = url.removePrefix("jdbc:").substringBefore(':')
|
||||
dialects[name.toLowerCase()]?.invoke() ?: error("No dialect registered for $name. URL=$url")
|
||||
@@ -81,7 +79,10 @@ class Database private constructor(val connector: () -> Connection) {
|
||||
private fun doConnect(getNewConnection: () -> Connection, setupConnection: (Connection) -> Unit = {},
|
||||
manager: (Database) -> TransactionManager = { ThreadLocalTransactionManager(it, DEFAULT_ISOLATION_LEVEL) }
|
||||
): Database {
|
||||
return Database {
|
||||
val newConnection = getNewConnection()
|
||||
val url = newConnection.metaData.url!!
|
||||
newConnection.close()
|
||||
return Database(url) {
|
||||
getNewConnection().apply { setupConnection(this) }
|
||||
}.apply {
|
||||
TransactionManager.registerManager(this, manager(this))
|
||||
@@ -99,6 +100,7 @@ class Database private constructor(val connector: () -> Connection) {
|
||||
): Database {
|
||||
return doConnect( getNewConnection, manager = manager )
|
||||
}
|
||||
|
||||
fun connect(url: String, driver: String, user: String = "", password: String = "", setupConnection: (Connection) -> Unit = {},
|
||||
manager: (Database) -> TransactionManager = { ThreadLocalTransactionManager(it, DEFAULT_ISOLATION_LEVEL) }): Database {
|
||||
Class.forName(driver).newInstance()
|
||||
|
||||
@@ -14,12 +14,11 @@ import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.TemporaryFolder
|
||||
import org.sqlite.SQLiteConnection
|
||||
import org.sqlite.SQLiteDataSource
|
||||
import org.sqlite.jdbc4.JDBC4DatabaseMetaData
|
||||
import java.io.PrintWriter
|
||||
import java.sql.Connection
|
||||
import java.sql.DriverManager
|
||||
import java.sql.SQLException
|
||||
import java.sql.SQLTransientException
|
||||
import java.sql.*
|
||||
import java.util.logging.Logger
|
||||
import javax.sql.DataSource
|
||||
import kotlin.concurrent.thread
|
||||
@@ -123,7 +122,7 @@ class ConnectionExceptions {
|
||||
fail("Should have thrown an exception")
|
||||
} catch (e : SQLException){
|
||||
assertThat(e.toString(), Matchers.containsString("BROKEN_SQL_THAT_CAUSES_EXCEPTION"))
|
||||
assertEquals(5, wrappingDataSource.connections.size)
|
||||
assertEquals(6, wrappingDataSource.connections.size)
|
||||
wrappingDataSource.connections.forEach {
|
||||
assertFalse(it.commitCalled)
|
||||
assertTrue(it.rollbackCalled)
|
||||
@@ -155,8 +154,9 @@ class ConnectionExceptions {
|
||||
}
|
||||
fail("Should have thrown an exception")
|
||||
} catch (e: CommitException) {
|
||||
assertEquals(5, wrappingDataSource.connections.size)
|
||||
wrappingDataSource.connections.forEach {
|
||||
// + 1 b/c preparing Database instance required 1 connection
|
||||
assertEquals(5 + 1, wrappingDataSource.connections.size)
|
||||
wrappingDataSource.connections.drop(1).forEach {
|
||||
assertTrue(it.commitCalled)
|
||||
assertTrue(it.closeCalled)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user