skunk
skunk copied to clipboard
Document usage of *: / pmap. instead of. ~/ gmap for scala3
scala 3.0.2 and 3.1.0-RC2 skunk: 0.2.2
code:
package x
import skunk.*
import skunk.implicits.{*,given}
import skunk.codec.all.{*,given}
case class S6(s1: String, s2: String, s3: String, s4: String, s5: String, s6: String)
case class S7(s1: String, s2: String, s3: String, s4: String, s5: String, s6: String, s7: String)
// works
def testFun6 = {
sql"""
select s1,s2,s3,s4,s5,s6 from table
""".query(varchar ~ varchar ~ varchar ~ varchar ~ varchar ~ varchar).gmap[S6]
}
// compile error
def testFun7 = {
sql"""
select s1,s2,s3,s4,s5,s6,s7 from table
""".query(varchar ~ varchar ~ varchar ~ varchar ~ varchar ~ varchar ~ varchar).gmap[S7]
}
Message:
error] -- Error: /Users/rssh/tests/misc/skunk/scase7/src/main/scala/x/X.scala:22:89 ---
[error] 22 | """.query(varchar ~ varchar ~ varchar ~ varchar ~ varchar ~ varchar ~ varchar).gmap[S7]
[error] | ^
[error] |Cannot construct a mapping between the source (which must be a twiddle-list type) and the specified target type x.S7 (which must be a case class of the same structure)..
[error] |I found:
[error] |
[error] | <
[error] | <
[error] | <skunk.util.Twiddler.product6:
[error] | ([P <: Product, A, B, C, D, E, F]
[error] | (implicit m: deriving.Mirror.ProductOf[P], i: m.MirroredElemTypes =:= (A
[error] | ,
[error] | B, C, D, E, F)):
[error] | skunk.util.Twiddler[P]{Out = (((((A, B), C), D), E), F)}
[error] | )
[error] | >
[error] | [x.S7, (String, String), String, String, String, String, String]:
[error] | ((implicit m: deriving.Mirror.ProductOf[x.S7], i: m.MirroredElemTypes =:= (
[error] | (String, String)
[error] | , String, String, String, String, String)):
[error] | skunk.util.Twiddler[x.S7]{
[error] | Out = ((((((String, String), String), String), String), String), String)
[error] | }
[error] | )
[error] | >
[error] | (
[error] | <<<x.S7:x.S7>.$asInstanceOf:([X0] => X0)>[
[error] | (
[error] | deriving.Mirror.Product{
[error] | MirroredType = x.S7; MirroredMonoType = x.S7; MirroredElemTypes <: Tuple
[error] | }
[error] | &
[error] | scala.deriving.Mirror.Product{
[error] | MirroredMonoType = x.S7; MirroredType = x.S7;
[error] | MirroredLabel = ("S7" : String)
[error] | }
[error] | ){
[error] | MirroredElemTypes = (String, String, String, String, String, String,
[error] | String
[error] | );
[error] | MirroredElemLabels = (("s1" : String), ("s2" : String), ("s3" : String)
[error] | ,
[error] | ("s4" : String), ("s5" : String), ("s6" : String), ("s7" : String))
[error] | }
[error] | ]:
[error] | (
[error] | deriving.Mirror.Product{
[error] | MirroredType = x.S7; MirroredMonoType = x.S7; MirroredElemTypes <: Tuple
[error] | }
[error] | &
[error] | scala.deriving.Mirror.Product{
[error] | MirroredMonoType = x.S7; MirroredType = x.S7;
[error] | MirroredLabel = ("S7" : String)
[error] | }
[error] | ){
[error] | MirroredElemTypes = (String, String, String, String, String, String,
[error] | String
[error] | );
[error] | MirroredElemLabels = (("s1" : String), ("s2" : String), ("s3" : String)
[error] | ,
[error] | ("s4" : String), ("s5" : String), ("s6" : String), ("s7" : String))
[error] | }
[error] | >
[error] | ,
[error] | </* missing */
[error] | summon[(String, String, String, String, String, String, String) =:= ((String
[error] | ,
[error] | String), String, String, String, String, String)]
[error] | :
[error] | <error no implicit values were found that match type (String, String, String, String, String, String, String) =:= ((String, String),
[error] | String
[error] | , String, String, String, String)>
[error] | >
[error] | ):
[error] | <error no implicit values were found that match type (String, String, String, String, String, String, String) =:= ((String, String),
[error] | String
[error] | , String, String, String, String)>
[error] | >
[error] |
[error] |But no implicit values were found that match type (String, String, String, String, String, String, String) =:= ((String, String),
[error] | String
[error] |, String, String, String, String).
[error] one error found
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
For scala3 it's better to use the following that uses tuples instead of hlist:
(varchar *: varchar *: varchar *: varchar *: varchar *: varchar).pimap // pmap for decoder only
this will solve the 6 limit issue
thanks, [oops, find #434 ]. And looks like this requires extra brackets, otherwise pmap will be searched in Query
.query((varchar *: varchar *: varchar *: varchar *: varchar *: varchar).pimap)
Thanks, yes, we do need to document this.
Fixed by #846