8000 Scala 3 support · laserdisc-io/mysql-binlog-stream@f9d38f7 · GitHub
[go: up one dir, main page]

Skip to content

Commit f9d38f7

Browse files
committed
Scala 3 support
1 parent f2f9800 commit f9d38f7

File tree

17 files changed

+209
-123
lines changed

17 files changed

+209
-123
lines changed

.DS_Store

6 KB
Binary file not shown.

.scalafmt.conf

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,47 @@
1-
version = 3.4.0
2-
3-
runner.dialect = scala213
1+
version=3.8.1
42

3+
maxColumn = 140
4+
style = default
55
align.preset = more
6-
maxColumn = 140
76

8-
rewrite.sortModifiers.order = [
9-
"override"
10-
"private"
11-
"protected"
12-
"implicit"
13-
"final"
14-
"sealed"
15-
"abstract"
16-
"lazy"
17-
]
7+
runner.dialect = scala213source3
8+
fileOverride {
9+
"glob:**/scala-3/**" { runner.dialect = scala3 }
10+
}
11+
12+
danglingParentheses.preset = true
13+
docstrings.wrap = "no"
1814

1915
rewrite.rules = [
20-
SortModifiers
16+
AvoidInfix
2117
RedundantBraces
2218
RedundantParens
2319
AsciiSortImports
2420
PreferCurlyFors
21+
SortModifiers
22+
Imports
2523
]
2624

27-
spaces.inByNameTypes = false
28-
29-
rewrite.redundantBraces.stringInterpolation = true
30-
rewrite.redundantBraces.includeUnitMethods = true
25+
rewrite.neverInfix.excludeFilters = [until
26+
to
27+
by
28+
eq
29+
ne
30+
"should.*"
31+
"contain.*"
32+
"must.*"
33+
in
34+
be
35+
taggedAs
36+
thrownBy
37+
synchronized
38+
have
39+
when
40+
size
41+
theSameElementsAs
42+
at
43+
can
44+
should]
3145

32-
newlines.afterCurlyLambda = preserve
33-
newlines.neverInResultType = true
34-
newlines.beforeMultilineDef = keep
35-
newlines.sometimesBeforeColonInMethodReturnType = false
36-
newlines.penalizeSingleSelectMultiArgList = false
46+
rewrite.imports.sort = original
3747
newlines.implicitParamListModifierPrefer = before

binlog-stream-models/src/test/scala/io/laserdisc/mysql/binlog/models/SchemaMetadataTest.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.laserdisc.mysql.binlog.models
22

33
import cats.effect.IO
4-
import com.dimafeng.testcontainers.ForAllTestContainer
4+
import com.dimafeng.testcontainers.{Container, ForAllTestContainer}
55
import db.MySqlContainerTest
66
import doobie.util.transactor.Transactor
77
import doobie.util.transactor.Transactor.Aux
@@ -16,13 +16,13 @@ class SchemaMetadataTest extends AnyWordSpec with ForAllTestContainer with MySql
1616
"restore schema state from DB" in {
1717

1818
val props = new java.util.Properties()
19-
props.put("user", mySqlContainer.getUsername)
20-
props.put("password", mySqlContainer.getPassword)
19+
props.put("user", container.username)
20+
props.put("password", container.username)
2121

2222
implicit val testTransactor: Aux[IO, Unit] =
2323
Transactor.fromDriverManager[IO](
24-
mySqlContainer.getDriverClassName,
25-
s"${mySqlContainer.getJdbcUrl}?useSSL=false",
24+
mySQLContainer.driverClassName,
25+
s"${mySQLContainer.jdbcUrl}?useSSL=false",
2626
props,
2727
None
2828
)

binlog-stream/src/.DS_Store

6 KB
Binary file not shown.

binlog-stream/src/main/scala/io/laserdisc/mysql/binlog/stream/TransactionState.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,13 @@ object TransactionState {
351351

352352
def mapRawToMeta(table: TableMetadata): ((ColumnMetadata, Option[Serializable])) => (String, Json) = {
353353
case (column, Some(value)) =>
354+
/** At some point, Scala will drop ClassTag, so we should be prepared to either drop cross compilation for 2.13,
355+
* else add an alternative implementation that uses TypeTest. At the current time, I don't want to introduce
356+
* any potential bugs into _this_ at the same time that I'm introducing Scala 3..
357+
*/
358+
@annotation.nowarn(
359+
"msg=Use of `scala.reflect.ClassTag` for type testing may be unsound. Consider using `scala.reflect.TypeTest` instead."
360+
)
354361
def unsafeCast[T](implicit m: ClassTag[T]): T =
355362
try
356363
value match {

binlog-stream/src/test/scala/io/laserdisc/mysql/binlog/stream/MultiSchemaTest.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import cats.effect.unsafe.implicits.global
55
import com.dimafeng.testcontainers.ForAllTestContainer
66
import com.github.shyiko.mysql.binlog.BinaryLogClient
77
import db.MySqlContainerTest
8-
import doobie.implicits._
8+
import doobie.implicits.*
99
import io.circe.optics.JsonPath.root
1010
import io.laserdisc.mysql.binlog.database
11+
import io.laserdisc.mysql.binlog.config.BinLogConfigOps
1112
import io.laserdisc.mysql.binlog.event.EventMessage
1213
import io.laserdisc.mysql.binlog.models.SchemaMetadata
1314
import org.scalatest.matchers.should.Matchers
@@ -28,8 +29,8 @@ class MultiSchemaTest extends AnyWordSpec with ForAllTestContainer with MySqlCon
2829

2930
def runScenarioForSchema(schema: String): List[EventMessage] = {
3031

31-
val client = containerBinlogConfig.mkBinaryLogClient()
32-
val xaResource = database.transactor[IO](containerBinlogConfig)
32+
val client = binlogConfig.mkBinaryLogClient()
33+
val xaResource = database.transactor[IO](binlogConfig)
3334

3435
client.registerLifecycleListener(new BinaryLogClient.AbstractLifecycleListener {
3536
override def onConnect(client: BinaryLogClient): Unit =

binlog-stream/src/test/scala/io/laserdisc/mysql/binlog/stream/MysqlBinlogStreamTest.scala

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import com.github.shyiko.mysql.binlog.BinaryLogClient
77
import com.github.shyiko.mysql.binlog.event.{EventHeaderV4, EventType}
88
import db.MySqlContainerTest
99
import doobie.hikari.HikariTransactor
10-
import doobie.implicits._
10+
import doobie.implicits.*
11+
import io.laserdisc.mysql.binlog.config.BinLogConfigOps
1112
import io.laserdisc.mysql.binlog.database
1213
import org.scalatest.matchers.should.Matchers
1314
import org.scalatest.wordspec.AnyWordSpec
@@ -18,26 +19,19 @@ import scala.language.reflectiveCalls
1819

1920
class MysqlBinlogStreamTest extends AnyWordSpec with ForAllTestContainer with MySqlContainerTest with Matchers {
2021

21-
def fixture =
22-
new {
23-
24-
val testTransactor: Resource[IO, HikariTransactor[IO]] =
25-
database.transactor[IO](containerBinlogConfig)
26-
27-
val client: BinaryLogClient = containerBinlogConfig.mkBinaryLogClient()
28-
29-
}
30-
3122
implicit val logger: SelfAwareStructuredLogger[IO] = Slf4jLogger.getLogger[IO]
3223

3324
"Binlog stream" should {
3425

3526
"emit events from mysql" in {
3627

37-
val (client, xaResource) = (fixture.client, fixture.testTransactor)
28+
val testTransactor: Resource[IO, HikariTransactor[IO]] = database.transactor[IO](binlogConfig)
29+
30+
val client: BinaryLogClient = binlogConfig.mkBinaryLogClient()
31+
3832
client.registerLifecycleListener(new BinaryLogClient.AbstractLifecycleListener {
3933
override def onConnect(client: BinaryLogClient): Unit =
40-
xaResource
34+
testTransactor
4135
.use(xa =>
4236
Sku
4337
.insertMany(

binlog-stream/src/test/scala/io/laserdisc/mysql/binlog/stream/PipesTest.scala

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,36 @@ package io.laserdisc.mysql.binlog.stream
22

33
import cats.effect.unsafe.implicits.global
44
import cats.effect.{IO, Resource}
5-
import cats.implicits._
5+
import cats.implicits.*
66
import com.dimafeng.testcontainers.ForAllTestContainer
77
import com.github.shyiko.mysql.binlog.BinaryLogClient
88
import db.MySqlContainerTest
99
import doobie.hikari.HikariTransactor
10-
import doobie.implicits._
10+
import doobie.implicits.*
1111
import org.typelevel.log4cats.Logger
1212
import org.typelevel.log4cats.slf4j.Slf4jLogger
1313
import io.laserdisc.mysql.binlog.database
1414
import io.laserdisc.mysql.binlog.models.SchemaMetadata
1515
import org.scalatest.matchers.should.Matchers
1616
import org.scalatest.wordspec.AnyWordSpec
17+
import io.laserdisc.mysql.binlog.config.BinLogConfigOps
1718

1819
import scala.language.reflectiveCalls
1920
import scala.util.control
2021

2122
class PipesTest extends AnyWordSpec with Matchers with ForAllTestContainer with MySqlContainerTest {
2223

23-
def fixture =
24-
new {
25-
26-
val cfg = containerBinlogConfig
27-
28-
val testTransactor: Resource[IO, HikariTransactor[IO]] = database.transactor[IO](cfg)
29-
30-
val client = cfg.mkBinaryLogClient()
31-
}
32-
3324
"Binlog Events Stream" should {
3425
"handle truncate table as separate transaction" in {
35-
val (client, xaResource) = (fixture.client, fixture.testTransactor)
26+
27+
val testTransactor: Resource[IO, HikariTransactor[IO]] = database.transactor[IO](binlogConfig)
28+
29+
val client: BinaryLogClient = binlogConfig.mkBinaryLogClient()
3630

3731
client.registerLifecycleListener(new BinaryLogClient.AbstractLifecycleListener {
3832
override def onConnect(client: BinaryLogClient): Unit =
3933
control.Exception.allCatch.opt {
40-
xaResource
34+
testTransactor
4135
.use { xa =>
4236
for {
4337
_ <- (Sku.truncate.run *> Sku.insert(5, "sku5").run *>
@@ -57,11 +51,11 @@ class PipesTest extends AnyWordSpec with Matchers with ForAllTestContainer with
5751
}
5852
})
5953

60-
val events = xaResource
54+
val events = testTransactor
6155
.use { implicit xa =>
56+
implicit val logger: Logger[IO] = Slf4jLogger.getLoggerFromName[IO]("testing")
6257
for {
63-
implicit0(logger: Logger[IO]) <- Slf4jLogger.fromName[IO]("testing")
64-
schemaMetadata <- SchemaMetadata.buildSchemaMetadata("test")
58+
schemaMetadata <- SchemaMetadata.buildSchemaMetadata("test")
6559
transactionState <- TransactionState
6660
.createTransactionState[IO](schemaMetadata, client)
6761
actions <- MysqlBinlogStream

binlog-stream/src/test/scala/io/laserdisc/mysql/binlog/stream/Sku.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.laserdisc.mysql.binlog.stream
22

33
import doobie.ConnectionIO
4-
import doobie.implicits._
4+
import doobie.implicits.*
55
import doobie.util.update.Update
66

77
case class Sku(id: Int, sku: String)

binlog-stream/src/test/scala/io/laserdisc/mysql/binlog/stream/TransactionStateTest.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.laserdisc.mysql.binlog.stream
22

3-
import _root_.io.circe.optics.JsonPath._
3+
import _root_.io.circe.optics.JsonPath.*
44
import _root_.io.circe.Json
5-
import _root_.io.laserdisc.mysql.binlog._
6-
import com.github.shyiko.mysql.binlog.event._
5+
import _root_.io.laserdisc.mysql.binlog.*
6+
import com.github.shyiko.mysql.binlog.event.*
77
import org.scalatest.OptionValues
88
import org.scalatest.matchers.should.Matchers
99
import org.scalatest.wordspec.AnyWordSpec

0 commit comments

Comments
 (0)
0