Подтвердить что ты не робот

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?

4b9b3361

Ответ 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, который может быть неправильным (зависит от определения столбца).