2012-06-24 20 views
11

En juego marco 2.0, estoy tratando de cargar un real (es decir flotador precisión individual) Tipo de columna de PostgreSQL usando un analizador fila como esto:Anorm de análisis sintáctico flotador valora

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

Esto genera un error: could not find implicit value for parameter extractor: anorm.Column[Float]

Al usar tipos de doble precisión todo funciona bien. ¿Es de alguna manera posible usar flotadores de precisión simple con Anorm?

Respuesta

13

Siempre se puede crear su propia base de la columna analizador de los ya existentes:

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

pero coincide con el tipo de valor devuelto por el controlador JDBC que puede no ser correcta (depende de la definición de la columna) .

+1

mira el código aquí también: https://github.com/isaka/Play20/commit/27f952257d775e1bfb4a0c61de6e0ef9c5a555d6 – Mortimer

Cuestiones relacionadas