scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
230 stars 21 forks source link

Sbt hangout if the row final case class didn't match table definition #12755

Closed tlightsky closed 11 months ago

tlightsky commented 1 year ago

Reproduction steps

Scala version: both 2.12.8 and 2.13.10 Sbt version: both 1.5.8 and 1.8.2

Minimal Reproduce Demo: https://github.com/tlightsky/test-hangout1

import java.util.UUID

final case class CSASR(
  a: UUID,
  b: Long,
  c: String,
  d: String,
  e: String,
  f: String,
  g: String,
  h: String,
  i: Long,
  j: Long,
  k: Long,
  l: Long,
  m: Option[String],
  n: Option[String],
  o: Option[Short] = None,
  p: Option[String] = None,
  q: Option[UUID] = None,
  r: Option[Long] = None,
  s: Option[Long] = None,
  t: Option[String] = None,
  u: Option[String] = None,
  v: Option[List[String]] = None,
  w: Option[List[String]] = None,
  x: Option[Int] = None,
  y: Option[Long] = None,
  z: Option[Int] = None,
  a1: Option[Long] = None,
  b1: Option[Int] = None,
  c1: Option[Long] = None,
  d1: Option[Int] = None,
  e1: Option[Int],
  f1: Option[String],
  g1: Option[Long] = None,
  h1: Option[Long] = None,
  i1: Option[Int] = None,
  j1: Option[String] = None,
  k1: Option[Int] = None
   , l1: Option[Int] = None // comment this line, it won't hangout
) {

}
package profiles

import com.github.tminglei.slickpg._
import slick.basic.Capability
import slick.jdbc.JdbcCapabilities

trait PostgresProfile extends ExPostgresProfile with PgArraySupport {

  override protected def computeCapabilities: Set[Capability] =
    super.computeCapabilities + JdbcCapabilities.insertOrUpdate

  override val api = new API with ArrayImplicits {
    implicit val strListTypeMapper = new SimpleArrayJdbcType[String]("text").to(_.toList)
  }
}

object PostgresProfile extends PostgresProfile

Problem

The Compiler will just hangout both in my local osx but also in remote github action for more then 30min and timeout if I add the new field definition

This might because I use CSASR in slick table definition

tlightsky commented 1 year ago

Seems related to the col number more than 37?

som-snytt commented 1 year ago

There is a stack

"pool-26-thread-3" #108 prio=5 os_prio=0 cpu=251849.81ms elapsed=253.06s tid=0x00007f652c63f800 nid=0x282e runnable  [0x00007f64088b4000]
   java.lang.Thread.State: RUNNABLE
        at scala.reflect.internal.tpe.TypeComparers.isSameSpecializedSkolem(TypeComparers.scala:60)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:458)
        at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:606)
        at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:344)
        at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:297)
        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.Types.isSubArg$1(Types.scala:4269)
        at scala.reflect.internal.Types.$anonfun$isSubArgs$2(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs$(Types.scala:4266)
        at scala.reflect.internal.SymbolTable.isSubArgs(SymbolTable.scala:27)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:460)

full of

        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.Types.isSubArg$1(Types.scala:4269)
        at scala.reflect.internal.Types.$anonfun$isSubArgs$2(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs$(Types.scala:4266)
        at scala.reflect.internal.SymbolTable.isSubArgs(SymbolTable.scala:27)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:460)
        at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:606)
        at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:344)
        at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:297)
        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.tpe.TypeComparers.retry$4(TypeComparers.scala:580)
        at scala.reflect.internal.tpe.TypeComparers.fourthTry$1(TypeComparers.scala:597)
        at scala.reflect.internal.tpe.TypeComparers.classOnRight$1(TypeComparers.scala:520)
        at scala.reflect.internal.tpe.TypeComparers.thirdTryRef$1(TypeComparers.scala:524)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:469)
        at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:606)
        at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:344)
        at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:297)
        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.Types.isSubArg$1(Types.scala:4269)

and at the bottom

        at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:2032)
        at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1542)
        at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1690)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5349)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5726)
        at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:5790)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3373)
        at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3373)
        at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2503)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$98(Typers.scala:5655)
        at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:500)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5690)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5726)
        at scala.tools.nsc.typechecker.Typers$Typer.typedTyped$1(Typers.scala:5453)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5683)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5726)
        at scala.tools.nsc.typechecker.Macros$DefMacroExpander.$anonfun$onSuccess$1(Macros.scala:687)
        at scala.tools.nsc.typechecker.Macros$DefMacroExpander.typecheck$1(Macros.scala:687)
        at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onSuccess(Macros.scala:695)
        at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:638)
        at scala.tools.nsc.typechecker.Macros$MacroExpander$$Lambda$6071/0x0000000101adb440.apply(Unknown Source)
        at scala.tools.nsc.Global.withInfoLevel(Global.scala:227)
        at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:625)
        at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:612)
        at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:787)
        at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:785)
        at scala.tools.nsc.Global$$anon$4.standardMacroExpand(Global.scala:477)
        at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:439)
        at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:436)
        at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:408)
        at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:436)
        at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:436)
        at scala.tools.nsc.Global$$anon$4.pluginsMacroExpand(Global.scala:477)
        at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:776)
        at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:769)
        at scala.tools.nsc.Global$$anon$4.macroExpand(Global.scala:477)
        at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1183)
        at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1243)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5740)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$2(Typers.scala:864)
        at scala.tools.nsc.typechecker.Typers$Typer$$Lambda$6056/0x0000000101ad2040.apply(Unknown Source)
        at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:713)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:861)
        at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:491)
        at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1239)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5740)
        at scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:5801)
        at scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1090)
        at scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1431)
som-snytt commented 1 year ago

Seems related to the col number more than 37?

That part is because the answer is always 37.

https://www.youtube.com/watch?v=yAujfmypZyI

tlightsky commented 1 year ago

There is a stack

"pool-26-thread-3" #108 prio=5 os_prio=0 cpu=251849.81ms elapsed=253.06s tid=0x00007f652c63f800 nid=0x282e runnable  [0x00007f64088b4000]
   java.lang.Thread.State: RUNNABLE
        at scala.reflect.internal.tpe.TypeComparers.isSameSpecializedSkolem(TypeComparers.scala:60)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:458)
        at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:606)
        at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:344)
        at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:297)
        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.Types.isSubArg$1(Types.scala:4269)
        at scala.reflect.internal.Types.$anonfun$isSubArgs$2(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs$(Types.scala:4266)
        at scala.reflect.internal.SymbolTable.isSubArgs(SymbolTable.scala:27)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:460)

full of

        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.Types.isSubArg$1(Types.scala:4269)
        at scala.reflect.internal.Types.$anonfun$isSubArgs$2(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs(Types.scala:4272)
        at scala.reflect.internal.Types.isSubArgs$(Types.scala:4266)
        at scala.reflect.internal.SymbolTable.isSubArgs(SymbolTable.scala:27)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:460)
        at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:606)
        at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:344)
        at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:297)
        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.tpe.TypeComparers.retry$4(TypeComparers.scala:580)
        at scala.reflect.internal.tpe.TypeComparers.fourthTry$1(TypeComparers.scala:597)
        at scala.reflect.internal.tpe.TypeComparers.classOnRight$1(TypeComparers.scala:520)
        at scala.reflect.internal.tpe.TypeComparers.thirdTryRef$1(TypeComparers.scala:524)
        at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:469)
        at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:606)
        at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:344)
        at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:297)
        at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:264)
        at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:27)
        at scala.reflect.internal.Types.isSubArg$1(Types.scala:4269)

and at the bottom

        at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:2032)
        at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1542)
        at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1690)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5349)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5726)
        at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:5790)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3373)
        at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3373)
        at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2503)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$98(Typers.scala:5655)
        at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:500)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5690)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5726)
        at scala.tools.nsc.typechecker.Typers$Typer.typedTyped$1(Typers.scala:5453)
        at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5683)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5726)
        at scala.tools.nsc.typechecker.Macros$DefMacroExpander.$anonfun$onSuccess$1(Macros.scala:687)
        at scala.tools.nsc.typechecker.Macros$DefMacroExpander.typecheck$1(Macros.scala:687)
        at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onSuccess(Macros.scala:695)
        at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:638)
        at scala.tools.nsc.typechecker.Macros$MacroExpander$$Lambda$6071/0x0000000101adb440.apply(Unknown Source)
        at scala.tools.nsc.Global.withInfoLevel(Global.scala:227)
        at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:625)
        at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:612)
        at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:787)
        at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:785)
        at scala.tools.nsc.Global$$anon$4.standardMacroExpand(Global.scala:477)
        at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:439)
        at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:436)
        at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:408)
        at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:436)
        at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:436)
        at scala.tools.nsc.Global$$anon$4.pluginsMacroExpand(Global.scala:477)
        at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:776)
        at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:769)
        at scala.tools.nsc.Global$$anon$4.macroExpand(Global.scala:477)
        at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1183)
        at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1243)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5740)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$2(Typers.scala:864)
        at scala.tools.nsc.typechecker.Typers$Typer$$Lambda$6056/0x0000000101ad2040.apply(Unknown Source)
        at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:713)
        at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:861)
        at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:491)
        at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1239)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5740)
        at scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:5801)
        at scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1090)
        at scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1431)

Yeah, it seems repeating doing a type comparing? Amazed why it's not stackoverflow...

tlightsky commented 1 year ago

Oh, It seems can be solved after I add l1 in both file!

tlightsky commented 1 year ago

Will keep it open for a while for someone want to dig into the hangout issue