Skip to content

Commit

Permalink
scala3 support for slick (#223)
Browse files Browse the repository at this point in the history
* scala3 support for slick

slick needs newer logback

Update Slick.scala

Revert "Update Slick.scala"

This reverts commit fc62669.

* Increase timeout

* Slick 3.5.0-M5

* fix compilation problems

* Create slick35.backwards.excludes

* mima filters not working without this

* scala 3 compat checks

* Update MiMa.scala

* Update slick35.backwards.excludes

* Delete MiMa.scala

* Update Dependencies.scala

* slick 3.5.0

* slick 3.5 needs slf4j v2

* no slick release for scala 3 to compare against

* revert timeout changes

* remove more timeout changes

---------

Co-authored-by: Matthew de Detrich <matthew.dedetrich@aiven.io>
  • Loading branch information
pjfanning and mdedetrich committed Mar 7, 2024
1 parent 8b3c0b1 commit 0450443
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 15 deletions.
9 changes: 7 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -447,8 +447,13 @@ def pekkoConnectorProject(projectId: String,
name := s"pekko-connectors-$projectId",
licenses := List(License.Apache2),
AutomaticModuleName.settings(s"pekko.stream.connectors.$moduleName"),
mimaPreviousArtifacts := Set(
organization.value %% name.value % mimaCompareVersion),
mimaPreviousArtifacts := {
if (moduleName == "slick") {
Set.empty
} else {
Set(organization.value %% name.value % mimaCompareVersion)
}
},
mimaBinaryIssueFilters ++= Seq(
ProblemFilters.exclude[Problem]("*.impl.*"),
// generated code
Expand Down
5 changes: 3 additions & 2 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -403,13 +403,14 @@ object Dependencies {
"org.springframework.boot" % "spring-boot-starter-web" % SpringBootVersion % Test))
}

val SlickVersion = "3.4.1"
val SlickVersion = "3.5.0"
val Slick = Seq(
crossScalaVersions -= Scala3,
libraryDependencies ++= Seq(
"com.typesafe.slick" %% "slick" % SlickVersion,
"com.typesafe.slick" %% "slick-hikaricp" % SlickVersion,
"ch.qos.logback" % "logback-classic" % LogbackForSlf4j2Version % Test,
"com.h2database" % "h2" % "2.2.224" % Test))

val Eventbridge = Seq(
libraryDependencies ++= Seq(
("com.github.pjfanning" %% "aws-spi-pekko-http" % AwsSpiPekkoHttpVersion).excludeAll(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

# migrate to Slick 3.5
ProblemFilters.exclude[IncompatibleResultTypeProblem]("org.apache.pekko.stream.connectors.slick.javadsl.SlickSession.db")
ProblemFilters.exclude[ReversedMissingMethodProblem]("org.apache.pekko.stream.connectors.slick.javadsl.SlickSession.db")
ProblemFilters.exclude[IncompatibleResultTypeProblem]("org.apache.pekko.stream.connectors.slick.javadsl.SlickSessionFactory#SlickSessionConfigBackedImpl.db")
ProblemFilters.exclude[IncompatibleResultTypeProblem]("org.apache.pekko.stream.connectors.slick.javadsl.SlickSessionFactory#SlickSessionDbAndProfileBackedImpl.db")
ProblemFilters.exclude[IncompatibleMethTypeProblem]("org.apache.pekko.stream.connectors.slick.javadsl.SlickSessionFactory#SlickSessionDbAndProfileBackedImpl.this")
ProblemFilters.exclude[IncompatibleMethTypeProblem]("org.apache.pekko.stream.connectors.slick.scaladsl.package#SlickSession.forDbAndProfile")
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@ import pekko.stream.javadsl._
import pekko.util.FunctionConverters._
import pekko.util.FutureConverters._
import slick.dbio.DBIO
import slick.jdbc.GetResult
import slick.jdbc.SQLActionBuilder
import slick.jdbc.SetParameter
import slick.jdbc.SimpleJdbcAction
import slick.jdbc.{ GetResult, SQLActionBuilder, SetParameter, SimpleJdbcAction }

import scala.concurrent.ExecutionContext

Expand All @@ -54,6 +51,7 @@ object Slick {
session: SlickSession,
query: String,
mapper: JFunction[SlickRow, T]): Source[T, NotUsed] = {

val streamingAction = SQLActionBuilder(query, SetParameter.SetUnit).as[T](toSlick(mapper))

ScalaSlick
Expand Down
12 changes: 6 additions & 6 deletions slick/src/test/scala/docs/scaladsl/DocSnippets.scala
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ object SlickSourceWithPlainSQLQueryExample extends App {
implicit val ec: ExecutionContext = system.dispatcher

// #source-example
implicit val session = SlickSession.forConfig("slick-h2")
implicit val session: SlickSession = SlickSession.forConfig("slick-h2")
system.registerOnTermination(session.close())

// The example domain
Expand All @@ -42,7 +42,7 @@ object SlickSourceWithPlainSQLQueryExample extends App {
// into instances of the User class.
// Please import slick.jdbc.GetResult
// See also: "http://slick.lightbend.com/doc/3.2.1/sql.html#result-sets"
implicit val getUserResult = GetResult(r => User(r.nextInt(), r.nextString()))
implicit val getUserResult: GetResult[User] = GetResult(r => User(r.nextInt(), r.nextString()))

// This import enables the use of the Slick sql"...",
// sqlu"...", and sqlt"..." String interpolators.
Expand All @@ -68,7 +68,7 @@ object SlickSourceWithTypedQueryExample extends App {
implicit val ec: ExecutionContext = system.dispatcher

// #source-with-typed-query
implicit val session = SlickSession.forConfig("slick-h2")
implicit val session: SlickSession = SlickSession.forConfig("slick-h2")
system.registerOnTermination(session.close())

// This import brings everything you need into scope
Expand Down Expand Up @@ -100,7 +100,7 @@ object SlickSinkExample extends App {
implicit val ec: ExecutionContext = system.dispatcher

// #sink-example
implicit val session = SlickSession.forConfig("slick-h2")
implicit val session: SlickSession = SlickSession.forConfig("slick-h2")
system.registerOnTermination(session.close())

// The example domain
Expand Down Expand Up @@ -132,7 +132,7 @@ object SlickFlowExample extends App {
implicit val ec: ExecutionContext = system.dispatcher

// #flow-example
implicit val session = SlickSession.forConfig("slick-h2")
implicit val session: SlickSession = SlickSession.forConfig("slick-h2")
system.registerOnTermination(session.close())

// The example domain
Expand Down Expand Up @@ -176,7 +176,7 @@ object SlickFlowWithPassThroughExample extends App {
implicit val ec: ExecutionContext = system.dispatcher

// #flowWithPassThrough-example
implicit val session = SlickSession.forConfig("slick-h2")
implicit val session: SlickSession = SlickSession.forConfig("slick-h2")
system.registerOnTermination(session.close())

// The example domain
Expand Down
2 changes: 1 addition & 1 deletion slick/src/test/scala/docs/scaladsl/SlickSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ class SlickSpec
"insert 40 records into a table (no parallelism)" in {
// #init-db-config-session
val databaseConfig = DatabaseConfig.forConfig[JdbcProfile]("slick-h2")
implicit val session = SlickSession.forConfig(databaseConfig)
implicit val session: SlickSession = SlickSession.forConfig(databaseConfig)
// #init-db-config-session

val inserted = Source(users)
Expand Down

0 comments on commit 0450443

Please sign in to comment.