From a0d62f6213cdf2c0b922cead8d49ff98a081715d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Ferreira?= Date: Fri, 31 Jan 2025 22:23:30 +0000 Subject: [PATCH] bump scala3 version and revert scala3 work around the issue https://github.com/scala/scala3/issues/19436 was fixed and backported to scala 3.3.5 and 3.5.1. However we can't use 3.3.5 because we need to "match on higher kinded types" in the macro and that is only avaible in scala 3.4 (SIP-53 I think). So I decide to bump to scala 3.6.2 --- build.mill | 2 +- scalasql/core/src/TypeMapper.scala | 69 --------------------------- scalasql/query/src-3/TableMacro.scala | 6 +-- 3 files changed, 3 insertions(+), 74 deletions(-) diff --git a/build.mill b/build.mill index e360e3c..47c8048 100644 --- a/build.mill +++ b/build.mill @@ -8,7 +8,7 @@ import de.tobiasroeser.mill.vcs.version.VcsVersion import com.goyeau.mill.scalafix.ScalafixModule import mill._, scalalib._, publish._ -val scalaVersions = Seq("2.13.12", "3.4.2") +val scalaVersions = Seq("2.13.12", "3.6.2") trait Common extends CrossScalaModule with PublishModule with ScalafixModule{ def scalaVersion = crossScalaVersion diff --git a/scalasql/core/src/TypeMapper.scala b/scalasql/core/src/TypeMapper.scala index 6cd2a65..2250097 100644 --- a/scalasql/core/src/TypeMapper.scala +++ b/scalasql/core/src/TypeMapper.scala @@ -65,73 +65,4 @@ trait TypeMapper[T] { outer => object TypeMapper { def apply[T](implicit t: TypeMapper[T]): TypeMapper[T] = t - - /** - * These definitions are workarounds for a bug in the Scala 3 compiler - * https://github.com/scala/scala3/issues/19436 - * - * The `TableMacros` definition in Scala 3 could ideally just `import dialect.*` to get the - * `TypeMapper` instances in scope, but it triggers a crash similar to the one in the bug report. - * - * Instead, the macro declares a local `given d: DialectTypeMappers = dialect` and relies on these - * implicits to summon the necessary instances. - */ - implicit def stringFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[String] = - d.StringType - implicit def byteFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Byte] = - d.ByteType - implicit def shortFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Short] = - d.ShortType - implicit def intFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Int] = - d.IntType - implicit def longFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Long] = - d.LongType - implicit def floatFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Float] = - d.FloatType - implicit def doubleFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Double] = - d.DoubleType - implicit def bigDecimalFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[scala.math.BigDecimal] = d.BigDecimalType - implicit def booleanFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Boolean] = - d.BooleanType - implicit def uuidFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[UUID] = - d.UuidType - implicit def bytesFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[geny.Bytes] = - d.BytesType - implicit def utilDateFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[java.util.Date] = d.UtilDateType - implicit def localDateFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[LocalDate] = d.LocalDateType - implicit def localTimeFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[LocalTime] = d.LocalTimeType - - implicit def localDateTimeFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[LocalDateTime] = d.LocalDateTimeType - - implicit def zonedDateTimeFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[ZonedDateTime] = d.ZonedDateTimeType - implicit def instantFromDialectTypeMappers(implicit d: DialectTypeMappers): TypeMapper[Instant] = - d.InstantType - - implicit def offsetTimeFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[OffsetTime] = d.OffsetTimeType - - implicit def offsetDateTimeFromDialectTypeMappers( - implicit d: DialectTypeMappers - ): TypeMapper[OffsetDateTime] = d.OffsetDateTimeType - implicit def enumTypeFromDialectTypeMappers[T <: Enumeration#Value]( - implicit d: DialectTypeMappers, - constructor: String => T - ): TypeMapper[T] = d.EnumType[T] - implicit def optionTypeFromDialectTypeMappers[T]( - implicit d: DialectTypeMappers, - inner: TypeMapper[T] - ): TypeMapper[Option[T]] = d.OptionType[T] } diff --git a/scalasql/query/src-3/TableMacro.scala b/scalasql/query/src-3/TableMacro.scala index fb3feaf..8149475 100644 --- a/scalasql/query/src-3/TableMacro.scala +++ b/scalasql/query/src-3/TableMacro.scala @@ -55,8 +55,7 @@ object TableMacros { val queryables = '{ (dialect: DialectTypeMappers, n: Int) => { - given DialectTypeMappers = dialect - lazy val _ = summon[DialectTypeMappers] + import dialect.* ${ Expr.ofList(constructorValueParams.map { param => @@ -128,8 +127,7 @@ object TableMacros { val vExpr0 = '{ (tableRef: TableRef, dialect: DialectTypeMappers, queryable: Table.Metadata.QueryableProxy) => { - given DialectTypeMappers = dialect - lazy val _ = summon[DialectTypeMappers] + import dialect.* ${ constructV[Column]((param, _) => { case (paramTpe, _, _) =>