Como obter valores de 'Char' do Postgres com Anorm
-
21-12-2019 - |
Pergunta
Eu tenho uma tabela postgres -
CREATE TABLE "Contest"
(
id serial NOT NULL,
name varchar(100) NOT NULL,
type char(1) NOT NULL,
status char(1) NOT NULL,
...
)
Estou tentando obter valores de campo type
e status
de volta ao meu aplicativo Play 2.x (Anorm):
val parseContest = {
get[Pk[Int]]("id") ~
get[String]("name") ~
get[Char]("type") ~
get[Char]("status") map {
case id~name~c_type~status =>
Contest(id, name, c_type, status)
}
}
e obter erro:
could not find implicit value for parameter extractor: anorm.Column[Char]
Parece que 'Char' não é compatível com anorm.O que devo mudar no meu código?É uma boa prática usar get[String]("status")
e então status.head
como solução alternativa?
Solução
Eu acho que você poderia escrever um conversor implícito para o seu char
colunas.Isso ficaria assim:
implicit def columnToChar: Column[Char] = {
Column[Char](transformer = {
(value, meta) =>
val MetaDataItem(qualified, nullable, clazz) = meta
value match {
case ch: String => Right(ch.head)
case _ => Left(TypeDoesNotMatch("Cannot convert " + value + " to Char for column " + qualified))
}
})
}
Então certifique-se de que este conversor esteja no escopo.
Não tenho certeza se o valor seria uma String mas você pode verificar e fazer as correções correspondentes.
Outras dicas
Recentemente, houve uma fusão de PR no Anorm sobre isso: https://github.com/playframework/playframework/pull/2189
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow