sql - JDBC Insert with Postgres Enum -


given following person sql , model code:

sql

create type sex enum ('male', 'female');  create table person (     id bigserial primary key,     name varchar(100) not null,     age integer not null,     gender sex not null ); 

code

object person {      sealed trait gender      case object male extends gender      case object female extends gender       // credit travis brown: http://stackoverflow.com/a/30946172/409976     implicit val gendershows: show[gender] = show.shows {       case male   => "male"       case female => "female"     }  }  case class person private(id: option[long], name: string, age: int, gender: person.gender) 

i wrote following object creating person:

object postgresrepository  {      val xa = drivermanagertransactor[io](       "org.postgresql.driver", "jdbc:postgresql:person", "postgres", "postgres"     )      def insert1(name: string, age: int, gender: gender) =         sql"insert person (name, age, gender) values              ($name, $age,         ${implicitly[show[gender]].shows(gender)})".update.run.transact(xa) } 

then, ran sbt console, , tried insert:

scala> postgresrepository.insert1("foo", 3, net.phone.model.person.male) res0: scalaz.effect.io[int] = scalaz.effect.iofunctions$$anon$6@2697b43b  scala> res0.unsafeperformio org.postgresql.util.psqlexception: error: column "gender" of type sex expression of type character varying   hint: need rewrite or cast expression.   position: 56 

as exception suggested, need cast enum value expression.

def insert1(name: string, age: int, gender: gender) = {     val sgender = implicitly[show[gender]].shows(gender)     sql"insert person (name, age, gender)           values ($name, $age, cast($sgender sex))        ".update.run.transact(xa) } 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -