2012-06-24 4 views
11

In Play quadro 2.0, sto cercando di caricare un reale (float precisione singola) a colonna da PostgreSQL usando un parser fila come questo:Anorm parse galleggiante Valori

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

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

Quando si utilizzano i tipi a doppia precisione, tutto funziona correttamente. È in qualche modo possibile utilizzare galleggianti di precisione singola con Anorm?

risposta

13

È sempre possibile creare la propria base di colonna parser su quelle già esistenti:

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

ma corrisponde al tipo di valore restituito dal driver JDBC che non può essere corretta (dipende dalla definizione di colonna) .

+1

controlla anche il codice qui: https://github.com/isaka/Play20/commit/27f952257d775e1bfb4a0c61de6e0ef9c5a555d6 – Mortimer