mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-03-03 10:46:42 +01:00
Create DatabaseDriver ADT instead of booleans (#1902)
This commit is contained in:
parent
13fbb3f889
commit
2c3342492c
7 changed files with 77 additions and 22 deletions
|
@ -5,6 +5,7 @@ import org.bitcoins.chain.config.ChainAppConfig
|
|||
import org.bitcoins.core.api.chain.db.BlockHeaderDb
|
||||
import org.bitcoins.core.number.{Int32, UInt32}
|
||||
import org.bitcoins.crypto.DoubleSha256DigestBE
|
||||
import org.bitcoins.db.DatabaseDriver.{PostgreSQL, SQLite}
|
||||
import org.bitcoins.db._
|
||||
|
||||
import scala.annotation.tailrec
|
||||
|
@ -26,10 +27,9 @@ case class BlockHeaderDAO()(implicit
|
|||
import mappers.{doubleSha256DigestBEMapper, int32Mapper, uInt32Mapper}
|
||||
|
||||
implicit private val bigIntMapper: BaseColumnType[BigInt] =
|
||||
if (appConfig.driverName == "postgresql") {
|
||||
mappers.bigIntPostgresMapper
|
||||
} else {
|
||||
mappers.bigIntMapper
|
||||
appConfig.driver match {
|
||||
case SQLite => mappers.bigIntMapper
|
||||
case PostgreSQL => mappers.bigIntPostgresMapper
|
||||
}
|
||||
|
||||
override val table =
|
||||
|
|
|
@ -4,6 +4,7 @@ import org.bitcoins.chain.config.ChainAppConfig
|
|||
import org.bitcoins.core.api.chain.db.CompactFilterDb
|
||||
import org.bitcoins.core.gcs.FilterType
|
||||
import org.bitcoins.crypto.DoubleSha256DigestBE
|
||||
import org.bitcoins.db.DatabaseDriver.{PostgreSQL, SQLite}
|
||||
import org.bitcoins.db.{CRUD, SlickUtil}
|
||||
import scodec.bits.ByteVector
|
||||
|
||||
|
@ -23,10 +24,9 @@ case class CompactFilterDAO()(implicit
|
|||
import profile.api._
|
||||
|
||||
implicit private val bigIntMapper: BaseColumnType[BigInt] =
|
||||
if (appConfig.driverName == "postgresql") {
|
||||
mappers.bigIntPostgresMapper
|
||||
} else {
|
||||
mappers.bigIntMapper
|
||||
appConfig.driver match {
|
||||
case SQLite => mappers.bigIntMapper
|
||||
case PostgreSQL => mappers.bigIntPostgresMapper
|
||||
}
|
||||
|
||||
class CompactFilterTable(tag: Tag)
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.bitcoins.chain.models
|
|||
import org.bitcoins.chain.config.ChainAppConfig
|
||||
import org.bitcoins.core.api.chain.db.CompactFilterHeaderDb
|
||||
import org.bitcoins.crypto.DoubleSha256DigestBE
|
||||
import org.bitcoins.db.DatabaseDriver.{PostgreSQL, SQLite}
|
||||
import org.bitcoins.db.{CRUD, SlickUtil}
|
||||
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
@ -17,10 +18,9 @@ case class CompactFilterHeaderDAO()(implicit
|
|||
import mappers.doubleSha256DigestBEMapper
|
||||
|
||||
implicit private val bigIntMapper: BaseColumnType[BigInt] =
|
||||
if (appConfig.driverName == "postgresql") {
|
||||
mappers.bigIntPostgresMapper
|
||||
} else {
|
||||
mappers.bigIntMapper
|
||||
appConfig.driver match {
|
||||
case SQLite => mappers.bigIntMapper
|
||||
case PostgreSQL => mappers.bigIntPostgresMapper
|
||||
}
|
||||
|
||||
class CompactFilterHeaderTable(tag: Tag)
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.bitcoins.db
|
|||
import com.typesafe.config.Config
|
||||
import org.bitcoins.chain.config.ChainAppConfig
|
||||
import org.bitcoins.chain.db.ChainDbManagement
|
||||
import org.bitcoins.db.DatabaseDriver._
|
||||
import org.bitcoins.node.config.NodeAppConfig
|
||||
import org.bitcoins.node.db.NodeDbManagement
|
||||
import org.bitcoins.testkit.BitcoinSTestAppConfig.ProjectType
|
||||
|
@ -47,7 +48,10 @@ class DbManagementTest extends BitcoinSAsyncTest with EmbeddedPg {
|
|||
dbConfig(ProjectType.Chain))
|
||||
val chainDbManagement = createChainDbManagement(chainAppConfig)
|
||||
val result = chainDbManagement.migrate()
|
||||
val expected = if (chainAppConfig.driverName == "postgresql") 4 else 5
|
||||
val expected = chainAppConfig.driver match {
|
||||
case SQLite => 5
|
||||
case PostgreSQL => 4
|
||||
}
|
||||
assert(result == expected)
|
||||
}
|
||||
|
||||
|
@ -56,7 +60,10 @@ class DbManagementTest extends BitcoinSAsyncTest with EmbeddedPg {
|
|||
dbConfig(ProjectType.Wallet))
|
||||
val walletDbManagement = createWalletDbManagement(walletAppConfig)
|
||||
val result = walletDbManagement.migrate()
|
||||
val expected = if (walletAppConfig.driverName == "postgresql") 6 else 8
|
||||
val expected = walletAppConfig.driver match {
|
||||
case SQLite => 8
|
||||
case PostgreSQL => 6
|
||||
}
|
||||
assert(result == expected)
|
||||
}
|
||||
|
||||
|
@ -65,6 +72,10 @@ class DbManagementTest extends BitcoinSAsyncTest with EmbeddedPg {
|
|||
NodeAppConfig(BitcoinSTestAppConfig.tmpDir(), dbConfig(ProjectType.Node))
|
||||
val nodeDbManagement = createNodeDbManagement(nodeAppConfig)
|
||||
val result = nodeDbManagement.migrate()
|
||||
assert(result == 2)
|
||||
val expected = nodeAppConfig.driver match {
|
||||
case SQLite => 2
|
||||
case PostgreSQL => 2
|
||||
}
|
||||
assert(result == expected)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package org.bitcoins.db
|
||||
|
||||
import org.bitcoins.crypto.StringFactory
|
||||
|
||||
sealed abstract class DatabaseDriver {
|
||||
def shortName: String
|
||||
}
|
||||
|
||||
object DatabaseDriver extends StringFactory[DatabaseDriver] {
|
||||
|
||||
final case object SQLite extends DatabaseDriver {
|
||||
override def shortName: String = "sqlite"
|
||||
}
|
||||
|
||||
final case object PostgreSQL extends DatabaseDriver {
|
||||
override def shortName: String = "postgres"
|
||||
}
|
||||
|
||||
val all: Vector[DatabaseDriver] = Vector(SQLite, PostgreSQL)
|
||||
|
||||
override def fromStringOpt(str: String): Option[DatabaseDriver] = {
|
||||
all.find(state => str.toLowerCase() == state.toString.toLowerCase) match {
|
||||
case Some(value) => Some(value)
|
||||
case None =>
|
||||
all.find(state => str.toLowerCase() == state.shortName.toLowerCase)
|
||||
}
|
||||
}
|
||||
|
||||
override def fromString(string: String): DatabaseDriver = {
|
||||
fromStringOpt(string) match {
|
||||
case Some(state) => state
|
||||
case None =>
|
||||
sys.error(s"Could not find a DatabaseDriver for string=$string")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ package org.bitcoins.db
|
|||
import java.nio.file.{Files, Path, Paths}
|
||||
|
||||
import org.bitcoins.core.util.BitcoinSLogger
|
||||
import org.bitcoins.db.DatabaseDriver._
|
||||
import slick.basic.DatabaseConfig
|
||||
import slick.jdbc.JdbcProfile
|
||||
|
||||
|
@ -38,11 +39,14 @@ trait JdbcProfileComponent[+ConfigType <: AppConfig] extends BitcoinSLogger {
|
|||
parts(1)
|
||||
}
|
||||
|
||||
lazy val schemaName: Option[String] =
|
||||
if (driverName == "postgresql")
|
||||
lazy val schemaName: Option[String] = driver match {
|
||||
case PostgreSQL =>
|
||||
Some(appConfig.moduleName)
|
||||
else
|
||||
case SQLite =>
|
||||
None
|
||||
}
|
||||
|
||||
lazy val driver: DatabaseDriver = DatabaseDriver.fromString(driverName)
|
||||
|
||||
lazy val username: String = dbConfig.config.getString("db.username")
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import org.bitcoins.core.wallet.keymanagement.{
|
|||
KeyManagerInitializeError,
|
||||
KeyManagerParams
|
||||
}
|
||||
import org.bitcoins.db.DatabaseDriver.{PostgreSQL, SQLite}
|
||||
import org.bitcoins.db.{AppConfig, AppConfigFactory, JdbcProfileComponent}
|
||||
import org.bitcoins.keymanager.WalletStorage
|
||||
import org.bitcoins.keymanager.bip39.{BIP39KeyManager, BIP39LockedKeyManager}
|
||||
|
@ -157,10 +158,13 @@ case class WalletAppConfig(
|
|||
if (walletConf.seedExists()) {
|
||||
val hdCoin = walletConf.defaultAccount.coin
|
||||
val walletDB = walletConf.dbPath resolve walletConf.dbName
|
||||
if (walletConf.driverName == "postgresql" || Files.exists(walletDB)) {
|
||||
walletConf.driver match {
|
||||
case PostgreSQL =>
|
||||
AccountDAO().read((hdCoin, 0)).map(_.isDefined)
|
||||
} else {
|
||||
Future.successful(false)
|
||||
case SQLite =>
|
||||
if (Files.exists(walletDB))
|
||||
AccountDAO().read((hdCoin, 0)).map(_.isDefined)
|
||||
else Future.successful(false)
|
||||
}
|
||||
} else {
|
||||
Future.successful(false)
|
||||
|
|
Loading…
Add table
Reference in a new issue