In Play framework 2.0, I'm trying to load a real (i.e. single precision float) type column from PostgreSQL using a row parser like this:

case class Foo(bar: Float)

object Foo {
    def all = DB.withConnection { implicit c =>
        SQL("SELECT * FROM foo").as(fooParser *)
    }

    val fooParser = {
        get[Float]("bar") map {     
          case bar => Foo(bar)
        }
    }
}

This generates an error: could not find implicit value for parameter extractor: anorm.Column[Float]

When using double precision types everything works fine. Is it somehow possible to use single precision floats with Anorm?

有帮助吗?

解决方案

You can always create your own column parser base on the existing ones:

 implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) =>
  val MetaDataItem(qualified, nullable, clazz) = meta
  value match {
    case d: Float => Right(d)
    case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified))
  }
}

but it matches on the type of value returned by the JDBC driver which may not be correct (depends on the column definition).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top