2012-06-24 12 views
11

Trong Chơi framework 2.0, tôi đang cố gắng để tải một thực (tức là phao chính xác duy nhất) gõ cột từ PostgreSQL sử dụng một phân tích cú pháp hàng như thế này:Anorm phân tích cú pháp float giá trị

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

này tạo ra một lỗi: could not find implicit value for parameter extractor: anorm.Column[Float]

Khi sử dụng loại chính xác gấp đôi, mọi thứ hoạt động tốt. Có phải bằng cách nào đó có thể sử dụng phao chính xác đơn với Anorm không?

Trả lời

13

Bạn luôn có thể tạo riêng của bạn căn cứ cột phân tích cú pháp trên những cái hiện có:

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

nhưng nó phù hợp trên các loại giá trị được trả về bởi các trình điều khiển JDBC mà có thể không chính xác (phụ thuộc vào định nghĩa cột) .

+1

cũng kiểm tra mã tại đây: https://github.com/isaka/Play20/commit/27f952257d775e1bfb4a0c61de6e0ef9c5a555d6 – Mortimer