Anorm parse float values
В Play 2.0 2.0 я пытаюсь загрузить столбец реального (то есть одинарной точности) из PostgreSQL с помощью синтаксического анализатора строки следующим образом:
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)
}
}
}
Это порождает ошибку: could not find implicit value for parameter extractor: anorm.Column[Float]
При использовании типов двойной точности все работает нормально. Можно ли как-то использовать одиночные прецизионные поплавки с Anorm?
Ответы
Ответ 1
Вы всегда можете создать собственную базу анализатора столбцов на существующих:
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))
}
}
но он соответствует типу значения, возвращаемого драйвером JDBC, который может быть неправильным (зависит от определения столбца).