Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Anorm parse float values

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?

like image 957
Stef Sijben Avatar asked Jun 24 '12 19:06

Stef Sijben


1 Answers

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).

like image 143
Jeppe Nejsum Madsen Avatar answered Nov 16 '22 04:11

Jeppe Nejsum Madsen