Skip to content

Commit

Permalink
bump scala3 version and revert scala3 work around (#66)
Browse files Browse the repository at this point in the history
In #11 a workaround to issue
scala/scala3#19436 was introduced.

Meanwhile the issue 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 available since scala 3.4.x (SIP-53
I think).

So I decide to bump to scala 3.6.2 and remove the workaround
  • Loading branch information
jtjeferreira authored Jan 31, 2025
1 parent f82b12a commit f5b9aa7
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 74 deletions.
2 changes: 1 addition & 1 deletion build.mill
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
69 changes: 0 additions & 69 deletions scalasql/core/src/TypeMapper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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]
}
6 changes: 2 additions & 4 deletions scalasql/query/src-3/TableMacro.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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 =>
Expand Down Expand Up @@ -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, _, _) =>
Expand Down

0 comments on commit f5b9aa7

Please sign in to comment.