diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala index f03e0f9fe1..7e11d9188d 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala @@ -32,24 +32,24 @@ class PersonRepoImpl extends PersonRepo { DeleteBuilder(""""compositepk"."person"""", PersonFields.structure) } override def deleteById(compositeId: PersonId): ConnectionIO[Boolean] = { - sql"""delete from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""".update.run.map(_ > 0) } override def insert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "compositepk"."person"("one", "two", "name") - values (${fromWrite(unsaved.one)(Write.fromPut(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.two)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.one)(new Write.Single(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.two)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))}) returning "one", "two", "name" """.query(using PersonRow.read).unique } override def insert(unsaved: PersonRowUnsaved): ConnectionIO[PersonRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.one match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""one""""), fr"${fromWrite(value: Long)(Write.fromPut(Meta.LongMeta.put))}::int8")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""one""""), fr"${fromWrite(value: Long)(new Write.Single(Meta.LongMeta.put))}::int8")) }, unsaved.two match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""two""""), fr"${fromWrite(value: Option[String])(Write.fromPutOption(Meta.StringMeta.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""two""""), fr"${fromWrite(value: Option[String])(new Write.SingleOpt(Meta.StringMeta.put))}")) } ).flatten @@ -83,15 +83,15 @@ class PersonRepoImpl extends PersonRepo { override def selectByFieldValues(fieldValues: List[PersonFieldOrIdValue[?]]): Stream[ConnectionIO, PersonRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case PersonFieldValue.one(value) => fr""""one" = ${fromWrite(value)(Write.fromPut(Meta.LongMeta.put))}""" - case PersonFieldValue.two(value) => fr""""two" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" + case PersonFieldValue.one(value) => fr""""one" = ${fromWrite(value)(new Write.Single(Meta.LongMeta.put))}""" + case PersonFieldValue.two(value) => fr""""two" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" } ) sql"""select "one", "two", "name" from "compositepk"."person" $where""".query(using PersonRow.read).stream } override def selectById(compositeId: PersonId): ConnectionIO[Option[PersonRow]] = { - sql"""select "one", "two", "name" from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""".query(using PersonRow.read).option + sql"""select "one", "two", "name" from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""".query(using PersonRow.read).option } override def update: UpdateBuilder[PersonFields, PersonRow] = { UpdateBuilder(""""compositepk"."person"""", PersonFields.structure, PersonRow.read) @@ -99,8 +99,8 @@ class PersonRepoImpl extends PersonRepo { override def update(row: PersonRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "compositepk"."person" - set "name" = ${fromWrite(row.name)(Write.fromPutOption(Meta.StringMeta.put))} - where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""" + set "name" = ${fromWrite(row.name)(new Write.SingleOpt(Meta.StringMeta.put))} + where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""" .update .run .map(_ > 0) @@ -111,20 +111,20 @@ class PersonRepoImpl extends PersonRepo { case Some(nonEmpty) => val updates = fragments.set( nonEmpty.map { - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" } ) sql"""update "compositepk"."person" $updates - where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""".update.run.map(_ > 0) + where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""".update.run.map(_ > 0) } } override def upsert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "compositepk"."person"("one", "two", "name") values ( - ${fromWrite(unsaved.one)(Write.fromPut(Meta.LongMeta.put))}::int8, - ${fromWrite(unsaved.two)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))} + ${fromWrite(unsaved.one)(new Write.Single(Meta.LongMeta.put))}::int8, + ${fromWrite(unsaved.two)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))} ) on conflict ("one", "two") do update set diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala index 47c9679317..343b4552b3 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala @@ -8,14 +8,12 @@ package hardcoded package compositepk package person -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet import testdb.hardcoded.customtypes.Defaulted /** Table: compositepk.person @@ -38,18 +36,17 @@ object PersonRow { new PersonRow(compositeId.one, compositeId.two, name) implicit lazy val decoder: Decoder[PersonRow] = Decoder.forProduct3[PersonRow, Long, Option[String], Option[String]]("one", "two", "name")(PersonRow.apply)(Decoder.decodeLong, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString)) implicit lazy val encoder: Encoder[PersonRow] = Encoder.forProduct3[PersonRow, Long, Option[String], Option[String]]("one", "two", "name")(x => (x.one, x.two, x.name))(Encoder.encodeLong, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString)) - implicit lazy val read: Read[PersonRow] = new Read[PersonRow]( - gets = List( - (Meta.LongMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonRow( - one = Meta.LongMeta.get.unsafeGetNonNullable(rs, i + 0), - two = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - name = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2) + implicit lazy val read: Read[PersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.LongMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonRow( + one = arr(0).asInstanceOf[Long], + two = arr(1).asInstanceOf[Option[String]], + name = arr(2).asInstanceOf[Option[String]] ) - ) + } implicit lazy val text: Text[PersonRow] = Text.instance[PersonRow]{ (row, sb) => Text.longInstance.unsafeEncode(row.one, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object PersonRow { sb.append(Text.DELIMETER) Text.option(Text.stringInstance).unsafeEncode(row.name, sb) } - implicit lazy val write: Write[PersonRow] = new Write[PersonRow]( - puts = List((Meta.LongMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable)), - toList = x => List(x.one, x.two, x.name), - unsafeSet = (rs, i, a) => { - Meta.LongMeta.put.unsafeSetNonNullable(rs, i + 0, a.one) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 1, a.two) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.name) - }, - unsafeUpdate = (ps, i, a) => { - Meta.LongMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.one) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 1, a.two) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.name) - } + implicit lazy val write: Write[PersonRow] = new Write.Composite[PersonRow]( + List(new Write.Single(Meta.LongMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt), + a => List(a.one, a.two, a.name) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala index 2d84543579..9df1d83be1 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala @@ -47,10 +47,10 @@ object Number { implicit lazy val get: Get[Number] = Meta.StringMeta.get.temap(Number.apply) implicit lazy val ordering: Ordering[Number] = Ordering.by(_.value) implicit lazy val put: Put[Number] = Put.Advanced.one[Number](JdbcType.Other, NonEmptyList.one("myschema.number"), (ps, i, a) => ps.setString(i, a.value), (rs, i, a) => rs.updateString(i, a.value)) - implicit lazy val read: Read[Number] = Read.fromGet(get) + implicit lazy val read: Read[Number] = new Read.Single(get) implicit lazy val text: Text[Number] = new Text[Number] { override def unsafeEncode(v: Number, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: Number, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[Number] = Write.fromPut(put) + implicit lazy val write: Write[Number] = new Write.Single(put) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala index 04caadff2e..1235efac76 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala @@ -47,10 +47,10 @@ object Sector { implicit lazy val get: Get[Sector] = Meta.StringMeta.get.temap(Sector.apply) implicit lazy val ordering: Ordering[Sector] = Ordering.by(_.value) implicit lazy val put: Put[Sector] = Put.Advanced.one[Sector](JdbcType.Other, NonEmptyList.one("myschema.sector"), (ps, i, a) => ps.setString(i, a.value), (rs, i, a) => rs.updateString(i, a.value)) - implicit lazy val read: Read[Sector] = Read.fromGet(get) + implicit lazy val read: Read[Sector] = new Read.Single(get) implicit lazy val text: Text[Sector] = new Text[Sector] { override def unsafeEncode(v: Sector, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: Sector, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[Sector] = Write.fromPut(put) + implicit lazy val write: Write[Sector] = new Write.Single(put) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala index 550ef85ee1..f551bae747 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala @@ -30,14 +30,14 @@ class FootballClubRepoImpl extends FootballClubRepo { DeleteBuilder(""""myschema"."football_club"""", FootballClubFields.structure) } override def deleteById(id: FootballClubId): ConnectionIO[Boolean] = { - sql"""delete from "myschema"."football_club" where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""".update.run.map(_ > 0) + sql"""delete from "myschema"."football_club" where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""".update.run.map(_ > 0) } override def deleteByIds(ids: Array[FootballClubId]): ConnectionIO[Int] = { sql"""delete from "myschema"."football_club" where "id" = ANY(${ids})""".update.run } override def insert(unsaved: FootballClubRow): ConnectionIO[FootballClubRow] = { sql"""insert into "myschema"."football_club"("id", "name") - values (${fromWrite(unsaved.id)(Write.fromPut(FootballClubId.put))}::int8, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.id)(new Write.Single(FootballClubId.put))}::int8, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}) returning "id", "name" """.query(using FootballClubRow.read).unique } @@ -53,14 +53,14 @@ class FootballClubRepoImpl extends FootballClubRepo { override def selectByFieldValues(fieldValues: List[FootballClubFieldOrIdValue[?]]): Stream[ConnectionIO, FootballClubRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case FootballClubFieldValue.id(value) => fr""""id" = ${fromWrite(value)(Write.fromPut(FootballClubId.put))}""" - case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" + case FootballClubFieldValue.id(value) => fr""""id" = ${fromWrite(value)(new Write.Single(FootballClubId.put))}""" + case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" } ) sql"""select "id", "name" from "myschema"."football_club" $where""".query(using FootballClubRow.read).stream } override def selectById(id: FootballClubId): ConnectionIO[Option[FootballClubRow]] = { - sql"""select "id", "name" from "myschema"."football_club" where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""".query(using FootballClubRow.read).option + sql"""select "id", "name" from "myschema"."football_club" where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""".query(using FootballClubRow.read).option } override def selectByIds(ids: Array[FootballClubId]): Stream[ConnectionIO, FootballClubRow] = { sql"""select "id", "name" from "myschema"."football_club" where "id" = ANY(${ids})""".query(using FootballClubRow.read).stream @@ -77,8 +77,8 @@ class FootballClubRepoImpl extends FootballClubRepo { override def update(row: FootballClubRow): ConnectionIO[Boolean] = { val id = row.id sql"""update "myschema"."football_club" - set "name" = ${fromWrite(row.name)(Write.fromPut(Meta.StringMeta.put))} - where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Meta.StringMeta.put))} + where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""" .update .run .map(_ > 0) @@ -89,19 +89,19 @@ class FootballClubRepoImpl extends FootballClubRepo { case Some(nonEmpty) => val updates = fragments.set( nonEmpty.map { - case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" + case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" } ) sql"""update "myschema"."football_club" $updates - where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""".update.run.map(_ > 0) + where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""".update.run.map(_ > 0) } } override def upsert(unsaved: FootballClubRow): ConnectionIO[FootballClubRow] = { sql"""insert into "myschema"."football_club"("id", "name") values ( - ${fromWrite(unsaved.id)(Write.fromPut(FootballClubId.put))}::int8, - ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))} + ${fromWrite(unsaved.id)(new Write.Single(FootballClubId.put))}::int8, + ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))} ) on conflict ("id") do update set diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala index eaaac16fb0..8cf8901448 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala @@ -8,14 +8,12 @@ package hardcoded package myschema package football_club -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: myschema.football_club football club @@ -28,32 +26,23 @@ case class FootballClubRow( object FootballClubRow { implicit lazy val decoder: Decoder[FootballClubRow] = Decoder.forProduct2[FootballClubRow, FootballClubId, /* max 100 chars */ String]("id", "name")(FootballClubRow.apply)(FootballClubId.decoder, Decoder.decodeString) implicit lazy val encoder: Encoder[FootballClubRow] = Encoder.forProduct2[FootballClubRow, FootballClubId, /* max 100 chars */ String]("id", "name")(x => (x.id, x.name))(FootballClubId.encoder, Encoder.encodeString) - implicit lazy val read: Read[FootballClubRow] = new Read[FootballClubRow]( - gets = List( - (FootballClubId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => FootballClubRow( - id = FootballClubId.get.unsafeGetNonNullable(rs, i + 0), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1) + implicit lazy val read: Read[FootballClubRow] = new Read.CompositeOfInstances(Array( + new Read.Single(FootballClubId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + FootballClubRow( + id = arr(0).asInstanceOf[FootballClubId], + name = arr(1).asInstanceOf[/* max 100 chars */ String] ) - ) + } implicit lazy val text: Text[FootballClubRow] = Text.instance[FootballClubRow]{ (row, sb) => FootballClubId.text.unsafeEncode(row.id, sb) sb.append(Text.DELIMETER) Text.stringInstance.unsafeEncode(row.name, sb) } - implicit lazy val write: Write[FootballClubRow] = new Write[FootballClubRow]( - puts = List((FootballClubId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls)), - toList = x => List(x.id, x.name), - unsafeSet = (rs, i, a) => { - FootballClubId.put.unsafeSetNonNullable(rs, i + 0, a.id) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.name) - }, - unsafeUpdate = (ps, i, a) => { - FootballClubId.put.unsafeUpdateNonNullable(ps, i + 0, a.id) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - } + implicit lazy val write: Write[FootballClubRow] = new Write.Composite[FootballClubRow]( + List(new Write.Single(FootballClubId.put), + new Write.Single(Meta.StringMeta.put)), + a => List(a.id, a.name) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala index 251789c0a9..4f63379a9b 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala @@ -27,14 +27,14 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo { DeleteBuilder(""""myschema"."marital_status"""", MaritalStatusFields.structure) } override def deleteById(id: MaritalStatusId): ConnectionIO[Boolean] = { - sql"""delete from "myschema"."marital_status" where "id" = ${fromWrite(id)(Write.fromPut(MaritalStatusId.put))}""".update.run.map(_ > 0) + sql"""delete from "myschema"."marital_status" where "id" = ${fromWrite(id)(new Write.Single(MaritalStatusId.put))}""".update.run.map(_ > 0) } override def deleteByIds(ids: Array[MaritalStatusId]): ConnectionIO[Int] = { sql"""delete from "myschema"."marital_status" where "id" = ANY(${ids})""".update.run } override def insert(unsaved: MaritalStatusRow): ConnectionIO[MaritalStatusRow] = { sql"""insert into "myschema"."marital_status"("id") - values (${fromWrite(unsaved.id)(Write.fromPut(MaritalStatusId.put))}::int8) + values (${fromWrite(unsaved.id)(new Write.Single(MaritalStatusId.put))}::int8) returning "id" """.query(using MaritalStatusRow.read).unique } @@ -50,13 +50,13 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo { override def selectByFieldValues(fieldValues: List[MaritalStatusFieldOrIdValue[?]]): Stream[ConnectionIO, MaritalStatusRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case MaritalStatusFieldValue.id(value) => fr""""id" = ${fromWrite(value)(Write.fromPut(MaritalStatusId.put))}""" + case MaritalStatusFieldValue.id(value) => fr""""id" = ${fromWrite(value)(new Write.Single(MaritalStatusId.put))}""" } ) sql"""select "id" from "myschema"."marital_status" $where""".query(using MaritalStatusRow.read).stream } override def selectById(id: MaritalStatusId): ConnectionIO[Option[MaritalStatusRow]] = { - sql"""select "id" from "myschema"."marital_status" where "id" = ${fromWrite(id)(Write.fromPut(MaritalStatusId.put))}""".query(using MaritalStatusRow.read).option + sql"""select "id" from "myschema"."marital_status" where "id" = ${fromWrite(id)(new Write.Single(MaritalStatusId.put))}""".query(using MaritalStatusRow.read).option } override def selectByIds(ids: Array[MaritalStatusId]): Stream[ConnectionIO, MaritalStatusRow] = { sql"""select "id" from "myschema"."marital_status" where "id" = ANY(${ids})""".query(using MaritalStatusRow.read).stream @@ -73,7 +73,7 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo { override def upsert(unsaved: MaritalStatusRow): ConnectionIO[MaritalStatusRow] = { sql"""insert into "myschema"."marital_status"("id") values ( - ${fromWrite(unsaved.id)(Write.fromPut(MaritalStatusId.put))}::int8 + ${fromWrite(unsaved.id)(new Write.Single(MaritalStatusId.put))}::int8 ) on conflict ("id") do update set "id" = EXCLUDED."id" diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala index d2a9981c82..868486b6f3 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala @@ -8,13 +8,11 @@ package hardcoded package myschema package marital_status -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: myschema.marital_status Primary key: id */ @@ -25,25 +23,18 @@ case class MaritalStatusRow( object MaritalStatusRow { implicit lazy val decoder: Decoder[MaritalStatusRow] = Decoder.forProduct1[MaritalStatusRow, MaritalStatusId]("id")(MaritalStatusRow.apply)(MaritalStatusId.decoder) implicit lazy val encoder: Encoder[MaritalStatusRow] = Encoder.forProduct1[MaritalStatusRow, MaritalStatusId]("id")(x => (x.id))(MaritalStatusId.encoder) - implicit lazy val read: Read[MaritalStatusRow] = new Read[MaritalStatusRow]( - gets = List( - (MaritalStatusId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => MaritalStatusRow( - id = MaritalStatusId.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[MaritalStatusRow] = new Read.CompositeOfInstances(Array( + new Read.Single(MaritalStatusId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + MaritalStatusRow( + id = arr(0).asInstanceOf[MaritalStatusId] ) - ) + } implicit lazy val text: Text[MaritalStatusRow] = Text.instance[MaritalStatusRow]{ (row, sb) => MaritalStatusId.text.unsafeEncode(row.id, sb) } - implicit lazy val write: Write[MaritalStatusRow] = new Write[MaritalStatusRow]( - puts = List((MaritalStatusId.put, Nullability.NoNulls)), - toList = x => List(x.id), - unsafeSet = (rs, i, a) => { - MaritalStatusId.put.unsafeSetNonNullable(rs, i + 0, a.id) - }, - unsafeUpdate = (ps, i, a) => { - MaritalStatusId.put.unsafeUpdateNonNullable(ps, i + 0, a.id) - } + implicit lazy val write: Write[MaritalStatusRow] = new Write.Composite[MaritalStatusRow]( + List(new Write.Single(MaritalStatusId.put)), + a => List(a.id) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala index 83eca2881d..993c32ad1e 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala @@ -34,38 +34,38 @@ class PersonRepoImpl extends PersonRepo { DeleteBuilder(""""myschema"."person"""", PersonFields.structure) } override def deleteById(id: PersonId): ConnectionIO[Boolean] = { - sql"""delete from "myschema"."person" where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""".update.run.map(_ > 0) + sql"""delete from "myschema"."person" where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""".update.run.map(_ > 0) } override def deleteByIds(ids: Array[PersonId]): ConnectionIO[Int] = { sql"""delete from "myschema"."person" where "id" = ANY(${ids})""".update.run } override def insert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "myschema"."person"("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "favorite_number") - values (${fromWrite(unsaved.id)(Write.fromPut(PersonId.put))}::int8, ${fromWrite(unsaved.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.nickName)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.email)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.phone)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.maritalStatusId)(Write.fromPut(MaritalStatusId.put))}, ${fromWrite(unsaved.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.favoriteNumber)(Write.fromPut(Number.put))}::myschema.number) + values (${fromWrite(unsaved.id)(new Write.Single(PersonId.put))}::int8, ${fromWrite(unsaved.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.email)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.phone)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.maritalStatusId)(new Write.Single(MaritalStatusId.put))}, ${fromWrite(unsaved.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.favoriteNumber)(new Write.Single(Number.put))}::myschema.number) returning "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" """.query(using PersonRow.read).unique } override def insert(unsaved: PersonRowUnsaved): ConnectionIO[PersonRow] = { val fs = List( - Some((Fragment.const0(s""""favourite_football_club_id""""), fr"${fromWrite(unsaved.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""nick_name""""), fr"${fromWrite(unsaved.nickName)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""blog_url""""), fr"${fromWrite(unsaved.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""email""""), fr"${fromWrite(unsaved.email)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""phone""""), fr"${fromWrite(unsaved.phone)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""likes_pizza""""), fr"${fromWrite(unsaved.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}")), - Some((Fragment.const0(s""""work_email""""), fr"${fromWrite(unsaved.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""favourite_football_club_id""""), fr"${fromWrite(unsaved.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""nick_name""""), fr"${fromWrite(unsaved.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""blog_url""""), fr"${fromWrite(unsaved.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""email""""), fr"${fromWrite(unsaved.email)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""phone""""), fr"${fromWrite(unsaved.phone)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""likes_pizza""""), fr"${fromWrite(unsaved.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}")), + Some((Fragment.const0(s""""work_email""""), fr"${fromWrite(unsaved.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.id match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""id""""), fr"${fromWrite(value: PersonId)(Write.fromPut(PersonId.put))}::int8")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""id""""), fr"${fromWrite(value: PersonId)(new Write.Single(PersonId.put))}::int8")) }, unsaved.maritalStatusId match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""marital_status_id""""), fr"${fromWrite(value: MaritalStatusId)(Write.fromPut(MaritalStatusId.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""marital_status_id""""), fr"${fromWrite(value: MaritalStatusId)(new Write.Single(MaritalStatusId.put))}")) }, unsaved.favoriteNumber match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""favorite_number""""), fr"${fromWrite(value: Number)(Write.fromPut(Number.put))}::myschema.number")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""favorite_number""""), fr"${fromWrite(value: Number)(new Write.Single(Number.put))}::myschema.number")) } ).flatten @@ -99,24 +99,24 @@ class PersonRepoImpl extends PersonRepo { override def selectByFieldValues(fieldValues: List[PersonFieldOrIdValue[?]]): Stream[ConnectionIO, PersonRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case PersonFieldValue.id(value) => fr""""id" = ${fromWrite(value)(Write.fromPut(PersonId.put))}""" - case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(Write.fromPut(FootballClubId.put))}""" - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(Write.fromPut(Meta.BooleanMeta.put))}""" - case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(Write.fromPut(MaritalStatusId.put))}""" - case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(Write.fromPut(Sector.put))}""" - case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(Write.fromPut(Number.put))}""" + case PersonFieldValue.id(value) => fr""""id" = ${fromWrite(value)(new Write.Single(PersonId.put))}""" + case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(new Write.Single(FootballClubId.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(new Write.Single(Meta.BooleanMeta.put))}""" + case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(new Write.Single(MaritalStatusId.put))}""" + case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(new Write.Single(Sector.put))}""" + case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(new Write.Single(Number.put))}""" } ) sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" $where""".query(using PersonRow.read).stream } override def selectById(id: PersonId): ConnectionIO[Option[PersonRow]] = { - sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""".query(using PersonRow.read).option + sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""".query(using PersonRow.read).option } override def selectByIds(ids: Array[PersonId]): Stream[ConnectionIO, PersonRow] = { sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" where "id" = ANY(${ids})""".query(using PersonRow.read).stream @@ -133,17 +133,17 @@ class PersonRepoImpl extends PersonRepo { override def update(row: PersonRow): ConnectionIO[Boolean] = { val id = row.id sql"""update "myschema"."person" - set "favourite_football_club_id" = ${fromWrite(row.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}, - "name" = ${fromWrite(row.name)(Write.fromPut(Meta.StringMeta.put))}, - "nick_name" = ${fromWrite(row.nickName)(Write.fromPutOption(Meta.StringMeta.put))}, - "blog_url" = ${fromWrite(row.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}, - "email" = ${fromWrite(row.email)(Write.fromPut(Meta.StringMeta.put))}, - "phone" = ${fromWrite(row.phone)(Write.fromPut(Meta.StringMeta.put))}, - "likes_pizza" = ${fromWrite(row.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}, - "marital_status_id" = ${fromWrite(row.maritalStatusId)(Write.fromPut(MaritalStatusId.put))}, - "work_email" = ${fromWrite(row.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}, - "favorite_number" = ${fromWrite(row.favoriteNumber)(Write.fromPut(Number.put))}::myschema.number - where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""" + set "favourite_football_club_id" = ${fromWrite(row.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}, + "name" = ${fromWrite(row.name)(new Write.Single(Meta.StringMeta.put))}, + "nick_name" = ${fromWrite(row.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}, + "blog_url" = ${fromWrite(row.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}, + "email" = ${fromWrite(row.email)(new Write.Single(Meta.StringMeta.put))}, + "phone" = ${fromWrite(row.phone)(new Write.Single(Meta.StringMeta.put))}, + "likes_pizza" = ${fromWrite(row.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}, + "marital_status_id" = ${fromWrite(row.maritalStatusId)(new Write.Single(MaritalStatusId.put))}, + "work_email" = ${fromWrite(row.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}, + "favorite_number" = ${fromWrite(row.favoriteNumber)(new Write.Single(Number.put))}::myschema.number + where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""" .update .run .map(_ > 0) @@ -154,38 +154,38 @@ class PersonRepoImpl extends PersonRepo { case Some(nonEmpty) => val updates = fragments.set( nonEmpty.map { - case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(Write.fromPut(FootballClubId.put))}""" - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(Write.fromPut(Meta.BooleanMeta.put))}""" - case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(Write.fromPut(MaritalStatusId.put))}""" - case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(Write.fromPut(Sector.put))}::myschema.sector""" - case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(Write.fromPut(Number.put))}::myschema.number""" + case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(new Write.Single(FootballClubId.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(new Write.Single(Meta.BooleanMeta.put))}""" + case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(new Write.Single(MaritalStatusId.put))}""" + case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(new Write.Single(Sector.put))}::myschema.sector""" + case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(new Write.Single(Number.put))}::myschema.number""" } ) sql"""update "myschema"."person" $updates - where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""".update.run.map(_ > 0) + where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""".update.run.map(_ > 0) } } override def upsert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "myschema"."person"("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "favorite_number") values ( - ${fromWrite(unsaved.id)(Write.fromPut(PersonId.put))}::int8, - ${fromWrite(unsaved.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}, - ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.nickName)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.email)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.phone)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}, - ${fromWrite(unsaved.maritalStatusId)(Write.fromPut(MaritalStatusId.put))}, - ${fromWrite(unsaved.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.favoriteNumber)(Write.fromPut(Number.put))}::myschema.number + ${fromWrite(unsaved.id)(new Write.Single(PersonId.put))}::int8, + ${fromWrite(unsaved.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}, + ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.email)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.phone)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}, + ${fromWrite(unsaved.maritalStatusId)(new Write.Single(MaritalStatusId.put))}, + ${fromWrite(unsaved.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.favoriteNumber)(new Write.Single(Number.put))}::myschema.number ) on conflict ("id") do update set diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala index cf6be56ca0..877d300547 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala @@ -8,14 +8,12 @@ package hardcoded package myschema package person -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet import testdb.hardcoded.customtypes.Defaulted import testdb.hardcoded.myschema.football_club.FootballClubId import testdb.hardcoded.myschema.marital_status.MaritalStatusId @@ -51,36 +49,35 @@ case class PersonRow( object PersonRow { implicit lazy val decoder: Decoder[PersonRow] = Decoder.forProduct12[PersonRow, PersonId, FootballClubId, /* max 100 chars */ String, Option[/* max 30 chars */ String], Option[/* max 100 chars */ String], /* max 254 chars */ String, /* max 8 chars */ String, Boolean, MaritalStatusId, Option[/* max 254 chars */ String], Sector, Number]("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number")(PersonRow.apply)(PersonId.decoder, FootballClubId.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Decoder.decodeString, Decoder.decodeBoolean, MaritalStatusId.decoder, Decoder.decodeOption(Decoder.decodeString), Sector.decoder, Number.decoder) implicit lazy val encoder: Encoder[PersonRow] = Encoder.forProduct12[PersonRow, PersonId, FootballClubId, /* max 100 chars */ String, Option[/* max 30 chars */ String], Option[/* max 100 chars */ String], /* max 254 chars */ String, /* max 8 chars */ String, Boolean, MaritalStatusId, Option[/* max 254 chars */ String], Sector, Number]("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number")(x => (x.id, x.favouriteFootballClubId, x.name, x.nickName, x.blogUrl, x.email, x.phone, x.likesPizza, x.maritalStatusId, x.workEmail, x.sector, x.favoriteNumber))(PersonId.encoder, FootballClubId.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Encoder.encodeString, Encoder.encodeBoolean, MaritalStatusId.encoder, Encoder.encodeOption(Encoder.encodeString), Sector.encoder, Number.encoder) - implicit lazy val read: Read[PersonRow] = new Read[PersonRow]( - gets = List( - (PersonId.get, Nullability.NoNulls), - (FootballClubId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.BooleanMeta.get, Nullability.NoNulls), - (MaritalStatusId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Sector.get, Nullability.NoNulls), - (Number.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonRow( - id = PersonId.get.unsafeGetNonNullable(rs, i + 0), - favouriteFootballClubId = FootballClubId.get.unsafeGetNonNullable(rs, i + 1), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - nickName = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - blogUrl = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - email = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - phone = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - likesPizza = Meta.BooleanMeta.get.unsafeGetNonNullable(rs, i + 7), - maritalStatusId = MaritalStatusId.get.unsafeGetNonNullable(rs, i + 8), - workEmail = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - sector = Sector.get.unsafeGetNonNullable(rs, i + 10), - favoriteNumber = Number.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[PersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PersonId.get).asInstanceOf[Read[Any]], + new Read.Single(FootballClubId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.BooleanMeta.get).asInstanceOf[Read[Any]], + new Read.Single(MaritalStatusId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Sector.get).asInstanceOf[Read[Any]], + new Read.Single(Number.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonRow( + id = arr(0).asInstanceOf[PersonId], + favouriteFootballClubId = arr(1).asInstanceOf[FootballClubId], + name = arr(2).asInstanceOf[/* max 100 chars */ String], + nickName = arr(3).asInstanceOf[Option[/* max 30 chars */ String]], + blogUrl = arr(4).asInstanceOf[Option[/* max 100 chars */ String]], + email = arr(5).asInstanceOf[/* max 254 chars */ String], + phone = arr(6).asInstanceOf[/* max 8 chars */ String], + likesPizza = arr(7).asInstanceOf[Boolean], + maritalStatusId = arr(8).asInstanceOf[MaritalStatusId], + workEmail = arr(9).asInstanceOf[Option[/* max 254 chars */ String]], + sector = arr(10).asInstanceOf[Sector], + favoriteNumber = arr(11).asInstanceOf[Number] ) - ) + } implicit lazy val text: Text[PersonRow] = Text.instance[PersonRow]{ (row, sb) => PersonId.text.unsafeEncode(row.id, sb) sb.append(Text.DELIMETER) @@ -104,44 +101,18 @@ object PersonRow { sb.append(Text.DELIMETER) Number.text.unsafeEncode(row.favoriteNumber, sb) } - implicit lazy val write: Write[PersonRow] = new Write[PersonRow]( - puts = List((PersonId.put, Nullability.NoNulls), - (FootballClubId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.BooleanMeta.put, Nullability.NoNulls), - (MaritalStatusId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Number.put, Nullability.NoNulls)), - toList = x => List(x.id, x.favouriteFootballClubId, x.name, x.nickName, x.blogUrl, x.email, x.phone, x.likesPizza, x.maritalStatusId, x.workEmail, x.favoriteNumber), - unsafeSet = (rs, i, a) => { - PersonId.put.unsafeSetNonNullable(rs, i + 0, a.id) - FootballClubId.put.unsafeSetNonNullable(rs, i + 1, a.favouriteFootballClubId) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.name) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 3, a.nickName) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 4, a.blogUrl) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.email) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 6, a.phone) - Meta.BooleanMeta.put.unsafeSetNonNullable(rs, i + 7, a.likesPizza) - MaritalStatusId.put.unsafeSetNonNullable(rs, i + 8, a.maritalStatusId) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 9, a.workEmail) - Number.put.unsafeSetNonNullable(rs, i + 10, a.favoriteNumber) - }, - unsafeUpdate = (ps, i, a) => { - PersonId.put.unsafeUpdateNonNullable(ps, i + 0, a.id) - FootballClubId.put.unsafeUpdateNonNullable(ps, i + 1, a.favouriteFootballClubId) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.name) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 3, a.nickName) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 4, a.blogUrl) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.email) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.phone) - Meta.BooleanMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.likesPizza) - MaritalStatusId.put.unsafeUpdateNonNullable(ps, i + 8, a.maritalStatusId) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 9, a.workEmail) - Number.put.unsafeUpdateNonNullable(ps, i + 10, a.favoriteNumber) - } + implicit lazy val write: Write[PersonRow] = new Write.Composite[PersonRow]( + List(new Write.Single(PersonId.put), + new Write.Single(FootballClubId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.BooleanMeta.put), + new Write.Single(MaritalStatusId.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Number.put)), + a => List(a.id, a.favouriteFootballClubId, a.name, a.nickName, a.blogUrl, a.email, a.phone, a.likesPizza, a.maritalStatusId, a.workEmail, a.favoriteNumber) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala index f03e0f9fe1..7e11d9188d 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRepoImpl.scala @@ -32,24 +32,24 @@ class PersonRepoImpl extends PersonRepo { DeleteBuilder(""""compositepk"."person"""", PersonFields.structure) } override def deleteById(compositeId: PersonId): ConnectionIO[Boolean] = { - sql"""delete from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""".update.run.map(_ > 0) } override def insert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "compositepk"."person"("one", "two", "name") - values (${fromWrite(unsaved.one)(Write.fromPut(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.two)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.one)(new Write.Single(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.two)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))}) returning "one", "two", "name" """.query(using PersonRow.read).unique } override def insert(unsaved: PersonRowUnsaved): ConnectionIO[PersonRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.one match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""one""""), fr"${fromWrite(value: Long)(Write.fromPut(Meta.LongMeta.put))}::int8")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""one""""), fr"${fromWrite(value: Long)(new Write.Single(Meta.LongMeta.put))}::int8")) }, unsaved.two match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""two""""), fr"${fromWrite(value: Option[String])(Write.fromPutOption(Meta.StringMeta.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""two""""), fr"${fromWrite(value: Option[String])(new Write.SingleOpt(Meta.StringMeta.put))}")) } ).flatten @@ -83,15 +83,15 @@ class PersonRepoImpl extends PersonRepo { override def selectByFieldValues(fieldValues: List[PersonFieldOrIdValue[?]]): Stream[ConnectionIO, PersonRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case PersonFieldValue.one(value) => fr""""one" = ${fromWrite(value)(Write.fromPut(Meta.LongMeta.put))}""" - case PersonFieldValue.two(value) => fr""""two" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" + case PersonFieldValue.one(value) => fr""""one" = ${fromWrite(value)(new Write.Single(Meta.LongMeta.put))}""" + case PersonFieldValue.two(value) => fr""""two" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" } ) sql"""select "one", "two", "name" from "compositepk"."person" $where""".query(using PersonRow.read).stream } override def selectById(compositeId: PersonId): ConnectionIO[Option[PersonRow]] = { - sql"""select "one", "two", "name" from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""".query(using PersonRow.read).option + sql"""select "one", "two", "name" from "compositepk"."person" where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""".query(using PersonRow.read).option } override def update: UpdateBuilder[PersonFields, PersonRow] = { UpdateBuilder(""""compositepk"."person"""", PersonFields.structure, PersonRow.read) @@ -99,8 +99,8 @@ class PersonRepoImpl extends PersonRepo { override def update(row: PersonRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "compositepk"."person" - set "name" = ${fromWrite(row.name)(Write.fromPutOption(Meta.StringMeta.put))} - where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""" + set "name" = ${fromWrite(row.name)(new Write.SingleOpt(Meta.StringMeta.put))} + where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""" .update .run .map(_ > 0) @@ -111,20 +111,20 @@ class PersonRepoImpl extends PersonRepo { case Some(nonEmpty) => val updates = fragments.set( nonEmpty.map { - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" } ) sql"""update "compositepk"."person" $updates - where "one" = ${fromWrite(compositeId.one)(Write.fromPut(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(Write.fromPutOption(Meta.StringMeta.put))}""".update.run.map(_ > 0) + where "one" = ${fromWrite(compositeId.one)(new Write.Single(Meta.LongMeta.put))} AND "two" = ${fromWrite(compositeId.two)(new Write.SingleOpt(Meta.StringMeta.put))}""".update.run.map(_ > 0) } } override def upsert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "compositepk"."person"("one", "two", "name") values ( - ${fromWrite(unsaved.one)(Write.fromPut(Meta.LongMeta.put))}::int8, - ${fromWrite(unsaved.two)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))} + ${fromWrite(unsaved.one)(new Write.Single(Meta.LongMeta.put))}::int8, + ${fromWrite(unsaved.two)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))} ) on conflict ("one", "two") do update set diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala index 47c9679317..343b4552b3 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/compositepk/person/PersonRow.scala @@ -8,14 +8,12 @@ package hardcoded package compositepk package person -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet import testdb.hardcoded.customtypes.Defaulted /** Table: compositepk.person @@ -38,18 +36,17 @@ object PersonRow { new PersonRow(compositeId.one, compositeId.two, name) implicit lazy val decoder: Decoder[PersonRow] = Decoder.forProduct3[PersonRow, Long, Option[String], Option[String]]("one", "two", "name")(PersonRow.apply)(Decoder.decodeLong, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString)) implicit lazy val encoder: Encoder[PersonRow] = Encoder.forProduct3[PersonRow, Long, Option[String], Option[String]]("one", "two", "name")(x => (x.one, x.two, x.name))(Encoder.encodeLong, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString)) - implicit lazy val read: Read[PersonRow] = new Read[PersonRow]( - gets = List( - (Meta.LongMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonRow( - one = Meta.LongMeta.get.unsafeGetNonNullable(rs, i + 0), - two = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - name = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2) + implicit lazy val read: Read[PersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.LongMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonRow( + one = arr(0).asInstanceOf[Long], + two = arr(1).asInstanceOf[Option[String]], + name = arr(2).asInstanceOf[Option[String]] ) - ) + } implicit lazy val text: Text[PersonRow] = Text.instance[PersonRow]{ (row, sb) => Text.longInstance.unsafeEncode(row.one, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object PersonRow { sb.append(Text.DELIMETER) Text.option(Text.stringInstance).unsafeEncode(row.name, sb) } - implicit lazy val write: Write[PersonRow] = new Write[PersonRow]( - puts = List((Meta.LongMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable)), - toList = x => List(x.one, x.two, x.name), - unsafeSet = (rs, i, a) => { - Meta.LongMeta.put.unsafeSetNonNullable(rs, i + 0, a.one) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 1, a.two) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.name) - }, - unsafeUpdate = (ps, i, a) => { - Meta.LongMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.one) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 1, a.two) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.name) - } + implicit lazy val write: Write[PersonRow] = new Write.Composite[PersonRow]( + List(new Write.Single(Meta.LongMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt), + a => List(a.one, a.two, a.name) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala index 2d84543579..9df1d83be1 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Number.scala @@ -47,10 +47,10 @@ object Number { implicit lazy val get: Get[Number] = Meta.StringMeta.get.temap(Number.apply) implicit lazy val ordering: Ordering[Number] = Ordering.by(_.value) implicit lazy val put: Put[Number] = Put.Advanced.one[Number](JdbcType.Other, NonEmptyList.one("myschema.number"), (ps, i, a) => ps.setString(i, a.value), (rs, i, a) => rs.updateString(i, a.value)) - implicit lazy val read: Read[Number] = Read.fromGet(get) + implicit lazy val read: Read[Number] = new Read.Single(get) implicit lazy val text: Text[Number] = new Text[Number] { override def unsafeEncode(v: Number, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: Number, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[Number] = Write.fromPut(put) + implicit lazy val write: Write[Number] = new Write.Single(put) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala index 04caadff2e..1235efac76 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/Sector.scala @@ -47,10 +47,10 @@ object Sector { implicit lazy val get: Get[Sector] = Meta.StringMeta.get.temap(Sector.apply) implicit lazy val ordering: Ordering[Sector] = Ordering.by(_.value) implicit lazy val put: Put[Sector] = Put.Advanced.one[Sector](JdbcType.Other, NonEmptyList.one("myschema.sector"), (ps, i, a) => ps.setString(i, a.value), (rs, i, a) => rs.updateString(i, a.value)) - implicit lazy val read: Read[Sector] = Read.fromGet(get) + implicit lazy val read: Read[Sector] = new Read.Single(get) implicit lazy val text: Text[Sector] = new Text[Sector] { override def unsafeEncode(v: Sector, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: Sector, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[Sector] = Write.fromPut(put) + implicit lazy val write: Write[Sector] = new Write.Single(put) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala index 550ef85ee1..f551bae747 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRepoImpl.scala @@ -30,14 +30,14 @@ class FootballClubRepoImpl extends FootballClubRepo { DeleteBuilder(""""myschema"."football_club"""", FootballClubFields.structure) } override def deleteById(id: FootballClubId): ConnectionIO[Boolean] = { - sql"""delete from "myschema"."football_club" where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""".update.run.map(_ > 0) + sql"""delete from "myschema"."football_club" where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""".update.run.map(_ > 0) } override def deleteByIds(ids: Array[FootballClubId]): ConnectionIO[Int] = { sql"""delete from "myschema"."football_club" where "id" = ANY(${ids})""".update.run } override def insert(unsaved: FootballClubRow): ConnectionIO[FootballClubRow] = { sql"""insert into "myschema"."football_club"("id", "name") - values (${fromWrite(unsaved.id)(Write.fromPut(FootballClubId.put))}::int8, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.id)(new Write.Single(FootballClubId.put))}::int8, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}) returning "id", "name" """.query(using FootballClubRow.read).unique } @@ -53,14 +53,14 @@ class FootballClubRepoImpl extends FootballClubRepo { override def selectByFieldValues(fieldValues: List[FootballClubFieldOrIdValue[?]]): Stream[ConnectionIO, FootballClubRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case FootballClubFieldValue.id(value) => fr""""id" = ${fromWrite(value)(Write.fromPut(FootballClubId.put))}""" - case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" + case FootballClubFieldValue.id(value) => fr""""id" = ${fromWrite(value)(new Write.Single(FootballClubId.put))}""" + case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" } ) sql"""select "id", "name" from "myschema"."football_club" $where""".query(using FootballClubRow.read).stream } override def selectById(id: FootballClubId): ConnectionIO[Option[FootballClubRow]] = { - sql"""select "id", "name" from "myschema"."football_club" where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""".query(using FootballClubRow.read).option + sql"""select "id", "name" from "myschema"."football_club" where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""".query(using FootballClubRow.read).option } override def selectByIds(ids: Array[FootballClubId]): Stream[ConnectionIO, FootballClubRow] = { sql"""select "id", "name" from "myschema"."football_club" where "id" = ANY(${ids})""".query(using FootballClubRow.read).stream @@ -77,8 +77,8 @@ class FootballClubRepoImpl extends FootballClubRepo { override def update(row: FootballClubRow): ConnectionIO[Boolean] = { val id = row.id sql"""update "myschema"."football_club" - set "name" = ${fromWrite(row.name)(Write.fromPut(Meta.StringMeta.put))} - where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Meta.StringMeta.put))} + where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""" .update .run .map(_ > 0) @@ -89,19 +89,19 @@ class FootballClubRepoImpl extends FootballClubRepo { case Some(nonEmpty) => val updates = fragments.set( nonEmpty.map { - case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" + case FootballClubFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" } ) sql"""update "myschema"."football_club" $updates - where "id" = ${fromWrite(id)(Write.fromPut(FootballClubId.put))}""".update.run.map(_ > 0) + where "id" = ${fromWrite(id)(new Write.Single(FootballClubId.put))}""".update.run.map(_ > 0) } } override def upsert(unsaved: FootballClubRow): ConnectionIO[FootballClubRow] = { sql"""insert into "myschema"."football_club"("id", "name") values ( - ${fromWrite(unsaved.id)(Write.fromPut(FootballClubId.put))}::int8, - ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))} + ${fromWrite(unsaved.id)(new Write.Single(FootballClubId.put))}::int8, + ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))} ) on conflict ("id") do update set diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala index eaaac16fb0..8cf8901448 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/football_club/FootballClubRow.scala @@ -8,14 +8,12 @@ package hardcoded package myschema package football_club -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: myschema.football_club football club @@ -28,32 +26,23 @@ case class FootballClubRow( object FootballClubRow { implicit lazy val decoder: Decoder[FootballClubRow] = Decoder.forProduct2[FootballClubRow, FootballClubId, /* max 100 chars */ String]("id", "name")(FootballClubRow.apply)(FootballClubId.decoder, Decoder.decodeString) implicit lazy val encoder: Encoder[FootballClubRow] = Encoder.forProduct2[FootballClubRow, FootballClubId, /* max 100 chars */ String]("id", "name")(x => (x.id, x.name))(FootballClubId.encoder, Encoder.encodeString) - implicit lazy val read: Read[FootballClubRow] = new Read[FootballClubRow]( - gets = List( - (FootballClubId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => FootballClubRow( - id = FootballClubId.get.unsafeGetNonNullable(rs, i + 0), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1) + implicit lazy val read: Read[FootballClubRow] = new Read.CompositeOfInstances(Array( + new Read.Single(FootballClubId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + FootballClubRow( + id = arr(0).asInstanceOf[FootballClubId], + name = arr(1).asInstanceOf[/* max 100 chars */ String] ) - ) + } implicit lazy val text: Text[FootballClubRow] = Text.instance[FootballClubRow]{ (row, sb) => FootballClubId.text.unsafeEncode(row.id, sb) sb.append(Text.DELIMETER) Text.stringInstance.unsafeEncode(row.name, sb) } - implicit lazy val write: Write[FootballClubRow] = new Write[FootballClubRow]( - puts = List((FootballClubId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls)), - toList = x => List(x.id, x.name), - unsafeSet = (rs, i, a) => { - FootballClubId.put.unsafeSetNonNullable(rs, i + 0, a.id) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.name) - }, - unsafeUpdate = (ps, i, a) => { - FootballClubId.put.unsafeUpdateNonNullable(ps, i + 0, a.id) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - } + implicit lazy val write: Write[FootballClubRow] = new Write.Composite[FootballClubRow]( + List(new Write.Single(FootballClubId.put), + new Write.Single(Meta.StringMeta.put)), + a => List(a.id, a.name) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala index 251789c0a9..4f63379a9b 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRepoImpl.scala @@ -27,14 +27,14 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo { DeleteBuilder(""""myschema"."marital_status"""", MaritalStatusFields.structure) } override def deleteById(id: MaritalStatusId): ConnectionIO[Boolean] = { - sql"""delete from "myschema"."marital_status" where "id" = ${fromWrite(id)(Write.fromPut(MaritalStatusId.put))}""".update.run.map(_ > 0) + sql"""delete from "myschema"."marital_status" where "id" = ${fromWrite(id)(new Write.Single(MaritalStatusId.put))}""".update.run.map(_ > 0) } override def deleteByIds(ids: Array[MaritalStatusId]): ConnectionIO[Int] = { sql"""delete from "myschema"."marital_status" where "id" = ANY(${ids})""".update.run } override def insert(unsaved: MaritalStatusRow): ConnectionIO[MaritalStatusRow] = { sql"""insert into "myschema"."marital_status"("id") - values (${fromWrite(unsaved.id)(Write.fromPut(MaritalStatusId.put))}::int8) + values (${fromWrite(unsaved.id)(new Write.Single(MaritalStatusId.put))}::int8) returning "id" """.query(using MaritalStatusRow.read).unique } @@ -50,13 +50,13 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo { override def selectByFieldValues(fieldValues: List[MaritalStatusFieldOrIdValue[?]]): Stream[ConnectionIO, MaritalStatusRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case MaritalStatusFieldValue.id(value) => fr""""id" = ${fromWrite(value)(Write.fromPut(MaritalStatusId.put))}""" + case MaritalStatusFieldValue.id(value) => fr""""id" = ${fromWrite(value)(new Write.Single(MaritalStatusId.put))}""" } ) sql"""select "id" from "myschema"."marital_status" $where""".query(using MaritalStatusRow.read).stream } override def selectById(id: MaritalStatusId): ConnectionIO[Option[MaritalStatusRow]] = { - sql"""select "id" from "myschema"."marital_status" where "id" = ${fromWrite(id)(Write.fromPut(MaritalStatusId.put))}""".query(using MaritalStatusRow.read).option + sql"""select "id" from "myschema"."marital_status" where "id" = ${fromWrite(id)(new Write.Single(MaritalStatusId.put))}""".query(using MaritalStatusRow.read).option } override def selectByIds(ids: Array[MaritalStatusId]): Stream[ConnectionIO, MaritalStatusRow] = { sql"""select "id" from "myschema"."marital_status" where "id" = ANY(${ids})""".query(using MaritalStatusRow.read).stream @@ -73,7 +73,7 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo { override def upsert(unsaved: MaritalStatusRow): ConnectionIO[MaritalStatusRow] = { sql"""insert into "myschema"."marital_status"("id") values ( - ${fromWrite(unsaved.id)(Write.fromPut(MaritalStatusId.put))}::int8 + ${fromWrite(unsaved.id)(new Write.Single(MaritalStatusId.put))}::int8 ) on conflict ("id") do update set "id" = EXCLUDED."id" diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala index d2a9981c82..868486b6f3 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/marital_status/MaritalStatusRow.scala @@ -8,13 +8,11 @@ package hardcoded package myschema package marital_status -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: myschema.marital_status Primary key: id */ @@ -25,25 +23,18 @@ case class MaritalStatusRow( object MaritalStatusRow { implicit lazy val decoder: Decoder[MaritalStatusRow] = Decoder.forProduct1[MaritalStatusRow, MaritalStatusId]("id")(MaritalStatusRow.apply)(MaritalStatusId.decoder) implicit lazy val encoder: Encoder[MaritalStatusRow] = Encoder.forProduct1[MaritalStatusRow, MaritalStatusId]("id")(x => (x.id))(MaritalStatusId.encoder) - implicit lazy val read: Read[MaritalStatusRow] = new Read[MaritalStatusRow]( - gets = List( - (MaritalStatusId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => MaritalStatusRow( - id = MaritalStatusId.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[MaritalStatusRow] = new Read.CompositeOfInstances(Array( + new Read.Single(MaritalStatusId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + MaritalStatusRow( + id = arr(0).asInstanceOf[MaritalStatusId] ) - ) + } implicit lazy val text: Text[MaritalStatusRow] = Text.instance[MaritalStatusRow]{ (row, sb) => MaritalStatusId.text.unsafeEncode(row.id, sb) } - implicit lazy val write: Write[MaritalStatusRow] = new Write[MaritalStatusRow]( - puts = List((MaritalStatusId.put, Nullability.NoNulls)), - toList = x => List(x.id), - unsafeSet = (rs, i, a) => { - MaritalStatusId.put.unsafeSetNonNullable(rs, i + 0, a.id) - }, - unsafeUpdate = (ps, i, a) => { - MaritalStatusId.put.unsafeUpdateNonNullable(ps, i + 0, a.id) - } + implicit lazy val write: Write[MaritalStatusRow] = new Write.Composite[MaritalStatusRow]( + List(new Write.Single(MaritalStatusId.put)), + a => List(a.id) ) } diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala index 83eca2881d..993c32ad1e 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala @@ -34,38 +34,38 @@ class PersonRepoImpl extends PersonRepo { DeleteBuilder(""""myschema"."person"""", PersonFields.structure) } override def deleteById(id: PersonId): ConnectionIO[Boolean] = { - sql"""delete from "myschema"."person" where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""".update.run.map(_ > 0) + sql"""delete from "myschema"."person" where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""".update.run.map(_ > 0) } override def deleteByIds(ids: Array[PersonId]): ConnectionIO[Int] = { sql"""delete from "myschema"."person" where "id" = ANY(${ids})""".update.run } override def insert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "myschema"."person"("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "favorite_number") - values (${fromWrite(unsaved.id)(Write.fromPut(PersonId.put))}::int8, ${fromWrite(unsaved.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.nickName)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.email)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.phone)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.maritalStatusId)(Write.fromPut(MaritalStatusId.put))}, ${fromWrite(unsaved.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.favoriteNumber)(Write.fromPut(Number.put))}::myschema.number) + values (${fromWrite(unsaved.id)(new Write.Single(PersonId.put))}::int8, ${fromWrite(unsaved.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.email)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.phone)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.maritalStatusId)(new Write.Single(MaritalStatusId.put))}, ${fromWrite(unsaved.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.favoriteNumber)(new Write.Single(Number.put))}::myschema.number) returning "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" """.query(using PersonRow.read).unique } override def insert(unsaved: PersonRowUnsaved): ConnectionIO[PersonRow] = { val fs = List( - Some((Fragment.const0(s""""favourite_football_club_id""""), fr"${fromWrite(unsaved.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""nick_name""""), fr"${fromWrite(unsaved.nickName)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""blog_url""""), fr"${fromWrite(unsaved.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""email""""), fr"${fromWrite(unsaved.email)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""phone""""), fr"${fromWrite(unsaved.phone)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""likes_pizza""""), fr"${fromWrite(unsaved.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}")), - Some((Fragment.const0(s""""work_email""""), fr"${fromWrite(unsaved.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""favourite_football_club_id""""), fr"${fromWrite(unsaved.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""nick_name""""), fr"${fromWrite(unsaved.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""blog_url""""), fr"${fromWrite(unsaved.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""email""""), fr"${fromWrite(unsaved.email)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""phone""""), fr"${fromWrite(unsaved.phone)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""likes_pizza""""), fr"${fromWrite(unsaved.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}")), + Some((Fragment.const0(s""""work_email""""), fr"${fromWrite(unsaved.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.id match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""id""""), fr"${fromWrite(value: PersonId)(Write.fromPut(PersonId.put))}::int8")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""id""""), fr"${fromWrite(value: PersonId)(new Write.Single(PersonId.put))}::int8")) }, unsaved.maritalStatusId match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""marital_status_id""""), fr"${fromWrite(value: MaritalStatusId)(Write.fromPut(MaritalStatusId.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""marital_status_id""""), fr"${fromWrite(value: MaritalStatusId)(new Write.Single(MaritalStatusId.put))}")) }, unsaved.favoriteNumber match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""favorite_number""""), fr"${fromWrite(value: Number)(Write.fromPut(Number.put))}::myschema.number")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""favorite_number""""), fr"${fromWrite(value: Number)(new Write.Single(Number.put))}::myschema.number")) } ).flatten @@ -99,24 +99,24 @@ class PersonRepoImpl extends PersonRepo { override def selectByFieldValues(fieldValues: List[PersonFieldOrIdValue[?]]): Stream[ConnectionIO, PersonRow] = { val where = fragments.whereAndOpt( fieldValues.map { - case PersonFieldValue.id(value) => fr""""id" = ${fromWrite(value)(Write.fromPut(PersonId.put))}""" - case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(Write.fromPut(FootballClubId.put))}""" - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(Write.fromPut(Meta.BooleanMeta.put))}""" - case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(Write.fromPut(MaritalStatusId.put))}""" - case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(Write.fromPut(Sector.put))}""" - case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(Write.fromPut(Number.put))}""" + case PersonFieldValue.id(value) => fr""""id" = ${fromWrite(value)(new Write.Single(PersonId.put))}""" + case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(new Write.Single(FootballClubId.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(new Write.Single(Meta.BooleanMeta.put))}""" + case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(new Write.Single(MaritalStatusId.put))}""" + case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(new Write.Single(Sector.put))}""" + case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(new Write.Single(Number.put))}""" } ) sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" $where""".query(using PersonRow.read).stream } override def selectById(id: PersonId): ConnectionIO[Option[PersonRow]] = { - sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""".query(using PersonRow.read).option + sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""".query(using PersonRow.read).option } override def selectByIds(ids: Array[PersonId]): Stream[ConnectionIO, PersonRow] = { sql"""select "id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number" from "myschema"."person" where "id" = ANY(${ids})""".query(using PersonRow.read).stream @@ -133,17 +133,17 @@ class PersonRepoImpl extends PersonRepo { override def update(row: PersonRow): ConnectionIO[Boolean] = { val id = row.id sql"""update "myschema"."person" - set "favourite_football_club_id" = ${fromWrite(row.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}, - "name" = ${fromWrite(row.name)(Write.fromPut(Meta.StringMeta.put))}, - "nick_name" = ${fromWrite(row.nickName)(Write.fromPutOption(Meta.StringMeta.put))}, - "blog_url" = ${fromWrite(row.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}, - "email" = ${fromWrite(row.email)(Write.fromPut(Meta.StringMeta.put))}, - "phone" = ${fromWrite(row.phone)(Write.fromPut(Meta.StringMeta.put))}, - "likes_pizza" = ${fromWrite(row.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}, - "marital_status_id" = ${fromWrite(row.maritalStatusId)(Write.fromPut(MaritalStatusId.put))}, - "work_email" = ${fromWrite(row.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}, - "favorite_number" = ${fromWrite(row.favoriteNumber)(Write.fromPut(Number.put))}::myschema.number - where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""" + set "favourite_football_club_id" = ${fromWrite(row.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}, + "name" = ${fromWrite(row.name)(new Write.Single(Meta.StringMeta.put))}, + "nick_name" = ${fromWrite(row.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}, + "blog_url" = ${fromWrite(row.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}, + "email" = ${fromWrite(row.email)(new Write.Single(Meta.StringMeta.put))}, + "phone" = ${fromWrite(row.phone)(new Write.Single(Meta.StringMeta.put))}, + "likes_pizza" = ${fromWrite(row.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}, + "marital_status_id" = ${fromWrite(row.maritalStatusId)(new Write.Single(MaritalStatusId.put))}, + "work_email" = ${fromWrite(row.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}, + "favorite_number" = ${fromWrite(row.favoriteNumber)(new Write.Single(Number.put))}::myschema.number + where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""" .update .run .map(_ > 0) @@ -154,38 +154,38 @@ class PersonRepoImpl extends PersonRepo { case Some(nonEmpty) => val updates = fragments.set( nonEmpty.map { - case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(Write.fromPut(FootballClubId.put))}""" - case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(Write.fromPut(Meta.StringMeta.put))}""" - case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(Write.fromPut(Meta.BooleanMeta.put))}""" - case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(Write.fromPut(MaritalStatusId.put))}""" - case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(Write.fromPutOption(Meta.StringMeta.put))}""" - case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(Write.fromPut(Sector.put))}::myschema.sector""" - case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(Write.fromPut(Number.put))}::myschema.number""" + case PersonFieldValue.favouriteFootballClubId(value) => fr""""favourite_football_club_id" = ${fromWrite(value)(new Write.Single(FootballClubId.put))}""" + case PersonFieldValue.name(value) => fr""""name" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.nickName(value) => fr""""nick_name" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.blogUrl(value) => fr""""blog_url" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.email(value) => fr""""email" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.phone(value) => fr""""phone" = ${fromWrite(value)(new Write.Single(Meta.StringMeta.put))}""" + case PersonFieldValue.likesPizza(value) => fr""""likes_pizza" = ${fromWrite(value)(new Write.Single(Meta.BooleanMeta.put))}""" + case PersonFieldValue.maritalStatusId(value) => fr""""marital_status_id" = ${fromWrite(value)(new Write.Single(MaritalStatusId.put))}""" + case PersonFieldValue.workEmail(value) => fr""""work_email" = ${fromWrite(value)(new Write.SingleOpt(Meta.StringMeta.put))}""" + case PersonFieldValue.sector(value) => fr""""sector" = ${fromWrite(value)(new Write.Single(Sector.put))}::myschema.sector""" + case PersonFieldValue.favoriteNumber(value) => fr""""favorite_number" = ${fromWrite(value)(new Write.Single(Number.put))}::myschema.number""" } ) sql"""update "myschema"."person" $updates - where "id" = ${fromWrite(id)(Write.fromPut(PersonId.put))}""".update.run.map(_ > 0) + where "id" = ${fromWrite(id)(new Write.Single(PersonId.put))}""".update.run.map(_ > 0) } } override def upsert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "myschema"."person"("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "favorite_number") values ( - ${fromWrite(unsaved.id)(Write.fromPut(PersonId.put))}::int8, - ${fromWrite(unsaved.favouriteFootballClubId)(Write.fromPut(FootballClubId.put))}, - ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.nickName)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.blogUrl)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.email)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.phone)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.likesPizza)(Write.fromPut(Meta.BooleanMeta.put))}, - ${fromWrite(unsaved.maritalStatusId)(Write.fromPut(MaritalStatusId.put))}, - ${fromWrite(unsaved.workEmail)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.favoriteNumber)(Write.fromPut(Number.put))}::myschema.number + ${fromWrite(unsaved.id)(new Write.Single(PersonId.put))}::int8, + ${fromWrite(unsaved.favouriteFootballClubId)(new Write.Single(FootballClubId.put))}, + ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.nickName)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.blogUrl)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.email)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.phone)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.likesPizza)(new Write.Single(Meta.BooleanMeta.put))}, + ${fromWrite(unsaved.maritalStatusId)(new Write.Single(MaritalStatusId.put))}, + ${fromWrite(unsaved.workEmail)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.favoriteNumber)(new Write.Single(Number.put))}::myschema.number ) on conflict ("id") do update set diff --git a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala index cf6be56ca0..877d300547 100644 --- a/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala +++ b/.bleep/generated-sources/typo-tester-doobie@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRow.scala @@ -8,14 +8,12 @@ package hardcoded package myschema package person -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet import testdb.hardcoded.customtypes.Defaulted import testdb.hardcoded.myschema.football_club.FootballClubId import testdb.hardcoded.myschema.marital_status.MaritalStatusId @@ -51,36 +49,35 @@ case class PersonRow( object PersonRow { implicit lazy val decoder: Decoder[PersonRow] = Decoder.forProduct12[PersonRow, PersonId, FootballClubId, /* max 100 chars */ String, Option[/* max 30 chars */ String], Option[/* max 100 chars */ String], /* max 254 chars */ String, /* max 8 chars */ String, Boolean, MaritalStatusId, Option[/* max 254 chars */ String], Sector, Number]("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number")(PersonRow.apply)(PersonId.decoder, FootballClubId.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Decoder.decodeString, Decoder.decodeBoolean, MaritalStatusId.decoder, Decoder.decodeOption(Decoder.decodeString), Sector.decoder, Number.decoder) implicit lazy val encoder: Encoder[PersonRow] = Encoder.forProduct12[PersonRow, PersonId, FootballClubId, /* max 100 chars */ String, Option[/* max 30 chars */ String], Option[/* max 100 chars */ String], /* max 254 chars */ String, /* max 8 chars */ String, Boolean, MaritalStatusId, Option[/* max 254 chars */ String], Sector, Number]("id", "favourite_football_club_id", "name", "nick_name", "blog_url", "email", "phone", "likes_pizza", "marital_status_id", "work_email", "sector", "favorite_number")(x => (x.id, x.favouriteFootballClubId, x.name, x.nickName, x.blogUrl, x.email, x.phone, x.likesPizza, x.maritalStatusId, x.workEmail, x.sector, x.favoriteNumber))(PersonId.encoder, FootballClubId.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Encoder.encodeString, Encoder.encodeBoolean, MaritalStatusId.encoder, Encoder.encodeOption(Encoder.encodeString), Sector.encoder, Number.encoder) - implicit lazy val read: Read[PersonRow] = new Read[PersonRow]( - gets = List( - (PersonId.get, Nullability.NoNulls), - (FootballClubId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.BooleanMeta.get, Nullability.NoNulls), - (MaritalStatusId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Sector.get, Nullability.NoNulls), - (Number.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonRow( - id = PersonId.get.unsafeGetNonNullable(rs, i + 0), - favouriteFootballClubId = FootballClubId.get.unsafeGetNonNullable(rs, i + 1), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - nickName = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - blogUrl = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - email = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - phone = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - likesPizza = Meta.BooleanMeta.get.unsafeGetNonNullable(rs, i + 7), - maritalStatusId = MaritalStatusId.get.unsafeGetNonNullable(rs, i + 8), - workEmail = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - sector = Sector.get.unsafeGetNonNullable(rs, i + 10), - favoriteNumber = Number.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[PersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PersonId.get).asInstanceOf[Read[Any]], + new Read.Single(FootballClubId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.BooleanMeta.get).asInstanceOf[Read[Any]], + new Read.Single(MaritalStatusId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Sector.get).asInstanceOf[Read[Any]], + new Read.Single(Number.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonRow( + id = arr(0).asInstanceOf[PersonId], + favouriteFootballClubId = arr(1).asInstanceOf[FootballClubId], + name = arr(2).asInstanceOf[/* max 100 chars */ String], + nickName = arr(3).asInstanceOf[Option[/* max 30 chars */ String]], + blogUrl = arr(4).asInstanceOf[Option[/* max 100 chars */ String]], + email = arr(5).asInstanceOf[/* max 254 chars */ String], + phone = arr(6).asInstanceOf[/* max 8 chars */ String], + likesPizza = arr(7).asInstanceOf[Boolean], + maritalStatusId = arr(8).asInstanceOf[MaritalStatusId], + workEmail = arr(9).asInstanceOf[Option[/* max 254 chars */ String]], + sector = arr(10).asInstanceOf[Sector], + favoriteNumber = arr(11).asInstanceOf[Number] ) - ) + } implicit lazy val text: Text[PersonRow] = Text.instance[PersonRow]{ (row, sb) => PersonId.text.unsafeEncode(row.id, sb) sb.append(Text.DELIMETER) @@ -104,44 +101,18 @@ object PersonRow { sb.append(Text.DELIMETER) Number.text.unsafeEncode(row.favoriteNumber, sb) } - implicit lazy val write: Write[PersonRow] = new Write[PersonRow]( - puts = List((PersonId.put, Nullability.NoNulls), - (FootballClubId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.BooleanMeta.put, Nullability.NoNulls), - (MaritalStatusId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Number.put, Nullability.NoNulls)), - toList = x => List(x.id, x.favouriteFootballClubId, x.name, x.nickName, x.blogUrl, x.email, x.phone, x.likesPizza, x.maritalStatusId, x.workEmail, x.favoriteNumber), - unsafeSet = (rs, i, a) => { - PersonId.put.unsafeSetNonNullable(rs, i + 0, a.id) - FootballClubId.put.unsafeSetNonNullable(rs, i + 1, a.favouriteFootballClubId) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.name) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 3, a.nickName) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 4, a.blogUrl) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.email) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 6, a.phone) - Meta.BooleanMeta.put.unsafeSetNonNullable(rs, i + 7, a.likesPizza) - MaritalStatusId.put.unsafeSetNonNullable(rs, i + 8, a.maritalStatusId) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 9, a.workEmail) - Number.put.unsafeSetNonNullable(rs, i + 10, a.favoriteNumber) - }, - unsafeUpdate = (ps, i, a) => { - PersonId.put.unsafeUpdateNonNullable(ps, i + 0, a.id) - FootballClubId.put.unsafeUpdateNonNullable(ps, i + 1, a.favouriteFootballClubId) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.name) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 3, a.nickName) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 4, a.blogUrl) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.email) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.phone) - Meta.BooleanMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.likesPizza) - MaritalStatusId.put.unsafeUpdateNonNullable(ps, i + 8, a.maritalStatusId) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 9, a.workEmail) - Number.put.unsafeUpdateNonNullable(ps, i + 10, a.favoriteNumber) - } + implicit lazy val write: Write[PersonRow] = new Write.Composite[PersonRow]( + List(new Write.Single(PersonId.put), + new Write.Single(FootballClubId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.BooleanMeta.put), + new Write.Single(MaritalStatusId.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Number.put)), + a => List(a.id, a.favouriteFootballClubId, a.name, a.nickName, a.blogUrl, a.email, a.phone, a.likesPizza, a.maritalStatusId, a.workEmail, a.favoriteNumber) ) } diff --git a/CLAUDE.md b/CLAUDE.md index 58e448cce2..9e16aac650 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -319,3 +319,11 @@ When working on Typo issues, follow this workflow: - **Integration Tests**: Test full generation pipeline - **Regression Tests**: Ensure fixes don't break existing functionality - **Edge Case Coverage**: Test boundary conditions and unusual schemas + +## Project Memories and Notes + +### Code Generation and Development Workflow +- You need to run `bleep generate-adventureworks` to see the effect on codegen based on what is in the test database. Do this before running tests + +### Development Philosophy +- We should never generate code which relies on derivation. *we* are the deriver \ No newline at end of file diff --git a/bleep.yaml b/bleep.yaml index 214e86bee2..ab47a467f2 100644 --- a/bleep.yaml +++ b/bleep.yaml @@ -1,5 +1,5 @@ $schema: https://raw.githubusercontent.com/oyvindberg/bleep/master/schema.json -$version: 0.0.7 +$version: 0.0.12 jvm: name: graalvm-community:21.0.2 projects: @@ -32,7 +32,7 @@ projects: extends: template-cross sources: ../typo-dsl-shared typo-dsl-doobie: - dependencies: org.tpolecat::doobie-postgres:1.0.0-RC5 + dependencies: org.tpolecat::doobie-postgres:1.0.0-RC9 extends: template-cross sources: ../typo-dsl-shared typo-dsl-zio-jdbc: diff --git a/snapshot-tests/dooble-sql/CompositeIdsTest/query2.sql b/snapshot-tests/dooble-sql/CompositeIdsTest/query2.sql index 4838cdfdee..a7ed145ba6 100644 --- a/snapshot-tests/dooble-sql/CompositeIdsTest/query2.sql +++ b/snapshot-tests/dooble-sql/CompositeIdsTest/query2.sql @@ -1,5 +1,5 @@ with personemailaddress0 as ( - (select personemailaddress0 from "person"."emailaddress" personemailaddress0 WHERE ((personemailaddress0).businessentityid , (personemailaddress0).emailaddressid ) in (select unnest(?::_int4 ), unnest(?::_int4 ))) + (select personemailaddress0 from "person"."emailaddress" personemailaddress0 WHERE (((personemailaddress0).businessentityid , (personemailaddress0).emailaddressid ) in (select unnest(?::_int4 ), unnest(?::_int4 )))) ) select (personemailaddress0)."businessentityid",(personemailaddress0)."emailaddressid",(personemailaddress0)."emailaddress",(personemailaddress0)."rowguid",(personemailaddress0)."modifieddate"::text from personemailaddress0 \ No newline at end of file diff --git a/snapshot-tests/dooble-sql/DSLTest/doubled.sql b/snapshot-tests/dooble-sql/DSLTest/doubled.sql index 0cfdb75e38..63e46400b5 100644 --- a/snapshot-tests/dooble-sql/DSLTest/doubled.sql +++ b/snapshot-tests/dooble-sql/DSLTest/doubled.sql @@ -1,6 +1,6 @@ with salessalesperson0 as ( - (select salessalesperson0 from "sales"."salesperson" salessalesperson0 WHERE ((salessalesperson0).rowguid = ?::uuid ) ) + (select salessalesperson0 from "sales"."salesperson" salessalesperson0 WHERE (((salessalesperson0).rowguid = ?::uuid ) )) ) , humanresourcesemployee0 as ( (select humanresourcesemployee0 from "humanresources"."employee" humanresourcesemployee0 ) @@ -53,7 +53,7 @@ join_cte1 as ( ) , salessalesperson2 as ( - (select salessalesperson2 from "sales"."salesperson" salessalesperson2 WHERE ((salessalesperson2).rowguid = ?::uuid ) ) + (select salessalesperson2 from "sales"."salesperson" salessalesperson2 WHERE (((salessalesperson2).rowguid = ?::uuid ) )) ) , humanresourcesemployee1 as ( (select humanresourcesemployee1 from "humanresources"."employee" humanresourcesemployee1 ) diff --git a/snapshot-tests/dooble-sql/ProductTest/q.sql b/snapshot-tests/dooble-sql/ProductTest/q.sql index 511ebee5a8..c6431be3b8 100644 --- a/snapshot-tests/dooble-sql/ProductTest/q.sql +++ b/snapshot-tests/dooble-sql/ProductTest/q.sql @@ -1,15 +1,15 @@ with productionproduct0 as ( - (select productionproduct0 from "production"."product" productionproduct0 WHERE NOT ((productionproduct0).name LIKE ? ) AND NOT (((productionproduct0).name || (productionproduct0).color ) LIKE ? ) AND ((productionproduct0).daystomanufacture > ? ) AND ((productionproduct0).modifieddate < ?::timestamp ) ) + (select productionproduct0 from "production"."product" productionproduct0 WHERE (NOT ((productionproduct0).name LIKE ? ) ) AND (NOT (((productionproduct0).name || (productionproduct0).color ) LIKE ? ) ) AND (((productionproduct0).daystomanufacture > ? ) ) AND (((productionproduct0).modifieddate < ?::timestamp ) )) ) , productionproductmodel0 as ( - (select productionproductmodel0 from "production"."productmodel" productionproductmodel0 WHERE ((productionproductmodel0).modifieddate < ?::timestamp ) ) + (select productionproductmodel0 from "production"."productmodel" productionproductmodel0 WHERE (((productionproductmodel0).modifieddate < ?::timestamp ) )) ) , join_cte0 as ( select productionproduct0, productionproductmodel0 from productionproduct0 join productionproductmodel0 on ((productionproduct0).productmodelid = (productionproductmodel0).productmodelid ) - WHERE NOT (productionproductmodel0).instructions IS NULL + WHERE (NOT (productionproductmodel0).instructions IS NULL ) ) select (productionproduct0)."productid",(productionproduct0)."name",(productionproduct0)."productnumber",(productionproduct0)."makeflag",(productionproduct0)."finishedgoodsflag",(productionproduct0)."color",(productionproduct0)."safetystocklevel",(productionproduct0)."reorderpoint",(productionproduct0)."standardcost",(productionproduct0)."listprice",(productionproduct0)."size",(productionproduct0)."sizeunitmeasurecode",(productionproduct0)."weightunitmeasurecode",(productionproduct0)."weight",(productionproduct0)."daystomanufacture",(productionproduct0)."productline",(productionproduct0)."class",(productionproduct0)."style",(productionproduct0)."productsubcategoryid",(productionproduct0)."productmodelid",(productionproduct0)."sellstartdate"::text,(productionproduct0)."sellenddate"::text,(productionproduct0)."discontinueddate"::text,(productionproduct0)."rowguid",(productionproduct0)."modifieddate"::text,(productionproductmodel0)."productmodelid",(productionproductmodel0)."name",(productionproductmodel0)."catalogdescription",(productionproductmodel0)."instructions",(productionproductmodel0)."rowguid",(productionproductmodel0)."modifieddate"::text from join_cte0 \ No newline at end of file diff --git a/snapshot-tests/dooble-sql/ProductTest/q2.sql b/snapshot-tests/dooble-sql/ProductTest/q2.sql index 5d1f7139e9..f33c1c7fe4 100644 --- a/snapshot-tests/dooble-sql/ProductTest/q2.sql +++ b/snapshot-tests/dooble-sql/ProductTest/q2.sql @@ -1,19 +1,19 @@ with productionproduct0 as ( - (select productionproduct0 from "production"."product" productionproduct0 WHERE (productionproduct0).productid = ANY(?) AND (length((productionproduct0).name ) > ? ) AND NOT (((productionproduct0).name || (productionproduct0).color ) LIKE ? ) AND (coalesce(length((productionproduct0).color ) , ? ) > ? ) AND ((productionproduct0).modifieddate < ?::timestamp ) ) + (select productionproduct0 from "production"."product" productionproduct0 WHERE ((productionproduct0).productid = ANY(?) ) AND ((length((productionproduct0).name ) > ? ) ) AND (NOT (((productionproduct0).name || (productionproduct0).color ) LIKE ? ) ) AND ((coalesce(length((productionproduct0).color ) , ? ) > ? ) ) AND (((productionproduct0).modifieddate < ?::timestamp ) )) ) , productionproductmodel0 as ( - (select productionproductmodel0 from "production"."productmodel" productionproductmodel0 WHERE NOT ((productionproductmodel0).name LIKE ? ) ) + (select productionproductmodel0 from "production"."productmodel" productionproductmodel0 WHERE (NOT ((productionproductmodel0).name LIKE ? ) )) ) , join_cte0 as ( select productionproduct0, productionproductmodel0 from productionproduct0 join productionproductmodel0 on ((productionproduct0).productmodelid = (productionproductmodel0).productmodelid ) - WHERE ((productionproductmodel0).productmodelid > ? ) + WHERE (((productionproductmodel0).productmodelid > ? ) ) ) , productionproductmodel1 as ( - (select productionproductmodel1 from "production"."productmodel" productionproductmodel1 WHERE NOT ((productionproductmodel1).name LIKE ? ) ) + (select productionproductmodel1 from "production"."productmodel" productionproductmodel1 WHERE (NOT ((productionproductmodel1).name LIKE ? ) )) ) , left_join_cte0 as ( select productionproduct0, productionproductmodel0, productionproductmodel1 diff --git a/snapshot-tests/dooble-sql/ProductTest/query.sql b/snapshot-tests/dooble-sql/ProductTest/query.sql index ab782c3ba1..756d24fd61 100644 --- a/snapshot-tests/dooble-sql/ProductTest/query.sql +++ b/snapshot-tests/dooble-sql/ProductTest/query.sql @@ -1,9 +1,9 @@ with productionproduct0 as ( - (select productionproduct0 from "production"."product" productionproduct0 WHERE ((productionproduct0).class = ? ) AND (((productionproduct0).daystomanufacture > ? ) OR ((productionproduct0).daystomanufacture <= ? ) ) AND ((productionproduct0).productline = ? ) ) + (select productionproduct0 from "production"."product" productionproduct0 WHERE (((productionproduct0).class = ? ) ) AND ((((productionproduct0).daystomanufacture > ? ) OR ((productionproduct0).daystomanufacture <= ? ) ) ) AND (((productionproduct0).productline = ? ) )) ) , productionunitmeasure0 as ( - (select productionunitmeasure0 from "production"."unitmeasure" productionunitmeasure0 WHERE ((productionunitmeasure0).name LIKE ? ) ) + (select productionunitmeasure0 from "production"."unitmeasure" productionunitmeasure0 WHERE (((productionunitmeasure0).name LIKE ? ) )) ) , join_cte0 as ( select productionproduct0, productionunitmeasure0 @@ -20,6 +20,6 @@ left_join_cte0 as ( from join_cte0 left join productionproductmodel0 on ((productionproduct0).productmodelid = (productionproductmodel0).productmodelid ) - WHERE ((productionproduct0).productmodelid = (productionproductmodel0).productmodelid ) ORDER BY (productionproduct0).productmodelid ASC , (productionproductmodel0).name DESC NULLS FIRST + WHERE (((productionproduct0).productmodelid = (productionproductmodel0).productmodelid ) )ORDER BY (productionproduct0).productmodelid ASC , (productionproductmodel0).name DESC NULLS FIRST ) select (productionproduct0)."productid",(productionproduct0)."name",(productionproduct0)."productnumber",(productionproduct0)."makeflag",(productionproduct0)."finishedgoodsflag",(productionproduct0)."color",(productionproduct0)."safetystocklevel",(productionproduct0)."reorderpoint",(productionproduct0)."standardcost",(productionproduct0)."listprice",(productionproduct0)."size",(productionproduct0)."sizeunitmeasurecode",(productionproduct0)."weightunitmeasurecode",(productionproduct0)."weight",(productionproduct0)."daystomanufacture",(productionproduct0)."productline",(productionproduct0)."class",(productionproduct0)."style",(productionproduct0)."productsubcategoryid",(productionproduct0)."productmodelid",(productionproduct0)."sellstartdate"::text,(productionproduct0)."sellenddate"::text,(productionproduct0)."discontinueddate"::text,(productionproduct0)."rowguid",(productionproduct0)."modifieddate"::text,(productionunitmeasure0)."unitmeasurecode",(productionunitmeasure0)."name",(productionunitmeasure0)."modifieddate"::text,(productionproductmodel0)."productmodelid",(productionproductmodel0)."name",(productionproductmodel0)."catalogdescription",(productionproductmodel0)."instructions",(productionproductmodel0)."rowguid",(productionproductmodel0)."modifieddate"::text from left_join_cte0 \ No newline at end of file diff --git a/snapshot-tests/dooble-sql/ProductTest/updateReturning.sql b/snapshot-tests/dooble-sql/ProductTest/updateReturning.sql index b547320805..2cf99e36fa 100644 --- a/snapshot-tests/dooble-sql/ProductTest/updateReturning.sql +++ b/snapshot-tests/dooble-sql/ProductTest/updateReturning.sql @@ -1 +1 @@ -update "production"."product" SET name = substring((upper(reverse(name ) ) || ? ) , ? , ? ) ::varchar , listprice = ? ::numeric , reorderpoint = (reorderpoint + ?::int2 ) ::int2 WHERE coalesce((productid = ? ) , ? ) returning "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text \ No newline at end of file +update "production"."product" SET name = substring((upper(reverse(name ) ) || ? ) , ? , ? ) ::varchar , listprice = ? ::numeric , reorderpoint = (reorderpoint + ?::int2 ) ::int2 WHERE (coalesce((productid = ? ) , ? ) ) returning "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text \ No newline at end of file diff --git a/snapshot-tests/dooble-sql/SeekTest/complex.sql b/snapshot-tests/dooble-sql/SeekTest/complex.sql index 1e939cbb3c..8365644d88 100644 --- a/snapshot-tests/dooble-sql/SeekTest/complex.sql +++ b/snapshot-tests/dooble-sql/SeekTest/complex.sql @@ -1,5 +1,5 @@ with productionproduct0 as ( - (select productionproduct0 from "production"."product" productionproduct0 WHERE ((((productionproduct0).name > ? ) OR (((productionproduct0).name = ? ) AND ((productionproduct0).weight < ? ) ) ) OR ((((productionproduct0).name = ? ) AND ((productionproduct0).weight = ? ) ) AND ((productionproduct0).listprice < ? ) ) ) ORDER BY (productionproduct0).name ASC , (productionproduct0).weight DESC , (productionproduct0).listprice DESC ) + (select productionproduct0 from "production"."product" productionproduct0 WHERE (((((productionproduct0).name > ? ) OR (((productionproduct0).name = ? ) AND ((productionproduct0).weight < ? ) ) ) OR ((((productionproduct0).name = ? ) AND ((productionproduct0).weight = ? ) ) AND ((productionproduct0).listprice < ? ) ) ) )ORDER BY (productionproduct0).name ASC , (productionproduct0).weight DESC , (productionproduct0).listprice DESC ) ) select (productionproduct0)."productid",(productionproduct0)."name",(productionproduct0)."productnumber",(productionproduct0)."makeflag",(productionproduct0)."finishedgoodsflag",(productionproduct0)."color",(productionproduct0)."safetystocklevel",(productionproduct0)."reorderpoint",(productionproduct0)."standardcost",(productionproduct0)."listprice",(productionproduct0)."size",(productionproduct0)."sizeunitmeasurecode",(productionproduct0)."weightunitmeasurecode",(productionproduct0)."weight",(productionproduct0)."daystomanufacture",(productionproduct0)."productline",(productionproduct0)."class",(productionproduct0)."style",(productionproduct0)."productsubcategoryid",(productionproduct0)."productmodelid",(productionproduct0)."sellstartdate"::text,(productionproduct0)."sellenddate"::text,(productionproduct0)."discontinueddate"::text,(productionproduct0)."rowguid",(productionproduct0)."modifieddate"::text from productionproduct0 \ No newline at end of file diff --git a/snapshot-tests/dooble-sql/SeekTest/uniform-ascending.sql b/snapshot-tests/dooble-sql/SeekTest/uniform-ascending.sql index fe823cd3dd..59f96134e1 100644 --- a/snapshot-tests/dooble-sql/SeekTest/uniform-ascending.sql +++ b/snapshot-tests/dooble-sql/SeekTest/uniform-ascending.sql @@ -1,5 +1,5 @@ with productionproduct0 as ( - (select productionproduct0 from "production"."product" productionproduct0 WHERE (((productionproduct0).name , (productionproduct0).weight , (productionproduct0).listprice ) > (? , ? , ? ) ) ORDER BY (productionproduct0).name ASC , (productionproduct0).weight ASC , (productionproduct0).listprice ASC ) + (select productionproduct0 from "production"."product" productionproduct0 WHERE ((((productionproduct0).name , (productionproduct0).weight , (productionproduct0).listprice ) > (? , ? , ? ) ) )ORDER BY (productionproduct0).name ASC , (productionproduct0).weight ASC , (productionproduct0).listprice ASC ) ) select (productionproduct0)."productid",(productionproduct0)."name",(productionproduct0)."productnumber",(productionproduct0)."makeflag",(productionproduct0)."finishedgoodsflag",(productionproduct0)."color",(productionproduct0)."safetystocklevel",(productionproduct0)."reorderpoint",(productionproduct0)."standardcost",(productionproduct0)."listprice",(productionproduct0)."size",(productionproduct0)."sizeunitmeasurecode",(productionproduct0)."weightunitmeasurecode",(productionproduct0)."weight",(productionproduct0)."daystomanufacture",(productionproduct0)."productline",(productionproduct0)."class",(productionproduct0)."style",(productionproduct0)."productsubcategoryid",(productionproduct0)."productmodelid",(productionproduct0)."sellstartdate"::text,(productionproduct0)."sellenddate"::text,(productionproduct0)."discontinueddate"::text,(productionproduct0)."rowguid",(productionproduct0)."modifieddate"::text from productionproduct0 \ No newline at end of file diff --git a/snapshot-tests/dooble-sql/SeekTest/uniform-descending.sql b/snapshot-tests/dooble-sql/SeekTest/uniform-descending.sql index d9eabe3c1b..0a9f508a74 100644 --- a/snapshot-tests/dooble-sql/SeekTest/uniform-descending.sql +++ b/snapshot-tests/dooble-sql/SeekTest/uniform-descending.sql @@ -1,5 +1,5 @@ with productionproduct0 as ( - (select productionproduct0 from "production"."product" productionproduct0 WHERE (((productionproduct0).name , (productionproduct0).weight , (productionproduct0).listprice ) < (? , ? , ? ) ) ORDER BY (productionproduct0).name DESC , (productionproduct0).weight DESC , (productionproduct0).listprice DESC ) + (select productionproduct0 from "production"."product" productionproduct0 WHERE ((((productionproduct0).name , (productionproduct0).weight , (productionproduct0).listprice ) < (? , ? , ? ) ) )ORDER BY (productionproduct0).name DESC , (productionproduct0).weight DESC , (productionproduct0).listprice DESC ) ) select (productionproduct0)."productid",(productionproduct0)."name",(productionproduct0)."productnumber",(productionproduct0)."makeflag",(productionproduct0)."finishedgoodsflag",(productionproduct0)."color",(productionproduct0)."safetystocklevel",(productionproduct0)."reorderpoint",(productionproduct0)."standardcost",(productionproduct0)."listprice",(productionproduct0)."size",(productionproduct0)."sizeunitmeasurecode",(productionproduct0)."weightunitmeasurecode",(productionproduct0)."weight",(productionproduct0)."daystomanufacture",(productionproduct0)."productline",(productionproduct0)."class",(productionproduct0)."style",(productionproduct0)."productsubcategoryid",(productionproduct0)."productmodelid",(productionproduct0)."sellstartdate"::text,(productionproduct0)."sellenddate"::text,(productionproduct0)."discontinueddate"::text,(productionproduct0)."rowguid",(productionproduct0)."modifieddate"::text from productionproduct0 \ No newline at end of file diff --git a/typo-dsl-doobie/src/scala/typo/dsl/SelectBuilderSql.scala b/typo-dsl-doobie/src/scala/typo/dsl/SelectBuilderSql.scala index fd2507e55b..030a0b427d 100644 --- a/typo-dsl-doobie/src/scala/typo/dsl/SelectBuilderSql.scala +++ b/typo-dsl-doobie/src/scala/typo/dsl/SelectBuilderSql.scala @@ -8,8 +8,6 @@ import doobie.util.Read import doobie.util.fragment.Fragment import typo.dsl.internal.mkFragment.* -import scala.util.Try - sealed trait SelectBuilderSql[Fields, Row] extends SelectBuilder[Fields, Row] { def withPath(path: Path): SelectBuilderSql[Fields, Row] def instantiate(ctx: RenderCtx): SelectBuilderSql.Instantiated[Fields, Row] @@ -155,13 +153,6 @@ object SelectBuilderSql { override def withParams(sqlParams: SelectParams[Fields1 ~ OuterJoined[Fields2], Row1 ~ Option[Row2]]): SelectBuilder[Fields1 ~ OuterJoined[Fields2], Row1 ~ Option[Row2]] = copy(params = sqlParams) - def opt[A](read: Read[A]): Read[Option[A]] = { - new Read[Option[A]]( - read.gets.map { case (get, _) => (get, doobie.enumerated.Nullability.Nullable) }, - (rs, i) => Try(read.unsafeGet(rs, i)).toOption - ) - } - override def instantiate(ctx: RenderCtx): Instantiated[Fields1 ~ OuterJoined[Fields2], Row1 ~ Option[Row2]] = { val alias = ctx.alias(structure._path) val leftInstance = left.instantiate(ctx) @@ -184,7 +175,7 @@ object SelectBuilderSql { sqlFrag = sql, upstreamCTEs = ctes, structure = newStructure, - read = (leftInstance.read, opt(rightInstance.read)).tupled + read = (leftInstance.read, rightInstance.read.toOpt).tupled ) } } diff --git a/typo-dsl-doobie/src/scala/typo/dsl/SqlExpr.scala b/typo-dsl-doobie/src/scala/typo/dsl/SqlExpr.scala index cab474b6b6..29bba9ea69 100644 --- a/typo-dsl-doobie/src/scala/typo/dsl/SqlExpr.scala +++ b/typo-dsl-doobie/src/scala/typo/dsl/SqlExpr.scala @@ -138,9 +138,9 @@ object SqlExpr { case class Const[T, N[_]](value: N[T], P: Put[T], W: Write[N[T]]) extends SqlExpr[T, N] { override def render(ctx: RenderCtx): Fragment = { - val cast = P match { - case _: Put.Basic[_] => Fragment.empty - case p: Put.Advanced[_] => Fragment.const0(s"::${p.schemaTypes.head}") + val cast = P.vendorTypeNames match { + case Nil => Fragment.empty + case head :: _ => Fragment.const0(s"::${head}") } fr"${W.toFragment(value)}$cast" } @@ -200,7 +200,7 @@ object SqlExpr { case class In[T, N[_]](expr: SqlExpr[T, N], values: Array[T], ev: Put[Array[T]], N: Nullability[N]) extends SqlExpr[Boolean, N] { override def render(ctx: RenderCtx): Fragment = - fr"${expr.render(ctx)} = ANY(${Write.fromPut(ev).toFragment(values)})" + fr"${expr.render(ctx)} = ANY(${new Write.Single(ev).toFragment(values)})" } case class CompositeIn[Tuple, Row](tuples: Array[Tuple])(val parts: CompositeIn.TuplePart[Tuple, ?, Row]*) extends SqlExpr[Boolean, Required] { @@ -243,10 +243,10 @@ object SqlExpr { // automatically put values in a constant expression implicit def asConstOpt[T](t: Option[T])(implicit P: Put[T]): SqlExpr.Const[T, Option] = - Const(t, P, Write.fromPutOption(using P)) + Const(t, P, new Write.SingleOpt(P)) implicit def asConstRequired[T](t: T)(implicit P: Put[T]): SqlExpr.Const[T, Required] = - Const[T, Required](t, P, Write.fromPut(using P)) + Const[T, Required](t, P, new Write.Single(P)) // some syntax to construct field sort order implicit class SqlExprSortSyntax[T, N[_]](private val expr: SqlExpr[T, N]) extends AnyVal { @@ -274,5 +274,6 @@ object SqlExpr { SqlExpr.IsNull(expr) def coalesce(orElse: SqlExpr[T, Required]): SqlExpr[T, Required] = SqlExpr.Coalesce(expr, orElse) + } } diff --git a/typo-scripts-doc/src/scala/scripts/GenDocumentation.scala b/typo-scripts-doc/src/scala/scripts/GenDocumentation.scala index b31a33bd1e..3259d9ec85 100644 --- a/typo-scripts-doc/src/scala/scripts/GenDocumentation.scala +++ b/typo-scripts-doc/src/scala/scripts/GenDocumentation.scala @@ -23,7 +23,7 @@ object GenDocumentation extends BleepScript("GenDocumentation") { val nodeBinPath = started.pre.fetchNode("20.5.0").getParent - started.logger.withContext(nodeBinPath).info("Using node") + started.logger.withContext("nodeBinPath", nodeBinPath).info("Using node") val env = sys.env.collect { case x @ ("SSH_AUTH_SOCK", _) => x diff --git a/typo-scripts/src/scala/scripts/GenHardcodedFiles.scala b/typo-scripts/src/scala/scripts/GenHardcodedFiles.scala index f8d022b4da..435b3b908b 100644 --- a/typo-scripts/src/scala/scripts/GenHardcodedFiles.scala +++ b/typo-scripts/src/scala/scripts/GenHardcodedFiles.scala @@ -1,7 +1,7 @@ package scripts import bleep.* -import bleep.logging.Logger +import ryddig.TypedLogger import typo.* import typo.internal.FileSync.SoftWrite import typo.internal.analysis.ParsedName @@ -171,7 +171,7 @@ object GenHardcodedFiles extends BleepCodegenScript("GenHardcodedFiles") { softWrite = SoftWrite.No ) ) - cli("add to git", target.sources, List("git", "add", "-f", target.sources.toString), Logger.DevNull, cli.Out.Raw) + cli("add to git", target.sources, List("git", "add", "-f", target.sources.toString), TypedLogger.DevNull, cli.Out.Raw) } } } diff --git a/typo-scripts/src/scala/scripts/GeneratedAdventureWorks.scala b/typo-scripts/src/scala/scripts/GeneratedAdventureWorks.scala index 0c66b6252d..3a861b8c34 100644 --- a/typo-scripts/src/scala/scripts/GeneratedAdventureWorks.scala +++ b/typo-scripts/src/scala/scripts/GeneratedAdventureWorks.scala @@ -1,7 +1,7 @@ package scripts -import bleep.logging.{Formatter, LogLevel, Loggers} -import bleep.{FileWatching, LogPatterns, cli} +import bleep.{FileWatching, cli} +import ryddig.{Formatter, LogLevel, LogPatterns, Loggers} import typo.* import typo.internal.metadb.OpenEnum import typo.internal.sqlfiles.readSqlFileDirectories @@ -22,8 +22,7 @@ object GeneratedAdventureWorks { def main(args: Array[String]): Unit = Loggers .stdout(LogPatterns.interface(None, noColor = false), disableProgress = true) - .map(_.minLogLevel(LogLevel.info)) - .untyped + .map(_.withMinLogLevel(LogLevel.info)) .use { logger => val ds = TypoDataSource.hikari(server = "localhost", port = 6432, databaseName = "Adventureworks", username = "postgres", password = "password") val scriptsPath = buildDir.resolve("adventureworks_sql") @@ -80,7 +79,7 @@ object GeneratedAdventureWorks { newFiles .overwriteFolder(softWrite = FileSync.SoftWrite.Yes(knownUnchanged)) .filter { case (_, synced) => synced != FileSync.Synced.Unchanged } - .foreach { case (path, synced) => logger.withContext(path).warn(synced.toString) } + .foreach { case (path, synced) => logger.withContext("path", path).warn(synced.toString) } cli( "add files to git", diff --git a/typo-scripts/src/scala/scripts/Publish.scala b/typo-scripts/src/scala/scripts/Publish.scala index 4198909bec..111afcddee 100644 --- a/typo-scripts/src/scala/scripts/Publish.scala +++ b/typo-scripts/src/scala/scripts/Publish.scala @@ -74,7 +74,7 @@ object Publish extends BleepScript("Publish") { packagedLibraries.flatMap { case (_, PackagedLibrary(_, files)) => files.all } files.foreach { case (path, bytes) => - started.logger.withContext(path)(using _.asString).withContext(bytes.length).debug("will publish") + started.logger.withContext("path", path.asString).withContext("bytes.length", bytes.length).debug("will publish") } ciRelease.ciRelease(files) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/d/DViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/d/DViewRow.scala index aac92cc070..a6e02bddf6 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/d/DViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/d/DViewRow.scala @@ -10,11 +10,9 @@ package d import adventureworks.customtypes.TypoLocalDateTime import adventureworks.humanresources.department.DepartmentId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: hr.d */ case class DViewRow( @@ -33,20 +31,19 @@ case class DViewRow( object DViewRow { implicit lazy val decoder: Decoder[DViewRow] = Decoder.forProduct5[DViewRow, DepartmentId, DepartmentId, Name, Name, TypoLocalDateTime]("id", "departmentid", "name", "groupname", "modifieddate")(DViewRow.apply)(DepartmentId.decoder, DepartmentId.decoder, Name.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[DViewRow] = Encoder.forProduct5[DViewRow, DepartmentId, DepartmentId, Name, Name, TypoLocalDateTime]("id", "departmentid", "name", "groupname", "modifieddate")(x => (x.id, x.departmentid, x.name, x.groupname, x.modifieddate))(DepartmentId.encoder, DepartmentId.encoder, Name.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[DViewRow] = new Read[DViewRow]( - gets = List( - (DepartmentId.get, Nullability.NoNulls), - (DepartmentId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => DViewRow( - id = DepartmentId.get.unsafeGetNonNullable(rs, i + 0), - departmentid = DepartmentId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - groupname = Name.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[DViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(DepartmentId.get).asInstanceOf[Read[Any]], + new Read.Single(DepartmentId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + DViewRow( + id = arr(0).asInstanceOf[DepartmentId], + departmentid = arr(1).asInstanceOf[DepartmentId], + name = arr(2).asInstanceOf[Name], + groupname = arr(3).asInstanceOf[Name], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/e/EViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/e/EViewRow.scala index 32ffa16ac0..0ac851e852 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/e/EViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/e/EViewRow.scala @@ -13,12 +13,10 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Flag -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: hr.e */ case class EViewRow( @@ -59,42 +57,41 @@ case class EViewRow( object EViewRow { implicit lazy val decoder: Decoder[EViewRow] = Decoder.forProduct16[EViewRow, BusinessentityId, BusinessentityId, /* max 15 chars */ String, /* max 256 chars */ String, /* max 50 chars */ String, TypoLocalDate, /* bpchar, max 1 chars */ String, /* bpchar, max 1 chars */ String, TypoLocalDate, Flag, TypoShort, TypoShort, Flag, TypoUUID, TypoLocalDateTime, Option[String]]("id", "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate", "maritalstatus", "gender", "hiredate", "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate", "organizationnode")(EViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, Decoder.decodeString, Decoder.decodeString, Decoder.decodeString, TypoLocalDate.decoder, Decoder.decodeString, Decoder.decodeString, TypoLocalDate.decoder, Flag.decoder, TypoShort.decoder, TypoShort.decoder, Flag.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(Decoder.decodeString)) implicit lazy val encoder: Encoder[EViewRow] = Encoder.forProduct16[EViewRow, BusinessentityId, BusinessentityId, /* max 15 chars */ String, /* max 256 chars */ String, /* max 50 chars */ String, TypoLocalDate, /* bpchar, max 1 chars */ String, /* bpchar, max 1 chars */ String, TypoLocalDate, Flag, TypoShort, TypoShort, Flag, TypoUUID, TypoLocalDateTime, Option[String]]("id", "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate", "maritalstatus", "gender", "hiredate", "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate", "organizationnode")(x => (x.id, x.businessentityid, x.nationalidnumber, x.loginid, x.jobtitle, x.birthdate, x.maritalstatus, x.gender, x.hiredate, x.salariedflag, x.vacationhours, x.sickleavehours, x.currentflag, x.rowguid, x.modifieddate, x.organizationnode))(BusinessentityId.encoder, BusinessentityId.encoder, Encoder.encodeString, Encoder.encodeString, Encoder.encodeString, TypoLocalDate.encoder, Encoder.encodeString, Encoder.encodeString, TypoLocalDate.encoder, Flag.encoder, TypoShort.encoder, TypoShort.encoder, Flag.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(Encoder.encodeString)) - implicit lazy val read: Read[EViewRow] = new Read[EViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => EViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - nationalidnumber = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - loginid = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - birthdate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 5), - maritalstatus = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - gender = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 7), - hiredate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 8), - salariedflag = Flag.get.unsafeGetNonNullable(rs, i + 9), - vacationhours = TypoShort.get.unsafeGetNonNullable(rs, i + 10), - sickleavehours = TypoShort.get.unsafeGetNonNullable(rs, i + 11), - currentflag = Flag.get.unsafeGetNonNullable(rs, i + 12), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 13), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 14), - organizationnode = Meta.StringMeta.get.unsafeGetNullable(rs, i + 15) + implicit lazy val read: Read[EViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + nationalidnumber = arr(2).asInstanceOf[/* max 15 chars */ String], + loginid = arr(3).asInstanceOf[/* max 256 chars */ String], + jobtitle = arr(4).asInstanceOf[/* max 50 chars */ String], + birthdate = arr(5).asInstanceOf[TypoLocalDate], + maritalstatus = arr(6).asInstanceOf[/* bpchar, max 1 chars */ String], + gender = arr(7).asInstanceOf[/* bpchar, max 1 chars */ String], + hiredate = arr(8).asInstanceOf[TypoLocalDate], + salariedflag = arr(9).asInstanceOf[Flag], + vacationhours = arr(10).asInstanceOf[TypoShort], + sickleavehours = arr(11).asInstanceOf[TypoShort], + currentflag = arr(12).asInstanceOf[Flag], + rowguid = arr(13).asInstanceOf[TypoUUID], + modifieddate = arr(14).asInstanceOf[TypoLocalDateTime], + organizationnode = arr(15).asInstanceOf[Option[String]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/edh/EdhViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/edh/EdhViewRow.scala index 0a41879de0..6dc30a2b45 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/edh/EdhViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/edh/EdhViewRow.scala @@ -12,11 +12,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.humanresources.department.DepartmentId import adventureworks.humanresources.shift.ShiftId import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: hr.edh */ case class EdhViewRow( @@ -39,24 +37,23 @@ case class EdhViewRow( object EdhViewRow { implicit lazy val decoder: Decoder[EdhViewRow] = Decoder.forProduct7[EdhViewRow, BusinessentityId, BusinessentityId, DepartmentId, ShiftId, TypoLocalDate, Option[TypoLocalDate], TypoLocalDateTime]("id", "businessentityid", "departmentid", "shiftid", "startdate", "enddate", "modifieddate")(EdhViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, DepartmentId.decoder, ShiftId.decoder, TypoLocalDate.decoder, Decoder.decodeOption(TypoLocalDate.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[EdhViewRow] = Encoder.forProduct7[EdhViewRow, BusinessentityId, BusinessentityId, DepartmentId, ShiftId, TypoLocalDate, Option[TypoLocalDate], TypoLocalDateTime]("id", "businessentityid", "departmentid", "shiftid", "startdate", "enddate", "modifieddate")(x => (x.id, x.businessentityid, x.departmentid, x.shiftid, x.startdate, x.enddate, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, DepartmentId.encoder, ShiftId.encoder, TypoLocalDate.encoder, Encoder.encodeOption(TypoLocalDate.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[EdhViewRow] = new Read[EdhViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (DepartmentId.get, Nullability.NoNulls), - (ShiftId.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => EdhViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - departmentid = DepartmentId.get.unsafeGetNonNullable(rs, i + 2), - shiftid = ShiftId.get.unsafeGetNonNullable(rs, i + 3), - startdate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 4), - enddate = TypoLocalDate.get.unsafeGetNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[EdhViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(DepartmentId.get).asInstanceOf[Read[Any]], + new Read.Single(ShiftId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EdhViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + departmentid = arr(2).asInstanceOf[DepartmentId], + shiftid = arr(3).asInstanceOf[ShiftId], + startdate = arr(4).asInstanceOf[TypoLocalDate], + enddate = arr(5).asInstanceOf[Option[TypoLocalDate]], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/eph/EphViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/eph/EphViewRow.scala index f6dc09daaa..1ee20495f9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/eph/EphViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/eph/EphViewRow.scala @@ -10,12 +10,10 @@ package eph import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: hr.eph */ case class EphViewRow( @@ -36,22 +34,21 @@ case class EphViewRow( object EphViewRow { implicit lazy val decoder: Decoder[EphViewRow] = Decoder.forProduct6[EphViewRow, BusinessentityId, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoShort, TypoLocalDateTime]("id", "businessentityid", "ratechangedate", "rate", "payfrequency", "modifieddate")(EphViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, TypoLocalDateTime.decoder, Decoder.decodeBigDecimal, TypoShort.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[EphViewRow] = Encoder.forProduct6[EphViewRow, BusinessentityId, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoShort, TypoLocalDateTime]("id", "businessentityid", "ratechangedate", "rate", "payfrequency", "modifieddate")(x => (x.id, x.businessentityid, x.ratechangedate, x.rate, x.payfrequency, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, TypoLocalDateTime.encoder, Encoder.encodeBigDecimal, TypoShort.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[EphViewRow] = new Read[EphViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => EphViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - ratechangedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - rate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - payfrequency = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[EphViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EphViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + ratechangedate = arr(2).asInstanceOf[TypoLocalDateTime], + rate = arr(3).asInstanceOf[BigDecimal], + payfrequency = arr(4).asInstanceOf[TypoShort], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/jc/JcViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/jc/JcViewRow.scala index 233edf75d8..54629e26e0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/jc/JcViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/jc/JcViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoXml import adventureworks.humanresources.jobcandidate.JobcandidateId import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: hr.jc */ case class JcViewRow( @@ -34,20 +32,19 @@ case class JcViewRow( object JcViewRow { implicit lazy val decoder: Decoder[JcViewRow] = Decoder.forProduct5[JcViewRow, JobcandidateId, JobcandidateId, Option[BusinessentityId], Option[TypoXml], TypoLocalDateTime]("id", "jobcandidateid", "businessentityid", "resume", "modifieddate")(JcViewRow.apply)(JobcandidateId.decoder, JobcandidateId.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(TypoXml.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[JcViewRow] = Encoder.forProduct5[JcViewRow, JobcandidateId, JobcandidateId, Option[BusinessentityId], Option[TypoXml], TypoLocalDateTime]("id", "jobcandidateid", "businessentityid", "resume", "modifieddate")(x => (x.id, x.jobcandidateid, x.businessentityid, x.resume, x.modifieddate))(JobcandidateId.encoder, JobcandidateId.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(TypoXml.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[JcViewRow] = new Read[JcViewRow]( - gets = List( - (JobcandidateId.get, Nullability.NoNulls), - (JobcandidateId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => JcViewRow( - id = JobcandidateId.get.unsafeGetNonNullable(rs, i + 0), - jobcandidateid = JobcandidateId.get.unsafeGetNonNullable(rs, i + 1), - businessentityid = BusinessentityId.get.unsafeGetNullable(rs, i + 2), - resume = TypoXml.get.unsafeGetNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[JcViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(JobcandidateId.get).asInstanceOf[Read[Any]], + new Read.Single(JobcandidateId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + JcViewRow( + id = arr(0).asInstanceOf[JobcandidateId], + jobcandidateid = arr(1).asInstanceOf[JobcandidateId], + businessentityid = arr(2).asInstanceOf[Option[BusinessentityId]], + resume = arr(3).asInstanceOf[Option[TypoXml]], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/s/SViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/s/SViewRow.scala index 69810147fd..a58a372c2a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/s/SViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/hr/s/SViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoLocalTime import adventureworks.humanresources.shift.ShiftId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: hr.s */ case class SViewRow( @@ -36,22 +34,21 @@ case class SViewRow( object SViewRow { implicit lazy val decoder: Decoder[SViewRow] = Decoder.forProduct6[SViewRow, ShiftId, ShiftId, Name, TypoLocalTime, TypoLocalTime, TypoLocalDateTime]("id", "shiftid", "name", "starttime", "endtime", "modifieddate")(SViewRow.apply)(ShiftId.decoder, ShiftId.decoder, Name.decoder, TypoLocalTime.decoder, TypoLocalTime.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SViewRow] = Encoder.forProduct6[SViewRow, ShiftId, ShiftId, Name, TypoLocalTime, TypoLocalTime, TypoLocalDateTime]("id", "shiftid", "name", "starttime", "endtime", "modifieddate")(x => (x.id, x.shiftid, x.name, x.starttime, x.endtime, x.modifieddate))(ShiftId.encoder, ShiftId.encoder, Name.encoder, TypoLocalTime.encoder, TypoLocalTime.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SViewRow] = new Read[SViewRow]( - gets = List( - (ShiftId.get, Nullability.NoNulls), - (ShiftId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalTime.get, Nullability.NoNulls), - (TypoLocalTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SViewRow( - id = ShiftId.get.unsafeGetNonNullable(rs, i + 0), - shiftid = ShiftId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - starttime = TypoLocalTime.get.unsafeGetNonNullable(rs, i + 3), - endtime = TypoLocalTime.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[SViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShiftId.get).asInstanceOf[Read[Any]], + new Read.Single(ShiftId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SViewRow( + id = arr(0).asInstanceOf[ShiftId], + shiftid = arr(1).asInstanceOf[ShiftId], + name = arr(2).asInstanceOf[Name], + starttime = arr(3).asInstanceOf[TypoLocalTime], + endtime = arr(4).asInstanceOf[TypoLocalTime], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRepoImpl.scala index 6039b43f1d..858149464b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRepoImpl.scala @@ -29,28 +29,28 @@ class DepartmentRepoImpl extends DepartmentRepo { DeleteBuilder(""""humanresources"."department"""", DepartmentFields.structure) } override def deleteById(departmentid: DepartmentId): ConnectionIO[Boolean] = { - sql"""delete from "humanresources"."department" where "departmentid" = ${fromWrite(departmentid)(Write.fromPut(DepartmentId.put))}""".update.run.map(_ > 0) + sql"""delete from "humanresources"."department" where "departmentid" = ${fromWrite(departmentid)(new Write.Single(DepartmentId.put))}""".update.run.map(_ > 0) } override def deleteByIds(departmentids: Array[DepartmentId]): ConnectionIO[Int] = { sql"""delete from "humanresources"."department" where "departmentid" = ANY(${departmentids})""".update.run } override def insert(unsaved: DepartmentRow): ConnectionIO[DepartmentRow] = { sql"""insert into "humanresources"."department"("departmentid", "name", "groupname", "modifieddate") - values (${fromWrite(unsaved.departmentid)(Write.fromPut(DepartmentId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.groupname)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.departmentid)(new Write.Single(DepartmentId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.groupname)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "departmentid", "name", "groupname", "modifieddate"::text """.query(using DepartmentRow.read).unique } override def insert(unsaved: DepartmentRowUnsaved): ConnectionIO[DepartmentRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""groupname""""), fr"${fromWrite(unsaved.groupname)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""groupname""""), fr"${fromWrite(unsaved.groupname)(new Write.Single(Name.put))}::varchar")), unsaved.departmentid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""departmentid""""), fr"${fromWrite(value: DepartmentId)(Write.fromPut(DepartmentId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""departmentid""""), fr"${fromWrite(value: DepartmentId)(new Write.Single(DepartmentId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -82,7 +82,7 @@ class DepartmentRepoImpl extends DepartmentRepo { sql"""select "departmentid", "name", "groupname", "modifieddate"::text from "humanresources"."department"""".query(using DepartmentRow.read).stream } override def selectById(departmentid: DepartmentId): ConnectionIO[Option[DepartmentRow]] = { - sql"""select "departmentid", "name", "groupname", "modifieddate"::text from "humanresources"."department" where "departmentid" = ${fromWrite(departmentid)(Write.fromPut(DepartmentId.put))}""".query(using DepartmentRow.read).option + sql"""select "departmentid", "name", "groupname", "modifieddate"::text from "humanresources"."department" where "departmentid" = ${fromWrite(departmentid)(new Write.Single(DepartmentId.put))}""".query(using DepartmentRow.read).option } override def selectByIds(departmentids: Array[DepartmentId]): Stream[ConnectionIO, DepartmentRow] = { sql"""select "departmentid", "name", "groupname", "modifieddate"::text from "humanresources"."department" where "departmentid" = ANY(${departmentids})""".query(using DepartmentRow.read).stream @@ -99,10 +99,10 @@ class DepartmentRepoImpl extends DepartmentRepo { override def update(row: DepartmentRow): ConnectionIO[Boolean] = { val departmentid = row.departmentid sql"""update "humanresources"."department" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "groupname" = ${fromWrite(row.groupname)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "departmentid" = ${fromWrite(departmentid)(Write.fromPut(DepartmentId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "groupname" = ${fromWrite(row.groupname)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "departmentid" = ${fromWrite(departmentid)(new Write.Single(DepartmentId.put))}""" .update .run .map(_ > 0) @@ -110,10 +110,10 @@ class DepartmentRepoImpl extends DepartmentRepo { override def upsert(unsaved: DepartmentRow): ConnectionIO[DepartmentRow] = { sql"""insert into "humanresources"."department"("departmentid", "name", "groupname", "modifieddate") values ( - ${fromWrite(unsaved.departmentid)(Write.fromPut(DepartmentId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.groupname)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.departmentid)(new Write.Single(DepartmentId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.groupname)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("departmentid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRow.scala index 04a7497214..d4ded61b18 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/department/DepartmentRow.scala @@ -10,13 +10,11 @@ package department import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: humanresources.department Lookup table containing the departments within the Adventure Works Cycles company. @@ -40,20 +38,19 @@ case class DepartmentRow( object DepartmentRow { implicit lazy val decoder: Decoder[DepartmentRow] = Decoder.forProduct4[DepartmentRow, DepartmentId, Name, Name, TypoLocalDateTime]("departmentid", "name", "groupname", "modifieddate")(DepartmentRow.apply)(DepartmentId.decoder, Name.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[DepartmentRow] = Encoder.forProduct4[DepartmentRow, DepartmentId, Name, Name, TypoLocalDateTime]("departmentid", "name", "groupname", "modifieddate")(x => (x.departmentid, x.name, x.groupname, x.modifieddate))(DepartmentId.encoder, Name.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[DepartmentRow] = new Read[DepartmentRow]( - gets = List( - (DepartmentId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => DepartmentRow( - departmentid = DepartmentId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - groupname = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[DepartmentRow] = new Read.CompositeOfInstances(Array( + new Read.Single(DepartmentId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + DepartmentRow( + departmentid = arr(0).asInstanceOf[DepartmentId], + name = arr(1).asInstanceOf[Name], + groupname = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[DepartmentRow] = Text.instance[DepartmentRow]{ (row, sb) => DepartmentId.text.unsafeEncode(row.departmentid, sb) sb.append(Text.DELIMETER) @@ -63,23 +60,11 @@ object DepartmentRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[DepartmentRow] = new Write[DepartmentRow]( - puts = List((DepartmentId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.departmentid, x.name, x.groupname, x.modifieddate), - unsafeSet = (rs, i, a) => { - DepartmentId.put.unsafeSetNonNullable(rs, i + 0, a.departmentid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - Name.put.unsafeSetNonNullable(rs, i + 2, a.groupname) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - DepartmentId.put.unsafeUpdateNonNullable(ps, i + 0, a.departmentid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - Name.put.unsafeUpdateNonNullable(ps, i + 2, a.groupname) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[DepartmentRow] = new Write.Composite[DepartmentRow]( + List(new Write.Single(DepartmentId.put), + new Write.Single(Name.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.departmentid, a.name, a.groupname, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRepoImpl.scala index 8a4c36a198..6092a19954 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRepoImpl.scala @@ -34,54 +34,54 @@ class EmployeeRepoImpl extends EmployeeRepo { DeleteBuilder(""""humanresources"."employee"""", EmployeeFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "humanresources"."employee" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "humanresources"."employee" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "humanresources"."employee" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: EmployeeRow): ConnectionIO[EmployeeRow] = { sql"""insert into "humanresources"."employee"("businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate", "maritalstatus", "gender", "hiredate", "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate", "organizationnode") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.nationalidnumber)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.loginid)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.jobtitle)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.birthdate)(Write.fromPut(TypoLocalDate.put))}::date, ${fromWrite(unsaved.maritalstatus)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.gender)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.hiredate)(Write.fromPut(TypoLocalDate.put))}::date, ${fromWrite(unsaved.salariedflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.vacationhours)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.sickleavehours)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.currentflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.organizationnode)(Write.fromPutOption(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.nationalidnumber)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.loginid)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.jobtitle)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.birthdate)(new Write.Single(TypoLocalDate.put))}::date, ${fromWrite(unsaved.maritalstatus)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.gender)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.hiredate)(new Write.Single(TypoLocalDate.put))}::date, ${fromWrite(unsaved.salariedflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.vacationhours)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.sickleavehours)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.currentflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.organizationnode)(new Write.SingleOpt(Meta.StringMeta.put))}) returning "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate"::text, "maritalstatus", "gender", "hiredate"::text, "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate"::text, "organizationnode" """.query(using EmployeeRow.read).unique } override def insert(unsaved: EmployeeRowUnsaved): ConnectionIO[EmployeeRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""nationalidnumber""""), fr"${fromWrite(unsaved.nationalidnumber)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""loginid""""), fr"${fromWrite(unsaved.loginid)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""jobtitle""""), fr"${fromWrite(unsaved.jobtitle)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""birthdate""""), fr"${fromWrite(unsaved.birthdate)(Write.fromPut(TypoLocalDate.put))}::date")), - Some((Fragment.const0(s""""maritalstatus""""), fr"${fromWrite(unsaved.maritalstatus)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""gender""""), fr"${fromWrite(unsaved.gender)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""hiredate""""), fr"${fromWrite(unsaved.hiredate)(Write.fromPut(TypoLocalDate.put))}::date")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""nationalidnumber""""), fr"${fromWrite(unsaved.nationalidnumber)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""loginid""""), fr"${fromWrite(unsaved.loginid)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""jobtitle""""), fr"${fromWrite(unsaved.jobtitle)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""birthdate""""), fr"${fromWrite(unsaved.birthdate)(new Write.Single(TypoLocalDate.put))}::date")), + Some((Fragment.const0(s""""maritalstatus""""), fr"${fromWrite(unsaved.maritalstatus)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""gender""""), fr"${fromWrite(unsaved.gender)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""hiredate""""), fr"${fromWrite(unsaved.hiredate)(new Write.Single(TypoLocalDate.put))}::date")), unsaved.salariedflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salariedflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salariedflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.vacationhours match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""vacationhours""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""vacationhours""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.sickleavehours match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""sickleavehours""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""sickleavehours""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.currentflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""currentflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""currentflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.organizationnode match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""organizationnode""""), fr"${fromWrite(value: Option[String])(Write.fromPutOption(Meta.StringMeta.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""organizationnode""""), fr"${fromWrite(value: Option[String])(new Write.SingleOpt(Meta.StringMeta.put))}")) } ).flatten @@ -113,7 +113,7 @@ class EmployeeRepoImpl extends EmployeeRepo { sql"""select "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate"::text, "maritalstatus", "gender", "hiredate"::text, "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate"::text, "organizationnode" from "humanresources"."employee"""".query(using EmployeeRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[EmployeeRow]] = { - sql"""select "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate"::text, "maritalstatus", "gender", "hiredate"::text, "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate"::text, "organizationnode" from "humanresources"."employee" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using EmployeeRow.read).option + sql"""select "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate"::text, "maritalstatus", "gender", "hiredate"::text, "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate"::text, "organizationnode" from "humanresources"."employee" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using EmployeeRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, EmployeeRow] = { sql"""select "businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate"::text, "maritalstatus", "gender", "hiredate"::text, "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate"::text, "organizationnode" from "humanresources"."employee" where "businessentityid" = ANY(${businessentityids})""".query(using EmployeeRow.read).stream @@ -130,21 +130,21 @@ class EmployeeRepoImpl extends EmployeeRepo { override def update(row: EmployeeRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "humanresources"."employee" - set "nationalidnumber" = ${fromWrite(row.nationalidnumber)(Write.fromPut(Meta.StringMeta.put))}, - "loginid" = ${fromWrite(row.loginid)(Write.fromPut(Meta.StringMeta.put))}, - "jobtitle" = ${fromWrite(row.jobtitle)(Write.fromPut(Meta.StringMeta.put))}, - "birthdate" = ${fromWrite(row.birthdate)(Write.fromPut(TypoLocalDate.put))}::date, - "maritalstatus" = ${fromWrite(row.maritalstatus)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "gender" = ${fromWrite(row.gender)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "hiredate" = ${fromWrite(row.hiredate)(Write.fromPut(TypoLocalDate.put))}::date, - "salariedflag" = ${fromWrite(row.salariedflag)(Write.fromPut(Flag.put))}::bool, - "vacationhours" = ${fromWrite(row.vacationhours)(Write.fromPut(TypoShort.put))}::int2, - "sickleavehours" = ${fromWrite(row.sickleavehours)(Write.fromPut(TypoShort.put))}::int2, - "currentflag" = ${fromWrite(row.currentflag)(Write.fromPut(Flag.put))}::bool, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "organizationnode" = ${fromWrite(row.organizationnode)(Write.fromPutOption(Meta.StringMeta.put))} - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "nationalidnumber" = ${fromWrite(row.nationalidnumber)(new Write.Single(Meta.StringMeta.put))}, + "loginid" = ${fromWrite(row.loginid)(new Write.Single(Meta.StringMeta.put))}, + "jobtitle" = ${fromWrite(row.jobtitle)(new Write.Single(Meta.StringMeta.put))}, + "birthdate" = ${fromWrite(row.birthdate)(new Write.Single(TypoLocalDate.put))}::date, + "maritalstatus" = ${fromWrite(row.maritalstatus)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "gender" = ${fromWrite(row.gender)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "hiredate" = ${fromWrite(row.hiredate)(new Write.Single(TypoLocalDate.put))}::date, + "salariedflag" = ${fromWrite(row.salariedflag)(new Write.Single(Flag.put))}::bool, + "vacationhours" = ${fromWrite(row.vacationhours)(new Write.Single(TypoShort.put))}::int2, + "sickleavehours" = ${fromWrite(row.sickleavehours)(new Write.Single(TypoShort.put))}::int2, + "currentflag" = ${fromWrite(row.currentflag)(new Write.Single(Flag.put))}::bool, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "organizationnode" = ${fromWrite(row.organizationnode)(new Write.SingleOpt(Meta.StringMeta.put))} + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -152,21 +152,21 @@ class EmployeeRepoImpl extends EmployeeRepo { override def upsert(unsaved: EmployeeRow): ConnectionIO[EmployeeRow] = { sql"""insert into "humanresources"."employee"("businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate", "maritalstatus", "gender", "hiredate", "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate", "organizationnode") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.nationalidnumber)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.loginid)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.jobtitle)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.birthdate)(Write.fromPut(TypoLocalDate.put))}::date, - ${fromWrite(unsaved.maritalstatus)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.gender)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.hiredate)(Write.fromPut(TypoLocalDate.put))}::date, - ${fromWrite(unsaved.salariedflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.vacationhours)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.sickleavehours)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.currentflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.organizationnode)(Write.fromPutOption(Meta.StringMeta.put))} + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.nationalidnumber)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.loginid)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.jobtitle)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.birthdate)(new Write.Single(TypoLocalDate.put))}::date, + ${fromWrite(unsaved.maritalstatus)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.gender)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.hiredate)(new Write.Single(TypoLocalDate.put))}::date, + ${fromWrite(unsaved.salariedflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.vacationhours)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.sickleavehours)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.currentflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.organizationnode)(new Write.SingleOpt(Meta.StringMeta.put))} ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRow.scala index 511735f8db..34922a2f66 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employee/EmployeeRow.scala @@ -14,14 +14,12 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Flag -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: humanresources.employee Employee information such as salary, department, and title. @@ -78,42 +76,41 @@ case class EmployeeRow( object EmployeeRow { implicit lazy val decoder: Decoder[EmployeeRow] = Decoder.forProduct15[EmployeeRow, BusinessentityId, /* max 15 chars */ String, /* max 256 chars */ String, /* max 50 chars */ String, TypoLocalDate, /* bpchar, max 1 chars */ String, /* bpchar, max 1 chars */ String, TypoLocalDate, Flag, TypoShort, TypoShort, Flag, TypoUUID, TypoLocalDateTime, Option[String]]("businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate", "maritalstatus", "gender", "hiredate", "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate", "organizationnode")(EmployeeRow.apply)(BusinessentityId.decoder, Decoder.decodeString, Decoder.decodeString, Decoder.decodeString, TypoLocalDate.decoder, Decoder.decodeString, Decoder.decodeString, TypoLocalDate.decoder, Flag.decoder, TypoShort.decoder, TypoShort.decoder, Flag.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(Decoder.decodeString)) implicit lazy val encoder: Encoder[EmployeeRow] = Encoder.forProduct15[EmployeeRow, BusinessentityId, /* max 15 chars */ String, /* max 256 chars */ String, /* max 50 chars */ String, TypoLocalDate, /* bpchar, max 1 chars */ String, /* bpchar, max 1 chars */ String, TypoLocalDate, Flag, TypoShort, TypoShort, Flag, TypoUUID, TypoLocalDateTime, Option[String]]("businessentityid", "nationalidnumber", "loginid", "jobtitle", "birthdate", "maritalstatus", "gender", "hiredate", "salariedflag", "vacationhours", "sickleavehours", "currentflag", "rowguid", "modifieddate", "organizationnode")(x => (x.businessentityid, x.nationalidnumber, x.loginid, x.jobtitle, x.birthdate, x.maritalstatus, x.gender, x.hiredate, x.salariedflag, x.vacationhours, x.sickleavehours, x.currentflag, x.rowguid, x.modifieddate, x.organizationnode))(BusinessentityId.encoder, Encoder.encodeString, Encoder.encodeString, Encoder.encodeString, TypoLocalDate.encoder, Encoder.encodeString, Encoder.encodeString, TypoLocalDate.encoder, Flag.encoder, TypoShort.encoder, TypoShort.encoder, Flag.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(Encoder.encodeString)) - implicit lazy val read: Read[EmployeeRow] = new Read[EmployeeRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => EmployeeRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - nationalidnumber = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - loginid = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - birthdate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 4), - maritalstatus = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - gender = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - hiredate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 7), - salariedflag = Flag.get.unsafeGetNonNullable(rs, i + 8), - vacationhours = TypoShort.get.unsafeGetNonNullable(rs, i + 9), - sickleavehours = TypoShort.get.unsafeGetNonNullable(rs, i + 10), - currentflag = Flag.get.unsafeGetNonNullable(rs, i + 11), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 12), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 13), - organizationnode = Meta.StringMeta.get.unsafeGetNullable(rs, i + 14) + implicit lazy val read: Read[EmployeeRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EmployeeRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + nationalidnumber = arr(1).asInstanceOf[/* max 15 chars */ String], + loginid = arr(2).asInstanceOf[/* max 256 chars */ String], + jobtitle = arr(3).asInstanceOf[/* max 50 chars */ String], + birthdate = arr(4).asInstanceOf[TypoLocalDate], + maritalstatus = arr(5).asInstanceOf[/* bpchar, max 1 chars */ String], + gender = arr(6).asInstanceOf[/* bpchar, max 1 chars */ String], + hiredate = arr(7).asInstanceOf[TypoLocalDate], + salariedflag = arr(8).asInstanceOf[Flag], + vacationhours = arr(9).asInstanceOf[TypoShort], + sickleavehours = arr(10).asInstanceOf[TypoShort], + currentflag = arr(11).asInstanceOf[Flag], + rowguid = arr(12).asInstanceOf[TypoUUID], + modifieddate = arr(13).asInstanceOf[TypoLocalDateTime], + organizationnode = arr(14).asInstanceOf[Option[String]] ) - ) + } implicit lazy val text: Text[EmployeeRow] = Text.instance[EmployeeRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -145,56 +142,22 @@ object EmployeeRow { sb.append(Text.DELIMETER) Text.option(Text.stringInstance).unsafeEncode(row.organizationnode, sb) } - implicit lazy val write: Write[EmployeeRow] = new Write[EmployeeRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoLocalDate.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoLocalDate.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable)), - toList = x => List(x.businessentityid, x.nationalidnumber, x.loginid, x.jobtitle, x.birthdate, x.maritalstatus, x.gender, x.hiredate, x.salariedflag, x.vacationhours, x.sickleavehours, x.currentflag, x.rowguid, x.modifieddate, x.organizationnode), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.nationalidnumber) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.loginid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 3, a.jobtitle) - TypoLocalDate.put.unsafeSetNonNullable(rs, i + 4, a.birthdate) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.maritalstatus) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 6, a.gender) - TypoLocalDate.put.unsafeSetNonNullable(rs, i + 7, a.hiredate) - Flag.put.unsafeSetNonNullable(rs, i + 8, a.salariedflag) - TypoShort.put.unsafeSetNonNullable(rs, i + 9, a.vacationhours) - TypoShort.put.unsafeSetNonNullable(rs, i + 10, a.sickleavehours) - Flag.put.unsafeSetNonNullable(rs, i + 11, a.currentflag) - TypoUUID.put.unsafeSetNonNullable(rs, i + 12, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 13, a.modifieddate) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 14, a.organizationnode) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.nationalidnumber) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.loginid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.jobtitle) - TypoLocalDate.put.unsafeUpdateNonNullable(ps, i + 4, a.birthdate) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.maritalstatus) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.gender) - TypoLocalDate.put.unsafeUpdateNonNullable(ps, i + 7, a.hiredate) - Flag.put.unsafeUpdateNonNullable(ps, i + 8, a.salariedflag) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 9, a.vacationhours) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 10, a.sickleavehours) - Flag.put.unsafeUpdateNonNullable(ps, i + 11, a.currentflag) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 12, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 13, a.modifieddate) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 14, a.organizationnode) - } + implicit lazy val write: Write[EmployeeRow] = new Write.Composite[EmployeeRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoLocalDate.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoLocalDate.put), + new Write.Single(Flag.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoShort.put), + new Write.Single(Flag.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.StringMeta.put).toOpt), + a => List(a.businessentityid, a.nationalidnumber, a.loginid, a.jobtitle, a.birthdate, a.maritalstatus, a.gender, a.hiredate, a.salariedflag, a.vacationhours, a.sickleavehours, a.currentflag, a.rowguid, a.modifieddate, a.organizationnode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRepoImpl.scala index 8827049c3a..0d29869e75 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRepoImpl.scala @@ -32,7 +32,7 @@ class EmployeedepartmenthistoryRepoImpl extends EmployeedepartmenthistoryRepo { DeleteBuilder(""""humanresources"."employeedepartmenthistory"""", EmployeedepartmenthistoryFields.structure) } override def deleteById(compositeId: EmployeedepartmenthistoryId): ConnectionIO[Boolean] = { - sql"""delete from "humanresources"."employeedepartmenthistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDate.put))} AND "departmentid" = ${fromWrite(compositeId.departmentid)(Write.fromPut(DepartmentId.put))} AND "shiftid" = ${fromWrite(compositeId.shiftid)(Write.fromPut(ShiftId.put))}""".update.run.map(_ > 0) + sql"""delete from "humanresources"."employeedepartmenthistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDate.put))} AND "departmentid" = ${fromWrite(compositeId.departmentid)(new Write.Single(DepartmentId.put))} AND "shiftid" = ${fromWrite(compositeId.shiftid)(new Write.Single(ShiftId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[EmployeedepartmenthistoryId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -48,20 +48,20 @@ class EmployeedepartmenthistoryRepoImpl extends EmployeedepartmenthistoryRepo { } override def insert(unsaved: EmployeedepartmenthistoryRow): ConnectionIO[EmployeedepartmenthistoryRow] = { sql"""insert into "humanresources"."employeedepartmenthistory"("businessentityid", "departmentid", "shiftid", "startdate", "enddate", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.departmentid)(Write.fromPut(DepartmentId.put))}::int2, ${fromWrite(unsaved.shiftid)(Write.fromPut(ShiftId.put))}::int2, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDate.put))}::date, ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDate.put))}::date, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.departmentid)(new Write.Single(DepartmentId.put))}::int2, ${fromWrite(unsaved.shiftid)(new Write.Single(ShiftId.put))}::int2, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDate.put))}::date, ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDate.put))}::date, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "departmentid", "shiftid", "startdate"::text, "enddate"::text, "modifieddate"::text """.query(using EmployeedepartmenthistoryRow.read).unique } override def insert(unsaved: EmployeedepartmenthistoryRowUnsaved): ConnectionIO[EmployeedepartmenthistoryRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""departmentid""""), fr"${fromWrite(unsaved.departmentid)(Write.fromPut(DepartmentId.put))}::int2")), - Some((Fragment.const0(s""""shiftid""""), fr"${fromWrite(unsaved.shiftid)(Write.fromPut(ShiftId.put))}::int2")), - Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDate.put))}::date")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDate.put))}::date")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""departmentid""""), fr"${fromWrite(unsaved.departmentid)(new Write.Single(DepartmentId.put))}::int2")), + Some((Fragment.const0(s""""shiftid""""), fr"${fromWrite(unsaved.shiftid)(new Write.Single(ShiftId.put))}::int2")), + Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDate.put))}::date")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDate.put))}::date")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -93,7 +93,7 @@ class EmployeedepartmenthistoryRepoImpl extends EmployeedepartmenthistoryRepo { sql"""select "businessentityid", "departmentid", "shiftid", "startdate"::text, "enddate"::text, "modifieddate"::text from "humanresources"."employeedepartmenthistory"""".query(using EmployeedepartmenthistoryRow.read).stream } override def selectById(compositeId: EmployeedepartmenthistoryId): ConnectionIO[Option[EmployeedepartmenthistoryRow]] = { - sql"""select "businessentityid", "departmentid", "shiftid", "startdate"::text, "enddate"::text, "modifieddate"::text from "humanresources"."employeedepartmenthistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDate.put))} AND "departmentid" = ${fromWrite(compositeId.departmentid)(Write.fromPut(DepartmentId.put))} AND "shiftid" = ${fromWrite(compositeId.shiftid)(Write.fromPut(ShiftId.put))}""".query(using EmployeedepartmenthistoryRow.read).option + sql"""select "businessentityid", "departmentid", "shiftid", "startdate"::text, "enddate"::text, "modifieddate"::text from "humanresources"."employeedepartmenthistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDate.put))} AND "departmentid" = ${fromWrite(compositeId.departmentid)(new Write.Single(DepartmentId.put))} AND "shiftid" = ${fromWrite(compositeId.shiftid)(new Write.Single(ShiftId.put))}""".query(using EmployeedepartmenthistoryRow.read).option } override def selectByIds(compositeIds: Array[EmployeedepartmenthistoryId]): Stream[ConnectionIO, EmployeedepartmenthistoryRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -119,9 +119,9 @@ class EmployeedepartmenthistoryRepoImpl extends EmployeedepartmenthistoryRepo { override def update(row: EmployeedepartmenthistoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "humanresources"."employeedepartmenthistory" - set "enddate" = ${fromWrite(row.enddate)(Write.fromPutOption(TypoLocalDate.put))}::date, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDate.put))} AND "departmentid" = ${fromWrite(compositeId.departmentid)(Write.fromPut(DepartmentId.put))} AND "shiftid" = ${fromWrite(compositeId.shiftid)(Write.fromPut(ShiftId.put))}""" + set "enddate" = ${fromWrite(row.enddate)(new Write.SingleOpt(TypoLocalDate.put))}::date, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDate.put))} AND "departmentid" = ${fromWrite(compositeId.departmentid)(new Write.Single(DepartmentId.put))} AND "shiftid" = ${fromWrite(compositeId.shiftid)(new Write.Single(ShiftId.put))}""" .update .run .map(_ > 0) @@ -129,12 +129,12 @@ class EmployeedepartmenthistoryRepoImpl extends EmployeedepartmenthistoryRepo { override def upsert(unsaved: EmployeedepartmenthistoryRow): ConnectionIO[EmployeedepartmenthistoryRow] = { sql"""insert into "humanresources"."employeedepartmenthistory"("businessentityid", "departmentid", "shiftid", "startdate", "enddate", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.departmentid)(Write.fromPut(DepartmentId.put))}::int2, - ${fromWrite(unsaved.shiftid)(Write.fromPut(ShiftId.put))}::int2, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDate.put))}::date, - ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDate.put))}::date, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.departmentid)(new Write.Single(DepartmentId.put))}::int2, + ${fromWrite(unsaved.shiftid)(new Write.Single(ShiftId.put))}::int2, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDate.put))}::date, + ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDate.put))}::date, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "startdate", "departmentid", "shiftid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRow.scala index ffd88e5fdb..3d21518c08 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeedepartmenthistory/EmployeedepartmenthistoryRow.scala @@ -13,13 +13,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.humanresources.department.DepartmentId import adventureworks.humanresources.shift.ShiftId import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: humanresources.employeedepartmenthistory Employee department transfers. @@ -54,24 +52,23 @@ object EmployeedepartmenthistoryRow { new EmployeedepartmenthistoryRow(compositeId.businessentityid, compositeId.departmentid, compositeId.shiftid, compositeId.startdate, enddate, modifieddate) implicit lazy val decoder: Decoder[EmployeedepartmenthistoryRow] = Decoder.forProduct6[EmployeedepartmenthistoryRow, BusinessentityId, DepartmentId, ShiftId, TypoLocalDate, Option[TypoLocalDate], TypoLocalDateTime]("businessentityid", "departmentid", "shiftid", "startdate", "enddate", "modifieddate")(EmployeedepartmenthistoryRow.apply)(BusinessentityId.decoder, DepartmentId.decoder, ShiftId.decoder, TypoLocalDate.decoder, Decoder.decodeOption(TypoLocalDate.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[EmployeedepartmenthistoryRow] = Encoder.forProduct6[EmployeedepartmenthistoryRow, BusinessentityId, DepartmentId, ShiftId, TypoLocalDate, Option[TypoLocalDate], TypoLocalDateTime]("businessentityid", "departmentid", "shiftid", "startdate", "enddate", "modifieddate")(x => (x.businessentityid, x.departmentid, x.shiftid, x.startdate, x.enddate, x.modifieddate))(BusinessentityId.encoder, DepartmentId.encoder, ShiftId.encoder, TypoLocalDate.encoder, Encoder.encodeOption(TypoLocalDate.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[EmployeedepartmenthistoryRow] = new Read[EmployeedepartmenthistoryRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (DepartmentId.get, Nullability.NoNulls), - (ShiftId.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => EmployeedepartmenthistoryRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - departmentid = DepartmentId.get.unsafeGetNonNullable(rs, i + 1), - shiftid = ShiftId.get.unsafeGetNonNullable(rs, i + 2), - startdate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 3), - enddate = TypoLocalDate.get.unsafeGetNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[EmployeedepartmenthistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(DepartmentId.get).asInstanceOf[Read[Any]], + new Read.Single(ShiftId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EmployeedepartmenthistoryRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + departmentid = arr(1).asInstanceOf[DepartmentId], + shiftid = arr(2).asInstanceOf[ShiftId], + startdate = arr(3).asInstanceOf[TypoLocalDate], + enddate = arr(4).asInstanceOf[Option[TypoLocalDate]], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[EmployeedepartmenthistoryRow] = Text.instance[EmployeedepartmenthistoryRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -85,29 +82,13 @@ object EmployeedepartmenthistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[EmployeedepartmenthistoryRow] = new Write[EmployeedepartmenthistoryRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (DepartmentId.put, Nullability.NoNulls), - (ShiftId.put, Nullability.NoNulls), - (TypoLocalDate.put, Nullability.NoNulls), - (TypoLocalDate.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.departmentid, x.shiftid, x.startdate, x.enddate, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - DepartmentId.put.unsafeSetNonNullable(rs, i + 1, a.departmentid) - ShiftId.put.unsafeSetNonNullable(rs, i + 2, a.shiftid) - TypoLocalDate.put.unsafeSetNonNullable(rs, i + 3, a.startdate) - TypoLocalDate.put.unsafeSetNullable(rs, i + 4, a.enddate) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - DepartmentId.put.unsafeUpdateNonNullable(ps, i + 1, a.departmentid) - ShiftId.put.unsafeUpdateNonNullable(ps, i + 2, a.shiftid) - TypoLocalDate.put.unsafeUpdateNonNullable(ps, i + 3, a.startdate) - TypoLocalDate.put.unsafeUpdateNullable(ps, i + 4, a.enddate) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[EmployeedepartmenthistoryRow] = new Write.Composite[EmployeedepartmenthistoryRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(DepartmentId.put), + new Write.Single(ShiftId.put), + new Write.Single(TypoLocalDate.put), + new Write.Single(TypoLocalDate.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.departmentid, a.shiftid, a.startdate, a.enddate, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRepoImpl.scala index c4ae881dae..4da9bc032e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRepoImpl.scala @@ -31,7 +31,7 @@ class EmployeepayhistoryRepoImpl extends EmployeepayhistoryRepo { DeleteBuilder(""""humanresources"."employeepayhistory"""", EmployeepayhistoryFields.structure) } override def deleteById(compositeId: EmployeepayhistoryId): ConnectionIO[Boolean] = { - sql"""delete from "humanresources"."employeepayhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "ratechangedate" = ${fromWrite(compositeId.ratechangedate)(Write.fromPut(TypoLocalDateTime.put))}""".update.run.map(_ > 0) + sql"""delete from "humanresources"."employeepayhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "ratechangedate" = ${fromWrite(compositeId.ratechangedate)(new Write.Single(TypoLocalDateTime.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[EmployeepayhistoryId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -45,19 +45,19 @@ class EmployeepayhistoryRepoImpl extends EmployeepayhistoryRepo { } override def insert(unsaved: EmployeepayhistoryRow): ConnectionIO[EmployeepayhistoryRow] = { sql"""insert into "humanresources"."employeepayhistory"("businessentityid", "ratechangedate", "rate", "payfrequency", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.ratechangedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.rate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.payfrequency)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.ratechangedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.rate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.payfrequency)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "ratechangedate"::text, "rate", "payfrequency", "modifieddate"::text """.query(using EmployeepayhistoryRow.read).unique } override def insert(unsaved: EmployeepayhistoryRowUnsaved): ConnectionIO[EmployeepayhistoryRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""ratechangedate""""), fr"${fromWrite(unsaved.ratechangedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""rate""""), fr"${fromWrite(unsaved.rate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""payfrequency""""), fr"${fromWrite(unsaved.payfrequency)(Write.fromPut(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""ratechangedate""""), fr"${fromWrite(unsaved.ratechangedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""rate""""), fr"${fromWrite(unsaved.rate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""payfrequency""""), fr"${fromWrite(unsaved.payfrequency)(new Write.Single(TypoShort.put))}::int2")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -89,7 +89,7 @@ class EmployeepayhistoryRepoImpl extends EmployeepayhistoryRepo { sql"""select "businessentityid", "ratechangedate"::text, "rate", "payfrequency", "modifieddate"::text from "humanresources"."employeepayhistory"""".query(using EmployeepayhistoryRow.read).stream } override def selectById(compositeId: EmployeepayhistoryId): ConnectionIO[Option[EmployeepayhistoryRow]] = { - sql"""select "businessentityid", "ratechangedate"::text, "rate", "payfrequency", "modifieddate"::text from "humanresources"."employeepayhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "ratechangedate" = ${fromWrite(compositeId.ratechangedate)(Write.fromPut(TypoLocalDateTime.put))}""".query(using EmployeepayhistoryRow.read).option + sql"""select "businessentityid", "ratechangedate"::text, "rate", "payfrequency", "modifieddate"::text from "humanresources"."employeepayhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "ratechangedate" = ${fromWrite(compositeId.ratechangedate)(new Write.Single(TypoLocalDateTime.put))}""".query(using EmployeepayhistoryRow.read).option } override def selectByIds(compositeIds: Array[EmployeepayhistoryId]): Stream[ConnectionIO, EmployeepayhistoryRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -113,10 +113,10 @@ class EmployeepayhistoryRepoImpl extends EmployeepayhistoryRepo { override def update(row: EmployeepayhistoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "humanresources"."employeepayhistory" - set "rate" = ${fromWrite(row.rate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "payfrequency" = ${fromWrite(row.payfrequency)(Write.fromPut(TypoShort.put))}::int2, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "ratechangedate" = ${fromWrite(compositeId.ratechangedate)(Write.fromPut(TypoLocalDateTime.put))}""" + set "rate" = ${fromWrite(row.rate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "payfrequency" = ${fromWrite(row.payfrequency)(new Write.Single(TypoShort.put))}::int2, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "ratechangedate" = ${fromWrite(compositeId.ratechangedate)(new Write.Single(TypoLocalDateTime.put))}""" .update .run .map(_ > 0) @@ -124,11 +124,11 @@ class EmployeepayhistoryRepoImpl extends EmployeepayhistoryRepo { override def upsert(unsaved: EmployeepayhistoryRow): ConnectionIO[EmployeepayhistoryRow] = { sql"""insert into "humanresources"."employeepayhistory"("businessentityid", "ratechangedate", "rate", "payfrequency", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.ratechangedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.rate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.payfrequency)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.ratechangedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.rate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.payfrequency)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "ratechangedate") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRow.scala index a1513bb79c..809e54adf9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/employeepayhistory/EmployeepayhistoryRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: humanresources.employeepayhistory Employee pay history. @@ -49,22 +47,21 @@ object EmployeepayhistoryRow { new EmployeepayhistoryRow(compositeId.businessentityid, compositeId.ratechangedate, rate, payfrequency, modifieddate) implicit lazy val decoder: Decoder[EmployeepayhistoryRow] = Decoder.forProduct5[EmployeepayhistoryRow, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoShort, TypoLocalDateTime]("businessentityid", "ratechangedate", "rate", "payfrequency", "modifieddate")(EmployeepayhistoryRow.apply)(BusinessentityId.decoder, TypoLocalDateTime.decoder, Decoder.decodeBigDecimal, TypoShort.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[EmployeepayhistoryRow] = Encoder.forProduct5[EmployeepayhistoryRow, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoShort, TypoLocalDateTime]("businessentityid", "ratechangedate", "rate", "payfrequency", "modifieddate")(x => (x.businessentityid, x.ratechangedate, x.rate, x.payfrequency, x.modifieddate))(BusinessentityId.encoder, TypoLocalDateTime.encoder, Encoder.encodeBigDecimal, TypoShort.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[EmployeepayhistoryRow] = new Read[EmployeepayhistoryRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => EmployeepayhistoryRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - ratechangedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - rate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 2), - payfrequency = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[EmployeepayhistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EmployeepayhistoryRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + ratechangedate = arr(1).asInstanceOf[TypoLocalDateTime], + rate = arr(2).asInstanceOf[BigDecimal], + payfrequency = arr(3).asInstanceOf[TypoShort], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[EmployeepayhistoryRow] = Text.instance[EmployeepayhistoryRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -76,26 +73,12 @@ object EmployeepayhistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[EmployeepayhistoryRow] = new Write[EmployeepayhistoryRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.ratechangedate, x.rate, x.payfrequency, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 1, a.ratechangedate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 2, a.rate) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.payfrequency) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 1, a.ratechangedate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.rate) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.payfrequency) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[EmployeepayhistoryRow] = new Write.Composite[EmployeepayhistoryRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.ratechangedate, a.rate, a.payfrequency, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRepoImpl.scala index 43080bca5a..80426aa0ed 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRepoImpl.scala @@ -30,28 +30,28 @@ class JobcandidateRepoImpl extends JobcandidateRepo { DeleteBuilder(""""humanresources"."jobcandidate"""", JobcandidateFields.structure) } override def deleteById(jobcandidateid: JobcandidateId): ConnectionIO[Boolean] = { - sql"""delete from "humanresources"."jobcandidate" where "jobcandidateid" = ${fromWrite(jobcandidateid)(Write.fromPut(JobcandidateId.put))}""".update.run.map(_ > 0) + sql"""delete from "humanresources"."jobcandidate" where "jobcandidateid" = ${fromWrite(jobcandidateid)(new Write.Single(JobcandidateId.put))}""".update.run.map(_ > 0) } override def deleteByIds(jobcandidateids: Array[JobcandidateId]): ConnectionIO[Int] = { sql"""delete from "humanresources"."jobcandidate" where "jobcandidateid" = ANY(${jobcandidateids})""".update.run } override def insert(unsaved: JobcandidateRow): ConnectionIO[JobcandidateRow] = { sql"""insert into "humanresources"."jobcandidate"("jobcandidateid", "businessentityid", "resume", "modifieddate") - values (${fromWrite(unsaved.jobcandidateid)(Write.fromPut(JobcandidateId.put))}::int4, ${fromWrite(unsaved.businessentityid)(Write.fromPutOption(BusinessentityId.put))}::int4, ${fromWrite(unsaved.resume)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.jobcandidateid)(new Write.Single(JobcandidateId.put))}::int4, ${fromWrite(unsaved.businessentityid)(new Write.SingleOpt(BusinessentityId.put))}::int4, ${fromWrite(unsaved.resume)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "jobcandidateid", "businessentityid", "resume", "modifieddate"::text """.query(using JobcandidateRow.read).unique } override def insert(unsaved: JobcandidateRowUnsaved): ConnectionIO[JobcandidateRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPutOption(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""resume""""), fr"${fromWrite(unsaved.resume)(Write.fromPutOption(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.SingleOpt(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""resume""""), fr"${fromWrite(unsaved.resume)(new Write.SingleOpt(TypoXml.put))}::xml")), unsaved.jobcandidateid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""jobcandidateid""""), fr"${fromWrite(value: JobcandidateId)(Write.fromPut(JobcandidateId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""jobcandidateid""""), fr"${fromWrite(value: JobcandidateId)(new Write.Single(JobcandidateId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -83,7 +83,7 @@ class JobcandidateRepoImpl extends JobcandidateRepo { sql"""select "jobcandidateid", "businessentityid", "resume", "modifieddate"::text from "humanresources"."jobcandidate"""".query(using JobcandidateRow.read).stream } override def selectById(jobcandidateid: JobcandidateId): ConnectionIO[Option[JobcandidateRow]] = { - sql"""select "jobcandidateid", "businessentityid", "resume", "modifieddate"::text from "humanresources"."jobcandidate" where "jobcandidateid" = ${fromWrite(jobcandidateid)(Write.fromPut(JobcandidateId.put))}""".query(using JobcandidateRow.read).option + sql"""select "jobcandidateid", "businessentityid", "resume", "modifieddate"::text from "humanresources"."jobcandidate" where "jobcandidateid" = ${fromWrite(jobcandidateid)(new Write.Single(JobcandidateId.put))}""".query(using JobcandidateRow.read).option } override def selectByIds(jobcandidateids: Array[JobcandidateId]): Stream[ConnectionIO, JobcandidateRow] = { sql"""select "jobcandidateid", "businessentityid", "resume", "modifieddate"::text from "humanresources"."jobcandidate" where "jobcandidateid" = ANY(${jobcandidateids})""".query(using JobcandidateRow.read).stream @@ -100,10 +100,10 @@ class JobcandidateRepoImpl extends JobcandidateRepo { override def update(row: JobcandidateRow): ConnectionIO[Boolean] = { val jobcandidateid = row.jobcandidateid sql"""update "humanresources"."jobcandidate" - set "businessentityid" = ${fromWrite(row.businessentityid)(Write.fromPutOption(BusinessentityId.put))}::int4, - "resume" = ${fromWrite(row.resume)(Write.fromPutOption(TypoXml.put))}::xml, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "jobcandidateid" = ${fromWrite(jobcandidateid)(Write.fromPut(JobcandidateId.put))}""" + set "businessentityid" = ${fromWrite(row.businessentityid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + "resume" = ${fromWrite(row.resume)(new Write.SingleOpt(TypoXml.put))}::xml, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "jobcandidateid" = ${fromWrite(jobcandidateid)(new Write.Single(JobcandidateId.put))}""" .update .run .map(_ > 0) @@ -111,10 +111,10 @@ class JobcandidateRepoImpl extends JobcandidateRepo { override def upsert(unsaved: JobcandidateRow): ConnectionIO[JobcandidateRow] = { sql"""insert into "humanresources"."jobcandidate"("jobcandidateid", "businessentityid", "resume", "modifieddate") values ( - ${fromWrite(unsaved.jobcandidateid)(Write.fromPut(JobcandidateId.put))}::int4, - ${fromWrite(unsaved.businessentityid)(Write.fromPutOption(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.resume)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.jobcandidateid)(new Write.Single(JobcandidateId.put))}::int4, + ${fromWrite(unsaved.businessentityid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.resume)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("jobcandidateid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRow.scala index 6ad7150ec9..5ded62574a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/jobcandidate/JobcandidateRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoXml import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: humanresources.jobcandidate Résumés submitted to Human Resources by job applicants. @@ -42,20 +40,19 @@ case class JobcandidateRow( object JobcandidateRow { implicit lazy val decoder: Decoder[JobcandidateRow] = Decoder.forProduct4[JobcandidateRow, JobcandidateId, Option[BusinessentityId], Option[TypoXml], TypoLocalDateTime]("jobcandidateid", "businessentityid", "resume", "modifieddate")(JobcandidateRow.apply)(JobcandidateId.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(TypoXml.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[JobcandidateRow] = Encoder.forProduct4[JobcandidateRow, JobcandidateId, Option[BusinessentityId], Option[TypoXml], TypoLocalDateTime]("jobcandidateid", "businessentityid", "resume", "modifieddate")(x => (x.jobcandidateid, x.businessentityid, x.resume, x.modifieddate))(JobcandidateId.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(TypoXml.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[JobcandidateRow] = new Read[JobcandidateRow]( - gets = List( - (JobcandidateId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => JobcandidateRow( - jobcandidateid = JobcandidateId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNullable(rs, i + 1), - resume = TypoXml.get.unsafeGetNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[JobcandidateRow] = new Read.CompositeOfInstances(Array( + new Read.Single(JobcandidateId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + JobcandidateRow( + jobcandidateid = arr(0).asInstanceOf[JobcandidateId], + businessentityid = arr(1).asInstanceOf[Option[BusinessentityId]], + resume = arr(2).asInstanceOf[Option[TypoXml]], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[JobcandidateRow] = Text.instance[JobcandidateRow]{ (row, sb) => JobcandidateId.text.unsafeEncode(row.jobcandidateid, sb) sb.append(Text.DELIMETER) @@ -65,23 +62,11 @@ object JobcandidateRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[JobcandidateRow] = new Write[JobcandidateRow]( - puts = List((JobcandidateId.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.Nullable), - (TypoXml.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.jobcandidateid, x.businessentityid, x.resume, x.modifieddate), - unsafeSet = (rs, i, a) => { - JobcandidateId.put.unsafeSetNonNullable(rs, i + 0, a.jobcandidateid) - BusinessentityId.put.unsafeSetNullable(rs, i + 1, a.businessentityid) - TypoXml.put.unsafeSetNullable(rs, i + 2, a.resume) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - JobcandidateId.put.unsafeUpdateNonNullable(ps, i + 0, a.jobcandidateid) - BusinessentityId.put.unsafeUpdateNullable(ps, i + 1, a.businessentityid) - TypoXml.put.unsafeUpdateNullable(ps, i + 2, a.resume) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[JobcandidateRow] = new Write.Composite[JobcandidateRow]( + List(new Write.Single(JobcandidateId.put), + new Write.Single(BusinessentityId.put).toOpt, + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.jobcandidateid, a.businessentityid, a.resume, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRepoImpl.scala index 4ed62549d4..ecde49edeb 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRepoImpl.scala @@ -30,29 +30,29 @@ class ShiftRepoImpl extends ShiftRepo { DeleteBuilder(""""humanresources"."shift"""", ShiftFields.structure) } override def deleteById(shiftid: ShiftId): ConnectionIO[Boolean] = { - sql"""delete from "humanresources"."shift" where "shiftid" = ${fromWrite(shiftid)(Write.fromPut(ShiftId.put))}""".update.run.map(_ > 0) + sql"""delete from "humanresources"."shift" where "shiftid" = ${fromWrite(shiftid)(new Write.Single(ShiftId.put))}""".update.run.map(_ > 0) } override def deleteByIds(shiftids: Array[ShiftId]): ConnectionIO[Int] = { sql"""delete from "humanresources"."shift" where "shiftid" = ANY(${shiftids})""".update.run } override def insert(unsaved: ShiftRow): ConnectionIO[ShiftRow] = { sql"""insert into "humanresources"."shift"("shiftid", "name", "starttime", "endtime", "modifieddate") - values (${fromWrite(unsaved.shiftid)(Write.fromPut(ShiftId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.starttime)(Write.fromPut(TypoLocalTime.put))}::time, ${fromWrite(unsaved.endtime)(Write.fromPut(TypoLocalTime.put))}::time, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.shiftid)(new Write.Single(ShiftId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.starttime)(new Write.Single(TypoLocalTime.put))}::time, ${fromWrite(unsaved.endtime)(new Write.Single(TypoLocalTime.put))}::time, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "shiftid", "name", "starttime"::text, "endtime"::text, "modifieddate"::text """.query(using ShiftRow.read).unique } override def insert(unsaved: ShiftRowUnsaved): ConnectionIO[ShiftRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""starttime""""), fr"${fromWrite(unsaved.starttime)(Write.fromPut(TypoLocalTime.put))}::time")), - Some((Fragment.const0(s""""endtime""""), fr"${fromWrite(unsaved.endtime)(Write.fromPut(TypoLocalTime.put))}::time")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""starttime""""), fr"${fromWrite(unsaved.starttime)(new Write.Single(TypoLocalTime.put))}::time")), + Some((Fragment.const0(s""""endtime""""), fr"${fromWrite(unsaved.endtime)(new Write.Single(TypoLocalTime.put))}::time")), unsaved.shiftid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""shiftid""""), fr"${fromWrite(value: ShiftId)(Write.fromPut(ShiftId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""shiftid""""), fr"${fromWrite(value: ShiftId)(new Write.Single(ShiftId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -84,7 +84,7 @@ class ShiftRepoImpl extends ShiftRepo { sql"""select "shiftid", "name", "starttime"::text, "endtime"::text, "modifieddate"::text from "humanresources"."shift"""".query(using ShiftRow.read).stream } override def selectById(shiftid: ShiftId): ConnectionIO[Option[ShiftRow]] = { - sql"""select "shiftid", "name", "starttime"::text, "endtime"::text, "modifieddate"::text from "humanresources"."shift" where "shiftid" = ${fromWrite(shiftid)(Write.fromPut(ShiftId.put))}""".query(using ShiftRow.read).option + sql"""select "shiftid", "name", "starttime"::text, "endtime"::text, "modifieddate"::text from "humanresources"."shift" where "shiftid" = ${fromWrite(shiftid)(new Write.Single(ShiftId.put))}""".query(using ShiftRow.read).option } override def selectByIds(shiftids: Array[ShiftId]): Stream[ConnectionIO, ShiftRow] = { sql"""select "shiftid", "name", "starttime"::text, "endtime"::text, "modifieddate"::text from "humanresources"."shift" where "shiftid" = ANY(${shiftids})""".query(using ShiftRow.read).stream @@ -101,11 +101,11 @@ class ShiftRepoImpl extends ShiftRepo { override def update(row: ShiftRow): ConnectionIO[Boolean] = { val shiftid = row.shiftid sql"""update "humanresources"."shift" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "starttime" = ${fromWrite(row.starttime)(Write.fromPut(TypoLocalTime.put))}::time, - "endtime" = ${fromWrite(row.endtime)(Write.fromPut(TypoLocalTime.put))}::time, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "shiftid" = ${fromWrite(shiftid)(Write.fromPut(ShiftId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "starttime" = ${fromWrite(row.starttime)(new Write.Single(TypoLocalTime.put))}::time, + "endtime" = ${fromWrite(row.endtime)(new Write.Single(TypoLocalTime.put))}::time, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "shiftid" = ${fromWrite(shiftid)(new Write.Single(ShiftId.put))}""" .update .run .map(_ > 0) @@ -113,11 +113,11 @@ class ShiftRepoImpl extends ShiftRepo { override def upsert(unsaved: ShiftRow): ConnectionIO[ShiftRow] = { sql"""insert into "humanresources"."shift"("shiftid", "name", "starttime", "endtime", "modifieddate") values ( - ${fromWrite(unsaved.shiftid)(Write.fromPut(ShiftId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.starttime)(Write.fromPut(TypoLocalTime.put))}::time, - ${fromWrite(unsaved.endtime)(Write.fromPut(TypoLocalTime.put))}::time, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.shiftid)(new Write.Single(ShiftId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.starttime)(new Write.Single(TypoLocalTime.put))}::time, + ${fromWrite(unsaved.endtime)(new Write.Single(TypoLocalTime.put))}::time, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("shiftid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRow.scala index f3fd65c89f..fb966fc7d9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/shift/ShiftRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoLocalTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: humanresources.shift Work shift lookup table. @@ -43,22 +41,21 @@ case class ShiftRow( object ShiftRow { implicit lazy val decoder: Decoder[ShiftRow] = Decoder.forProduct5[ShiftRow, ShiftId, Name, TypoLocalTime, TypoLocalTime, TypoLocalDateTime]("shiftid", "name", "starttime", "endtime", "modifieddate")(ShiftRow.apply)(ShiftId.decoder, Name.decoder, TypoLocalTime.decoder, TypoLocalTime.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ShiftRow] = Encoder.forProduct5[ShiftRow, ShiftId, Name, TypoLocalTime, TypoLocalTime, TypoLocalDateTime]("shiftid", "name", "starttime", "endtime", "modifieddate")(x => (x.shiftid, x.name, x.starttime, x.endtime, x.modifieddate))(ShiftId.encoder, Name.encoder, TypoLocalTime.encoder, TypoLocalTime.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ShiftRow] = new Read[ShiftRow]( - gets = List( - (ShiftId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalTime.get, Nullability.NoNulls), - (TypoLocalTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ShiftRow( - shiftid = ShiftId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - starttime = TypoLocalTime.get.unsafeGetNonNullable(rs, i + 2), - endtime = TypoLocalTime.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[ShiftRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShiftId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ShiftRow( + shiftid = arr(0).asInstanceOf[ShiftId], + name = arr(1).asInstanceOf[Name], + starttime = arr(2).asInstanceOf[TypoLocalTime], + endtime = arr(3).asInstanceOf[TypoLocalTime], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ShiftRow] = Text.instance[ShiftRow]{ (row, sb) => ShiftId.text.unsafeEncode(row.shiftid, sb) sb.append(Text.DELIMETER) @@ -70,26 +67,12 @@ object ShiftRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ShiftRow] = new Write[ShiftRow]( - puts = List((ShiftId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalTime.put, Nullability.NoNulls), - (TypoLocalTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.shiftid, x.name, x.starttime, x.endtime, x.modifieddate), - unsafeSet = (rs, i, a) => { - ShiftId.put.unsafeSetNonNullable(rs, i + 0, a.shiftid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalTime.put.unsafeSetNonNullable(rs, i + 2, a.starttime) - TypoLocalTime.put.unsafeSetNonNullable(rs, i + 3, a.endtime) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ShiftId.put.unsafeUpdateNonNullable(ps, i + 0, a.shiftid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalTime.put.unsafeUpdateNonNullable(ps, i + 2, a.starttime) - TypoLocalTime.put.unsafeUpdateNonNullable(ps, i + 3, a.endtime) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[ShiftRow] = new Write.Composite[ShiftRow]( + List(new Write.Single(ShiftId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalTime.put), + new Write.Single(TypoLocalTime.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.shiftid, a.name, a.starttime, a.endtime, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployee/VemployeeViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployee/VemployeeViewRow.scala index b65a9e9814..9a56734312 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployee/VemployeeViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployee/VemployeeViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.Phone import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: humanresources.vemployee */ case class VemployeeViewRow( @@ -62,46 +60,45 @@ case class VemployeeViewRow( object VemployeeViewRow { implicit lazy val decoder: Decoder[VemployeeViewRow] = Decoder.forProduct18[VemployeeViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], /* max 50 chars */ String, Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name, Option[TypoXml]]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "jobtitle", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname", "additionalcontactinfo")(VemployeeViewRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Decoder.decodeOption(Phone.decoder), Decoder.decodeOption(Name.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Decoder.decodeString, Name.decoder, Decoder.decodeOption(TypoXml.decoder)) implicit lazy val encoder: Encoder[VemployeeViewRow] = Encoder.forProduct18[VemployeeViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], /* max 50 chars */ String, Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name, Option[TypoXml]]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "jobtitle", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname", "additionalcontactinfo")(x => (x.businessentityid, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.jobtitle, x.phonenumber, x.phonenumbertype, x.emailaddress, x.emailpromotion, x.addressline1, x.addressline2, x.city, x.stateprovincename, x.postalcode, x.countryregionname, x.additionalcontactinfo))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Encoder.encodeOption(Phone.encoder), Encoder.encodeOption(Name.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Encoder.encodeString, Name.encoder, Encoder.encodeOption(TypoXml.encoder)) - implicit lazy val read: Read[VemployeeViewRow] = new Read[VemployeeViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Phone.get, Nullability.Nullable), - (Name.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VemployeeViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 2), - middlename = Name.get.unsafeGetNullable(rs, i + 3), - lastname = Name.get.unsafeGetNonNullable(rs, i + 4), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - phonenumber = Phone.get.unsafeGetNullable(rs, i + 7), - phonenumbertype = Name.get.unsafeGetNullable(rs, i + 8), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 10), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 11), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 12), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 13), - stateprovincename = Name.get.unsafeGetNonNullable(rs, i + 14), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 15), - countryregionname = Name.get.unsafeGetNonNullable(rs, i + 16), - additionalcontactinfo = TypoXml.get.unsafeGetNullable(rs, i + 17) + implicit lazy val read: Read[VemployeeViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Phone.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VemployeeViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + title = arr(1).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(2).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(3).asInstanceOf[Option[Name]], + lastname = arr(4).asInstanceOf[Name], + suffix = arr(5).asInstanceOf[Option[/* max 10 chars */ String]], + jobtitle = arr(6).asInstanceOf[/* max 50 chars */ String], + phonenumber = arr(7).asInstanceOf[Option[Phone]], + phonenumbertype = arr(8).asInstanceOf[Option[Name]], + emailaddress = arr(9).asInstanceOf[Option[/* max 50 chars */ String]], + emailpromotion = arr(10).asInstanceOf[Int], + addressline1 = arr(11).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(12).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(13).asInstanceOf[/* max 30 chars */ String], + stateprovincename = arr(14).asInstanceOf[Name], + postalcode = arr(15).asInstanceOf[/* max 15 chars */ String], + countryregionname = arr(16).asInstanceOf[Name], + additionalcontactinfo = arr(17).asInstanceOf[Option[TypoXml]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartment/VemployeedepartmentViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartment/VemployeedepartmentViewRow.scala index 9a83201760..0e3f14ea94 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartment/VemployeedepartmentViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartment/VemployeedepartmentViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDate import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: humanresources.vemployeedepartment */ case class VemployeedepartmentViewRow( @@ -45,30 +43,29 @@ case class VemployeedepartmentViewRow( object VemployeedepartmentViewRow { implicit lazy val decoder: Decoder[VemployeedepartmentViewRow] = Decoder.forProduct10[VemployeedepartmentViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], /* max 50 chars */ String, Name, Name, TypoLocalDate]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "jobtitle", "department", "groupname", "startdate")(VemployeedepartmentViewRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Name.decoder, TypoLocalDate.decoder) implicit lazy val encoder: Encoder[VemployeedepartmentViewRow] = Encoder.forProduct10[VemployeedepartmentViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], /* max 50 chars */ String, Name, Name, TypoLocalDate]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "jobtitle", "department", "groupname", "startdate")(x => (x.businessentityid, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.jobtitle, x.department, x.groupname, x.startdate))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Name.encoder, TypoLocalDate.encoder) - implicit lazy val read: Read[VemployeedepartmentViewRow] = new Read[VemployeedepartmentViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VemployeedepartmentViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 2), - middlename = Name.get.unsafeGetNullable(rs, i + 3), - lastname = Name.get.unsafeGetNonNullable(rs, i + 4), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - department = Name.get.unsafeGetNonNullable(rs, i + 7), - groupname = Name.get.unsafeGetNonNullable(rs, i + 8), - startdate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[VemployeedepartmentViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VemployeedepartmentViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + title = arr(1).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(2).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(3).asInstanceOf[Option[Name]], + lastname = arr(4).asInstanceOf[Name], + suffix = arr(5).asInstanceOf[Option[/* max 10 chars */ String]], + jobtitle = arr(6).asInstanceOf[/* max 50 chars */ String], + department = arr(7).asInstanceOf[Name], + groupname = arr(8).asInstanceOf[Name], + startdate = arr(9).asInstanceOf[TypoLocalDate] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartmenthistory/VemployeedepartmenthistoryViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartmenthistory/VemployeedepartmenthistoryViewRow.scala index c239544018..a393256a7c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartmenthistory/VemployeedepartmenthistoryViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vemployeedepartmenthistory/VemployeedepartmenthistoryViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDate import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: humanresources.vemployeedepartmenthistory */ case class VemployeedepartmenthistoryViewRow( @@ -47,32 +45,31 @@ case class VemployeedepartmenthistoryViewRow( object VemployeedepartmenthistoryViewRow { implicit lazy val decoder: Decoder[VemployeedepartmenthistoryViewRow] = Decoder.forProduct11[VemployeedepartmenthistoryViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Name, Name, Name, TypoLocalDate, Option[TypoLocalDate]]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "shift", "department", "groupname", "startdate", "enddate")(VemployeedepartmenthistoryViewRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Name.decoder, Name.decoder, Name.decoder, TypoLocalDate.decoder, Decoder.decodeOption(TypoLocalDate.decoder)) implicit lazy val encoder: Encoder[VemployeedepartmenthistoryViewRow] = Encoder.forProduct11[VemployeedepartmenthistoryViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Name, Name, Name, TypoLocalDate, Option[TypoLocalDate]]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "shift", "department", "groupname", "startdate", "enddate")(x => (x.businessentityid, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.shift, x.department, x.groupname, x.startdate, x.enddate))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Name.encoder, Name.encoder, Name.encoder, TypoLocalDate.encoder, Encoder.encodeOption(TypoLocalDate.encoder)) - implicit lazy val read: Read[VemployeedepartmenthistoryViewRow] = new Read[VemployeedepartmenthistoryViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VemployeedepartmenthistoryViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 2), - middlename = Name.get.unsafeGetNullable(rs, i + 3), - lastname = Name.get.unsafeGetNonNullable(rs, i + 4), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - shift = Name.get.unsafeGetNonNullable(rs, i + 6), - department = Name.get.unsafeGetNonNullable(rs, i + 7), - groupname = Name.get.unsafeGetNonNullable(rs, i + 8), - startdate = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 9), - enddate = TypoLocalDate.get.unsafeGetNullable(rs, i + 10) + implicit lazy val read: Read[VemployeedepartmenthistoryViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VemployeedepartmenthistoryViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + title = arr(1).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(2).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(3).asInstanceOf[Option[Name]], + lastname = arr(4).asInstanceOf[Name], + suffix = arr(5).asInstanceOf[Option[/* max 10 chars */ String]], + shift = arr(6).asInstanceOf[Name], + department = arr(7).asInstanceOf[Name], + groupname = arr(8).asInstanceOf[Name], + startdate = arr(9).asInstanceOf[TypoLocalDate], + enddate = arr(10).asInstanceOf[Option[TypoLocalDate]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidate/VjobcandidateViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidate/VjobcandidateViewRow.scala index 323ae30a3b..24227067cf 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidate/VjobcandidateViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidate/VjobcandidateViewRow.scala @@ -10,12 +10,10 @@ package vjobcandidate import adventureworks.customtypes.TypoLocalDateTime import adventureworks.humanresources.jobcandidate.JobcandidateId import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: humanresources.vjobcandidate */ case class VjobcandidateViewRow( @@ -43,42 +41,41 @@ case class VjobcandidateViewRow( object VjobcandidateViewRow { implicit lazy val decoder: Decoder[VjobcandidateViewRow] = Decoder.forProduct16[VjobcandidateViewRow, JobcandidateId, Option[BusinessentityId], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 20 chars */ String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], TypoLocalDateTime]("jobcandidateid", "businessentityid", "Name.Prefix", "Name.First", "Name.Middle", "Name.Last", "Name.Suffix", "Skills", "Addr.Type", "Addr.Loc.CountryRegion", "Addr.Loc.State", "Addr.Loc.City", "Addr.PostalCode", "EMail", "WebSite", "modifieddate")(VjobcandidateViewRow.apply)(JobcandidateId.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[VjobcandidateViewRow] = Encoder.forProduct16[VjobcandidateViewRow, JobcandidateId, Option[BusinessentityId], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 20 chars */ String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], TypoLocalDateTime]("jobcandidateid", "businessentityid", "Name.Prefix", "Name.First", "Name.Middle", "Name.Last", "Name.Suffix", "Skills", "Addr.Type", "Addr.Loc.CountryRegion", "Addr.Loc.State", "Addr.Loc.City", "Addr.PostalCode", "EMail", "WebSite", "modifieddate")(x => (x.jobcandidateid, x.businessentityid, x.namePrefix, x.nameFirst, x.nameMiddle, x.nameLast, x.nameSuffix, x.skills, x.addrType, x.addrLocCountryRegion, x.addrLocState, x.addrLocCity, x.addrPostalCode, x.eMail, x.webSite, x.modifieddate))(JobcandidateId.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[VjobcandidateViewRow] = new Read[VjobcandidateViewRow]( - gets = List( - (JobcandidateId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VjobcandidateViewRow( - jobcandidateid = JobcandidateId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNullable(rs, i + 1), - namePrefix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - nameFirst = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - nameMiddle = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - nameLast = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - nameSuffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - skills = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - addrType = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - addrLocCountryRegion = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - addrLocState = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - addrLocCity = Meta.StringMeta.get.unsafeGetNullable(rs, i + 11), - addrPostalCode = Meta.StringMeta.get.unsafeGetNullable(rs, i + 12), - eMail = Meta.StringMeta.get.unsafeGetNullable(rs, i + 13), - webSite = Meta.StringMeta.get.unsafeGetNullable(rs, i + 14), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 15) + implicit lazy val read: Read[VjobcandidateViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(JobcandidateId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VjobcandidateViewRow( + jobcandidateid = arr(0).asInstanceOf[JobcandidateId], + businessentityid = arr(1).asInstanceOf[Option[BusinessentityId]], + namePrefix = arr(2).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + nameFirst = arr(3).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + nameMiddle = arr(4).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + nameLast = arr(5).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + nameSuffix = arr(6).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + skills = arr(7).asInstanceOf[/* nullability unknown */ Option[String]], + addrType = arr(8).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + addrLocCountryRegion = arr(9).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + addrLocState = arr(10).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + addrLocCity = arr(11).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + addrPostalCode = arr(12).asInstanceOf[/* nullability unknown */ Option[/* max 20 chars */ String]], + eMail = arr(13).asInstanceOf[/* nullability unknown */ Option[String]], + webSite = arr(14).asInstanceOf[/* nullability unknown */ Option[String]], + modifieddate = arr(15).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateeducation/VjobcandidateeducationViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateeducation/VjobcandidateeducationViewRow.scala index e72856d967..2096869332 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateeducation/VjobcandidateeducationViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateeducation/VjobcandidateeducationViewRow.scala @@ -9,12 +9,10 @@ package vjobcandidateeducation import adventureworks.customtypes.TypoLocalDate import adventureworks.humanresources.jobcandidate.JobcandidateId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: humanresources.vjobcandidateeducation */ case class VjobcandidateeducationViewRow( @@ -37,36 +35,35 @@ case class VjobcandidateeducationViewRow( object VjobcandidateeducationViewRow { implicit lazy val decoder: Decoder[VjobcandidateeducationViewRow] = Decoder.forProduct13[VjobcandidateeducationViewRow, JobcandidateId, /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 5 chars */ String], /* nullability unknown */ Option[/* max 5 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String]]("jobcandidateid", "Edu.Level", "Edu.StartDate", "Edu.EndDate", "Edu.Degree", "Edu.Major", "Edu.Minor", "Edu.GPA", "Edu.GPAScale", "Edu.School", "Edu.Loc.CountryRegion", "Edu.Loc.State", "Edu.Loc.City")(VjobcandidateeducationViewRow.apply)(JobcandidateId.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoLocalDate.decoder), Decoder.decodeOption(TypoLocalDate.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString)) implicit lazy val encoder: Encoder[VjobcandidateeducationViewRow] = Encoder.forProduct13[VjobcandidateeducationViewRow, JobcandidateId, /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 5 chars */ String], /* nullability unknown */ Option[/* max 5 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String]]("jobcandidateid", "Edu.Level", "Edu.StartDate", "Edu.EndDate", "Edu.Degree", "Edu.Major", "Edu.Minor", "Edu.GPA", "Edu.GPAScale", "Edu.School", "Edu.Loc.CountryRegion", "Edu.Loc.State", "Edu.Loc.City")(x => (x.jobcandidateid, x.eduLevel, x.eduStartDate, x.eduEndDate, x.eduDegree, x.eduMajor, x.eduMinor, x.eduGPA, x.eduGPAScale, x.eduSchool, x.eduLocCountryRegion, x.eduLocState, x.eduLocCity))(JobcandidateId.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoLocalDate.encoder), Encoder.encodeOption(TypoLocalDate.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString)) - implicit lazy val read: Read[VjobcandidateeducationViewRow] = new Read[VjobcandidateeducationViewRow]( - gets = List( - (JobcandidateId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDate.get, Nullability.Nullable), - (TypoLocalDate.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VjobcandidateeducationViewRow( - jobcandidateid = JobcandidateId.get.unsafeGetNonNullable(rs, i + 0), - eduLevel = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - eduStartDate = TypoLocalDate.get.unsafeGetNullable(rs, i + 2), - eduEndDate = TypoLocalDate.get.unsafeGetNullable(rs, i + 3), - eduDegree = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - eduMajor = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - eduMinor = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - eduGPA = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - eduGPAScale = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - eduSchool = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - eduLocCountryRegion = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - eduLocState = Meta.StringMeta.get.unsafeGetNullable(rs, i + 11), - eduLocCity = Meta.StringMeta.get.unsafeGetNullable(rs, i + 12) + implicit lazy val read: Read[VjobcandidateeducationViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(JobcandidateId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VjobcandidateeducationViewRow( + jobcandidateid = arr(0).asInstanceOf[JobcandidateId], + eduLevel = arr(1).asInstanceOf[/* nullability unknown */ Option[/* max 50 chars */ String]], + eduStartDate = arr(2).asInstanceOf[/* nullability unknown */ Option[TypoLocalDate]], + eduEndDate = arr(3).asInstanceOf[/* nullability unknown */ Option[TypoLocalDate]], + eduDegree = arr(4).asInstanceOf[/* nullability unknown */ Option[/* max 50 chars */ String]], + eduMajor = arr(5).asInstanceOf[/* nullability unknown */ Option[/* max 50 chars */ String]], + eduMinor = arr(6).asInstanceOf[/* nullability unknown */ Option[/* max 50 chars */ String]], + eduGPA = arr(7).asInstanceOf[/* nullability unknown */ Option[/* max 5 chars */ String]], + eduGPAScale = arr(8).asInstanceOf[/* nullability unknown */ Option[/* max 5 chars */ String]], + eduSchool = arr(9).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + eduLocCountryRegion = arr(10).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + eduLocState = arr(11).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + eduLocCity = arr(12).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateemployment/VjobcandidateemploymentViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateemployment/VjobcandidateemploymentViewRow.scala index 0f0c2500c6..412c62cb41 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateemployment/VjobcandidateemploymentViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/humanresources/vjobcandidateemployment/VjobcandidateemploymentViewRow.scala @@ -9,12 +9,10 @@ package vjobcandidateemployment import adventureworks.customtypes.TypoLocalDate import adventureworks.humanresources.jobcandidate.JobcandidateId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: humanresources.vjobcandidateemployment */ case class VjobcandidateemploymentViewRow( @@ -35,32 +33,31 @@ case class VjobcandidateemploymentViewRow( object VjobcandidateemploymentViewRow { implicit lazy val decoder: Decoder[VjobcandidateemploymentViewRow] = Decoder.forProduct11[VjobcandidateemploymentViewRow, JobcandidateId, /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String]]("jobcandidateid", "Emp.StartDate", "Emp.EndDate", "Emp.OrgName", "Emp.JobTitle", "Emp.Responsibility", "Emp.FunctionCategory", "Emp.IndustryCategory", "Emp.Loc.CountryRegion", "Emp.Loc.State", "Emp.Loc.City")(VjobcandidateemploymentViewRow.apply)(JobcandidateId.decoder, Decoder.decodeOption(TypoLocalDate.decoder), Decoder.decodeOption(TypoLocalDate.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString)) implicit lazy val encoder: Encoder[VjobcandidateemploymentViewRow] = Encoder.forProduct11[VjobcandidateemploymentViewRow, JobcandidateId, /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[/* max 100 chars */ String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String]]("jobcandidateid", "Emp.StartDate", "Emp.EndDate", "Emp.OrgName", "Emp.JobTitle", "Emp.Responsibility", "Emp.FunctionCategory", "Emp.IndustryCategory", "Emp.Loc.CountryRegion", "Emp.Loc.State", "Emp.Loc.City")(x => (x.jobcandidateid, x.empStartDate, x.empEndDate, x.empOrgName, x.empJobTitle, x.empResponsibility, x.empFunctionCategory, x.empIndustryCategory, x.empLocCountryRegion, x.empLocState, x.empLocCity))(JobcandidateId.encoder, Encoder.encodeOption(TypoLocalDate.encoder), Encoder.encodeOption(TypoLocalDate.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString)) - implicit lazy val read: Read[VjobcandidateemploymentViewRow] = new Read[VjobcandidateemploymentViewRow]( - gets = List( - (JobcandidateId.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.Nullable), - (TypoLocalDate.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VjobcandidateemploymentViewRow( - jobcandidateid = JobcandidateId.get.unsafeGetNonNullable(rs, i + 0), - empStartDate = TypoLocalDate.get.unsafeGetNullable(rs, i + 1), - empEndDate = TypoLocalDate.get.unsafeGetNullable(rs, i + 2), - empOrgName = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - empJobTitle = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - empResponsibility = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - empFunctionCategory = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - empIndustryCategory = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - empLocCountryRegion = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - empLocState = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - empLocCity = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10) + implicit lazy val read: Read[VjobcandidateemploymentViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(JobcandidateId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VjobcandidateemploymentViewRow( + jobcandidateid = arr(0).asInstanceOf[JobcandidateId], + empStartDate = arr(1).asInstanceOf[/* nullability unknown */ Option[TypoLocalDate]], + empEndDate = arr(2).asInstanceOf[/* nullability unknown */ Option[TypoLocalDate]], + empOrgName = arr(3).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + empJobTitle = arr(4).asInstanceOf[/* nullability unknown */ Option[/* max 100 chars */ String]], + empResponsibility = arr(5).asInstanceOf[/* nullability unknown */ Option[String]], + empFunctionCategory = arr(6).asInstanceOf[/* nullability unknown */ Option[String]], + empIndustryCategory = arr(7).asInstanceOf[/* nullability unknown */ Option[String]], + empLocCountryRegion = arr(8).asInstanceOf[/* nullability unknown */ Option[String]], + empLocState = arr(9).asInstanceOf[/* nullability unknown */ Option[String]], + empLocCity = arr(10).asInstanceOf[/* nullability unknown */ Option[String]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/a/AViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/a/AViewRow.scala index 399e074d9d..9bef4a47f9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/a/AViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/a/AViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.address.AddressId import adventureworks.person.stateprovince.StateprovinceId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.a */ case class AViewRow( @@ -46,30 +44,29 @@ case class AViewRow( object AViewRow { implicit lazy val decoder: Decoder[AViewRow] = Decoder.forProduct10[AViewRow, AddressId, AddressId, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, StateprovinceId, /* max 15 chars */ String, Option[TypoBytea], TypoUUID, TypoLocalDateTime]("id", "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate")(AViewRow.apply)(AddressId.decoder, AddressId.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, StateprovinceId.decoder, Decoder.decodeString, Decoder.decodeOption(TypoBytea.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[AViewRow] = Encoder.forProduct10[AViewRow, AddressId, AddressId, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, StateprovinceId, /* max 15 chars */ String, Option[TypoBytea], TypoUUID, TypoLocalDateTime]("id", "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate")(x => (x.id, x.addressid, x.addressline1, x.addressline2, x.city, x.stateprovinceid, x.postalcode, x.spatiallocation, x.rowguid, x.modifieddate))(AddressId.encoder, AddressId.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, StateprovinceId.encoder, Encoder.encodeString, Encoder.encodeOption(TypoBytea.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[AViewRow] = new Read[AViewRow]( - gets = List( - (AddressId.get, Nullability.NoNulls), - (AddressId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (StateprovinceId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoBytea.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => AViewRow( - id = AddressId.get.unsafeGetNonNullable(rs, i + 0), - addressid = AddressId.get.unsafeGetNonNullable(rs, i + 1), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 5), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - spatiallocation = TypoBytea.get.unsafeGetNullable(rs, i + 7), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[AViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + AViewRow( + id = arr(0).asInstanceOf[AddressId], + addressid = arr(1).asInstanceOf[AddressId], + addressline1 = arr(2).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(3).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(4).asInstanceOf[/* max 30 chars */ String], + stateprovinceid = arr(5).asInstanceOf[StateprovinceId], + postalcode = arr(6).asInstanceOf[/* max 15 chars */ String], + spatiallocation = arr(7).asInstanceOf[Option[TypoBytea]], + rowguid = arr(8).asInstanceOf[TypoUUID], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/at/AtViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/at/AtViewRow.scala index 05b299327c..7e5f1ae361 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/at/AtViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/at/AtViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.addresstype.AddresstypeId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.at */ case class AtViewRow( @@ -34,20 +32,19 @@ case class AtViewRow( object AtViewRow { implicit lazy val decoder: Decoder[AtViewRow] = Decoder.forProduct5[AtViewRow, AddresstypeId, AddresstypeId, Name, TypoUUID, TypoLocalDateTime]("id", "addresstypeid", "name", "rowguid", "modifieddate")(AtViewRow.apply)(AddresstypeId.decoder, AddresstypeId.decoder, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[AtViewRow] = Encoder.forProduct5[AtViewRow, AddresstypeId, AddresstypeId, Name, TypoUUID, TypoLocalDateTime]("id", "addresstypeid", "name", "rowguid", "modifieddate")(x => (x.id, x.addresstypeid, x.name, x.rowguid, x.modifieddate))(AddresstypeId.encoder, AddresstypeId.encoder, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[AtViewRow] = new Read[AtViewRow]( - gets = List( - (AddresstypeId.get, Nullability.NoNulls), - (AddresstypeId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => AtViewRow( - id = AddresstypeId.get.unsafeGetNonNullable(rs, i + 0), - addresstypeid = AddresstypeId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[AtViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(AddresstypeId.get).asInstanceOf[Read[Any]], + new Read.Single(AddresstypeId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + AtViewRow( + id = arr(0).asInstanceOf[AddresstypeId], + addresstypeid = arr(1).asInstanceOf[AddresstypeId], + name = arr(2).asInstanceOf[Name], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/be/BeViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/be/BeViewRow.scala index c3bbd20e68..4bd57c7639 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/be/BeViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/be/BeViewRow.scala @@ -10,11 +10,9 @@ package be import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.be */ case class BeViewRow( @@ -31,18 +29,17 @@ case class BeViewRow( object BeViewRow { implicit lazy val decoder: Decoder[BeViewRow] = Decoder.forProduct4[BeViewRow, BusinessentityId, BusinessentityId, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "rowguid", "modifieddate")(BeViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BeViewRow] = Encoder.forProduct4[BeViewRow, BusinessentityId, BusinessentityId, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BeViewRow] = new Read[BeViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BeViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[BeViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BeViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + rowguid = arr(2).asInstanceOf[TypoUUID], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bea/BeaViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bea/BeaViewRow.scala index 7528170ab6..e79ea74942 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bea/BeaViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bea/BeaViewRow.scala @@ -12,11 +12,9 @@ import adventureworks.customtypes.TypoUUID import adventureworks.person.address.AddressId import adventureworks.person.addresstype.AddresstypeId import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.bea */ case class BeaViewRow( @@ -37,22 +35,21 @@ case class BeaViewRow( object BeaViewRow { implicit lazy val decoder: Decoder[BeaViewRow] = Decoder.forProduct6[BeaViewRow, BusinessentityId, BusinessentityId, AddressId, AddresstypeId, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate")(BeaViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, AddressId.decoder, AddresstypeId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BeaViewRow] = Encoder.forProduct6[BeaViewRow, BusinessentityId, BusinessentityId, AddressId, AddresstypeId, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.addressid, x.addresstypeid, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, AddressId.encoder, AddresstypeId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BeaViewRow] = new Read[BeaViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (AddressId.get, Nullability.NoNulls), - (AddresstypeId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BeaViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - addressid = AddressId.get.unsafeGetNonNullable(rs, i + 2), - addresstypeid = AddresstypeId.get.unsafeGetNonNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[BeaViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(AddresstypeId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BeaViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + addressid = arr(2).asInstanceOf[AddressId], + addresstypeid = arr(3).asInstanceOf[AddresstypeId], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bec/BecViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bec/BecViewRow.scala index dcb3aed8b2..c666c956bd 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bec/BecViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/bec/BecViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.person.contacttype.ContacttypeId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.bec */ case class BecViewRow( @@ -36,22 +34,21 @@ case class BecViewRow( object BecViewRow { implicit lazy val decoder: Decoder[BecViewRow] = Decoder.forProduct6[BecViewRow, BusinessentityId, BusinessentityId, BusinessentityId, ContacttypeId, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate")(BecViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, BusinessentityId.decoder, ContacttypeId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BecViewRow] = Encoder.forProduct6[BecViewRow, BusinessentityId, BusinessentityId, BusinessentityId, ContacttypeId, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.personid, x.contacttypeid, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, BusinessentityId.encoder, ContacttypeId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BecViewRow] = new Read[BecViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (ContacttypeId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BecViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - personid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 2), - contacttypeid = ContacttypeId.get.unsafeGetNonNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[BecViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(ContacttypeId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BecViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + personid = arr(2).asInstanceOf[BusinessentityId], + contacttypeid = arr(3).asInstanceOf[ContacttypeId], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/cr/CrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/cr/CrViewRow.scala index 3d97d74142..0f92446336 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/cr/CrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/cr/CrViewRow.scala @@ -10,11 +10,9 @@ package cr import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.countryregion.CountryregionId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.cr */ case class CrViewRow( @@ -29,16 +27,15 @@ case class CrViewRow( object CrViewRow { implicit lazy val decoder: Decoder[CrViewRow] = Decoder.forProduct3[CrViewRow, CountryregionId, Name, TypoLocalDateTime]("countryregioncode", "name", "modifieddate")(CrViewRow.apply)(CountryregionId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CrViewRow] = Encoder.forProduct3[CrViewRow, CountryregionId, Name, TypoLocalDateTime]("countryregioncode", "name", "modifieddate")(x => (x.countryregioncode, x.name, x.modifieddate))(CountryregionId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CrViewRow] = new Read[CrViewRow]( - gets = List( - (CountryregionId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CrViewRow( - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[CrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CrViewRow( + countryregioncode = arr(0).asInstanceOf[CountryregionId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/ct/CtViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/ct/CtViewRow.scala index 8dc7242c3a..68bf995340 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/ct/CtViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/ct/CtViewRow.scala @@ -10,11 +10,9 @@ package ct import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.contacttype.ContacttypeId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.ct */ case class CtViewRow( @@ -31,18 +29,17 @@ case class CtViewRow( object CtViewRow { implicit lazy val decoder: Decoder[CtViewRow] = Decoder.forProduct4[CtViewRow, ContacttypeId, ContacttypeId, Name, TypoLocalDateTime]("id", "contacttypeid", "name", "modifieddate")(CtViewRow.apply)(ContacttypeId.decoder, ContacttypeId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CtViewRow] = Encoder.forProduct4[CtViewRow, ContacttypeId, ContacttypeId, Name, TypoLocalDateTime]("id", "contacttypeid", "name", "modifieddate")(x => (x.id, x.contacttypeid, x.name, x.modifieddate))(ContacttypeId.encoder, ContacttypeId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CtViewRow] = new Read[CtViewRow]( - gets = List( - (ContacttypeId.get, Nullability.NoNulls), - (ContacttypeId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CtViewRow( - id = ContacttypeId.get.unsafeGetNonNullable(rs, i + 0), - contacttypeid = ContacttypeId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[CtViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ContacttypeId.get).asInstanceOf[Read[Any]], + new Read.Single(ContacttypeId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CtViewRow( + id = arr(0).asInstanceOf[ContacttypeId], + contacttypeid = arr(1).asInstanceOf[ContacttypeId], + name = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/e/EViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/e/EViewRow.scala index 3b1dcbd913..1811a7a8c1 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/e/EViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/e/EViewRow.scala @@ -10,12 +10,10 @@ package e import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.e */ case class EViewRow( @@ -36,22 +34,21 @@ case class EViewRow( object EViewRow { implicit lazy val decoder: Decoder[EViewRow] = Decoder.forProduct6[EViewRow, Int, BusinessentityId, Int, Option[/* max 50 chars */ String], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate")(EViewRow.apply)(Decoder.decodeInt, BusinessentityId.decoder, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeString), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[EViewRow] = Encoder.forProduct6[EViewRow, Int, BusinessentityId, Int, Option[/* max 50 chars */ String], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.emailaddressid, x.emailaddress, x.rowguid, x.modifieddate))(Encoder.encodeInt, BusinessentityId.encoder, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeString), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[EViewRow] = new Read[EViewRow]( - gets = List( - (Meta.IntMeta.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => EViewRow( - id = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - emailaddressid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[EViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EViewRow( + id = arr(0).asInstanceOf[Int], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + emailaddressid = arr(2).asInstanceOf[Int], + emailaddress = arr(3).asInstanceOf[Option[/* max 50 chars */ String]], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/p/PViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/p/PViewRow.scala index 77adccc9b7..cafa1eca81 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/p/PViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/p/PViewRow.scala @@ -14,12 +14,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.NameStyle import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.p */ case class PViewRow( @@ -56,38 +54,37 @@ case class PViewRow( object PViewRow { implicit lazy val decoder: Decoder[PViewRow] = Decoder.forProduct14[PViewRow, BusinessentityId, BusinessentityId, /* bpchar, max 2 chars */ String, NameStyle, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Int, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate")(PViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, Decoder.decodeString, NameStyle.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt, Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PViewRow] = Encoder.forProduct14[PViewRow, BusinessentityId, BusinessentityId, /* bpchar, max 2 chars */ String, NameStyle, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Int, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.persontype, x.namestyle, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.emailpromotion, x.additionalcontactinfo, x.demographics, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, Encoder.encodeString, NameStyle.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt, Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PViewRow] = new Read[PViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (NameStyle.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - persontype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - namestyle = NameStyle.get.unsafeGetNonNullable(rs, i + 3), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 5), - middlename = Name.get.unsafeGetNullable(rs, i + 6), - lastname = Name.get.unsafeGetNonNullable(rs, i + 7), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 9), - additionalcontactinfo = TypoXml.get.unsafeGetNullable(rs, i + 10), - demographics = TypoXml.get.unsafeGetNullable(rs, i + 11), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 12), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 13) + implicit lazy val read: Read[PViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(NameStyle.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + persontype = arr(2).asInstanceOf[/* bpchar, max 2 chars */ String], + namestyle = arr(3).asInstanceOf[NameStyle], + title = arr(4).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(5).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(6).asInstanceOf[Option[Name]], + lastname = arr(7).asInstanceOf[Name], + suffix = arr(8).asInstanceOf[Option[/* max 10 chars */ String]], + emailpromotion = arr(9).asInstanceOf[Int], + additionalcontactinfo = arr(10).asInstanceOf[Option[TypoXml]], + demographics = arr(11).asInstanceOf[Option[TypoXml]], + rowguid = arr(12).asInstanceOf[TypoUUID], + modifieddate = arr(13).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pa/PaViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pa/PaViewRow.scala index 1dc946553f..20b9ded310 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pa/PaViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pa/PaViewRow.scala @@ -10,12 +10,10 @@ package pa import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.pa */ case class PaViewRow( @@ -36,22 +34,21 @@ case class PaViewRow( object PaViewRow { implicit lazy val decoder: Decoder[PaViewRow] = Decoder.forProduct6[PaViewRow, BusinessentityId, BusinessentityId, /* max 128 chars */ String, /* max 10 chars */ String, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate")(PaViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, Decoder.decodeString, Decoder.decodeString, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PaViewRow] = Encoder.forProduct6[PaViewRow, BusinessentityId, BusinessentityId, /* max 128 chars */ String, /* max 10 chars */ String, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.passwordhash, x.passwordsalt, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, Encoder.encodeString, Encoder.encodeString, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PaViewRow] = new Read[PaViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PaViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - passwordhash = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - passwordsalt = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[PaViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PaViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + passwordhash = arr(2).asInstanceOf[/* max 128 chars */ String], + passwordsalt = arr(3).asInstanceOf[/* max 10 chars */ String], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pnt/PntViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pnt/PntViewRow.scala index 5f5f2f5b62..2fc2e9d608 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pnt/PntViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pnt/PntViewRow.scala @@ -10,11 +10,9 @@ package pnt import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.phonenumbertype.PhonenumbertypeId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.pnt */ case class PntViewRow( @@ -31,18 +29,17 @@ case class PntViewRow( object PntViewRow { implicit lazy val decoder: Decoder[PntViewRow] = Decoder.forProduct4[PntViewRow, PhonenumbertypeId, PhonenumbertypeId, Name, TypoLocalDateTime]("id", "phonenumbertypeid", "name", "modifieddate")(PntViewRow.apply)(PhonenumbertypeId.decoder, PhonenumbertypeId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PntViewRow] = Encoder.forProduct4[PntViewRow, PhonenumbertypeId, PhonenumbertypeId, Name, TypoLocalDateTime]("id", "phonenumbertypeid", "name", "modifieddate")(x => (x.id, x.phonenumbertypeid, x.name, x.modifieddate))(PhonenumbertypeId.encoder, PhonenumbertypeId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PntViewRow] = new Read[PntViewRow]( - gets = List( - (PhonenumbertypeId.get, Nullability.NoNulls), - (PhonenumbertypeId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PntViewRow( - id = PhonenumbertypeId.get.unsafeGetNonNullable(rs, i + 0), - phonenumbertypeid = PhonenumbertypeId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PntViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PhonenumbertypeId.get).asInstanceOf[Read[Any]], + new Read.Single(PhonenumbertypeId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PntViewRow( + id = arr(0).asInstanceOf[PhonenumbertypeId], + phonenumbertypeid = arr(1).asInstanceOf[PhonenumbertypeId], + name = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pp/PpViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pp/PpViewRow.scala index de1e959dcc..9f04485cf4 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pp/PpViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/pp/PpViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.businessentity.BusinessentityId import adventureworks.person.phonenumbertype.PhonenumbertypeId import adventureworks.public.Phone -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.pp */ case class PpViewRow( @@ -34,20 +32,19 @@ case class PpViewRow( object PpViewRow { implicit lazy val decoder: Decoder[PpViewRow] = Decoder.forProduct5[PpViewRow, BusinessentityId, BusinessentityId, Phone, PhonenumbertypeId, TypoLocalDateTime]("id", "businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate")(PpViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, Phone.decoder, PhonenumbertypeId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PpViewRow] = Encoder.forProduct5[PpViewRow, BusinessentityId, BusinessentityId, Phone, PhonenumbertypeId, TypoLocalDateTime]("id", "businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate")(x => (x.id, x.businessentityid, x.phonenumber, x.phonenumbertypeid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, Phone.encoder, PhonenumbertypeId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PpViewRow] = new Read[PpViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Phone.get, Nullability.NoNulls), - (PhonenumbertypeId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PpViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - phonenumber = Phone.get.unsafeGetNonNullable(rs, i + 2), - phonenumbertypeid = PhonenumbertypeId.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[PpViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Phone.get).asInstanceOf[Read[Any]], + new Read.Single(PhonenumbertypeId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PpViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + phonenumber = arr(2).asInstanceOf[Phone], + phonenumbertypeid = arr(3).asInstanceOf[PhonenumbertypeId], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/sp/SpViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/sp/SpViewRow.scala index 5970915c91..c35b89024f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/sp/SpViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pe/sp/SpViewRow.scala @@ -14,12 +14,10 @@ import adventureworks.person.stateprovince.StateprovinceId import adventureworks.public.Flag import adventureworks.public.Name import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pe.sp */ case class SpViewRow( @@ -46,28 +44,27 @@ case class SpViewRow( object SpViewRow { implicit lazy val decoder: Decoder[SpViewRow] = Decoder.forProduct9[SpViewRow, StateprovinceId, StateprovinceId, /* bpchar, max 3 chars */ String, CountryregionId, Flag, Name, SalesterritoryId, TypoUUID, TypoLocalDateTime]("id", "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate")(SpViewRow.apply)(StateprovinceId.decoder, StateprovinceId.decoder, Decoder.decodeString, CountryregionId.decoder, Flag.decoder, Name.decoder, SalesterritoryId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SpViewRow] = Encoder.forProduct9[SpViewRow, StateprovinceId, StateprovinceId, /* bpchar, max 3 chars */ String, CountryregionId, Flag, Name, SalesterritoryId, TypoUUID, TypoLocalDateTime]("id", "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate")(x => (x.id, x.stateprovinceid, x.stateprovincecode, x.countryregioncode, x.isonlystateprovinceflag, x.name, x.territoryid, x.rowguid, x.modifieddate))(StateprovinceId.encoder, StateprovinceId.encoder, Encoder.encodeString, CountryregionId.encoder, Flag.encoder, Name.encoder, SalesterritoryId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SpViewRow] = new Read[SpViewRow]( - gets = List( - (StateprovinceId.get, Nullability.NoNulls), - (StateprovinceId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (CountryregionId.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SpViewRow( - id = StateprovinceId.get.unsafeGetNonNullable(rs, i + 0), - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 1), - stateprovincecode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 3), - isonlystateprovinceflag = Flag.get.unsafeGetNonNullable(rs, i + 4), - name = Name.get.unsafeGetNonNullable(rs, i + 5), - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 6), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[SpViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SpViewRow( + id = arr(0).asInstanceOf[StateprovinceId], + stateprovinceid = arr(1).asInstanceOf[StateprovinceId], + stateprovincecode = arr(2).asInstanceOf[/* bpchar, max 3 chars */ String], + countryregioncode = arr(3).asInstanceOf[CountryregionId], + isonlystateprovinceflag = arr(4).asInstanceOf[Flag], + name = arr(5).asInstanceOf[Name], + territoryid = arr(6).asInstanceOf[SalesterritoryId], + rowguid = arr(7).asInstanceOf[TypoUUID], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRepoImpl.scala index 56a6023325..2600efbd69 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRepoImpl.scala @@ -32,36 +32,36 @@ class AddressRepoImpl extends AddressRepo { DeleteBuilder(""""person"."address"""", AddressFields.structure) } override def deleteById(addressid: AddressId): ConnectionIO[Boolean] = { - sql"""delete from "person"."address" where "addressid" = ${fromWrite(addressid)(Write.fromPut(AddressId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."address" where "addressid" = ${fromWrite(addressid)(new Write.Single(AddressId.put))}""".update.run.map(_ > 0) } override def deleteByIds(addressids: Array[AddressId]): ConnectionIO[Int] = { sql"""delete from "person"."address" where "addressid" = ANY(${addressids})""".update.run } override def insert(unsaved: AddressRow): ConnectionIO[AddressRow] = { sql"""insert into "person"."address"("addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate") - values (${fromWrite(unsaved.addressid)(Write.fromPut(AddressId.put))}::int4, ${fromWrite(unsaved.addressline1)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.addressline2)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.city)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, ${fromWrite(unsaved.postalcode)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.spatiallocation)(Write.fromPutOption(TypoBytea.put))}::bytea, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.addressid)(new Write.Single(AddressId.put))}::int4, ${fromWrite(unsaved.addressline1)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.addressline2)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.city)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, ${fromWrite(unsaved.postalcode)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.spatiallocation)(new Write.SingleOpt(TypoBytea.put))}::bytea, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate"::text """.query(using AddressRow.read).unique } override def insert(unsaved: AddressRowUnsaved): ConnectionIO[AddressRow] = { val fs = List( - Some((Fragment.const0(s""""addressline1""""), fr"${fromWrite(unsaved.addressline1)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""addressline2""""), fr"${fromWrite(unsaved.addressline2)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""city""""), fr"${fromWrite(unsaved.city)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""stateprovinceid""""), fr"${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4")), - Some((Fragment.const0(s""""postalcode""""), fr"${fromWrite(unsaved.postalcode)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""spatiallocation""""), fr"${fromWrite(unsaved.spatiallocation)(Write.fromPutOption(TypoBytea.put))}::bytea")), + Some((Fragment.const0(s""""addressline1""""), fr"${fromWrite(unsaved.addressline1)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""addressline2""""), fr"${fromWrite(unsaved.addressline2)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""city""""), fr"${fromWrite(unsaved.city)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""stateprovinceid""""), fr"${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4")), + Some((Fragment.const0(s""""postalcode""""), fr"${fromWrite(unsaved.postalcode)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""spatiallocation""""), fr"${fromWrite(unsaved.spatiallocation)(new Write.SingleOpt(TypoBytea.put))}::bytea")), unsaved.addressid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""addressid""""), fr"${fromWrite(value: AddressId)(Write.fromPut(AddressId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""addressid""""), fr"${fromWrite(value: AddressId)(new Write.Single(AddressId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -93,7 +93,7 @@ class AddressRepoImpl extends AddressRepo { sql"""select "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate"::text from "person"."address"""".query(using AddressRow.read).stream } override def selectById(addressid: AddressId): ConnectionIO[Option[AddressRow]] = { - sql"""select "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate"::text from "person"."address" where "addressid" = ${fromWrite(addressid)(Write.fromPut(AddressId.put))}""".query(using AddressRow.read).option + sql"""select "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate"::text from "person"."address" where "addressid" = ${fromWrite(addressid)(new Write.Single(AddressId.put))}""".query(using AddressRow.read).option } override def selectByIds(addressids: Array[AddressId]): Stream[ConnectionIO, AddressRow] = { sql"""select "addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate"::text from "person"."address" where "addressid" = ANY(${addressids})""".query(using AddressRow.read).stream @@ -110,15 +110,15 @@ class AddressRepoImpl extends AddressRepo { override def update(row: AddressRow): ConnectionIO[Boolean] = { val addressid = row.addressid sql"""update "person"."address" - set "addressline1" = ${fromWrite(row.addressline1)(Write.fromPut(Meta.StringMeta.put))}, - "addressline2" = ${fromWrite(row.addressline2)(Write.fromPutOption(Meta.StringMeta.put))}, - "city" = ${fromWrite(row.city)(Write.fromPut(Meta.StringMeta.put))}, - "stateprovinceid" = ${fromWrite(row.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, - "postalcode" = ${fromWrite(row.postalcode)(Write.fromPut(Meta.StringMeta.put))}, - "spatiallocation" = ${fromWrite(row.spatiallocation)(Write.fromPutOption(TypoBytea.put))}::bytea, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "addressid" = ${fromWrite(addressid)(Write.fromPut(AddressId.put))}""" + set "addressline1" = ${fromWrite(row.addressline1)(new Write.Single(Meta.StringMeta.put))}, + "addressline2" = ${fromWrite(row.addressline2)(new Write.SingleOpt(Meta.StringMeta.put))}, + "city" = ${fromWrite(row.city)(new Write.Single(Meta.StringMeta.put))}, + "stateprovinceid" = ${fromWrite(row.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, + "postalcode" = ${fromWrite(row.postalcode)(new Write.Single(Meta.StringMeta.put))}, + "spatiallocation" = ${fromWrite(row.spatiallocation)(new Write.SingleOpt(TypoBytea.put))}::bytea, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "addressid" = ${fromWrite(addressid)(new Write.Single(AddressId.put))}""" .update .run .map(_ > 0) @@ -126,15 +126,15 @@ class AddressRepoImpl extends AddressRepo { override def upsert(unsaved: AddressRow): ConnectionIO[AddressRow] = { sql"""insert into "person"."address"("addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.addressid)(Write.fromPut(AddressId.put))}::int4, - ${fromWrite(unsaved.addressline1)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.addressline2)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.city)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, - ${fromWrite(unsaved.postalcode)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.spatiallocation)(Write.fromPutOption(TypoBytea.put))}::bytea, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.addressid)(new Write.Single(AddressId.put))}::int4, + ${fromWrite(unsaved.addressline1)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.addressline2)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.city)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, + ${fromWrite(unsaved.postalcode)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.spatiallocation)(new Write.SingleOpt(TypoBytea.put))}::bytea, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("addressid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRow.scala index e025c97675..ae06b485be 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/address/AddressRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoBytea import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.stateprovince.StateprovinceId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.address Street address information for customers, employees, and vendors. @@ -54,30 +52,29 @@ case class AddressRow( object AddressRow { implicit lazy val decoder: Decoder[AddressRow] = Decoder.forProduct9[AddressRow, AddressId, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, StateprovinceId, /* max 15 chars */ String, Option[TypoBytea], TypoUUID, TypoLocalDateTime]("addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate")(AddressRow.apply)(AddressId.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, StateprovinceId.decoder, Decoder.decodeString, Decoder.decodeOption(TypoBytea.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[AddressRow] = Encoder.forProduct9[AddressRow, AddressId, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, StateprovinceId, /* max 15 chars */ String, Option[TypoBytea], TypoUUID, TypoLocalDateTime]("addressid", "addressline1", "addressline2", "city", "stateprovinceid", "postalcode", "spatiallocation", "rowguid", "modifieddate")(x => (x.addressid, x.addressline1, x.addressline2, x.city, x.stateprovinceid, x.postalcode, x.spatiallocation, x.rowguid, x.modifieddate))(AddressId.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, StateprovinceId.encoder, Encoder.encodeString, Encoder.encodeOption(TypoBytea.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[AddressRow] = new Read[AddressRow]( - gets = List( - (AddressId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (StateprovinceId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoBytea.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => AddressRow( - addressid = AddressId.get.unsafeGetNonNullable(rs, i + 0), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 4), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - spatiallocation = TypoBytea.get.unsafeGetNullable(rs, i + 6), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[AddressRow] = new Read.CompositeOfInstances(Array( + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + AddressRow( + addressid = arr(0).asInstanceOf[AddressId], + addressline1 = arr(1).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(2).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(3).asInstanceOf[/* max 30 chars */ String], + stateprovinceid = arr(4).asInstanceOf[StateprovinceId], + postalcode = arr(5).asInstanceOf[/* max 15 chars */ String], + spatiallocation = arr(6).asInstanceOf[Option[TypoBytea]], + rowguid = arr(7).asInstanceOf[TypoUUID], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[AddressRow] = Text.instance[AddressRow]{ (row, sb) => AddressId.text.unsafeEncode(row.addressid, sb) sb.append(Text.DELIMETER) @@ -97,38 +94,16 @@ object AddressRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[AddressRow] = new Write[AddressRow]( - puts = List((AddressId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.NoNulls), - (StateprovinceId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoBytea.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.addressid, x.addressline1, x.addressline2, x.city, x.stateprovinceid, x.postalcode, x.spatiallocation, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - AddressId.put.unsafeSetNonNullable(rs, i + 0, a.addressid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.addressline1) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.addressline2) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 3, a.city) - StateprovinceId.put.unsafeSetNonNullable(rs, i + 4, a.stateprovinceid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.postalcode) - TypoBytea.put.unsafeSetNullable(rs, i + 6, a.spatiallocation) - TypoUUID.put.unsafeSetNonNullable(rs, i + 7, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - AddressId.put.unsafeUpdateNonNullable(ps, i + 0, a.addressid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.addressline1) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.addressline2) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.city) - StateprovinceId.put.unsafeUpdateNonNullable(ps, i + 4, a.stateprovinceid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.postalcode) - TypoBytea.put.unsafeUpdateNullable(ps, i + 6, a.spatiallocation) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 7, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[AddressRow] = new Write.Composite[AddressRow]( + List(new Write.Single(AddressId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put), + new Write.Single(StateprovinceId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoBytea.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.addressid, a.addressline1, a.addressline2, a.city, a.stateprovinceid, a.postalcode, a.spatiallocation, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRepoImpl.scala index e3bb533bb2..1b161d8296 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRepoImpl.scala @@ -30,31 +30,31 @@ class AddresstypeRepoImpl extends AddresstypeRepo { DeleteBuilder(""""person"."addresstype"""", AddresstypeFields.structure) } override def deleteById(addresstypeid: AddresstypeId): ConnectionIO[Boolean] = { - sql"""delete from "person"."addresstype" where "addresstypeid" = ${fromWrite(addresstypeid)(Write.fromPut(AddresstypeId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."addresstype" where "addresstypeid" = ${fromWrite(addresstypeid)(new Write.Single(AddresstypeId.put))}""".update.run.map(_ > 0) } override def deleteByIds(addresstypeids: Array[AddresstypeId]): ConnectionIO[Int] = { sql"""delete from "person"."addresstype" where "addresstypeid" = ANY(${addresstypeids})""".update.run } override def insert(unsaved: AddresstypeRow): ConnectionIO[AddresstypeRow] = { sql"""insert into "person"."addresstype"("addresstypeid", "name", "rowguid", "modifieddate") - values (${fromWrite(unsaved.addresstypeid)(Write.fromPut(AddresstypeId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.addresstypeid)(new Write.Single(AddresstypeId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "addresstypeid", "name", "rowguid", "modifieddate"::text """.query(using AddresstypeRow.read).unique } override def insert(unsaved: AddresstypeRowUnsaved): ConnectionIO[AddresstypeRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.addresstypeid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""addresstypeid""""), fr"${fromWrite(value: AddresstypeId)(Write.fromPut(AddresstypeId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""addresstypeid""""), fr"${fromWrite(value: AddresstypeId)(new Write.Single(AddresstypeId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class AddresstypeRepoImpl extends AddresstypeRepo { sql"""select "addresstypeid", "name", "rowguid", "modifieddate"::text from "person"."addresstype"""".query(using AddresstypeRow.read).stream } override def selectById(addresstypeid: AddresstypeId): ConnectionIO[Option[AddresstypeRow]] = { - sql"""select "addresstypeid", "name", "rowguid", "modifieddate"::text from "person"."addresstype" where "addresstypeid" = ${fromWrite(addresstypeid)(Write.fromPut(AddresstypeId.put))}""".query(using AddresstypeRow.read).option + sql"""select "addresstypeid", "name", "rowguid", "modifieddate"::text from "person"."addresstype" where "addresstypeid" = ${fromWrite(addresstypeid)(new Write.Single(AddresstypeId.put))}""".query(using AddresstypeRow.read).option } override def selectByIds(addresstypeids: Array[AddresstypeId]): Stream[ConnectionIO, AddresstypeRow] = { sql"""select "addresstypeid", "name", "rowguid", "modifieddate"::text from "person"."addresstype" where "addresstypeid" = ANY(${addresstypeids})""".query(using AddresstypeRow.read).stream @@ -103,10 +103,10 @@ class AddresstypeRepoImpl extends AddresstypeRepo { override def update(row: AddresstypeRow): ConnectionIO[Boolean] = { val addresstypeid = row.addresstypeid sql"""update "person"."addresstype" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "addresstypeid" = ${fromWrite(addresstypeid)(Write.fromPut(AddresstypeId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "addresstypeid" = ${fromWrite(addresstypeid)(new Write.Single(AddresstypeId.put))}""" .update .run .map(_ > 0) @@ -114,10 +114,10 @@ class AddresstypeRepoImpl extends AddresstypeRepo { override def upsert(unsaved: AddresstypeRow): ConnectionIO[AddresstypeRow] = { sql"""insert into "person"."addresstype"("addresstypeid", "name", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.addresstypeid)(Write.fromPut(AddresstypeId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.addresstypeid)(new Write.Single(AddresstypeId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("addresstypeid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRow.scala index cbc276eb14..e557296e3a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/addresstype/AddresstypeRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.addresstype Types of addresses stored in the Address table. @@ -41,20 +39,19 @@ case class AddresstypeRow( object AddresstypeRow { implicit lazy val decoder: Decoder[AddresstypeRow] = Decoder.forProduct4[AddresstypeRow, AddresstypeId, Name, TypoUUID, TypoLocalDateTime]("addresstypeid", "name", "rowguid", "modifieddate")(AddresstypeRow.apply)(AddresstypeId.decoder, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[AddresstypeRow] = Encoder.forProduct4[AddresstypeRow, AddresstypeId, Name, TypoUUID, TypoLocalDateTime]("addresstypeid", "name", "rowguid", "modifieddate")(x => (x.addresstypeid, x.name, x.rowguid, x.modifieddate))(AddresstypeId.encoder, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[AddresstypeRow] = new Read[AddresstypeRow]( - gets = List( - (AddresstypeId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => AddresstypeRow( - addresstypeid = AddresstypeId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[AddresstypeRow] = new Read.CompositeOfInstances(Array( + new Read.Single(AddresstypeId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + AddresstypeRow( + addresstypeid = arr(0).asInstanceOf[AddresstypeId], + name = arr(1).asInstanceOf[Name], + rowguid = arr(2).asInstanceOf[TypoUUID], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[AddresstypeRow] = Text.instance[AddresstypeRow]{ (row, sb) => AddresstypeId.text.unsafeEncode(row.addresstypeid, sb) sb.append(Text.DELIMETER) @@ -64,23 +61,11 @@ object AddresstypeRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[AddresstypeRow] = new Write[AddresstypeRow]( - puts = List((AddresstypeId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.addresstypeid, x.name, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - AddresstypeId.put.unsafeSetNonNullable(rs, i + 0, a.addresstypeid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoUUID.put.unsafeSetNonNullable(rs, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - AddresstypeId.put.unsafeUpdateNonNullable(ps, i + 0, a.addresstypeid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[AddresstypeRow] = new Write.Composite[AddresstypeRow]( + List(new Write.Single(AddresstypeId.put), + new Write.Single(Name.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.addresstypeid, a.name, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRepoImpl.scala index 1b06050e75..93af8992e0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRepoImpl.scala @@ -29,14 +29,14 @@ class BusinessentityRepoImpl extends BusinessentityRepo { DeleteBuilder(""""person"."businessentity"""", BusinessentityFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "person"."businessentity" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."businessentity" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "person"."businessentity" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: BusinessentityRow): ConnectionIO[BusinessentityRow] = { sql"""insert into "person"."businessentity"("businessentityid", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "rowguid", "modifieddate"::text """.query(using BusinessentityRow.read).unique } @@ -44,15 +44,15 @@ class BusinessentityRepoImpl extends BusinessentityRepo { val fs = List( unsaved.businessentityid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(value: BusinessentityId)(Write.fromPut(BusinessentityId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(value: BusinessentityId)(new Write.Single(BusinessentityId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -84,7 +84,7 @@ class BusinessentityRepoImpl extends BusinessentityRepo { sql"""select "businessentityid", "rowguid", "modifieddate"::text from "person"."businessentity"""".query(using BusinessentityRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[BusinessentityRow]] = { - sql"""select "businessentityid", "rowguid", "modifieddate"::text from "person"."businessentity" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using BusinessentityRow.read).option + sql"""select "businessentityid", "rowguid", "modifieddate"::text from "person"."businessentity" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using BusinessentityRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, BusinessentityRow] = { sql"""select "businessentityid", "rowguid", "modifieddate"::text from "person"."businessentity" where "businessentityid" = ANY(${businessentityids})""".query(using BusinessentityRow.read).stream @@ -101,9 +101,9 @@ class BusinessentityRepoImpl extends BusinessentityRepo { override def update(row: BusinessentityRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "person"."businessentity" - set "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -111,9 +111,9 @@ class BusinessentityRepoImpl extends BusinessentityRepo { override def upsert(unsaved: BusinessentityRow): ConnectionIO[BusinessentityRow] = { sql"""insert into "person"."businessentity"("businessentityid", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRow.scala index b6f78424d5..dca619e455 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentity/BusinessentityRow.scala @@ -10,13 +10,11 @@ package businessentity import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.businessentity Source of the ID that connects vendors, customers, and employees with address and contact information. @@ -38,18 +36,17 @@ case class BusinessentityRow( object BusinessentityRow { implicit lazy val decoder: Decoder[BusinessentityRow] = Decoder.forProduct3[BusinessentityRow, BusinessentityId, TypoUUID, TypoLocalDateTime]("businessentityid", "rowguid", "modifieddate")(BusinessentityRow.apply)(BusinessentityId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BusinessentityRow] = Encoder.forProduct3[BusinessentityRow, BusinessentityId, TypoUUID, TypoLocalDateTime]("businessentityid", "rowguid", "modifieddate")(x => (x.businessentityid, x.rowguid, x.modifieddate))(BusinessentityId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BusinessentityRow] = new Read[BusinessentityRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BusinessentityRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[BusinessentityRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BusinessentityRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + rowguid = arr(1).asInstanceOf[TypoUUID], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[BusinessentityRow] = Text.instance[BusinessentityRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object BusinessentityRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[BusinessentityRow] = new Write[BusinessentityRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - TypoUUID.put.unsafeSetNonNullable(rs, i + 1, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 1, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[BusinessentityRow] = new Write.Composite[BusinessentityRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRepoImpl.scala index 4d51bd8899..b2bdb49ca7 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRepoImpl.scala @@ -32,7 +32,7 @@ class BusinessentityaddressRepoImpl extends BusinessentityaddressRepo { DeleteBuilder(""""person"."businessentityaddress"""", BusinessentityaddressFields.structure) } override def deleteById(compositeId: BusinessentityaddressId): ConnectionIO[Boolean] = { - sql"""delete from "person"."businessentityaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "addressid" = ${fromWrite(compositeId.addressid)(Write.fromPut(AddressId.put))} AND "addresstypeid" = ${fromWrite(compositeId.addresstypeid)(Write.fromPut(AddresstypeId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."businessentityaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "addressid" = ${fromWrite(compositeId.addressid)(new Write.Single(AddressId.put))} AND "addresstypeid" = ${fromWrite(compositeId.addresstypeid)(new Write.Single(AddresstypeId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[BusinessentityaddressId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -47,22 +47,22 @@ class BusinessentityaddressRepoImpl extends BusinessentityaddressRepo { } override def insert(unsaved: BusinessentityaddressRow): ConnectionIO[BusinessentityaddressRow] = { sql"""insert into "person"."businessentityaddress"("businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.addressid)(Write.fromPut(AddressId.put))}::int4, ${fromWrite(unsaved.addresstypeid)(Write.fromPut(AddresstypeId.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.addressid)(new Write.Single(AddressId.put))}::int4, ${fromWrite(unsaved.addresstypeid)(new Write.Single(AddresstypeId.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate"::text """.query(using BusinessentityaddressRow.read).unique } override def insert(unsaved: BusinessentityaddressRowUnsaved): ConnectionIO[BusinessentityaddressRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""addressid""""), fr"${fromWrite(unsaved.addressid)(Write.fromPut(AddressId.put))}::int4")), - Some((Fragment.const0(s""""addresstypeid""""), fr"${fromWrite(unsaved.addresstypeid)(Write.fromPut(AddresstypeId.put))}::int4")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""addressid""""), fr"${fromWrite(unsaved.addressid)(new Write.Single(AddressId.put))}::int4")), + Some((Fragment.const0(s""""addresstypeid""""), fr"${fromWrite(unsaved.addresstypeid)(new Write.Single(AddresstypeId.put))}::int4")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -94,7 +94,7 @@ class BusinessentityaddressRepoImpl extends BusinessentityaddressRepo { sql"""select "businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate"::text from "person"."businessentityaddress"""".query(using BusinessentityaddressRow.read).stream } override def selectById(compositeId: BusinessentityaddressId): ConnectionIO[Option[BusinessentityaddressRow]] = { - sql"""select "businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate"::text from "person"."businessentityaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "addressid" = ${fromWrite(compositeId.addressid)(Write.fromPut(AddressId.put))} AND "addresstypeid" = ${fromWrite(compositeId.addresstypeid)(Write.fromPut(AddresstypeId.put))}""".query(using BusinessentityaddressRow.read).option + sql"""select "businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate"::text from "person"."businessentityaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "addressid" = ${fromWrite(compositeId.addressid)(new Write.Single(AddressId.put))} AND "addresstypeid" = ${fromWrite(compositeId.addresstypeid)(new Write.Single(AddresstypeId.put))}""".query(using BusinessentityaddressRow.read).option } override def selectByIds(compositeIds: Array[BusinessentityaddressId]): Stream[ConnectionIO, BusinessentityaddressRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -119,9 +119,9 @@ class BusinessentityaddressRepoImpl extends BusinessentityaddressRepo { override def update(row: BusinessentityaddressRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "person"."businessentityaddress" - set "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "addressid" = ${fromWrite(compositeId.addressid)(Write.fromPut(AddressId.put))} AND "addresstypeid" = ${fromWrite(compositeId.addresstypeid)(Write.fromPut(AddresstypeId.put))}""" + set "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "addressid" = ${fromWrite(compositeId.addressid)(new Write.Single(AddressId.put))} AND "addresstypeid" = ${fromWrite(compositeId.addresstypeid)(new Write.Single(AddresstypeId.put))}""" .update .run .map(_ > 0) @@ -129,11 +129,11 @@ class BusinessentityaddressRepoImpl extends BusinessentityaddressRepo { override def upsert(unsaved: BusinessentityaddressRow): ConnectionIO[BusinessentityaddressRow] = { sql"""insert into "person"."businessentityaddress"("businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.addressid)(Write.fromPut(AddressId.put))}::int4, - ${fromWrite(unsaved.addresstypeid)(Write.fromPut(AddresstypeId.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.addressid)(new Write.Single(AddressId.put))}::int4, + ${fromWrite(unsaved.addresstypeid)(new Write.Single(AddresstypeId.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "addressid", "addresstypeid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRow.scala index 0071d0b70a..afb5a02095 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentityaddress/BusinessentityaddressRow.scala @@ -13,13 +13,11 @@ import adventureworks.customtypes.TypoUUID import adventureworks.person.address.AddressId import adventureworks.person.addresstype.AddresstypeId import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.businessentityaddress Cross-reference table mapping customers, vendors, and employees to their addresses. @@ -50,22 +48,21 @@ object BusinessentityaddressRow { new BusinessentityaddressRow(compositeId.businessentityid, compositeId.addressid, compositeId.addresstypeid, rowguid, modifieddate) implicit lazy val decoder: Decoder[BusinessentityaddressRow] = Decoder.forProduct5[BusinessentityaddressRow, BusinessentityId, AddressId, AddresstypeId, TypoUUID, TypoLocalDateTime]("businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate")(BusinessentityaddressRow.apply)(BusinessentityId.decoder, AddressId.decoder, AddresstypeId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BusinessentityaddressRow] = Encoder.forProduct5[BusinessentityaddressRow, BusinessentityId, AddressId, AddresstypeId, TypoUUID, TypoLocalDateTime]("businessentityid", "addressid", "addresstypeid", "rowguid", "modifieddate")(x => (x.businessentityid, x.addressid, x.addresstypeid, x.rowguid, x.modifieddate))(BusinessentityId.encoder, AddressId.encoder, AddresstypeId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BusinessentityaddressRow] = new Read[BusinessentityaddressRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (AddressId.get, Nullability.NoNulls), - (AddresstypeId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BusinessentityaddressRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - addressid = AddressId.get.unsafeGetNonNullable(rs, i + 1), - addresstypeid = AddresstypeId.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[BusinessentityaddressRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(AddresstypeId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BusinessentityaddressRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + addressid = arr(1).asInstanceOf[AddressId], + addresstypeid = arr(2).asInstanceOf[AddresstypeId], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[BusinessentityaddressRow] = Text.instance[BusinessentityaddressRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -77,26 +74,12 @@ object BusinessentityaddressRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[BusinessentityaddressRow] = new Write[BusinessentityaddressRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (AddressId.put, Nullability.NoNulls), - (AddresstypeId.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.addressid, x.addresstypeid, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - AddressId.put.unsafeSetNonNullable(rs, i + 1, a.addressid) - AddresstypeId.put.unsafeSetNonNullable(rs, i + 2, a.addresstypeid) - TypoUUID.put.unsafeSetNonNullable(rs, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - AddressId.put.unsafeUpdateNonNullable(ps, i + 1, a.addressid) - AddresstypeId.put.unsafeUpdateNonNullable(ps, i + 2, a.addresstypeid) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[BusinessentityaddressRow] = new Write.Composite[BusinessentityaddressRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(AddressId.put), + new Write.Single(AddresstypeId.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.addressid, a.addresstypeid, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRepoImpl.scala index 55850f0747..eba47fb609 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRepoImpl.scala @@ -31,7 +31,7 @@ class BusinessentitycontactRepoImpl extends BusinessentitycontactRepo { DeleteBuilder(""""person"."businessentitycontact"""", BusinessentitycontactFields.structure) } override def deleteById(compositeId: BusinessentitycontactId): ConnectionIO[Boolean] = { - sql"""delete from "person"."businessentitycontact" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "personid" = ${fromWrite(compositeId.personid)(Write.fromPut(BusinessentityId.put))} AND "contacttypeid" = ${fromWrite(compositeId.contacttypeid)(Write.fromPut(ContacttypeId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."businessentitycontact" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "personid" = ${fromWrite(compositeId.personid)(new Write.Single(BusinessentityId.put))} AND "contacttypeid" = ${fromWrite(compositeId.contacttypeid)(new Write.Single(ContacttypeId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[BusinessentitycontactId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -46,22 +46,22 @@ class BusinessentitycontactRepoImpl extends BusinessentitycontactRepo { } override def insert(unsaved: BusinessentitycontactRow): ConnectionIO[BusinessentitycontactRow] = { sql"""insert into "person"."businessentitycontact"("businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.personid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.contacttypeid)(Write.fromPut(ContacttypeId.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.personid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.contacttypeid)(new Write.Single(ContacttypeId.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate"::text """.query(using BusinessentitycontactRow.read).unique } override def insert(unsaved: BusinessentitycontactRowUnsaved): ConnectionIO[BusinessentitycontactRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""personid""""), fr"${fromWrite(unsaved.personid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""contacttypeid""""), fr"${fromWrite(unsaved.contacttypeid)(Write.fromPut(ContacttypeId.put))}::int4")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""personid""""), fr"${fromWrite(unsaved.personid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""contacttypeid""""), fr"${fromWrite(unsaved.contacttypeid)(new Write.Single(ContacttypeId.put))}::int4")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -93,7 +93,7 @@ class BusinessentitycontactRepoImpl extends BusinessentitycontactRepo { sql"""select "businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate"::text from "person"."businessentitycontact"""".query(using BusinessentitycontactRow.read).stream } override def selectById(compositeId: BusinessentitycontactId): ConnectionIO[Option[BusinessentitycontactRow]] = { - sql"""select "businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate"::text from "person"."businessentitycontact" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "personid" = ${fromWrite(compositeId.personid)(Write.fromPut(BusinessentityId.put))} AND "contacttypeid" = ${fromWrite(compositeId.contacttypeid)(Write.fromPut(ContacttypeId.put))}""".query(using BusinessentitycontactRow.read).option + sql"""select "businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate"::text from "person"."businessentitycontact" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "personid" = ${fromWrite(compositeId.personid)(new Write.Single(BusinessentityId.put))} AND "contacttypeid" = ${fromWrite(compositeId.contacttypeid)(new Write.Single(ContacttypeId.put))}""".query(using BusinessentitycontactRow.read).option } override def selectByIds(compositeIds: Array[BusinessentitycontactId]): Stream[ConnectionIO, BusinessentitycontactRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -118,9 +118,9 @@ class BusinessentitycontactRepoImpl extends BusinessentitycontactRepo { override def update(row: BusinessentitycontactRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "person"."businessentitycontact" - set "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "personid" = ${fromWrite(compositeId.personid)(Write.fromPut(BusinessentityId.put))} AND "contacttypeid" = ${fromWrite(compositeId.contacttypeid)(Write.fromPut(ContacttypeId.put))}""" + set "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "personid" = ${fromWrite(compositeId.personid)(new Write.Single(BusinessentityId.put))} AND "contacttypeid" = ${fromWrite(compositeId.contacttypeid)(new Write.Single(ContacttypeId.put))}""" .update .run .map(_ > 0) @@ -128,11 +128,11 @@ class BusinessentitycontactRepoImpl extends BusinessentitycontactRepo { override def upsert(unsaved: BusinessentitycontactRow): ConnectionIO[BusinessentitycontactRow] = { sql"""insert into "person"."businessentitycontact"("businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.personid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.contacttypeid)(Write.fromPut(ContacttypeId.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.personid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.contacttypeid)(new Write.Single(ContacttypeId.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "personid", "contacttypeid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRow.scala index 848a0fb869..9d55f867d0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/businessentitycontact/BusinessentitycontactRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.person.contacttype.ContacttypeId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.businessentitycontact Cross-reference table mapping stores, vendors, and employees to people @@ -49,22 +47,21 @@ object BusinessentitycontactRow { new BusinessentitycontactRow(compositeId.businessentityid, compositeId.personid, compositeId.contacttypeid, rowguid, modifieddate) implicit lazy val decoder: Decoder[BusinessentitycontactRow] = Decoder.forProduct5[BusinessentitycontactRow, BusinessentityId, BusinessentityId, ContacttypeId, TypoUUID, TypoLocalDateTime]("businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate")(BusinessentitycontactRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, ContacttypeId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BusinessentitycontactRow] = Encoder.forProduct5[BusinessentitycontactRow, BusinessentityId, BusinessentityId, ContacttypeId, TypoUUID, TypoLocalDateTime]("businessentityid", "personid", "contacttypeid", "rowguid", "modifieddate")(x => (x.businessentityid, x.personid, x.contacttypeid, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, ContacttypeId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BusinessentitycontactRow] = new Read[BusinessentitycontactRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (ContacttypeId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BusinessentitycontactRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - personid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - contacttypeid = ContacttypeId.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[BusinessentitycontactRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(ContacttypeId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BusinessentitycontactRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + personid = arr(1).asInstanceOf[BusinessentityId], + contacttypeid = arr(2).asInstanceOf[ContacttypeId], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[BusinessentitycontactRow] = Text.instance[BusinessentitycontactRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -76,26 +73,12 @@ object BusinessentitycontactRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[BusinessentitycontactRow] = new Write[BusinessentitycontactRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.NoNulls), - (ContacttypeId.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.personid, x.contacttypeid, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - BusinessentityId.put.unsafeSetNonNullable(rs, i + 1, a.personid) - ContacttypeId.put.unsafeSetNonNullable(rs, i + 2, a.contacttypeid) - TypoUUID.put.unsafeSetNonNullable(rs, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 1, a.personid) - ContacttypeId.put.unsafeUpdateNonNullable(ps, i + 2, a.contacttypeid) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[BusinessentitycontactRow] = new Write.Composite[BusinessentitycontactRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(BusinessentityId.put), + new Write.Single(ContacttypeId.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.personid, a.contacttypeid, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRepoImpl.scala index 6c41a3caea..80b740e446 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRepoImpl.scala @@ -29,27 +29,27 @@ class ContacttypeRepoImpl extends ContacttypeRepo { DeleteBuilder(""""person"."contacttype"""", ContacttypeFields.structure) } override def deleteById(contacttypeid: ContacttypeId): ConnectionIO[Boolean] = { - sql"""delete from "person"."contacttype" where "contacttypeid" = ${fromWrite(contacttypeid)(Write.fromPut(ContacttypeId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."contacttype" where "contacttypeid" = ${fromWrite(contacttypeid)(new Write.Single(ContacttypeId.put))}""".update.run.map(_ > 0) } override def deleteByIds(contacttypeids: Array[ContacttypeId]): ConnectionIO[Int] = { sql"""delete from "person"."contacttype" where "contacttypeid" = ANY(${contacttypeids})""".update.run } override def insert(unsaved: ContacttypeRow): ConnectionIO[ContacttypeRow] = { sql"""insert into "person"."contacttype"("contacttypeid", "name", "modifieddate") - values (${fromWrite(unsaved.contacttypeid)(Write.fromPut(ContacttypeId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.contacttypeid)(new Write.Single(ContacttypeId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "contacttypeid", "name", "modifieddate"::text """.query(using ContacttypeRow.read).unique } override def insert(unsaved: ContacttypeRowUnsaved): ConnectionIO[ContacttypeRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.contacttypeid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""contacttypeid""""), fr"${fromWrite(value: ContacttypeId)(Write.fromPut(ContacttypeId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""contacttypeid""""), fr"${fromWrite(value: ContacttypeId)(new Write.Single(ContacttypeId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -81,7 +81,7 @@ class ContacttypeRepoImpl extends ContacttypeRepo { sql"""select "contacttypeid", "name", "modifieddate"::text from "person"."contacttype"""".query(using ContacttypeRow.read).stream } override def selectById(contacttypeid: ContacttypeId): ConnectionIO[Option[ContacttypeRow]] = { - sql"""select "contacttypeid", "name", "modifieddate"::text from "person"."contacttype" where "contacttypeid" = ${fromWrite(contacttypeid)(Write.fromPut(ContacttypeId.put))}""".query(using ContacttypeRow.read).option + sql"""select "contacttypeid", "name", "modifieddate"::text from "person"."contacttype" where "contacttypeid" = ${fromWrite(contacttypeid)(new Write.Single(ContacttypeId.put))}""".query(using ContacttypeRow.read).option } override def selectByIds(contacttypeids: Array[ContacttypeId]): Stream[ConnectionIO, ContacttypeRow] = { sql"""select "contacttypeid", "name", "modifieddate"::text from "person"."contacttype" where "contacttypeid" = ANY(${contacttypeids})""".query(using ContacttypeRow.read).stream @@ -98,9 +98,9 @@ class ContacttypeRepoImpl extends ContacttypeRepo { override def update(row: ContacttypeRow): ConnectionIO[Boolean] = { val contacttypeid = row.contacttypeid sql"""update "person"."contacttype" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "contacttypeid" = ${fromWrite(contacttypeid)(Write.fromPut(ContacttypeId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "contacttypeid" = ${fromWrite(contacttypeid)(new Write.Single(ContacttypeId.put))}""" .update .run .map(_ > 0) @@ -108,9 +108,9 @@ class ContacttypeRepoImpl extends ContacttypeRepo { override def upsert(unsaved: ContacttypeRow): ConnectionIO[ContacttypeRow] = { sql"""insert into "person"."contacttype"("contacttypeid", "name", "modifieddate") values ( - ${fromWrite(unsaved.contacttypeid)(Write.fromPut(ContacttypeId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.contacttypeid)(new Write.Single(ContacttypeId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("contacttypeid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRow.scala index d50da8fef4..f74d54afad 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/contacttype/ContacttypeRow.scala @@ -10,13 +10,11 @@ package contacttype import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.contacttype Lookup table containing the types of business entity contacts. @@ -38,18 +36,17 @@ case class ContacttypeRow( object ContacttypeRow { implicit lazy val decoder: Decoder[ContacttypeRow] = Decoder.forProduct3[ContacttypeRow, ContacttypeId, Name, TypoLocalDateTime]("contacttypeid", "name", "modifieddate")(ContacttypeRow.apply)(ContacttypeId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ContacttypeRow] = Encoder.forProduct3[ContacttypeRow, ContacttypeId, Name, TypoLocalDateTime]("contacttypeid", "name", "modifieddate")(x => (x.contacttypeid, x.name, x.modifieddate))(ContacttypeId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ContacttypeRow] = new Read[ContacttypeRow]( - gets = List( - (ContacttypeId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ContacttypeRow( - contacttypeid = ContacttypeId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[ContacttypeRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ContacttypeId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ContacttypeRow( + contacttypeid = arr(0).asInstanceOf[ContacttypeId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ContacttypeRow] = Text.instance[ContacttypeRow]{ (row, sb) => ContacttypeId.text.unsafeEncode(row.contacttypeid, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object ContacttypeRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ContacttypeRow] = new Write[ContacttypeRow]( - puts = List((ContacttypeId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.contacttypeid, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - ContacttypeId.put.unsafeSetNonNullable(rs, i + 0, a.contacttypeid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ContacttypeId.put.unsafeUpdateNonNullable(ps, i + 0, a.contacttypeid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[ContacttypeRow] = new Write.Composite[ContacttypeRow]( + List(new Write.Single(ContacttypeId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.contacttypeid, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRepoImpl.scala index e503cbb9b3..7163726fcd 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRepoImpl.scala @@ -29,24 +29,24 @@ class CountryregionRepoImpl extends CountryregionRepo { DeleteBuilder(""""person"."countryregion"""", CountryregionFields.structure) } override def deleteById(countryregioncode: CountryregionId): ConnectionIO[Boolean] = { - sql"""delete from "person"."countryregion" where "countryregioncode" = ${fromWrite(countryregioncode)(Write.fromPut(CountryregionId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."countryregion" where "countryregioncode" = ${fromWrite(countryregioncode)(new Write.Single(CountryregionId.put))}""".update.run.map(_ > 0) } override def deleteByIds(countryregioncodes: Array[CountryregionId]): ConnectionIO[Int] = { sql"""delete from "person"."countryregion" where "countryregioncode" = ANY(${countryregioncodes})""".update.run } override def insert(unsaved: CountryregionRow): ConnectionIO[CountryregionRow] = { sql"""insert into "person"."countryregion"("countryregioncode", "name", "modifieddate") - values (${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "countryregioncode", "name", "modifieddate"::text """.query(using CountryregionRow.read).unique } override def insert(unsaved: CountryregionRowUnsaved): ConnectionIO[CountryregionRow] = { val fs = List( - Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -78,7 +78,7 @@ class CountryregionRepoImpl extends CountryregionRepo { sql"""select "countryregioncode", "name", "modifieddate"::text from "person"."countryregion"""".query(using CountryregionRow.read).stream } override def selectById(countryregioncode: CountryregionId): ConnectionIO[Option[CountryregionRow]] = { - sql"""select "countryregioncode", "name", "modifieddate"::text from "person"."countryregion" where "countryregioncode" = ${fromWrite(countryregioncode)(Write.fromPut(CountryregionId.put))}""".query(using CountryregionRow.read).option + sql"""select "countryregioncode", "name", "modifieddate"::text from "person"."countryregion" where "countryregioncode" = ${fromWrite(countryregioncode)(new Write.Single(CountryregionId.put))}""".query(using CountryregionRow.read).option } override def selectByIds(countryregioncodes: Array[CountryregionId]): Stream[ConnectionIO, CountryregionRow] = { sql"""select "countryregioncode", "name", "modifieddate"::text from "person"."countryregion" where "countryregioncode" = ANY(${countryregioncodes})""".query(using CountryregionRow.read).stream @@ -95,9 +95,9 @@ class CountryregionRepoImpl extends CountryregionRepo { override def update(row: CountryregionRow): ConnectionIO[Boolean] = { val countryregioncode = row.countryregioncode sql"""update "person"."countryregion" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "countryregioncode" = ${fromWrite(countryregioncode)(Write.fromPut(CountryregionId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "countryregioncode" = ${fromWrite(countryregioncode)(new Write.Single(CountryregionId.put))}""" .update .run .map(_ > 0) @@ -105,9 +105,9 @@ class CountryregionRepoImpl extends CountryregionRepo { override def upsert(unsaved: CountryregionRow): ConnectionIO[CountryregionRow] = { sql"""insert into "person"."countryregion"("countryregioncode", "name", "modifieddate") values ( - ${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("countryregioncode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRow.scala index 83d4aa4ccf..e836bf6138 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/countryregion/CountryregionRow.scala @@ -10,13 +10,11 @@ package countryregion import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.countryregion Lookup table containing the ISO standard codes for countries and regions. @@ -37,18 +35,17 @@ case class CountryregionRow( object CountryregionRow { implicit lazy val decoder: Decoder[CountryregionRow] = Decoder.forProduct3[CountryregionRow, CountryregionId, Name, TypoLocalDateTime]("countryregioncode", "name", "modifieddate")(CountryregionRow.apply)(CountryregionId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CountryregionRow] = Encoder.forProduct3[CountryregionRow, CountryregionId, Name, TypoLocalDateTime]("countryregioncode", "name", "modifieddate")(x => (x.countryregioncode, x.name, x.modifieddate))(CountryregionId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CountryregionRow] = new Read[CountryregionRow]( - gets = List( - (CountryregionId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CountryregionRow( - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[CountryregionRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CountryregionRow( + countryregioncode = arr(0).asInstanceOf[CountryregionId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CountryregionRow] = Text.instance[CountryregionRow]{ (row, sb) => CountryregionId.text.unsafeEncode(row.countryregioncode, sb) sb.append(Text.DELIMETER) @@ -56,20 +53,10 @@ object CountryregionRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CountryregionRow] = new Write[CountryregionRow]( - puts = List((CountryregionId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.countryregioncode, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - CountryregionId.put.unsafeSetNonNullable(rs, i + 0, a.countryregioncode) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - CountryregionId.put.unsafeUpdateNonNullable(ps, i + 0, a.countryregioncode) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[CountryregionRow] = new Write.Composite[CountryregionRow]( + List(new Write.Single(CountryregionId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.countryregioncode, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRepoImpl.scala index da85c2bb2b..de44d69ff5 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRepoImpl.scala @@ -31,7 +31,7 @@ class EmailaddressRepoImpl extends EmailaddressRepo { DeleteBuilder(""""person"."emailaddress"""", EmailaddressFields.structure) } override def deleteById(compositeId: EmailaddressId): ConnectionIO[Boolean] = { - sql"""delete from "person"."emailaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "emailaddressid" = ${fromWrite(compositeId.emailaddressid)(Write.fromPut(Meta.IntMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."emailaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "emailaddressid" = ${fromWrite(compositeId.emailaddressid)(new Write.Single(Meta.IntMeta.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[EmailaddressId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -45,25 +45,25 @@ class EmailaddressRepoImpl extends EmailaddressRepo { } override def insert(unsaved: EmailaddressRow): ConnectionIO[EmailaddressRow] = { sql"""insert into "person"."emailaddress"("businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.emailaddressid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.emailaddress)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.emailaddressid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.emailaddress)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate"::text """.query(using EmailaddressRow.read).unique } override def insert(unsaved: EmailaddressRowUnsaved): ConnectionIO[EmailaddressRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""emailaddress""""), fr"${fromWrite(unsaved.emailaddress)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""emailaddress""""), fr"${fromWrite(unsaved.emailaddress)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.emailaddressid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""emailaddressid""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""emailaddressid""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -95,7 +95,7 @@ class EmailaddressRepoImpl extends EmailaddressRepo { sql"""select "businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate"::text from "person"."emailaddress"""".query(using EmailaddressRow.read).stream } override def selectById(compositeId: EmailaddressId): ConnectionIO[Option[EmailaddressRow]] = { - sql"""select "businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate"::text from "person"."emailaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "emailaddressid" = ${fromWrite(compositeId.emailaddressid)(Write.fromPut(Meta.IntMeta.put))}""".query(using EmailaddressRow.read).option + sql"""select "businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate"::text from "person"."emailaddress" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "emailaddressid" = ${fromWrite(compositeId.emailaddressid)(new Write.Single(Meta.IntMeta.put))}""".query(using EmailaddressRow.read).option } override def selectByIds(compositeIds: Array[EmailaddressId]): Stream[ConnectionIO, EmailaddressRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -119,10 +119,10 @@ class EmailaddressRepoImpl extends EmailaddressRepo { override def update(row: EmailaddressRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "person"."emailaddress" - set "emailaddress" = ${fromWrite(row.emailaddress)(Write.fromPutOption(Meta.StringMeta.put))}, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "emailaddressid" = ${fromWrite(compositeId.emailaddressid)(Write.fromPut(Meta.IntMeta.put))}""" + set "emailaddress" = ${fromWrite(row.emailaddress)(new Write.SingleOpt(Meta.StringMeta.put))}, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "emailaddressid" = ${fromWrite(compositeId.emailaddressid)(new Write.Single(Meta.IntMeta.put))}""" .update .run .map(_ > 0) @@ -130,11 +130,11 @@ class EmailaddressRepoImpl extends EmailaddressRepo { override def upsert(unsaved: EmailaddressRow): ConnectionIO[EmailaddressRow] = { sql"""insert into "person"."emailaddress"("businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.emailaddressid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.emailaddress)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.emailaddressid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.emailaddress)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "emailaddressid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRow.scala index ed3de2a666..782ea63dac 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/emailaddress/EmailaddressRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.emailaddress Where to send a person email. @@ -48,22 +46,21 @@ object EmailaddressRow { new EmailaddressRow(compositeId.businessentityid, compositeId.emailaddressid, emailaddress, rowguid, modifieddate) implicit lazy val decoder: Decoder[EmailaddressRow] = Decoder.forProduct5[EmailaddressRow, BusinessentityId, Int, Option[/* max 50 chars */ String], TypoUUID, TypoLocalDateTime]("businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate")(EmailaddressRow.apply)(BusinessentityId.decoder, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeString), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[EmailaddressRow] = Encoder.forProduct5[EmailaddressRow, BusinessentityId, Int, Option[/* max 50 chars */ String], TypoUUID, TypoLocalDateTime]("businessentityid", "emailaddressid", "emailaddress", "rowguid", "modifieddate")(x => (x.businessentityid, x.emailaddressid, x.emailaddress, x.rowguid, x.modifieddate))(BusinessentityId.encoder, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeString), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[EmailaddressRow] = new Read[EmailaddressRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => EmailaddressRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - emailaddressid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[EmailaddressRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + EmailaddressRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + emailaddressid = arr(1).asInstanceOf[Int], + emailaddress = arr(2).asInstanceOf[Option[/* max 50 chars */ String]], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[EmailaddressRow] = Text.instance[EmailaddressRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -75,26 +72,12 @@ object EmailaddressRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[EmailaddressRow] = new Write[EmailaddressRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.emailaddressid, x.emailaddress, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 1, a.emailaddressid) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.emailaddress) - TypoUUID.put.unsafeSetNonNullable(rs, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.emailaddressid) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.emailaddress) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[EmailaddressRow] = new Write.Composite[EmailaddressRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.emailaddressid, a.emailaddress, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRepoImpl.scala index d25d2e4763..fdfe0bf121 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRepoImpl.scala @@ -31,29 +31,29 @@ class PasswordRepoImpl extends PasswordRepo { DeleteBuilder(""""person"."password"""", PasswordFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "person"."password" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."password" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "person"."password" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: PasswordRow): ConnectionIO[PasswordRow] = { sql"""insert into "person"."password"("businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.passwordhash)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.passwordsalt)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.passwordhash)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.passwordsalt)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate"::text """.query(using PasswordRow.read).unique } override def insert(unsaved: PasswordRowUnsaved): ConnectionIO[PasswordRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""passwordhash""""), fr"${fromWrite(unsaved.passwordhash)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""passwordsalt""""), fr"${fromWrite(unsaved.passwordsalt)(Write.fromPut(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""passwordhash""""), fr"${fromWrite(unsaved.passwordhash)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""passwordsalt""""), fr"${fromWrite(unsaved.passwordsalt)(new Write.Single(Meta.StringMeta.put))}")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -85,7 +85,7 @@ class PasswordRepoImpl extends PasswordRepo { sql"""select "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate"::text from "person"."password"""".query(using PasswordRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[PasswordRow]] = { - sql"""select "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate"::text from "person"."password" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using PasswordRow.read).option + sql"""select "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate"::text from "person"."password" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using PasswordRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, PasswordRow] = { sql"""select "businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate"::text from "person"."password" where "businessentityid" = ANY(${businessentityids})""".query(using PasswordRow.read).stream @@ -102,11 +102,11 @@ class PasswordRepoImpl extends PasswordRepo { override def update(row: PasswordRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "person"."password" - set "passwordhash" = ${fromWrite(row.passwordhash)(Write.fromPut(Meta.StringMeta.put))}, - "passwordsalt" = ${fromWrite(row.passwordsalt)(Write.fromPut(Meta.StringMeta.put))}, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "passwordhash" = ${fromWrite(row.passwordhash)(new Write.Single(Meta.StringMeta.put))}, + "passwordsalt" = ${fromWrite(row.passwordsalt)(new Write.Single(Meta.StringMeta.put))}, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -114,11 +114,11 @@ class PasswordRepoImpl extends PasswordRepo { override def upsert(unsaved: PasswordRow): ConnectionIO[PasswordRow] = { sql"""insert into "person"."password"("businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.passwordhash)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.passwordsalt)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.passwordhash)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.passwordsalt)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRow.scala index 604145d17b..ce8a903593 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/password/PasswordRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.password One way hashed authentication information @@ -43,22 +41,21 @@ case class PasswordRow( object PasswordRow { implicit lazy val decoder: Decoder[PasswordRow] = Decoder.forProduct5[PasswordRow, BusinessentityId, /* max 128 chars */ String, /* max 10 chars */ String, TypoUUID, TypoLocalDateTime]("businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate")(PasswordRow.apply)(BusinessentityId.decoder, Decoder.decodeString, Decoder.decodeString, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PasswordRow] = Encoder.forProduct5[PasswordRow, BusinessentityId, /* max 128 chars */ String, /* max 10 chars */ String, TypoUUID, TypoLocalDateTime]("businessentityid", "passwordhash", "passwordsalt", "rowguid", "modifieddate")(x => (x.businessentityid, x.passwordhash, x.passwordsalt, x.rowguid, x.modifieddate))(BusinessentityId.encoder, Encoder.encodeString, Encoder.encodeString, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PasswordRow] = new Read[PasswordRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PasswordRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - passwordhash = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - passwordsalt = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[PasswordRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PasswordRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + passwordhash = arr(1).asInstanceOf[/* max 128 chars */ String], + passwordsalt = arr(2).asInstanceOf[/* max 10 chars */ String], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PasswordRow] = Text.instance[PasswordRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -70,26 +67,12 @@ object PasswordRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PasswordRow] = new Write[PasswordRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.passwordhash, x.passwordsalt, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.passwordhash) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.passwordsalt) - TypoUUID.put.unsafeSetNonNullable(rs, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.passwordhash) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.passwordsalt) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[PasswordRow] = new Write.Composite[PasswordRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.passwordhash, a.passwordsalt, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRepoImpl.scala index 9f22d54baf..80570ca266 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRepoImpl.scala @@ -35,43 +35,43 @@ class PersonRepoImpl extends PersonRepo { DeleteBuilder(""""person"."person"""", PersonFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "person"."person" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."person" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "person"."person" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "person"."person"("businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.persontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.namestyle)(Write.fromPut(NameStyle.put))}::bool, ${fromWrite(unsaved.title)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.firstname)(Write.fromPut(/* user-picked */ FirstName.put))}::varchar, ${fromWrite(unsaved.middlename)(Write.fromPutOption(Name.put))}::varchar, ${fromWrite(unsaved.lastname)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.suffix)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.emailpromotion)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.additionalcontactinfo)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.demographics)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.persontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.namestyle)(new Write.Single(NameStyle.put))}::bool, ${fromWrite(unsaved.title)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.firstname)(new Write.Single(/* user-picked */ FirstName.put))}::varchar, ${fromWrite(unsaved.middlename)(new Write.SingleOpt(Name.put))}::varchar, ${fromWrite(unsaved.lastname)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.suffix)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.emailpromotion)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.additionalcontactinfo)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.demographics)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate"::text """.query(using PersonRow.read).unique } override def insert(unsaved: PersonRowUnsaved): ConnectionIO[PersonRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""persontype""""), fr"${fromWrite(unsaved.persontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""title""""), fr"${fromWrite(unsaved.title)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""firstname""""), fr"${fromWrite(unsaved.firstname)(Write.fromPut(/* user-picked */ FirstName.put))}::varchar")), - Some((Fragment.const0(s""""middlename""""), fr"${fromWrite(unsaved.middlename)(Write.fromPutOption(Name.put))}::varchar")), - Some((Fragment.const0(s""""lastname""""), fr"${fromWrite(unsaved.lastname)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""suffix""""), fr"${fromWrite(unsaved.suffix)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""additionalcontactinfo""""), fr"${fromWrite(unsaved.additionalcontactinfo)(Write.fromPutOption(TypoXml.put))}::xml")), - Some((Fragment.const0(s""""demographics""""), fr"${fromWrite(unsaved.demographics)(Write.fromPutOption(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""persontype""""), fr"${fromWrite(unsaved.persontype)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""title""""), fr"${fromWrite(unsaved.title)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""firstname""""), fr"${fromWrite(unsaved.firstname)(new Write.Single(/* user-picked */ FirstName.put))}::varchar")), + Some((Fragment.const0(s""""middlename""""), fr"${fromWrite(unsaved.middlename)(new Write.SingleOpt(Name.put))}::varchar")), + Some((Fragment.const0(s""""lastname""""), fr"${fromWrite(unsaved.lastname)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""suffix""""), fr"${fromWrite(unsaved.suffix)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""additionalcontactinfo""""), fr"${fromWrite(unsaved.additionalcontactinfo)(new Write.SingleOpt(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""demographics""""), fr"${fromWrite(unsaved.demographics)(new Write.SingleOpt(TypoXml.put))}::xml")), unsaved.namestyle match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""namestyle""""), fr"${fromWrite(value: NameStyle)(Write.fromPut(NameStyle.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""namestyle""""), fr"${fromWrite(value: NameStyle)(new Write.Single(NameStyle.put))}::bool")) }, unsaved.emailpromotion match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""emailpromotion""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""emailpromotion""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -103,7 +103,7 @@ class PersonRepoImpl extends PersonRepo { sql"""select "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate"::text from "person"."person"""".query(using PersonRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[PersonRow]] = { - sql"""select "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate"::text from "person"."person" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using PersonRow.read).option + sql"""select "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate"::text from "person"."person" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using PersonRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, PersonRow] = { sql"""select "businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate"::text from "person"."person" where "businessentityid" = ANY(${businessentityids})""".query(using PersonRow.read).stream @@ -120,19 +120,19 @@ class PersonRepoImpl extends PersonRepo { override def update(row: PersonRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "person"."person" - set "persontype" = ${fromWrite(row.persontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "namestyle" = ${fromWrite(row.namestyle)(Write.fromPut(NameStyle.put))}::bool, - "title" = ${fromWrite(row.title)(Write.fromPutOption(Meta.StringMeta.put))}, - "firstname" = ${fromWrite(row.firstname)(Write.fromPut(/* user-picked */ FirstName.put))}::varchar, - "middlename" = ${fromWrite(row.middlename)(Write.fromPutOption(Name.put))}::varchar, - "lastname" = ${fromWrite(row.lastname)(Write.fromPut(Name.put))}::varchar, - "suffix" = ${fromWrite(row.suffix)(Write.fromPutOption(Meta.StringMeta.put))}, - "emailpromotion" = ${fromWrite(row.emailpromotion)(Write.fromPut(Meta.IntMeta.put))}::int4, - "additionalcontactinfo" = ${fromWrite(row.additionalcontactinfo)(Write.fromPutOption(TypoXml.put))}::xml, - "demographics" = ${fromWrite(row.demographics)(Write.fromPutOption(TypoXml.put))}::xml, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "persontype" = ${fromWrite(row.persontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "namestyle" = ${fromWrite(row.namestyle)(new Write.Single(NameStyle.put))}::bool, + "title" = ${fromWrite(row.title)(new Write.SingleOpt(Meta.StringMeta.put))}, + "firstname" = ${fromWrite(row.firstname)(new Write.Single(/* user-picked */ FirstName.put))}::varchar, + "middlename" = ${fromWrite(row.middlename)(new Write.SingleOpt(Name.put))}::varchar, + "lastname" = ${fromWrite(row.lastname)(new Write.Single(Name.put))}::varchar, + "suffix" = ${fromWrite(row.suffix)(new Write.SingleOpt(Meta.StringMeta.put))}, + "emailpromotion" = ${fromWrite(row.emailpromotion)(new Write.Single(Meta.IntMeta.put))}::int4, + "additionalcontactinfo" = ${fromWrite(row.additionalcontactinfo)(new Write.SingleOpt(TypoXml.put))}::xml, + "demographics" = ${fromWrite(row.demographics)(new Write.SingleOpt(TypoXml.put))}::xml, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -140,19 +140,19 @@ class PersonRepoImpl extends PersonRepo { override def upsert(unsaved: PersonRow): ConnectionIO[PersonRow] = { sql"""insert into "person"."person"("businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.persontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.namestyle)(Write.fromPut(NameStyle.put))}::bool, - ${fromWrite(unsaved.title)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.firstname)(Write.fromPut(/* user-picked */ FirstName.put))}::varchar, - ${fromWrite(unsaved.middlename)(Write.fromPutOption(Name.put))}::varchar, - ${fromWrite(unsaved.lastname)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.suffix)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.emailpromotion)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.additionalcontactinfo)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.demographics)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.persontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.namestyle)(new Write.Single(NameStyle.put))}::bool, + ${fromWrite(unsaved.title)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.firstname)(new Write.Single(/* user-picked */ FirstName.put))}::varchar, + ${fromWrite(unsaved.middlename)(new Write.SingleOpt(Name.put))}::varchar, + ${fromWrite(unsaved.lastname)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.suffix)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.emailpromotion)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.additionalcontactinfo)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.demographics)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRow.scala index e20a68719e..948dbab708 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/person/PersonRow.scala @@ -15,14 +15,12 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.NameStyle import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.person Human beings involved with AdventureWorks: employees, customer contacts, and vendor contacts. @@ -68,38 +66,37 @@ case class PersonRow( object PersonRow { implicit lazy val decoder: Decoder[PersonRow] = Decoder.forProduct13[PersonRow, BusinessentityId, /* bpchar, max 2 chars */ String, NameStyle, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Int, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate")(PersonRow.apply)(BusinessentityId.decoder, Decoder.decodeString, NameStyle.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt, Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PersonRow] = Encoder.forProduct13[PersonRow, BusinessentityId, /* bpchar, max 2 chars */ String, NameStyle, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Int, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("businessentityid", "persontype", "namestyle", "title", "firstname", "middlename", "lastname", "suffix", "emailpromotion", "additionalcontactinfo", "demographics", "rowguid", "modifieddate")(x => (x.businessentityid, x.persontype, x.namestyle, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.emailpromotion, x.additionalcontactinfo, x.demographics, x.rowguid, x.modifieddate))(BusinessentityId.encoder, Encoder.encodeString, NameStyle.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt, Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PersonRow] = new Read[PersonRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (NameStyle.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - persontype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - namestyle = NameStyle.get.unsafeGetNonNullable(rs, i + 2), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 4), - middlename = Name.get.unsafeGetNullable(rs, i + 5), - lastname = Name.get.unsafeGetNonNullable(rs, i + 6), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 8), - additionalcontactinfo = TypoXml.get.unsafeGetNullable(rs, i + 9), - demographics = TypoXml.get.unsafeGetNullable(rs, i + 10), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 11), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 12) + implicit lazy val read: Read[PersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(NameStyle.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + persontype = arr(1).asInstanceOf[/* bpchar, max 2 chars */ String], + namestyle = arr(2).asInstanceOf[NameStyle], + title = arr(3).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(4).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(5).asInstanceOf[Option[Name]], + lastname = arr(6).asInstanceOf[Name], + suffix = arr(7).asInstanceOf[Option[/* max 10 chars */ String]], + emailpromotion = arr(8).asInstanceOf[Int], + additionalcontactinfo = arr(9).asInstanceOf[Option[TypoXml]], + demographics = arr(10).asInstanceOf[Option[TypoXml]], + rowguid = arr(11).asInstanceOf[TypoUUID], + modifieddate = arr(12).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PersonRow] = Text.instance[PersonRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -127,50 +124,20 @@ object PersonRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PersonRow] = new Write[PersonRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (NameStyle.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (/* user-picked */ FirstName.put, Nullability.NoNulls), - (Name.put, Nullability.Nullable), - (Name.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoXml.put, Nullability.Nullable), - (TypoXml.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.persontype, x.namestyle, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.emailpromotion, x.additionalcontactinfo, x.demographics, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.persontype) - NameStyle.put.unsafeSetNonNullable(rs, i + 2, a.namestyle) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 3, a.title) - /* user-picked */ FirstName.put.unsafeSetNonNullable(rs, i + 4, a.firstname) - Name.put.unsafeSetNullable(rs, i + 5, a.middlename) - Name.put.unsafeSetNonNullable(rs, i + 6, a.lastname) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 7, a.suffix) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 8, a.emailpromotion) - TypoXml.put.unsafeSetNullable(rs, i + 9, a.additionalcontactinfo) - TypoXml.put.unsafeSetNullable(rs, i + 10, a.demographics) - TypoUUID.put.unsafeSetNonNullable(rs, i + 11, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 12, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.persontype) - NameStyle.put.unsafeUpdateNonNullable(ps, i + 2, a.namestyle) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 3, a.title) - /* user-picked */ FirstName.put.unsafeUpdateNonNullable(ps, i + 4, a.firstname) - Name.put.unsafeUpdateNullable(ps, i + 5, a.middlename) - Name.put.unsafeUpdateNonNullable(ps, i + 6, a.lastname) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 7, a.suffix) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 8, a.emailpromotion) - TypoXml.put.unsafeUpdateNullable(ps, i + 9, a.additionalcontactinfo) - TypoXml.put.unsafeUpdateNullable(ps, i + 10, a.demographics) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 11, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 12, a.modifieddate) - } + implicit lazy val write: Write[PersonRow] = new Write.Composite[PersonRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(NameStyle.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(/* user-picked */ FirstName.put), + new Write.Single(Name.put).toOpt, + new Write.Single(Name.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.persontype, a.namestyle, a.title, a.firstname, a.middlename, a.lastname, a.suffix, a.emailpromotion, a.additionalcontactinfo, a.demographics, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRepoImpl.scala index bf3c5a31d0..1e9ff0d771 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRepoImpl.scala @@ -31,7 +31,7 @@ class PersonphoneRepoImpl extends PersonphoneRepo { DeleteBuilder(""""person"."personphone"""", PersonphoneFields.structure) } override def deleteById(compositeId: PersonphoneId): ConnectionIO[Boolean] = { - sql"""delete from "person"."personphone" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "phonenumber" = ${fromWrite(compositeId.phonenumber)(Write.fromPut(Phone.put))} AND "phonenumbertypeid" = ${fromWrite(compositeId.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."personphone" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "phonenumber" = ${fromWrite(compositeId.phonenumber)(new Write.Single(Phone.put))} AND "phonenumbertypeid" = ${fromWrite(compositeId.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[PersonphoneId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -46,18 +46,18 @@ class PersonphoneRepoImpl extends PersonphoneRepo { } override def insert(unsaved: PersonphoneRow): ConnectionIO[PersonphoneRow] = { sql"""insert into "person"."personphone"("businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.phonenumber)(Write.fromPut(Phone.put))}::varchar, ${fromWrite(unsaved.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}::int4, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.phonenumber)(new Write.Single(Phone.put))}::varchar, ${fromWrite(unsaved.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}::int4, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate"::text """.query(using PersonphoneRow.read).unique } override def insert(unsaved: PersonphoneRowUnsaved): ConnectionIO[PersonphoneRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""phonenumber""""), fr"${fromWrite(unsaved.phonenumber)(Write.fromPut(Phone.put))}::varchar")), - Some((Fragment.const0(s""""phonenumbertypeid""""), fr"${fromWrite(unsaved.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}::int4")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""phonenumber""""), fr"${fromWrite(unsaved.phonenumber)(new Write.Single(Phone.put))}::varchar")), + Some((Fragment.const0(s""""phonenumbertypeid""""), fr"${fromWrite(unsaved.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}::int4")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -89,7 +89,7 @@ class PersonphoneRepoImpl extends PersonphoneRepo { sql"""select "businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate"::text from "person"."personphone"""".query(using PersonphoneRow.read).stream } override def selectById(compositeId: PersonphoneId): ConnectionIO[Option[PersonphoneRow]] = { - sql"""select "businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate"::text from "person"."personphone" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "phonenumber" = ${fromWrite(compositeId.phonenumber)(Write.fromPut(Phone.put))} AND "phonenumbertypeid" = ${fromWrite(compositeId.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}""".query(using PersonphoneRow.read).option + sql"""select "businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate"::text from "person"."personphone" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "phonenumber" = ${fromWrite(compositeId.phonenumber)(new Write.Single(Phone.put))} AND "phonenumbertypeid" = ${fromWrite(compositeId.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}""".query(using PersonphoneRow.read).option } override def selectByIds(compositeIds: Array[PersonphoneId]): Stream[ConnectionIO, PersonphoneRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -114,8 +114,8 @@ class PersonphoneRepoImpl extends PersonphoneRepo { override def update(row: PersonphoneRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "person"."personphone" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "phonenumber" = ${fromWrite(compositeId.phonenumber)(Write.fromPut(Phone.put))} AND "phonenumbertypeid" = ${fromWrite(compositeId.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "phonenumber" = ${fromWrite(compositeId.phonenumber)(new Write.Single(Phone.put))} AND "phonenumbertypeid" = ${fromWrite(compositeId.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}""" .update .run .map(_ > 0) @@ -123,10 +123,10 @@ class PersonphoneRepoImpl extends PersonphoneRepo { override def upsert(unsaved: PersonphoneRow): ConnectionIO[PersonphoneRow] = { sql"""insert into "person"."personphone"("businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.phonenumber)(Write.fromPut(Phone.put))}::varchar, - ${fromWrite(unsaved.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}::int4, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.phonenumber)(new Write.Single(Phone.put))}::varchar, + ${fromWrite(unsaved.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}::int4, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "phonenumber", "phonenumbertypeid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRow.scala index 84a9f03f4e..68c09e9165 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/personphone/PersonphoneRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.businessentity.BusinessentityId import adventureworks.person.phonenumbertype.PhonenumbertypeId import adventureworks.public.Phone -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.personphone Telephone number and type of a person. @@ -46,20 +44,19 @@ object PersonphoneRow { new PersonphoneRow(compositeId.businessentityid, compositeId.phonenumber, compositeId.phonenumbertypeid, modifieddate) implicit lazy val decoder: Decoder[PersonphoneRow] = Decoder.forProduct4[PersonphoneRow, BusinessentityId, Phone, PhonenumbertypeId, TypoLocalDateTime]("businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate")(PersonphoneRow.apply)(BusinessentityId.decoder, Phone.decoder, PhonenumbertypeId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PersonphoneRow] = Encoder.forProduct4[PersonphoneRow, BusinessentityId, Phone, PhonenumbertypeId, TypoLocalDateTime]("businessentityid", "phonenumber", "phonenumbertypeid", "modifieddate")(x => (x.businessentityid, x.phonenumber, x.phonenumbertypeid, x.modifieddate))(BusinessentityId.encoder, Phone.encoder, PhonenumbertypeId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PersonphoneRow] = new Read[PersonphoneRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Phone.get, Nullability.NoNulls), - (PhonenumbertypeId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonphoneRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - phonenumber = Phone.get.unsafeGetNonNullable(rs, i + 1), - phonenumbertypeid = PhonenumbertypeId.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PersonphoneRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Phone.get).asInstanceOf[Read[Any]], + new Read.Single(PhonenumbertypeId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonphoneRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + phonenumber = arr(1).asInstanceOf[Phone], + phonenumbertypeid = arr(2).asInstanceOf[PhonenumbertypeId], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PersonphoneRow] = Text.instance[PersonphoneRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -69,23 +66,11 @@ object PersonphoneRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PersonphoneRow] = new Write[PersonphoneRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (Phone.put, Nullability.NoNulls), - (PhonenumbertypeId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.phonenumber, x.phonenumbertypeid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - Phone.put.unsafeSetNonNullable(rs, i + 1, a.phonenumber) - PhonenumbertypeId.put.unsafeSetNonNullable(rs, i + 2, a.phonenumbertypeid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - Phone.put.unsafeUpdateNonNullable(ps, i + 1, a.phonenumber) - PhonenumbertypeId.put.unsafeUpdateNonNullable(ps, i + 2, a.phonenumbertypeid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[PersonphoneRow] = new Write.Composite[PersonphoneRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(Phone.put), + new Write.Single(PhonenumbertypeId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.phonenumber, a.phonenumbertypeid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRepoImpl.scala index 97ccb5e587..b97c426a43 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRepoImpl.scala @@ -29,27 +29,27 @@ class PhonenumbertypeRepoImpl extends PhonenumbertypeRepo { DeleteBuilder(""""person"."phonenumbertype"""", PhonenumbertypeFields.structure) } override def deleteById(phonenumbertypeid: PhonenumbertypeId): ConnectionIO[Boolean] = { - sql"""delete from "person"."phonenumbertype" where "phonenumbertypeid" = ${fromWrite(phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."phonenumbertype" where "phonenumbertypeid" = ${fromWrite(phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}""".update.run.map(_ > 0) } override def deleteByIds(phonenumbertypeids: Array[PhonenumbertypeId]): ConnectionIO[Int] = { sql"""delete from "person"."phonenumbertype" where "phonenumbertypeid" = ANY(${phonenumbertypeids})""".update.run } override def insert(unsaved: PhonenumbertypeRow): ConnectionIO[PhonenumbertypeRow] = { sql"""insert into "person"."phonenumbertype"("phonenumbertypeid", "name", "modifieddate") - values (${fromWrite(unsaved.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "phonenumbertypeid", "name", "modifieddate"::text """.query(using PhonenumbertypeRow.read).unique } override def insert(unsaved: PhonenumbertypeRowUnsaved): ConnectionIO[PhonenumbertypeRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.phonenumbertypeid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""phonenumbertypeid""""), fr"${fromWrite(value: PhonenumbertypeId)(Write.fromPut(PhonenumbertypeId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""phonenumbertypeid""""), fr"${fromWrite(value: PhonenumbertypeId)(new Write.Single(PhonenumbertypeId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -81,7 +81,7 @@ class PhonenumbertypeRepoImpl extends PhonenumbertypeRepo { sql"""select "phonenumbertypeid", "name", "modifieddate"::text from "person"."phonenumbertype"""".query(using PhonenumbertypeRow.read).stream } override def selectById(phonenumbertypeid: PhonenumbertypeId): ConnectionIO[Option[PhonenumbertypeRow]] = { - sql"""select "phonenumbertypeid", "name", "modifieddate"::text from "person"."phonenumbertype" where "phonenumbertypeid" = ${fromWrite(phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}""".query(using PhonenumbertypeRow.read).option + sql"""select "phonenumbertypeid", "name", "modifieddate"::text from "person"."phonenumbertype" where "phonenumbertypeid" = ${fromWrite(phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}""".query(using PhonenumbertypeRow.read).option } override def selectByIds(phonenumbertypeids: Array[PhonenumbertypeId]): Stream[ConnectionIO, PhonenumbertypeRow] = { sql"""select "phonenumbertypeid", "name", "modifieddate"::text from "person"."phonenumbertype" where "phonenumbertypeid" = ANY(${phonenumbertypeids})""".query(using PhonenumbertypeRow.read).stream @@ -98,9 +98,9 @@ class PhonenumbertypeRepoImpl extends PhonenumbertypeRepo { override def update(row: PhonenumbertypeRow): ConnectionIO[Boolean] = { val phonenumbertypeid = row.phonenumbertypeid sql"""update "person"."phonenumbertype" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "phonenumbertypeid" = ${fromWrite(phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "phonenumbertypeid" = ${fromWrite(phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}""" .update .run .map(_ > 0) @@ -108,9 +108,9 @@ class PhonenumbertypeRepoImpl extends PhonenumbertypeRepo { override def upsert(unsaved: PhonenumbertypeRow): ConnectionIO[PhonenumbertypeRow] = { sql"""insert into "person"."phonenumbertype"("phonenumbertypeid", "name", "modifieddate") values ( - ${fromWrite(unsaved.phonenumbertypeid)(Write.fromPut(PhonenumbertypeId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.phonenumbertypeid)(new Write.Single(PhonenumbertypeId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("phonenumbertypeid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRow.scala index f0ac7984a7..7490aea7cc 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/phonenumbertype/PhonenumbertypeRow.scala @@ -10,13 +10,11 @@ package phonenumbertype import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.phonenumbertype Type of phone number of a person. @@ -38,18 +36,17 @@ case class PhonenumbertypeRow( object PhonenumbertypeRow { implicit lazy val decoder: Decoder[PhonenumbertypeRow] = Decoder.forProduct3[PhonenumbertypeRow, PhonenumbertypeId, Name, TypoLocalDateTime]("phonenumbertypeid", "name", "modifieddate")(PhonenumbertypeRow.apply)(PhonenumbertypeId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PhonenumbertypeRow] = Encoder.forProduct3[PhonenumbertypeRow, PhonenumbertypeId, Name, TypoLocalDateTime]("phonenumbertypeid", "name", "modifieddate")(x => (x.phonenumbertypeid, x.name, x.modifieddate))(PhonenumbertypeId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PhonenumbertypeRow] = new Read[PhonenumbertypeRow]( - gets = List( - (PhonenumbertypeId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PhonenumbertypeRow( - phonenumbertypeid = PhonenumbertypeId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[PhonenumbertypeRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PhonenumbertypeId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PhonenumbertypeRow( + phonenumbertypeid = arr(0).asInstanceOf[PhonenumbertypeId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PhonenumbertypeRow] = Text.instance[PhonenumbertypeRow]{ (row, sb) => PhonenumbertypeId.text.unsafeEncode(row.phonenumbertypeid, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object PhonenumbertypeRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PhonenumbertypeRow] = new Write[PhonenumbertypeRow]( - puts = List((PhonenumbertypeId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.phonenumbertypeid, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - PhonenumbertypeId.put.unsafeSetNonNullable(rs, i + 0, a.phonenumbertypeid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - PhonenumbertypeId.put.unsafeUpdateNonNullable(ps, i + 0, a.phonenumbertypeid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[PhonenumbertypeRow] = new Write.Composite[PhonenumbertypeRow]( + List(new Write.Single(PhonenumbertypeId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.phonenumbertypeid, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRepoImpl.scala index 763ad9a640..cc59beb16c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRepoImpl.scala @@ -34,38 +34,38 @@ class StateprovinceRepoImpl extends StateprovinceRepo { DeleteBuilder(""""person"."stateprovince"""", StateprovinceFields.structure) } override def deleteById(stateprovinceid: StateprovinceId): ConnectionIO[Boolean] = { - sql"""delete from "person"."stateprovince" where "stateprovinceid" = ${fromWrite(stateprovinceid)(Write.fromPut(StateprovinceId.put))}""".update.run.map(_ > 0) + sql"""delete from "person"."stateprovince" where "stateprovinceid" = ${fromWrite(stateprovinceid)(new Write.Single(StateprovinceId.put))}""".update.run.map(_ > 0) } override def deleteByIds(stateprovinceids: Array[StateprovinceId]): ConnectionIO[Int] = { sql"""delete from "person"."stateprovince" where "stateprovinceid" = ANY(${stateprovinceids})""".update.run } override def insert(unsaved: StateprovinceRow): ConnectionIO[StateprovinceRow] = { sql"""insert into "person"."stateprovince"("stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate") - values (${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, ${fromWrite(unsaved.stateprovincecode)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, ${fromWrite(unsaved.isonlystateprovinceflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, ${fromWrite(unsaved.stateprovincecode)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, ${fromWrite(unsaved.isonlystateprovinceflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate"::text """.query(using StateprovinceRow.read).unique } override def insert(unsaved: StateprovinceRowUnsaved): ConnectionIO[StateprovinceRow] = { val fs = List( - Some((Fragment.const0(s""""stateprovincecode""""), fr"${fromWrite(unsaved.stateprovincecode)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4")), + Some((Fragment.const0(s""""stateprovincecode""""), fr"${fromWrite(unsaved.stateprovincecode)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4")), unsaved.stateprovinceid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""stateprovinceid""""), fr"${fromWrite(value: StateprovinceId)(Write.fromPut(StateprovinceId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""stateprovinceid""""), fr"${fromWrite(value: StateprovinceId)(new Write.Single(StateprovinceId.put))}::int4")) }, unsaved.isonlystateprovinceflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""isonlystateprovinceflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""isonlystateprovinceflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -97,7 +97,7 @@ class StateprovinceRepoImpl extends StateprovinceRepo { sql"""select "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate"::text from "person"."stateprovince"""".query(using StateprovinceRow.read).stream } override def selectById(stateprovinceid: StateprovinceId): ConnectionIO[Option[StateprovinceRow]] = { - sql"""select "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate"::text from "person"."stateprovince" where "stateprovinceid" = ${fromWrite(stateprovinceid)(Write.fromPut(StateprovinceId.put))}""".query(using StateprovinceRow.read).option + sql"""select "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate"::text from "person"."stateprovince" where "stateprovinceid" = ${fromWrite(stateprovinceid)(new Write.Single(StateprovinceId.put))}""".query(using StateprovinceRow.read).option } override def selectByIds(stateprovinceids: Array[StateprovinceId]): Stream[ConnectionIO, StateprovinceRow] = { sql"""select "stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate"::text from "person"."stateprovince" where "stateprovinceid" = ANY(${stateprovinceids})""".query(using StateprovinceRow.read).stream @@ -114,14 +114,14 @@ class StateprovinceRepoImpl extends StateprovinceRepo { override def update(row: StateprovinceRow): ConnectionIO[Boolean] = { val stateprovinceid = row.stateprovinceid sql"""update "person"."stateprovince" - set "stateprovincecode" = ${fromWrite(row.stateprovincecode)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "countryregioncode" = ${fromWrite(row.countryregioncode)(Write.fromPut(CountryregionId.put))}, - "isonlystateprovinceflag" = ${fromWrite(row.isonlystateprovinceflag)(Write.fromPut(Flag.put))}::bool, - "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "territoryid" = ${fromWrite(row.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "stateprovinceid" = ${fromWrite(stateprovinceid)(Write.fromPut(StateprovinceId.put))}""" + set "stateprovincecode" = ${fromWrite(row.stateprovincecode)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "countryregioncode" = ${fromWrite(row.countryregioncode)(new Write.Single(CountryregionId.put))}, + "isonlystateprovinceflag" = ${fromWrite(row.isonlystateprovinceflag)(new Write.Single(Flag.put))}::bool, + "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "territoryid" = ${fromWrite(row.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "stateprovinceid" = ${fromWrite(stateprovinceid)(new Write.Single(StateprovinceId.put))}""" .update .run .map(_ > 0) @@ -129,14 +129,14 @@ class StateprovinceRepoImpl extends StateprovinceRepo { override def upsert(unsaved: StateprovinceRow): ConnectionIO[StateprovinceRow] = { sql"""insert into "person"."stateprovince"("stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, - ${fromWrite(unsaved.stateprovincecode)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, - ${fromWrite(unsaved.isonlystateprovinceflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, + ${fromWrite(unsaved.stateprovincecode)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, + ${fromWrite(unsaved.isonlystateprovinceflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("stateprovinceid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRow.scala index 65fb438764..0cb55e50f0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/stateprovince/StateprovinceRow.scala @@ -14,14 +14,12 @@ import adventureworks.person.countryregion.CountryregionId import adventureworks.public.Flag import adventureworks.public.Name import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: person.stateprovince State and province lookup table. @@ -56,28 +54,27 @@ case class StateprovinceRow( object StateprovinceRow { implicit lazy val decoder: Decoder[StateprovinceRow] = Decoder.forProduct8[StateprovinceRow, StateprovinceId, /* bpchar, max 3 chars */ String, CountryregionId, Flag, Name, SalesterritoryId, TypoUUID, TypoLocalDateTime]("stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate")(StateprovinceRow.apply)(StateprovinceId.decoder, Decoder.decodeString, CountryregionId.decoder, Flag.decoder, Name.decoder, SalesterritoryId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[StateprovinceRow] = Encoder.forProduct8[StateprovinceRow, StateprovinceId, /* bpchar, max 3 chars */ String, CountryregionId, Flag, Name, SalesterritoryId, TypoUUID, TypoLocalDateTime]("stateprovinceid", "stateprovincecode", "countryregioncode", "isonlystateprovinceflag", "name", "territoryid", "rowguid", "modifieddate")(x => (x.stateprovinceid, x.stateprovincecode, x.countryregioncode, x.isonlystateprovinceflag, x.name, x.territoryid, x.rowguid, x.modifieddate))(StateprovinceId.encoder, Encoder.encodeString, CountryregionId.encoder, Flag.encoder, Name.encoder, SalesterritoryId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[StateprovinceRow] = new Read[StateprovinceRow]( - gets = List( - (StateprovinceId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (CountryregionId.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => StateprovinceRow( - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 0), - stateprovincecode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 2), - isonlystateprovinceflag = Flag.get.unsafeGetNonNullable(rs, i + 3), - name = Name.get.unsafeGetNonNullable(rs, i + 4), - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 5), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 6), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7) + implicit lazy val read: Read[StateprovinceRow] = new Read.CompositeOfInstances(Array( + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + StateprovinceRow( + stateprovinceid = arr(0).asInstanceOf[StateprovinceId], + stateprovincecode = arr(1).asInstanceOf[/* bpchar, max 3 chars */ String], + countryregioncode = arr(2).asInstanceOf[CountryregionId], + isonlystateprovinceflag = arr(3).asInstanceOf[Flag], + name = arr(4).asInstanceOf[Name], + territoryid = arr(5).asInstanceOf[SalesterritoryId], + rowguid = arr(6).asInstanceOf[TypoUUID], + modifieddate = arr(7).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[StateprovinceRow] = Text.instance[StateprovinceRow]{ (row, sb) => StateprovinceId.text.unsafeEncode(row.stateprovinceid, sb) sb.append(Text.DELIMETER) @@ -95,35 +92,15 @@ object StateprovinceRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[StateprovinceRow] = new Write[StateprovinceRow]( - puts = List((StateprovinceId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (CountryregionId.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (SalesterritoryId.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.stateprovinceid, x.stateprovincecode, x.countryregioncode, x.isonlystateprovinceflag, x.name, x.territoryid, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - StateprovinceId.put.unsafeSetNonNullable(rs, i + 0, a.stateprovinceid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.stateprovincecode) - CountryregionId.put.unsafeSetNonNullable(rs, i + 2, a.countryregioncode) - Flag.put.unsafeSetNonNullable(rs, i + 3, a.isonlystateprovinceflag) - Name.put.unsafeSetNonNullable(rs, i + 4, a.name) - SalesterritoryId.put.unsafeSetNonNullable(rs, i + 5, a.territoryid) - TypoUUID.put.unsafeSetNonNullable(rs, i + 6, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 7, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - StateprovinceId.put.unsafeUpdateNonNullable(ps, i + 0, a.stateprovinceid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.stateprovincecode) - CountryregionId.put.unsafeUpdateNonNullable(ps, i + 2, a.countryregioncode) - Flag.put.unsafeUpdateNonNullable(ps, i + 3, a.isonlystateprovinceflag) - Name.put.unsafeUpdateNonNullable(ps, i + 4, a.name) - SalesterritoryId.put.unsafeUpdateNonNullable(ps, i + 5, a.territoryid) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 6, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 7, a.modifieddate) - } + implicit lazy val write: Write[StateprovinceRow] = new Write.Composite[StateprovinceRow]( + List(new Write.Single(StateprovinceId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(CountryregionId.put), + new Write.Single(Flag.put), + new Write.Single(Name.put), + new Write.Single(SalesterritoryId.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.stateprovinceid, a.stateprovincecode, a.countryregioncode, a.isonlystateprovinceflag, a.name, a.territoryid, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vadditionalcontactinfo/VadditionalcontactinfoViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vadditionalcontactinfo/VadditionalcontactinfoViewRow.scala index 6fd5753c5f..0c7573df19 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vadditionalcontactinfo/VadditionalcontactinfoViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vadditionalcontactinfo/VadditionalcontactinfoViewRow.scala @@ -13,12 +13,10 @@ import adventureworks.customtypes.TypoXml import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: person.vadditionalcontactinfo */ case class VadditionalcontactinfoViewRow( @@ -50,44 +48,43 @@ case class VadditionalcontactinfoViewRow( object VadditionalcontactinfoViewRow { implicit lazy val decoder: Decoder[VadditionalcontactinfoViewRow] = Decoder.forProduct17[VadditionalcontactinfoViewRow, BusinessentityId, /* user-picked */ FirstName, Option[Name], Name, /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[String], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[String], /* nullability unknown */ Option[TypoXml], TypoUUID, TypoLocalDateTime]("businessentityid", "firstname", "middlename", "lastname", "telephonenumber", "telephonespecialinstructions", "street", "city", "stateprovince", "postalcode", "countryregion", "homeaddressspecialinstructions", "emailaddress", "emailspecialinstructions", "emailtelephonenumber", "rowguid", "modifieddate")(VadditionalcontactinfoViewRow.apply)(BusinessentityId.decoder, FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[VadditionalcontactinfoViewRow] = Encoder.forProduct17[VadditionalcontactinfoViewRow, BusinessentityId, /* user-picked */ FirstName, Option[Name], Name, /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[String], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[TypoXml], /* nullability unknown */ Option[String], /* nullability unknown */ Option[TypoXml], TypoUUID, TypoLocalDateTime]("businessentityid", "firstname", "middlename", "lastname", "telephonenumber", "telephonespecialinstructions", "street", "city", "stateprovince", "postalcode", "countryregion", "homeaddressspecialinstructions", "emailaddress", "emailspecialinstructions", "emailtelephonenumber", "rowguid", "modifieddate")(x => (x.businessentityid, x.firstname, x.middlename, x.lastname, x.telephonenumber, x.telephonespecialinstructions, x.street, x.city, x.stateprovince, x.postalcode, x.countryregion, x.homeaddressspecialinstructions, x.emailaddress, x.emailspecialinstructions, x.emailtelephonenumber, x.rowguid, x.modifieddate))(BusinessentityId.encoder, FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[VadditionalcontactinfoViewRow] = new Read[VadditionalcontactinfoViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VadditionalcontactinfoViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 1), - middlename = Name.get.unsafeGetNullable(rs, i + 2), - lastname = Name.get.unsafeGetNonNullable(rs, i + 3), - telephonenumber = TypoXml.get.unsafeGetNullable(rs, i + 4), - telephonespecialinstructions = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - street = TypoXml.get.unsafeGetNullable(rs, i + 6), - city = TypoXml.get.unsafeGetNullable(rs, i + 7), - stateprovince = TypoXml.get.unsafeGetNullable(rs, i + 8), - postalcode = TypoXml.get.unsafeGetNullable(rs, i + 9), - countryregion = TypoXml.get.unsafeGetNullable(rs, i + 10), - homeaddressspecialinstructions = TypoXml.get.unsafeGetNullable(rs, i + 11), - emailaddress = TypoXml.get.unsafeGetNullable(rs, i + 12), - emailspecialinstructions = Meta.StringMeta.get.unsafeGetNullable(rs, i + 13), - emailtelephonenumber = TypoXml.get.unsafeGetNullable(rs, i + 14), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 15), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 16) + implicit lazy val read: Read[VadditionalcontactinfoViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VadditionalcontactinfoViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + firstname = arr(1).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(2).asInstanceOf[Option[Name]], + lastname = arr(3).asInstanceOf[Name], + telephonenumber = arr(4).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + telephonespecialinstructions = arr(5).asInstanceOf[/* nullability unknown */ Option[String]], + street = arr(6).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + city = arr(7).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + stateprovince = arr(8).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + postalcode = arr(9).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + countryregion = arr(10).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + homeaddressspecialinstructions = arr(11).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + emailaddress = arr(12).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + emailspecialinstructions = arr(13).asInstanceOf[/* nullability unknown */ Option[String]], + emailtelephonenumber = arr(14).asInstanceOf[/* nullability unknown */ Option[TypoXml]], + rowguid = arr(15).asInstanceOf[TypoUUID], + modifieddate = arr(16).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vstateprovincecountryregion/VstateprovincecountryregionMVRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vstateprovincecountryregion/VstateprovincecountryregionMVRow.scala index a2548d31a2..f5075e8d07 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vstateprovincecountryregion/VstateprovincecountryregionMVRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person/vstateprovincecountryregion/VstateprovincecountryregionMVRow.scala @@ -12,12 +12,10 @@ import adventureworks.person.stateprovince.StateprovinceId import adventureworks.public.Flag import adventureworks.public.Name import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Materialized View: person.vstateprovincecountryregion */ case class VstateprovincecountryregionMVRow( @@ -40,24 +38,23 @@ case class VstateprovincecountryregionMVRow( object VstateprovincecountryregionMVRow { implicit lazy val decoder: Decoder[VstateprovincecountryregionMVRow] = Decoder.forProduct7[VstateprovincecountryregionMVRow, StateprovinceId, /* bpchar, max 3 chars */ String, Flag, Name, SalesterritoryId, CountryregionId, Name]("stateprovinceid", "stateprovincecode", "isonlystateprovinceflag", "stateprovincename", "territoryid", "countryregioncode", "countryregionname")(VstateprovincecountryregionMVRow.apply)(StateprovinceId.decoder, Decoder.decodeString, Flag.decoder, Name.decoder, SalesterritoryId.decoder, CountryregionId.decoder, Name.decoder) implicit lazy val encoder: Encoder[VstateprovincecountryregionMVRow] = Encoder.forProduct7[VstateprovincecountryregionMVRow, StateprovinceId, /* bpchar, max 3 chars */ String, Flag, Name, SalesterritoryId, CountryregionId, Name]("stateprovinceid", "stateprovincecode", "isonlystateprovinceflag", "stateprovincename", "territoryid", "countryregioncode", "countryregionname")(x => (x.stateprovinceid, x.stateprovincecode, x.isonlystateprovinceflag, x.stateprovincename, x.territoryid, x.countryregioncode, x.countryregionname))(StateprovinceId.encoder, Encoder.encodeString, Flag.encoder, Name.encoder, SalesterritoryId.encoder, CountryregionId.encoder, Name.encoder) - implicit lazy val read: Read[VstateprovincecountryregionMVRow] = new Read[VstateprovincecountryregionMVRow]( - gets = List( - (StateprovinceId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.NoNulls), - (CountryregionId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VstateprovincecountryregionMVRow( - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 0), - stateprovincecode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - isonlystateprovinceflag = Flag.get.unsafeGetNonNullable(rs, i + 2), - stateprovincename = Name.get.unsafeGetNonNullable(rs, i + 3), - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 4), - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 5), - countryregionname = Name.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[VstateprovincecountryregionMVRow] = new Read.CompositeOfInstances(Array( + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VstateprovincecountryregionMVRow( + stateprovinceid = arr(0).asInstanceOf[StateprovinceId], + stateprovincecode = arr(1).asInstanceOf[/* bpchar, max 3 chars */ String], + isonlystateprovinceflag = arr(2).asInstanceOf[Flag], + stateprovincename = arr(3).asInstanceOf[Name], + territoryid = arr(4).asInstanceOf[SalesterritoryId], + countryregioncode = arr(5).asInstanceOf[CountryregionId], + countryregionname = arr(6).asInstanceOf[Name] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRepoImpl.scala index 038932dd7c..954934c91a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRepoImpl.scala @@ -32,8 +32,8 @@ class PersonDetailSqlRepoImpl extends PersonDetailSqlRepo { JOIN person.person p ON p.businessentityid = s.businessentityid JOIN person.businessentityaddress bea ON bea.businessentityid = s.businessentityid LEFT JOIN person.address a ON a.addressid = bea.addressid - where s.businessentityid = ${fromWrite(businessentityid)(Write.fromPut(/* user-picked */ BusinessentityId.put))}::int4 - and p.modifieddate > ${fromWrite(modifiedAfter)(Write.fromPut(TypoLocalDateTime.put))}::timestamp""" + where s.businessentityid = ${fromWrite(businessentityid)(new Write.Single(/* user-picked */ BusinessentityId.put))}::int4 + and p.modifieddate > ${fromWrite(modifiedAfter)(new Write.Single(TypoLocalDateTime.put))}::timestamp""" sql.query(using PersonDetailSqlRow.read).stream } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRow.scala index 8e5ef332cc..1f66a10343 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_detail/PersonDetailSqlRow.scala @@ -9,12 +9,10 @@ package person_detail import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** SQL file: person_detail.sql */ case class PersonDetailSqlRow( @@ -43,30 +41,29 @@ case class PersonDetailSqlRow( object PersonDetailSqlRow { implicit lazy val decoder: Decoder[PersonDetailSqlRow] = Decoder.forProduct10[PersonDetailSqlRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, /* max 50 chars */ String, Option[/* max 60 chars */ String], Option[/* max 30 chars */ String], Option[/* max 15 chars */ String], /* user-picked */ String]("businessentityid", "title", "firstname", "middlename", "lastname", "jobtitle", "addressline1", "city", "postalcode", "rowguid")(PersonDetailSqlRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString) implicit lazy val encoder: Encoder[PersonDetailSqlRow] = Encoder.forProduct10[PersonDetailSqlRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, /* max 50 chars */ String, Option[/* max 60 chars */ String], Option[/* max 30 chars */ String], Option[/* max 15 chars */ String], /* user-picked */ String]("businessentityid", "title", "firstname", "middlename", "lastname", "jobtitle", "addressline1", "city", "postalcode", "rowguid")(x => (x.businessentityid, x.title, x.firstname, x.middlename, x.lastname, x.jobtitle, x.addressline1, x.city, x.postalcode, x.rowguid))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString) - implicit lazy val read: Read[PersonDetailSqlRow] = new Read[PersonDetailSqlRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonDetailSqlRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 2), - middlename = Name.get.unsafeGetNullable(rs, i + 3), - lastname = Name.get.unsafeGetNonNullable(rs, i + 4), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - addressline1 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - city = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - postalcode = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - rowguid = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[PersonDetailSqlRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonDetailSqlRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + title = arr(1).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(2).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(3).asInstanceOf[Option[Name]], + lastname = arr(4).asInstanceOf[Name], + jobtitle = arr(5).asInstanceOf[/* max 50 chars */ String], + addressline1 = arr(6).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(7).asInstanceOf[Option[/* max 30 chars */ String]], + postalcode = arr(8).asInstanceOf[Option[/* max 15 chars */ String]], + rowguid = arr(9).asInstanceOf[/* user-picked */ String] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRepoImpl.scala index dc64c7aa51..659a57e279 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRepoImpl.scala @@ -18,7 +18,7 @@ class PersonDynamicSqlRepoImpl extends PersonDynamicSqlRepo { val sql = sql"""SELECT p.title, p.firstname, p.middlename, p.lastname FROM person.person p - WHERE ${fromWrite(firstName)(Write.fromPutOption(Meta.StringMeta.put))}::text IS NULL OR p.firstname = ${fromWrite(firstName)(Write.fromPutOption(Meta.StringMeta.put))} + WHERE ${fromWrite(firstName)(new Write.SingleOpt(Meta.StringMeta.put))}::text IS NULL OR p.firstname = ${fromWrite(firstName)(new Write.SingleOpt(Meta.StringMeta.put))} """ sql.query(using PersonDynamicSqlRow.read).stream } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRow.scala index c248f5e34c..8bdebd1f47 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_dynamic/PersonDynamicSqlRow.scala @@ -8,12 +8,10 @@ package person_dynamic import adventureworks.public.Name import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** SQL file: person_dynamic.sql */ case class PersonDynamicSqlRow( @@ -30,18 +28,17 @@ case class PersonDynamicSqlRow( object PersonDynamicSqlRow { implicit lazy val decoder: Decoder[PersonDynamicSqlRow] = Decoder.forProduct4[PersonDynamicSqlRow, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name]("title", "firstname", "middlename", "lastname")(PersonDynamicSqlRow.apply)(Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder) implicit lazy val encoder: Encoder[PersonDynamicSqlRow] = Encoder.forProduct4[PersonDynamicSqlRow, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name]("title", "firstname", "middlename", "lastname")(x => (x.title, x.firstname, x.middlename, x.lastname))(Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder) - implicit lazy val read: Read[PersonDynamicSqlRow] = new Read[PersonDynamicSqlRow]( - gets = List( - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonDynamicSqlRow( - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 0), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 1), - middlename = Name.get.unsafeGetNullable(rs, i + 2), - lastname = Name.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PersonDynamicSqlRow] = new Read.CompositeOfInstances(Array( + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonDynamicSqlRow( + title = arr(0).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(1).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(2).asInstanceOf[Option[Name]], + lastname = arr(3).asInstanceOf[Name] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_row_join/PersonRowJoinSqlRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_row_join/PersonRowJoinSqlRow.scala index bbb3bc3b0a..82d75c50e5 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/person_row_join/PersonRowJoinSqlRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/person_row_join/PersonRowJoinSqlRow.scala @@ -8,11 +8,9 @@ package person_row_join import adventureworks.customtypes.TypoRecord import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** SQL file: person_row_join.sql */ case class PersonRowJoinSqlRow( @@ -25,16 +23,15 @@ case class PersonRowJoinSqlRow( object PersonRowJoinSqlRow { implicit lazy val decoder: Decoder[PersonRowJoinSqlRow] = Decoder.forProduct3[PersonRowJoinSqlRow, BusinessentityId, /* nullability unknown */ Option[Array[TypoRecord]], /* nullability unknown */ Option[Array[TypoRecord]]]("businessentityid", "email", "emails")(PersonRowJoinSqlRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeArray[TypoRecord](TypoRecord.decoder, implicitly)), Decoder.decodeOption(Decoder.decodeArray[TypoRecord](TypoRecord.decoder, implicitly))) implicit lazy val encoder: Encoder[PersonRowJoinSqlRow] = Encoder.forProduct3[PersonRowJoinSqlRow, BusinessentityId, /* nullability unknown */ Option[Array[TypoRecord]], /* nullability unknown */ Option[Array[TypoRecord]]]("businessentityid", "email", "emails")(x => (x.businessentityid, x.email, x.emails))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeIterable[TypoRecord, Array](TypoRecord.encoder, implicitly)), Encoder.encodeOption(Encoder.encodeIterable[TypoRecord, Array](TypoRecord.encoder, implicitly))) - implicit lazy val read: Read[PersonRowJoinSqlRow] = new Read[PersonRowJoinSqlRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (TypoRecord.arrayGet, Nullability.Nullable), - (TypoRecord.arrayGet, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersonRowJoinSqlRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - email = TypoRecord.arrayGet.unsafeGetNullable(rs, i + 1), - emails = TypoRecord.arrayGet.unsafeGetNullable(rs, i + 2) + implicit lazy val read: Read[PersonRowJoinSqlRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoRecord.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoRecord.arrayGet).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersonRowJoinSqlRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + email = arr(1).asInstanceOf[/* nullability unknown */ Option[Array[TypoRecord]]], + emails = arr(2).asInstanceOf[/* nullability unknown */ Option[Array[TypoRecord]]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/bom/BomViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/bom/BomViewRow.scala index 2a627f7eda..c074abc852 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/bom/BomViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/bom/BomViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.product.ProductId import adventureworks.production.unitmeasure.UnitmeasureId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.bom */ case class BomViewRow( @@ -45,30 +43,29 @@ case class BomViewRow( object BomViewRow { implicit lazy val decoder: Decoder[BomViewRow] = Decoder.forProduct10[BomViewRow, Int, Int, Option[ProductId], ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], UnitmeasureId, TypoShort, BigDecimal, TypoLocalDateTime]("id", "billofmaterialsid", "productassemblyid", "componentid", "startdate", "enddate", "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate")(BomViewRow.apply)(Decoder.decodeInt, Decoder.decodeInt, Decoder.decodeOption(ProductId.decoder), ProductId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), UnitmeasureId.decoder, TypoShort.decoder, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BomViewRow] = Encoder.forProduct10[BomViewRow, Int, Int, Option[ProductId], ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], UnitmeasureId, TypoShort, BigDecimal, TypoLocalDateTime]("id", "billofmaterialsid", "productassemblyid", "componentid", "startdate", "enddate", "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate")(x => (x.id, x.billofmaterialsid, x.productassemblyid, x.componentid, x.startdate, x.enddate, x.unitmeasurecode, x.bomlevel, x.perassemblyqty, x.modifieddate))(Encoder.encodeInt, Encoder.encodeInt, Encoder.encodeOption(ProductId.encoder), ProductId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), UnitmeasureId.encoder, TypoShort.encoder, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BomViewRow] = new Read[BomViewRow]( - gets = List( - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (ProductId.get, Nullability.Nullable), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BomViewRow( - id = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 0), - billofmaterialsid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - productassemblyid = ProductId.get.unsafeGetNullable(rs, i + 2), - componentid = ProductId.get.unsafeGetNonNullable(rs, i + 3), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 5), - unitmeasurecode = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 6), - bomlevel = TypoShort.get.unsafeGetNonNullable(rs, i + 7), - perassemblyqty = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[BomViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BomViewRow( + id = arr(0).asInstanceOf[Int], + billofmaterialsid = arr(1).asInstanceOf[Int], + productassemblyid = arr(2).asInstanceOf[Option[ProductId]], + componentid = arr(3).asInstanceOf[ProductId], + startdate = arr(4).asInstanceOf[TypoLocalDateTime], + enddate = arr(5).asInstanceOf[Option[TypoLocalDateTime]], + unitmeasurecode = arr(6).asInstanceOf[UnitmeasureId], + bomlevel = arr(7).asInstanceOf[TypoShort], + perassemblyqty = arr(8).asInstanceOf[BigDecimal], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/c/CViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/c/CViewRow.scala index d7ce97bff9..a77610be1d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/c/CViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/c/CViewRow.scala @@ -10,11 +10,9 @@ package c import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.culture.CultureId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.c */ case class CViewRow( @@ -31,18 +29,17 @@ case class CViewRow( object CViewRow { implicit lazy val decoder: Decoder[CViewRow] = Decoder.forProduct4[CViewRow, CultureId, CultureId, Name, TypoLocalDateTime]("id", "cultureid", "name", "modifieddate")(CViewRow.apply)(CultureId.decoder, CultureId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CViewRow] = Encoder.forProduct4[CViewRow, CultureId, CultureId, Name, TypoLocalDateTime]("id", "cultureid", "name", "modifieddate")(x => (x.id, x.cultureid, x.name, x.modifieddate))(CultureId.encoder, CultureId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CViewRow] = new Read[CViewRow]( - gets = List( - (CultureId.get, Nullability.NoNulls), - (CultureId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CViewRow( - id = CultureId.get.unsafeGetNonNullable(rs, i + 0), - cultureid = CultureId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[CViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CultureId.get).asInstanceOf[Read[Any]], + new Read.Single(CultureId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CViewRow( + id = arr(0).asInstanceOf[CultureId], + cultureid = arr(1).asInstanceOf[CultureId], + name = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/d/DViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/d/DViewRow.scala index d3173c9c27..4e683374f1 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/d/DViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/d/DViewRow.scala @@ -14,12 +14,10 @@ import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.production.document.DocumentId import adventureworks.public.Flag -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.d */ case class DViewRow( @@ -54,36 +52,35 @@ case class DViewRow( object DViewRow { implicit lazy val decoder: Decoder[DViewRow] = Decoder.forProduct13[DViewRow, /* max 50 chars */ String, BusinessentityId, Flag, /* max 400 chars */ String, Option[/* max 8 chars */ String], /* bpchar, max 5 chars */ String, Int, TypoShort, Option[String], Option[TypoBytea], TypoUUID, TypoLocalDateTime, DocumentId]("title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate", "documentnode")(DViewRow.apply)(Decoder.decodeString, BusinessentityId.decoder, Flag.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Decoder.decodeInt, TypoShort.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoBytea.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder, DocumentId.decoder) implicit lazy val encoder: Encoder[DViewRow] = Encoder.forProduct13[DViewRow, /* max 50 chars */ String, BusinessentityId, Flag, /* max 400 chars */ String, Option[/* max 8 chars */ String], /* bpchar, max 5 chars */ String, Int, TypoShort, Option[String], Option[TypoBytea], TypoUUID, TypoLocalDateTime, DocumentId]("title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate", "documentnode")(x => (x.title, x.owner, x.folderflag, x.filename, x.fileextension, x.revision, x.changenumber, x.status, x.documentsummary, x.document, x.rowguid, x.modifieddate, x.documentnode))(Encoder.encodeString, BusinessentityId.encoder, Flag.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Encoder.encodeInt, TypoShort.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoBytea.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder, DocumentId.encoder) - implicit lazy val read: Read[DViewRow] = new Read[DViewRow]( - gets = List( - (Meta.StringMeta.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoBytea.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (DocumentId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => DViewRow( - title = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 0), - owner = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - folderflag = Flag.get.unsafeGetNonNullable(rs, i + 2), - filename = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - fileextension = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - revision = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - changenumber = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 6), - status = TypoShort.get.unsafeGetNonNullable(rs, i + 7), - documentsummary = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - document = TypoBytea.get.unsafeGetNullable(rs, i + 9), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 10), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 11), - documentnode = DocumentId.get.unsafeGetNonNullable(rs, i + 12) + implicit lazy val read: Read[DViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(DocumentId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + DViewRow( + title = arr(0).asInstanceOf[/* max 50 chars */ String], + owner = arr(1).asInstanceOf[BusinessentityId], + folderflag = arr(2).asInstanceOf[Flag], + filename = arr(3).asInstanceOf[/* max 400 chars */ String], + fileextension = arr(4).asInstanceOf[Option[/* max 8 chars */ String]], + revision = arr(5).asInstanceOf[/* bpchar, max 5 chars */ String], + changenumber = arr(6).asInstanceOf[Int], + status = arr(7).asInstanceOf[TypoShort], + documentsummary = arr(8).asInstanceOf[Option[String]], + document = arr(9).asInstanceOf[Option[TypoBytea]], + rowguid = arr(10).asInstanceOf[TypoUUID], + modifieddate = arr(11).asInstanceOf[TypoLocalDateTime], + documentnode = arr(12).asInstanceOf[DocumentId] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/i/IViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/i/IViewRow.scala index 54643334fc..675340382b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/i/IViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/i/IViewRow.scala @@ -10,11 +10,9 @@ package i import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoXml import adventureworks.production.illustration.IllustrationId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.i */ case class IViewRow( @@ -31,18 +29,17 @@ case class IViewRow( object IViewRow { implicit lazy val decoder: Decoder[IViewRow] = Decoder.forProduct4[IViewRow, IllustrationId, IllustrationId, Option[TypoXml], TypoLocalDateTime]("id", "illustrationid", "diagram", "modifieddate")(IViewRow.apply)(IllustrationId.decoder, IllustrationId.decoder, Decoder.decodeOption(TypoXml.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[IViewRow] = Encoder.forProduct4[IViewRow, IllustrationId, IllustrationId, Option[TypoXml], TypoLocalDateTime]("id", "illustrationid", "diagram", "modifieddate")(x => (x.id, x.illustrationid, x.diagram, x.modifieddate))(IllustrationId.encoder, IllustrationId.encoder, Encoder.encodeOption(TypoXml.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[IViewRow] = new Read[IViewRow]( - gets = List( - (IllustrationId.get, Nullability.NoNulls), - (IllustrationId.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => IViewRow( - id = IllustrationId.get.unsafeGetNonNullable(rs, i + 0), - illustrationid = IllustrationId.get.unsafeGetNonNullable(rs, i + 1), - diagram = TypoXml.get.unsafeGetNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[IViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(IllustrationId.get).asInstanceOf[Read[Any]], + new Read.Single(IllustrationId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + IViewRow( + id = arr(0).asInstanceOf[IllustrationId], + illustrationid = arr(1).asInstanceOf[IllustrationId], + diagram = arr(2).asInstanceOf[Option[TypoXml]], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/l/LViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/l/LViewRow.scala index d02dec29ee..0d9702d294 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/l/LViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/l/LViewRow.scala @@ -10,12 +10,10 @@ package l import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.location.LocationId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.l */ case class LViewRow( @@ -36,22 +34,21 @@ case class LViewRow( object LViewRow { implicit lazy val decoder: Decoder[LViewRow] = Decoder.forProduct6[LViewRow, LocationId, LocationId, Name, BigDecimal, BigDecimal, TypoLocalDateTime]("id", "locationid", "name", "costrate", "availability", "modifieddate")(LViewRow.apply)(LocationId.decoder, LocationId.decoder, Name.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[LViewRow] = Encoder.forProduct6[LViewRow, LocationId, LocationId, Name, BigDecimal, BigDecimal, TypoLocalDateTime]("id", "locationid", "name", "costrate", "availability", "modifieddate")(x => (x.id, x.locationid, x.name, x.costrate, x.availability, x.modifieddate))(LocationId.encoder, LocationId.encoder, Name.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[LViewRow] = new Read[LViewRow]( - gets = List( - (LocationId.get, Nullability.NoNulls), - (LocationId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => LViewRow( - id = LocationId.get.unsafeGetNonNullable(rs, i + 0), - locationid = LocationId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - costrate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - availability = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[LViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + LViewRow( + id = arr(0).asInstanceOf[LocationId], + locationid = arr(1).asInstanceOf[LocationId], + name = arr(2).asInstanceOf[Name], + costrate = arr(3).asInstanceOf[BigDecimal], + availability = arr(4).asInstanceOf[BigDecimal], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/p/PViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/p/PViewRow.scala index b86869f478..1458336a90 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/p/PViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/p/PViewRow.scala @@ -16,7 +16,6 @@ import adventureworks.production.productsubcategory.ProductsubcategoryId import adventureworks.production.unitmeasure.UnitmeasureId import adventureworks.public.Flag import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder @@ -24,7 +23,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** View: pr.p */ @@ -150,62 +148,61 @@ object PViewRow { "modifieddate" -> TypoLocalDateTime.encoder.apply(row.modifieddate) ) ) - implicit lazy val read: Read[PViewRow] = new Read[PViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (ProductsubcategoryId.get, Nullability.Nullable), - (ProductmodelId.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PViewRow( - id = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - productnumber = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - makeflag = Flag.get.unsafeGetNonNullable(rs, i + 4), - finishedgoodsflag = Flag.get.unsafeGetNonNullable(rs, i + 5), - color = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - safetystocklevel = TypoShort.get.unsafeGetNonNullable(rs, i + 7), - reorderpoint = TypoShort.get.unsafeGetNonNullable(rs, i + 8), - standardcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 9), - listprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 10), - size = Meta.StringMeta.get.unsafeGetNullable(rs, i + 11), - sizeunitmeasurecode = UnitmeasureId.get.unsafeGetNullable(rs, i + 12), - weightunitmeasurecode = UnitmeasureId.get.unsafeGetNullable(rs, i + 13), - weight = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 14), - daystomanufacture = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 15), - productline = Meta.StringMeta.get.unsafeGetNullable(rs, i + 16), - `class` = Meta.StringMeta.get.unsafeGetNullable(rs, i + 17), - style = Meta.StringMeta.get.unsafeGetNullable(rs, i + 18), - productsubcategoryid = ProductsubcategoryId.get.unsafeGetNullable(rs, i + 19), - productmodelid = ProductmodelId.get.unsafeGetNullable(rs, i + 20), - sellstartdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 21), - sellenddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 22), - discontinueddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 23), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 24), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 25) + implicit lazy val read: Read[PViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ProductsubcategoryId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PViewRow( + id = arr(0).asInstanceOf[ProductId], + productid = arr(1).asInstanceOf[ProductId], + name = arr(2).asInstanceOf[Name], + productnumber = arr(3).asInstanceOf[/* max 25 chars */ String], + makeflag = arr(4).asInstanceOf[Flag], + finishedgoodsflag = arr(5).asInstanceOf[Flag], + color = arr(6).asInstanceOf[Option[/* max 15 chars */ String]], + safetystocklevel = arr(7).asInstanceOf[TypoShort], + reorderpoint = arr(8).asInstanceOf[TypoShort], + standardcost = arr(9).asInstanceOf[BigDecimal], + listprice = arr(10).asInstanceOf[BigDecimal], + size = arr(11).asInstanceOf[Option[/* max 5 chars */ String]], + sizeunitmeasurecode = arr(12).asInstanceOf[Option[UnitmeasureId]], + weightunitmeasurecode = arr(13).asInstanceOf[Option[UnitmeasureId]], + weight = arr(14).asInstanceOf[Option[BigDecimal]], + daystomanufacture = arr(15).asInstanceOf[Int], + productline = arr(16).asInstanceOf[Option[/* bpchar, max 2 chars */ String]], + `class` = arr(17).asInstanceOf[Option[/* bpchar, max 2 chars */ String]], + style = arr(18).asInstanceOf[Option[/* bpchar, max 2 chars */ String]], + productsubcategoryid = arr(19).asInstanceOf[Option[ProductsubcategoryId]], + productmodelid = arr(20).asInstanceOf[Option[ProductmodelId]], + sellstartdate = arr(21).asInstanceOf[TypoLocalDateTime], + sellenddate = arr(22).asInstanceOf[Option[TypoLocalDateTime]], + discontinueddate = arr(23).asInstanceOf[Option[TypoLocalDateTime]], + rowguid = arr(24).asInstanceOf[TypoUUID], + modifieddate = arr(25).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pc/PcViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pc/PcViewRow.scala index 6617ca6821..c2b64c7521 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pc/PcViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pc/PcViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.productcategory.ProductcategoryId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pc */ case class PcViewRow( @@ -34,20 +32,19 @@ case class PcViewRow( object PcViewRow { implicit lazy val decoder: Decoder[PcViewRow] = Decoder.forProduct5[PcViewRow, ProductcategoryId, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("id", "productcategoryid", "name", "rowguid", "modifieddate")(PcViewRow.apply)(ProductcategoryId.decoder, ProductcategoryId.decoder, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PcViewRow] = Encoder.forProduct5[PcViewRow, ProductcategoryId, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("id", "productcategoryid", "name", "rowguid", "modifieddate")(x => (x.id, x.productcategoryid, x.name, x.rowguid, x.modifieddate))(ProductcategoryId.encoder, ProductcategoryId.encoder, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PcViewRow] = new Read[PcViewRow]( - gets = List( - (ProductcategoryId.get, Nullability.NoNulls), - (ProductcategoryId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PcViewRow( - id = ProductcategoryId.get.unsafeGetNonNullable(rs, i + 0), - productcategoryid = ProductcategoryId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[PcViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PcViewRow( + id = arr(0).asInstanceOf[ProductcategoryId], + productcategoryid = arr(1).asInstanceOf[ProductcategoryId], + name = arr(2).asInstanceOf[Name], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pch/PchViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pch/PchViewRow.scala index a589728e9d..25d6937376 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pch/PchViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pch/PchViewRow.scala @@ -9,12 +9,10 @@ package pch import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pch */ case class PchViewRow( @@ -35,22 +33,21 @@ case class PchViewRow( object PchViewRow { implicit lazy val decoder: Decoder[PchViewRow] = Decoder.forProduct6[PchViewRow, ProductId, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("id", "productid", "startdate", "enddate", "standardcost", "modifieddate")(PchViewRow.apply)(ProductId.decoder, ProductId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PchViewRow] = Encoder.forProduct6[PchViewRow, ProductId, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("id", "productid", "startdate", "enddate", "standardcost", "modifieddate")(x => (x.id, x.productid, x.startdate, x.enddate, x.standardcost, x.modifieddate))(ProductId.encoder, ProductId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PchViewRow] = new Read[PchViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PchViewRow( - id = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 3), - standardcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[PchViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PchViewRow( + id = arr(0).asInstanceOf[ProductId], + productid = arr(1).asInstanceOf[ProductId], + startdate = arr(2).asInstanceOf[TypoLocalDateTime], + enddate = arr(3).asInstanceOf[Option[TypoLocalDateTime]], + standardcost = arr(4).asInstanceOf[BigDecimal], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pd/PdViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pd/PdViewRow.scala index e0fb562347..c8d525960c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pd/PdViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pd/PdViewRow.scala @@ -10,12 +10,10 @@ package pd import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.productdescription.ProductdescriptionId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pd */ case class PdViewRow( @@ -34,20 +32,19 @@ case class PdViewRow( object PdViewRow { implicit lazy val decoder: Decoder[PdViewRow] = Decoder.forProduct5[PdViewRow, ProductdescriptionId, ProductdescriptionId, /* max 400 chars */ String, TypoUUID, TypoLocalDateTime]("id", "productdescriptionid", "description", "rowguid", "modifieddate")(PdViewRow.apply)(ProductdescriptionId.decoder, ProductdescriptionId.decoder, Decoder.decodeString, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PdViewRow] = Encoder.forProduct5[PdViewRow, ProductdescriptionId, ProductdescriptionId, /* max 400 chars */ String, TypoUUID, TypoLocalDateTime]("id", "productdescriptionid", "description", "rowguid", "modifieddate")(x => (x.id, x.productdescriptionid, x.description, x.rowguid, x.modifieddate))(ProductdescriptionId.encoder, ProductdescriptionId.encoder, Encoder.encodeString, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PdViewRow] = new Read[PdViewRow]( - gets = List( - (ProductdescriptionId.get, Nullability.NoNulls), - (ProductdescriptionId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PdViewRow( - id = ProductdescriptionId.get.unsafeGetNonNullable(rs, i + 0), - productdescriptionid = ProductdescriptionId.get.unsafeGetNonNullable(rs, i + 1), - description = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[PdViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductdescriptionId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductdescriptionId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PdViewRow( + id = arr(0).asInstanceOf[ProductdescriptionId], + productdescriptionid = arr(1).asInstanceOf[ProductdescriptionId], + description = arr(2).asInstanceOf[/* max 400 chars */ String], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pdoc/PdocViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pdoc/PdocViewRow.scala index e2f8c260dd..eed17fa62e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pdoc/PdocViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pdoc/PdocViewRow.scala @@ -10,11 +10,9 @@ package pdoc import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.document.DocumentId import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pdoc */ case class PdocViewRow( @@ -31,18 +29,17 @@ case class PdocViewRow( object PdocViewRow { implicit lazy val decoder: Decoder[PdocViewRow] = Decoder.forProduct4[PdocViewRow, ProductId, ProductId, TypoLocalDateTime, DocumentId]("id", "productid", "modifieddate", "documentnode")(PdocViewRow.apply)(ProductId.decoder, ProductId.decoder, TypoLocalDateTime.decoder, DocumentId.decoder) implicit lazy val encoder: Encoder[PdocViewRow] = Encoder.forProduct4[PdocViewRow, ProductId, ProductId, TypoLocalDateTime, DocumentId]("id", "productid", "modifieddate", "documentnode")(x => (x.id, x.productid, x.modifieddate, x.documentnode))(ProductId.encoder, ProductId.encoder, TypoLocalDateTime.encoder, DocumentId.encoder) - implicit lazy val read: Read[PdocViewRow] = new Read[PdocViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (DocumentId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PdocViewRow( - id = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - documentnode = DocumentId.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PdocViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(DocumentId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PdocViewRow( + id = arr(0).asInstanceOf[ProductId], + productid = arr(1).asInstanceOf[ProductId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime], + documentnode = arr(3).asInstanceOf[DocumentId] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pi/PiViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pi/PiViewRow.scala index fbdbacbda4..ce0ea0c8b8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pi/PiViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pi/PiViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.production.location.LocationId import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pi */ case class PiViewRow( @@ -42,26 +40,25 @@ case class PiViewRow( object PiViewRow { implicit lazy val decoder: Decoder[PiViewRow] = Decoder.forProduct8[PiViewRow, ProductId, ProductId, LocationId, /* max 10 chars */ String, TypoShort, TypoShort, TypoUUID, TypoLocalDateTime]("id", "productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate")(PiViewRow.apply)(ProductId.decoder, ProductId.decoder, LocationId.decoder, Decoder.decodeString, TypoShort.decoder, TypoShort.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PiViewRow] = Encoder.forProduct8[PiViewRow, ProductId, ProductId, LocationId, /* max 10 chars */ String, TypoShort, TypoShort, TypoUUID, TypoLocalDateTime]("id", "productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate")(x => (x.id, x.productid, x.locationid, x.shelf, x.bin, x.quantity, x.rowguid, x.modifieddate))(ProductId.encoder, ProductId.encoder, LocationId.encoder, Encoder.encodeString, TypoShort.encoder, TypoShort.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PiViewRow] = new Read[PiViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (LocationId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PiViewRow( - id = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - locationid = LocationId.get.unsafeGetNonNullable(rs, i + 2), - shelf = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - bin = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - quantity = TypoShort.get.unsafeGetNonNullable(rs, i + 5), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 6), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7) + implicit lazy val read: Read[PiViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PiViewRow( + id = arr(0).asInstanceOf[ProductId], + productid = arr(1).asInstanceOf[ProductId], + locationid = arr(2).asInstanceOf[LocationId], + shelf = arr(3).asInstanceOf[/* max 10 chars */ String], + bin = arr(4).asInstanceOf[TypoShort], + quantity = arr(5).asInstanceOf[TypoShort], + rowguid = arr(6).asInstanceOf[TypoUUID], + modifieddate = arr(7).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/plph/PlphViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/plph/PlphViewRow.scala index 63f4d9e900..ae135b8718 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/plph/PlphViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/plph/PlphViewRow.scala @@ -9,12 +9,10 @@ package plph import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.plph */ case class PlphViewRow( @@ -35,22 +33,21 @@ case class PlphViewRow( object PlphViewRow { implicit lazy val decoder: Decoder[PlphViewRow] = Decoder.forProduct6[PlphViewRow, ProductId, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("id", "productid", "startdate", "enddate", "listprice", "modifieddate")(PlphViewRow.apply)(ProductId.decoder, ProductId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PlphViewRow] = Encoder.forProduct6[PlphViewRow, ProductId, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("id", "productid", "startdate", "enddate", "listprice", "modifieddate")(x => (x.id, x.productid, x.startdate, x.enddate, x.listprice, x.modifieddate))(ProductId.encoder, ProductId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PlphViewRow] = new Read[PlphViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PlphViewRow( - id = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 3), - listprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[PlphViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PlphViewRow( + id = arr(0).asInstanceOf[ProductId], + productid = arr(1).asInstanceOf[ProductId], + startdate = arr(2).asInstanceOf[TypoLocalDateTime], + enddate = arr(3).asInstanceOf[Option[TypoLocalDateTime]], + listprice = arr(4).asInstanceOf[BigDecimal], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pm/PmViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pm/PmViewRow.scala index c1e652e5aa..dc2f05dc7b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pm/PmViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pm/PmViewRow.scala @@ -12,11 +12,9 @@ import adventureworks.customtypes.TypoUUID import adventureworks.customtypes.TypoXml import adventureworks.production.productmodel.ProductmodelId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pm */ case class PmViewRow( @@ -39,24 +37,23 @@ case class PmViewRow( object PmViewRow { implicit lazy val decoder: Decoder[PmViewRow] = Decoder.forProduct7[PmViewRow, ProductmodelId, ProductmodelId, Name, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("id", "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate")(PmViewRow.apply)(ProductmodelId.decoder, ProductmodelId.decoder, Name.decoder, Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PmViewRow] = Encoder.forProduct7[PmViewRow, ProductmodelId, ProductmodelId, Name, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("id", "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate")(x => (x.id, x.productmodelid, x.name, x.catalogdescription, x.instructions, x.rowguid, x.modifieddate))(ProductmodelId.encoder, ProductmodelId.encoder, Name.encoder, Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PmViewRow] = new Read[PmViewRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (ProductmodelId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PmViewRow( - id = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - catalogdescription = TypoXml.get.unsafeGetNullable(rs, i + 3), - instructions = TypoXml.get.unsafeGetNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[PmViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PmViewRow( + id = arr(0).asInstanceOf[ProductmodelId], + productmodelid = arr(1).asInstanceOf[ProductmodelId], + name = arr(2).asInstanceOf[Name], + catalogdescription = arr(3).asInstanceOf[Option[TypoXml]], + instructions = arr(4).asInstanceOf[Option[TypoXml]], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmi/PmiViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmi/PmiViewRow.scala index 9e4f463e67..4f34addcac 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmi/PmiViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmi/PmiViewRow.scala @@ -10,11 +10,9 @@ package pmi import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.illustration.IllustrationId import adventureworks.production.productmodel.ProductmodelId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pmi */ case class PmiViewRow( @@ -29,16 +27,15 @@ case class PmiViewRow( object PmiViewRow { implicit lazy val decoder: Decoder[PmiViewRow] = Decoder.forProduct3[PmiViewRow, ProductmodelId, IllustrationId, TypoLocalDateTime]("productmodelid", "illustrationid", "modifieddate")(PmiViewRow.apply)(ProductmodelId.decoder, IllustrationId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PmiViewRow] = Encoder.forProduct3[PmiViewRow, ProductmodelId, IllustrationId, TypoLocalDateTime]("productmodelid", "illustrationid", "modifieddate")(x => (x.productmodelid, x.illustrationid, x.modifieddate))(ProductmodelId.encoder, IllustrationId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PmiViewRow] = new Read[PmiViewRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (IllustrationId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PmiViewRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - illustrationid = IllustrationId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[PmiViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(IllustrationId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PmiViewRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + illustrationid = arr(1).asInstanceOf[IllustrationId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmpdc/PmpdcViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmpdc/PmpdcViewRow.scala index 3db176bff3..662df0d79d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmpdc/PmpdcViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pmpdc/PmpdcViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.culture.CultureId import adventureworks.production.productdescription.ProductdescriptionId import adventureworks.production.productmodel.ProductmodelId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pmpdc */ case class PmpdcViewRow( @@ -32,18 +30,17 @@ case class PmpdcViewRow( object PmpdcViewRow { implicit lazy val decoder: Decoder[PmpdcViewRow] = Decoder.forProduct4[PmpdcViewRow, ProductmodelId, ProductdescriptionId, CultureId, TypoLocalDateTime]("productmodelid", "productdescriptionid", "cultureid", "modifieddate")(PmpdcViewRow.apply)(ProductmodelId.decoder, ProductdescriptionId.decoder, CultureId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PmpdcViewRow] = Encoder.forProduct4[PmpdcViewRow, ProductmodelId, ProductdescriptionId, CultureId, TypoLocalDateTime]("productmodelid", "productdescriptionid", "cultureid", "modifieddate")(x => (x.productmodelid, x.productdescriptionid, x.cultureid, x.modifieddate))(ProductmodelId.encoder, ProductdescriptionId.encoder, CultureId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PmpdcViewRow] = new Read[PmpdcViewRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (ProductdescriptionId.get, Nullability.NoNulls), - (CultureId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PmpdcViewRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - productdescriptionid = ProductdescriptionId.get.unsafeGetNonNullable(rs, i + 1), - cultureid = CultureId.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PmpdcViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductdescriptionId.get).asInstanceOf[Read[Any]], + new Read.Single(CultureId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PmpdcViewRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + productdescriptionid = arr(1).asInstanceOf[ProductdescriptionId], + cultureid = arr(2).asInstanceOf[CultureId], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pp/PpViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pp/PpViewRow.scala index e6f76cffbf..cebaab4fac 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pp/PpViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pp/PpViewRow.scala @@ -10,12 +10,10 @@ package pp import adventureworks.customtypes.TypoBytea import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.productphoto.ProductphotoId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pp */ case class PpViewRow( @@ -38,24 +36,23 @@ case class PpViewRow( object PpViewRow { implicit lazy val decoder: Decoder[PpViewRow] = Decoder.forProduct7[PpViewRow, ProductphotoId, ProductphotoId, Option[TypoBytea], Option[/* max 50 chars */ String], Option[TypoBytea], Option[/* max 50 chars */ String], TypoLocalDateTime]("id", "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate")(PpViewRow.apply)(ProductphotoId.decoder, ProductphotoId.decoder, Decoder.decodeOption(TypoBytea.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoBytea.decoder), Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PpViewRow] = Encoder.forProduct7[PpViewRow, ProductphotoId, ProductphotoId, Option[TypoBytea], Option[/* max 50 chars */ String], Option[TypoBytea], Option[/* max 50 chars */ String], TypoLocalDateTime]("id", "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate")(x => (x.id, x.productphotoid, x.thumbnailphoto, x.thumbnailphotofilename, x.largephoto, x.largephotofilename, x.modifieddate))(ProductphotoId.encoder, ProductphotoId.encoder, Encoder.encodeOption(TypoBytea.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoBytea.encoder), Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[PpViewRow] = new Read[PpViewRow]( - gets = List( - (ProductphotoId.get, Nullability.NoNulls), - (ProductphotoId.get, Nullability.NoNulls), - (TypoBytea.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoBytea.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PpViewRow( - id = ProductphotoId.get.unsafeGetNonNullable(rs, i + 0), - productphotoid = ProductphotoId.get.unsafeGetNonNullable(rs, i + 1), - thumbnailphoto = TypoBytea.get.unsafeGetNullable(rs, i + 2), - thumbnailphotofilename = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - largephoto = TypoBytea.get.unsafeGetNullable(rs, i + 4), - largephotofilename = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[PpViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductphotoId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductphotoId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PpViewRow( + id = arr(0).asInstanceOf[ProductphotoId], + productphotoid = arr(1).asInstanceOf[ProductphotoId], + thumbnailphoto = arr(2).asInstanceOf[Option[TypoBytea]], + thumbnailphotofilename = arr(3).asInstanceOf[Option[/* max 50 chars */ String]], + largephoto = arr(4).asInstanceOf[Option[TypoBytea]], + largephotofilename = arr(5).asInstanceOf[Option[/* max 50 chars */ String]], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/ppp/PppViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/ppp/PppViewRow.scala index 17c9d2651b..b708f4d601 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/ppp/PppViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/ppp/PppViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId import adventureworks.production.productphoto.ProductphotoId import adventureworks.public.Flag -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.ppp */ case class PppViewRow( @@ -32,18 +30,17 @@ case class PppViewRow( object PppViewRow { implicit lazy val decoder: Decoder[PppViewRow] = Decoder.forProduct4[PppViewRow, ProductId, ProductphotoId, Flag, TypoLocalDateTime]("productid", "productphotoid", "primary", "modifieddate")(PppViewRow.apply)(ProductId.decoder, ProductphotoId.decoder, Flag.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PppViewRow] = Encoder.forProduct4[PppViewRow, ProductId, ProductphotoId, Flag, TypoLocalDateTime]("productid", "productphotoid", "primary", "modifieddate")(x => (x.productid, x.productphotoid, x.primary, x.modifieddate))(ProductId.encoder, ProductphotoId.encoder, Flag.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PppViewRow] = new Read[PppViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductphotoId.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PppViewRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productphotoid = ProductphotoId.get.unsafeGetNonNullable(rs, i + 1), - primary = Flag.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PppViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductphotoId.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PppViewRow( + productid = arr(0).asInstanceOf[ProductId], + productphotoid = arr(1).asInstanceOf[ProductphotoId], + primary = arr(2).asInstanceOf[Flag], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pr/PrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pr/PrViewRow.scala index 066a505c17..3b37cf1131 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pr/PrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/pr/PrViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId import adventureworks.production.productreview.ProductreviewId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.pr */ case class PrViewRow( @@ -43,28 +41,27 @@ case class PrViewRow( object PrViewRow { implicit lazy val decoder: Decoder[PrViewRow] = Decoder.forProduct9[PrViewRow, ProductreviewId, ProductreviewId, ProductId, Name, TypoLocalDateTime, /* max 50 chars */ String, Int, Option[/* max 3850 chars */ String], TypoLocalDateTime]("id", "productreviewid", "productid", "reviewername", "reviewdate", "emailaddress", "rating", "comments", "modifieddate")(PrViewRow.apply)(ProductreviewId.decoder, ProductreviewId.decoder, ProductId.decoder, Name.decoder, TypoLocalDateTime.decoder, Decoder.decodeString, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PrViewRow] = Encoder.forProduct9[PrViewRow, ProductreviewId, ProductreviewId, ProductId, Name, TypoLocalDateTime, /* max 50 chars */ String, Int, Option[/* max 3850 chars */ String], TypoLocalDateTime]("id", "productreviewid", "productid", "reviewername", "reviewdate", "emailaddress", "rating", "comments", "modifieddate")(x => (x.id, x.productreviewid, x.productid, x.reviewername, x.reviewdate, x.emailaddress, x.rating, x.comments, x.modifieddate))(ProductreviewId.encoder, ProductreviewId.encoder, ProductId.encoder, Name.encoder, TypoLocalDateTime.encoder, Encoder.encodeString, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[PrViewRow] = new Read[PrViewRow]( - gets = List( - (ProductreviewId.get, Nullability.NoNulls), - (ProductreviewId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PrViewRow( - id = ProductreviewId.get.unsafeGetNonNullable(rs, i + 0), - productreviewid = ProductreviewId.get.unsafeGetNonNullable(rs, i + 1), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 2), - reviewername = Name.get.unsafeGetNonNullable(rs, i + 3), - reviewdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - emailaddress = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - rating = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 6), - comments = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[PrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductreviewId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductreviewId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PrViewRow( + id = arr(0).asInstanceOf[ProductreviewId], + productreviewid = arr(1).asInstanceOf[ProductreviewId], + productid = arr(2).asInstanceOf[ProductId], + reviewername = arr(3).asInstanceOf[Name], + reviewdate = arr(4).asInstanceOf[TypoLocalDateTime], + emailaddress = arr(5).asInstanceOf[/* max 50 chars */ String], + rating = arr(6).asInstanceOf[Int], + comments = arr(7).asInstanceOf[Option[/* max 3850 chars */ String]], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/psc/PscViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/psc/PscViewRow.scala index 57655cf9a7..7c5b0bb711 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/psc/PscViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/psc/PscViewRow.scala @@ -12,11 +12,9 @@ import adventureworks.customtypes.TypoUUID import adventureworks.production.productcategory.ProductcategoryId import adventureworks.production.productsubcategory.ProductsubcategoryId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.psc */ case class PscViewRow( @@ -37,22 +35,21 @@ case class PscViewRow( object PscViewRow { implicit lazy val decoder: Decoder[PscViewRow] = Decoder.forProduct6[PscViewRow, ProductsubcategoryId, ProductsubcategoryId, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("id", "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate")(PscViewRow.apply)(ProductsubcategoryId.decoder, ProductsubcategoryId.decoder, ProductcategoryId.decoder, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PscViewRow] = Encoder.forProduct6[PscViewRow, ProductsubcategoryId, ProductsubcategoryId, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("id", "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate")(x => (x.id, x.productsubcategoryid, x.productcategoryid, x.name, x.rowguid, x.modifieddate))(ProductsubcategoryId.encoder, ProductsubcategoryId.encoder, ProductcategoryId.encoder, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PscViewRow] = new Read[PscViewRow]( - gets = List( - (ProductsubcategoryId.get, Nullability.NoNulls), - (ProductsubcategoryId.get, Nullability.NoNulls), - (ProductcategoryId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PscViewRow( - id = ProductsubcategoryId.get.unsafeGetNonNullable(rs, i + 0), - productsubcategoryid = ProductsubcategoryId.get.unsafeGetNonNullable(rs, i + 1), - productcategoryid = ProductcategoryId.get.unsafeGetNonNullable(rs, i + 2), - name = Name.get.unsafeGetNonNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[PscViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductsubcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductsubcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PscViewRow( + id = arr(0).asInstanceOf[ProductsubcategoryId], + productsubcategoryid = arr(1).asInstanceOf[ProductsubcategoryId], + productcategoryid = arr(2).asInstanceOf[ProductcategoryId], + name = arr(3).asInstanceOf[Name], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/sr/SrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/sr/SrViewRow.scala index 8afef3f26f..38abaf398e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/sr/SrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/sr/SrViewRow.scala @@ -10,11 +10,9 @@ package sr import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.scrapreason.ScrapreasonId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.sr */ case class SrViewRow( @@ -31,18 +29,17 @@ case class SrViewRow( object SrViewRow { implicit lazy val decoder: Decoder[SrViewRow] = Decoder.forProduct4[SrViewRow, ScrapreasonId, ScrapreasonId, Name, TypoLocalDateTime]("id", "scrapreasonid", "name", "modifieddate")(SrViewRow.apply)(ScrapreasonId.decoder, ScrapreasonId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SrViewRow] = Encoder.forProduct4[SrViewRow, ScrapreasonId, ScrapreasonId, Name, TypoLocalDateTime]("id", "scrapreasonid", "name", "modifieddate")(x => (x.id, x.scrapreasonid, x.name, x.modifieddate))(ScrapreasonId.encoder, ScrapreasonId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SrViewRow] = new Read[SrViewRow]( - gets = List( - (ScrapreasonId.get, Nullability.NoNulls), - (ScrapreasonId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SrViewRow( - id = ScrapreasonId.get.unsafeGetNonNullable(rs, i + 0), - scrapreasonid = ScrapreasonId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[SrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ScrapreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(ScrapreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SrViewRow( + id = arr(0).asInstanceOf[ScrapreasonId], + scrapreasonid = arr(1).asInstanceOf[ScrapreasonId], + name = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/th/ThViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/th/ThViewRow.scala index 864269bf9d..4e1af02d3a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/th/ThViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/th/ThViewRow.scala @@ -10,12 +10,10 @@ package th import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId import adventureworks.production.transactionhistory.TransactionhistoryId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.th */ case class ThViewRow( @@ -44,30 +42,29 @@ case class ThViewRow( object ThViewRow { implicit lazy val decoder: Decoder[ThViewRow] = Decoder.forProduct10[ThViewRow, TransactionhistoryId, TransactionhistoryId, ProductId, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("id", "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(ThViewRow.apply)(TransactionhistoryId.decoder, TransactionhistoryId.decoder, ProductId.decoder, Decoder.decodeInt, Decoder.decodeInt, TypoLocalDateTime.decoder, Decoder.decodeString, Decoder.decodeInt, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ThViewRow] = Encoder.forProduct10[ThViewRow, TransactionhistoryId, TransactionhistoryId, ProductId, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("id", "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(x => (x.id, x.transactionid, x.productid, x.referenceorderid, x.referenceorderlineid, x.transactiondate, x.transactiontype, x.quantity, x.actualcost, x.modifieddate))(TransactionhistoryId.encoder, TransactionhistoryId.encoder, ProductId.encoder, Encoder.encodeInt, Encoder.encodeInt, TypoLocalDateTime.encoder, Encoder.encodeString, Encoder.encodeInt, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ThViewRow] = new Read[ThViewRow]( - gets = List( - (TransactionhistoryId.get, Nullability.NoNulls), - (TransactionhistoryId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ThViewRow( - id = TransactionhistoryId.get.unsafeGetNonNullable(rs, i + 0), - transactionid = TransactionhistoryId.get.unsafeGetNonNullable(rs, i + 1), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 2), - referenceorderid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - referenceorderlineid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 4), - transactiondate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - transactiontype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - quantity = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 7), - actualcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[ThViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TransactionhistoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TransactionhistoryId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ThViewRow( + id = arr(0).asInstanceOf[TransactionhistoryId], + transactionid = arr(1).asInstanceOf[TransactionhistoryId], + productid = arr(2).asInstanceOf[ProductId], + referenceorderid = arr(3).asInstanceOf[Int], + referenceorderlineid = arr(4).asInstanceOf[Int], + transactiondate = arr(5).asInstanceOf[TypoLocalDateTime], + transactiontype = arr(6).asInstanceOf[/* bpchar, max 1 chars */ String], + quantity = arr(7).asInstanceOf[Int], + actualcost = arr(8).asInstanceOf[BigDecimal], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/tha/ThaViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/tha/ThaViewRow.scala index c3f99c09a7..004a8594b7 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/tha/ThaViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/tha/ThaViewRow.scala @@ -9,12 +9,10 @@ package tha import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.transactionhistoryarchive.TransactionhistoryarchiveId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.tha */ case class ThaViewRow( @@ -43,30 +41,29 @@ case class ThaViewRow( object ThaViewRow { implicit lazy val decoder: Decoder[ThaViewRow] = Decoder.forProduct10[ThaViewRow, TransactionhistoryarchiveId, TransactionhistoryarchiveId, Int, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("id", "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(ThaViewRow.apply)(TransactionhistoryarchiveId.decoder, TransactionhistoryarchiveId.decoder, Decoder.decodeInt, Decoder.decodeInt, Decoder.decodeInt, TypoLocalDateTime.decoder, Decoder.decodeString, Decoder.decodeInt, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ThaViewRow] = Encoder.forProduct10[ThaViewRow, TransactionhistoryarchiveId, TransactionhistoryarchiveId, Int, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("id", "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(x => (x.id, x.transactionid, x.productid, x.referenceorderid, x.referenceorderlineid, x.transactiondate, x.transactiontype, x.quantity, x.actualcost, x.modifieddate))(TransactionhistoryarchiveId.encoder, TransactionhistoryarchiveId.encoder, Encoder.encodeInt, Encoder.encodeInt, Encoder.encodeInt, TypoLocalDateTime.encoder, Encoder.encodeString, Encoder.encodeInt, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ThaViewRow] = new Read[ThaViewRow]( - gets = List( - (TransactionhistoryarchiveId.get, Nullability.NoNulls), - (TransactionhistoryarchiveId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ThaViewRow( - id = TransactionhistoryarchiveId.get.unsafeGetNonNullable(rs, i + 0), - transactionid = TransactionhistoryarchiveId.get.unsafeGetNonNullable(rs, i + 1), - productid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - referenceorderid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - referenceorderlineid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 4), - transactiondate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - transactiontype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - quantity = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 7), - actualcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[ThaViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TransactionhistoryarchiveId.get).asInstanceOf[Read[Any]], + new Read.Single(TransactionhistoryarchiveId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ThaViewRow( + id = arr(0).asInstanceOf[TransactionhistoryarchiveId], + transactionid = arr(1).asInstanceOf[TransactionhistoryarchiveId], + productid = arr(2).asInstanceOf[Int], + referenceorderid = arr(3).asInstanceOf[Int], + referenceorderlineid = arr(4).asInstanceOf[Int], + transactiondate = arr(5).asInstanceOf[TypoLocalDateTime], + transactiontype = arr(6).asInstanceOf[/* bpchar, max 1 chars */ String], + quantity = arr(7).asInstanceOf[Int], + actualcost = arr(8).asInstanceOf[BigDecimal], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/um/UmViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/um/UmViewRow.scala index d4e5348974..b7a7e94e68 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/um/UmViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/um/UmViewRow.scala @@ -10,11 +10,9 @@ package um import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.unitmeasure.UnitmeasureId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.um */ case class UmViewRow( @@ -31,18 +29,17 @@ case class UmViewRow( object UmViewRow { implicit lazy val decoder: Decoder[UmViewRow] = Decoder.forProduct4[UmViewRow, UnitmeasureId, UnitmeasureId, Name, TypoLocalDateTime]("id", "unitmeasurecode", "name", "modifieddate")(UmViewRow.apply)(UnitmeasureId.decoder, UnitmeasureId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[UmViewRow] = Encoder.forProduct4[UmViewRow, UnitmeasureId, UnitmeasureId, Name, TypoLocalDateTime]("id", "unitmeasurecode", "name", "modifieddate")(x => (x.id, x.unitmeasurecode, x.name, x.modifieddate))(UnitmeasureId.encoder, UnitmeasureId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[UmViewRow] = new Read[UmViewRow]( - gets = List( - (UnitmeasureId.get, Nullability.NoNulls), - (UnitmeasureId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => UmViewRow( - id = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 0), - unitmeasurecode = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[UmViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + UmViewRow( + id = arr(0).asInstanceOf[UnitmeasureId], + unitmeasurecode = arr(1).asInstanceOf[UnitmeasureId], + name = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/w/WViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/w/WViewRow.scala index 60963eaeef..9d7a09a248 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/w/WViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/w/WViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.customtypes.TypoShort import adventureworks.production.product.ProductId import adventureworks.production.scrapreason.ScrapreasonId import adventureworks.production.workorder.WorkorderId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.w */ case class WViewRow( @@ -46,30 +44,29 @@ case class WViewRow( object WViewRow { implicit lazy val decoder: Decoder[WViewRow] = Decoder.forProduct10[WViewRow, WorkorderId, WorkorderId, ProductId, Int, TypoShort, TypoLocalDateTime, Option[TypoLocalDateTime], TypoLocalDateTime, Option[ScrapreasonId], TypoLocalDateTime]("id", "workorderid", "productid", "orderqty", "scrappedqty", "startdate", "enddate", "duedate", "scrapreasonid", "modifieddate")(WViewRow.apply)(WorkorderId.decoder, WorkorderId.decoder, ProductId.decoder, Decoder.decodeInt, TypoShort.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), TypoLocalDateTime.decoder, Decoder.decodeOption(ScrapreasonId.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[WViewRow] = Encoder.forProduct10[WViewRow, WorkorderId, WorkorderId, ProductId, Int, TypoShort, TypoLocalDateTime, Option[TypoLocalDateTime], TypoLocalDateTime, Option[ScrapreasonId], TypoLocalDateTime]("id", "workorderid", "productid", "orderqty", "scrappedqty", "startdate", "enddate", "duedate", "scrapreasonid", "modifieddate")(x => (x.id, x.workorderid, x.productid, x.orderqty, x.scrappedqty, x.startdate, x.enddate, x.duedate, x.scrapreasonid, x.modifieddate))(WorkorderId.encoder, WorkorderId.encoder, ProductId.encoder, Encoder.encodeInt, TypoShort.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), TypoLocalDateTime.encoder, Encoder.encodeOption(ScrapreasonId.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[WViewRow] = new Read[WViewRow]( - gets = List( - (WorkorderId.get, Nullability.NoNulls), - (WorkorderId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls), - (ScrapreasonId.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => WViewRow( - id = WorkorderId.get.unsafeGetNonNullable(rs, i + 0), - workorderid = WorkorderId.get.unsafeGetNonNullable(rs, i + 1), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 2), - orderqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - scrappedqty = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 6), - duedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7), - scrapreasonid = ScrapreasonId.get.unsafeGetNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[WViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(WorkorderId.get).asInstanceOf[Read[Any]], + new Read.Single(WorkorderId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ScrapreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + WViewRow( + id = arr(0).asInstanceOf[WorkorderId], + workorderid = arr(1).asInstanceOf[WorkorderId], + productid = arr(2).asInstanceOf[ProductId], + orderqty = arr(3).asInstanceOf[Int], + scrappedqty = arr(4).asInstanceOf[TypoShort], + startdate = arr(5).asInstanceOf[TypoLocalDateTime], + enddate = arr(6).asInstanceOf[Option[TypoLocalDateTime]], + duedate = arr(7).asInstanceOf[TypoLocalDateTime], + scrapreasonid = arr(8).asInstanceOf[Option[ScrapreasonId]], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/wr/WrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/wr/WrViewRow.scala index bf1a848040..814efc963a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/wr/WrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pr/wr/WrViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.location.LocationId import adventureworks.production.workorder.WorkorderId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pr.wr */ case class WrViewRow( @@ -51,36 +49,35 @@ case class WrViewRow( object WrViewRow { implicit lazy val decoder: Decoder[WrViewRow] = Decoder.forProduct13[WrViewRow, WorkorderId, WorkorderId, Int, TypoShort, LocationId, TypoLocalDateTime, TypoLocalDateTime, Option[TypoLocalDateTime], Option[TypoLocalDateTime], Option[BigDecimal], BigDecimal, Option[BigDecimal], TypoLocalDateTime]("id", "workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate", "scheduledenddate", "actualstartdate", "actualenddate", "actualresourcehrs", "plannedcost", "actualcost", "modifieddate")(WrViewRow.apply)(WorkorderId.decoder, WorkorderId.decoder, Decoder.decodeInt, TypoShort.decoder, LocationId.decoder, TypoLocalDateTime.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeBigDecimal, Decoder.decodeOption(Decoder.decodeBigDecimal), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[WrViewRow] = Encoder.forProduct13[WrViewRow, WorkorderId, WorkorderId, Int, TypoShort, LocationId, TypoLocalDateTime, TypoLocalDateTime, Option[TypoLocalDateTime], Option[TypoLocalDateTime], Option[BigDecimal], BigDecimal, Option[BigDecimal], TypoLocalDateTime]("id", "workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate", "scheduledenddate", "actualstartdate", "actualenddate", "actualresourcehrs", "plannedcost", "actualcost", "modifieddate")(x => (x.id, x.workorderid, x.productid, x.operationsequence, x.locationid, x.scheduledstartdate, x.scheduledenddate, x.actualstartdate, x.actualenddate, x.actualresourcehrs, x.plannedcost, x.actualcost, x.modifieddate))(WorkorderId.encoder, WorkorderId.encoder, Encoder.encodeInt, TypoShort.encoder, LocationId.encoder, TypoLocalDateTime.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeBigDecimal, Encoder.encodeOption(Encoder.encodeBigDecimal), TypoLocalDateTime.encoder) - implicit lazy val read: Read[WrViewRow] = new Read[WrViewRow]( - gets = List( - (WorkorderId.get, Nullability.NoNulls), - (WorkorderId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (LocationId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => WrViewRow( - id = WorkorderId.get.unsafeGetNonNullable(rs, i + 0), - workorderid = WorkorderId.get.unsafeGetNonNullable(rs, i + 1), - productid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - operationsequence = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - locationid = LocationId.get.unsafeGetNonNullable(rs, i + 4), - scheduledstartdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - scheduledenddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6), - actualstartdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 7), - actualenddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 8), - actualresourcehrs = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 9), - plannedcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 10), - actualcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 11), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 12) + implicit lazy val read: Read[WrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(WorkorderId.get).asInstanceOf[Read[Any]], + new Read.Single(WorkorderId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + WrViewRow( + id = arr(0).asInstanceOf[WorkorderId], + workorderid = arr(1).asInstanceOf[WorkorderId], + productid = arr(2).asInstanceOf[Int], + operationsequence = arr(3).asInstanceOf[TypoShort], + locationid = arr(4).asInstanceOf[LocationId], + scheduledstartdate = arr(5).asInstanceOf[TypoLocalDateTime], + scheduledenddate = arr(6).asInstanceOf[TypoLocalDateTime], + actualstartdate = arr(7).asInstanceOf[Option[TypoLocalDateTime]], + actualenddate = arr(8).asInstanceOf[Option[TypoLocalDateTime]], + actualresourcehrs = arr(9).asInstanceOf[Option[BigDecimal]], + plannedcost = arr(10).asInstanceOf[BigDecimal], + actualcost = arr(11).asInstanceOf[Option[BigDecimal]], + modifieddate = arr(12).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRepoImpl.scala index de8a5d4ecf..739746c610 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRepoImpl.scala @@ -32,39 +32,39 @@ class BillofmaterialsRepoImpl extends BillofmaterialsRepo { DeleteBuilder(""""production"."billofmaterials"""", BillofmaterialsFields.structure) } override def deleteById(billofmaterialsid: Int): ConnectionIO[Boolean] = { - sql"""delete from "production"."billofmaterials" where "billofmaterialsid" = ${fromWrite(billofmaterialsid)(Write.fromPut(Meta.IntMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."billofmaterials" where "billofmaterialsid" = ${fromWrite(billofmaterialsid)(new Write.Single(Meta.IntMeta.put))}""".update.run.map(_ > 0) } override def deleteByIds(billofmaterialsids: Array[Int]): ConnectionIO[Int] = { sql"""delete from "production"."billofmaterials" where "billofmaterialsid" = ANY(${billofmaterialsids})""".update.run } override def insert(unsaved: BillofmaterialsRow): ConnectionIO[BillofmaterialsRow] = { sql"""insert into "production"."billofmaterials"("billofmaterialsid", "productassemblyid", "componentid", "startdate", "enddate", "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate") - values (${fromWrite(unsaved.billofmaterialsid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.productassemblyid)(Write.fromPutOption(ProductId.put))}::int4, ${fromWrite(unsaved.componentid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.bomlevel)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.perassemblyqty)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.billofmaterialsid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.productassemblyid)(new Write.SingleOpt(ProductId.put))}::int4, ${fromWrite(unsaved.componentid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.bomlevel)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.perassemblyqty)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "billofmaterialsid", "productassemblyid", "componentid", "startdate"::text, "enddate"::text, "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate"::text """.query(using BillofmaterialsRow.read).unique } override def insert(unsaved: BillofmaterialsRowUnsaved): ConnectionIO[BillofmaterialsRow] = { val fs = List( - Some((Fragment.const0(s""""productassemblyid""""), fr"${fromWrite(unsaved.productassemblyid)(Write.fromPutOption(ProductId.put))}::int4")), - Some((Fragment.const0(s""""componentid""""), fr"${fromWrite(unsaved.componentid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""unitmeasurecode""""), fr"${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar")), - Some((Fragment.const0(s""""bomlevel""""), fr"${fromWrite(unsaved.bomlevel)(Write.fromPut(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""productassemblyid""""), fr"${fromWrite(unsaved.productassemblyid)(new Write.SingleOpt(ProductId.put))}::int4")), + Some((Fragment.const0(s""""componentid""""), fr"${fromWrite(unsaved.componentid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""unitmeasurecode""""), fr"${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar")), + Some((Fragment.const0(s""""bomlevel""""), fr"${fromWrite(unsaved.bomlevel)(new Write.Single(TypoShort.put))}::int2")), unsaved.billofmaterialsid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""billofmaterialsid""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""billofmaterialsid""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.startdate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.perassemblyqty match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""perassemblyqty""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""perassemblyqty""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -96,7 +96,7 @@ class BillofmaterialsRepoImpl extends BillofmaterialsRepo { sql"""select "billofmaterialsid", "productassemblyid", "componentid", "startdate"::text, "enddate"::text, "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate"::text from "production"."billofmaterials"""".query(using BillofmaterialsRow.read).stream } override def selectById(billofmaterialsid: Int): ConnectionIO[Option[BillofmaterialsRow]] = { - sql"""select "billofmaterialsid", "productassemblyid", "componentid", "startdate"::text, "enddate"::text, "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate"::text from "production"."billofmaterials" where "billofmaterialsid" = ${fromWrite(billofmaterialsid)(Write.fromPut(Meta.IntMeta.put))}""".query(using BillofmaterialsRow.read).option + sql"""select "billofmaterialsid", "productassemblyid", "componentid", "startdate"::text, "enddate"::text, "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate"::text from "production"."billofmaterials" where "billofmaterialsid" = ${fromWrite(billofmaterialsid)(new Write.Single(Meta.IntMeta.put))}""".query(using BillofmaterialsRow.read).option } override def selectByIds(billofmaterialsids: Array[Int]): Stream[ConnectionIO, BillofmaterialsRow] = { sql"""select "billofmaterialsid", "productassemblyid", "componentid", "startdate"::text, "enddate"::text, "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate"::text from "production"."billofmaterials" where "billofmaterialsid" = ANY(${billofmaterialsids})""".query(using BillofmaterialsRow.read).stream @@ -113,15 +113,15 @@ class BillofmaterialsRepoImpl extends BillofmaterialsRepo { override def update(row: BillofmaterialsRow): ConnectionIO[Boolean] = { val billofmaterialsid = row.billofmaterialsid sql"""update "production"."billofmaterials" - set "productassemblyid" = ${fromWrite(row.productassemblyid)(Write.fromPutOption(ProductId.put))}::int4, - "componentid" = ${fromWrite(row.componentid)(Write.fromPut(ProductId.put))}::int4, - "startdate" = ${fromWrite(row.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "enddate" = ${fromWrite(row.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "unitmeasurecode" = ${fromWrite(row.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, - "bomlevel" = ${fromWrite(row.bomlevel)(Write.fromPut(TypoShort.put))}::int2, - "perassemblyqty" = ${fromWrite(row.perassemblyqty)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "billofmaterialsid" = ${fromWrite(billofmaterialsid)(Write.fromPut(Meta.IntMeta.put))}""" + set "productassemblyid" = ${fromWrite(row.productassemblyid)(new Write.SingleOpt(ProductId.put))}::int4, + "componentid" = ${fromWrite(row.componentid)(new Write.Single(ProductId.put))}::int4, + "startdate" = ${fromWrite(row.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "enddate" = ${fromWrite(row.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "unitmeasurecode" = ${fromWrite(row.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, + "bomlevel" = ${fromWrite(row.bomlevel)(new Write.Single(TypoShort.put))}::int2, + "perassemblyqty" = ${fromWrite(row.perassemblyqty)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "billofmaterialsid" = ${fromWrite(billofmaterialsid)(new Write.Single(Meta.IntMeta.put))}""" .update .run .map(_ > 0) @@ -129,15 +129,15 @@ class BillofmaterialsRepoImpl extends BillofmaterialsRepo { override def upsert(unsaved: BillofmaterialsRow): ConnectionIO[BillofmaterialsRow] = { sql"""insert into "production"."billofmaterials"("billofmaterialsid", "productassemblyid", "componentid", "startdate", "enddate", "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate") values ( - ${fromWrite(unsaved.billofmaterialsid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.productassemblyid)(Write.fromPutOption(ProductId.put))}::int4, - ${fromWrite(unsaved.componentid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, - ${fromWrite(unsaved.bomlevel)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.perassemblyqty)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.billofmaterialsid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.productassemblyid)(new Write.SingleOpt(ProductId.put))}::int4, + ${fromWrite(unsaved.componentid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, + ${fromWrite(unsaved.bomlevel)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.perassemblyqty)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("billofmaterialsid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRow.scala index 868216fa1c..a481a6c4b4 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/billofmaterials/BillofmaterialsRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.product.ProductId import adventureworks.production.unitmeasure.UnitmeasureId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.billofmaterials Items required to make bicycles and bicycle subassemblies. It identifies the heirarchical relationship between a parent product and its components. @@ -66,30 +64,29 @@ case class BillofmaterialsRow( object BillofmaterialsRow { implicit lazy val decoder: Decoder[BillofmaterialsRow] = Decoder.forProduct9[BillofmaterialsRow, Int, Option[ProductId], ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], UnitmeasureId, TypoShort, BigDecimal, TypoLocalDateTime]("billofmaterialsid", "productassemblyid", "componentid", "startdate", "enddate", "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate")(BillofmaterialsRow.apply)(Decoder.decodeInt, Decoder.decodeOption(ProductId.decoder), ProductId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), UnitmeasureId.decoder, TypoShort.decoder, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[BillofmaterialsRow] = Encoder.forProduct9[BillofmaterialsRow, Int, Option[ProductId], ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], UnitmeasureId, TypoShort, BigDecimal, TypoLocalDateTime]("billofmaterialsid", "productassemblyid", "componentid", "startdate", "enddate", "unitmeasurecode", "bomlevel", "perassemblyqty", "modifieddate")(x => (x.billofmaterialsid, x.productassemblyid, x.componentid, x.startdate, x.enddate, x.unitmeasurecode, x.bomlevel, x.perassemblyqty, x.modifieddate))(Encoder.encodeInt, Encoder.encodeOption(ProductId.encoder), ProductId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), UnitmeasureId.encoder, TypoShort.encoder, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[BillofmaterialsRow] = new Read[BillofmaterialsRow]( - gets = List( - (Meta.IntMeta.get, Nullability.NoNulls), - (ProductId.get, Nullability.Nullable), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => BillofmaterialsRow( - billofmaterialsid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 0), - productassemblyid = ProductId.get.unsafeGetNullable(rs, i + 1), - componentid = ProductId.get.unsafeGetNonNullable(rs, i + 2), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 4), - unitmeasurecode = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 5), - bomlevel = TypoShort.get.unsafeGetNonNullable(rs, i + 6), - perassemblyqty = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[BillofmaterialsRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + BillofmaterialsRow( + billofmaterialsid = arr(0).asInstanceOf[Int], + productassemblyid = arr(1).asInstanceOf[Option[ProductId]], + componentid = arr(2).asInstanceOf[ProductId], + startdate = arr(3).asInstanceOf[TypoLocalDateTime], + enddate = arr(4).asInstanceOf[Option[TypoLocalDateTime]], + unitmeasurecode = arr(5).asInstanceOf[UnitmeasureId], + bomlevel = arr(6).asInstanceOf[TypoShort], + perassemblyqty = arr(7).asInstanceOf[BigDecimal], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[BillofmaterialsRow] = Text.instance[BillofmaterialsRow]{ (row, sb) => Text.intInstance.unsafeEncode(row.billofmaterialsid, sb) sb.append(Text.DELIMETER) @@ -109,38 +106,16 @@ object BillofmaterialsRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[BillofmaterialsRow] = new Write[BillofmaterialsRow]( - puts = List((Meta.IntMeta.put, Nullability.NoNulls), - (ProductId.put, Nullability.Nullable), - (ProductId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (UnitmeasureId.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.billofmaterialsid, x.productassemblyid, x.componentid, x.startdate, x.enddate, x.unitmeasurecode, x.bomlevel, x.perassemblyqty, x.modifieddate), - unsafeSet = (rs, i, a) => { - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 0, a.billofmaterialsid) - ProductId.put.unsafeSetNullable(rs, i + 1, a.productassemblyid) - ProductId.put.unsafeSetNonNullable(rs, i + 2, a.componentid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.startdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 4, a.enddate) - UnitmeasureId.put.unsafeSetNonNullable(rs, i + 5, a.unitmeasurecode) - TypoShort.put.unsafeSetNonNullable(rs, i + 6, a.bomlevel) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 7, a.perassemblyqty) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.billofmaterialsid) - ProductId.put.unsafeUpdateNullable(ps, i + 1, a.productassemblyid) - ProductId.put.unsafeUpdateNonNullable(ps, i + 2, a.componentid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.startdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 4, a.enddate) - UnitmeasureId.put.unsafeUpdateNonNullable(ps, i + 5, a.unitmeasurecode) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 6, a.bomlevel) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.perassemblyqty) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[BillofmaterialsRow] = new Write.Composite[BillofmaterialsRow]( + List(new Write.Single(Meta.IntMeta.put), + new Write.Single(ProductId.put).toOpt, + new Write.Single(ProductId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(UnitmeasureId.put), + new Write.Single(TypoShort.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.billofmaterialsid, a.productassemblyid, a.componentid, a.startdate, a.enddate, a.unitmeasurecode, a.bomlevel, a.perassemblyqty, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRepoImpl.scala index 5672aab0f4..909dd7098e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRepoImpl.scala @@ -29,24 +29,24 @@ class CultureRepoImpl extends CultureRepo { DeleteBuilder(""""production"."culture"""", CultureFields.structure) } override def deleteById(cultureid: CultureId): ConnectionIO[Boolean] = { - sql"""delete from "production"."culture" where "cultureid" = ${fromWrite(cultureid)(Write.fromPut(CultureId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."culture" where "cultureid" = ${fromWrite(cultureid)(new Write.Single(CultureId.put))}""".update.run.map(_ > 0) } override def deleteByIds(cultureids: Array[CultureId]): ConnectionIO[Int] = { sql"""delete from "production"."culture" where "cultureid" = ANY(${cultureids})""".update.run } override def insert(unsaved: CultureRow): ConnectionIO[CultureRow] = { sql"""insert into "production"."culture"("cultureid", "name", "modifieddate") - values (${fromWrite(unsaved.cultureid)(Write.fromPut(CultureId.put))}::bpchar, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.cultureid)(new Write.Single(CultureId.put))}::bpchar, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "cultureid", "name", "modifieddate"::text """.query(using CultureRow.read).unique } override def insert(unsaved: CultureRowUnsaved): ConnectionIO[CultureRow] = { val fs = List( - Some((Fragment.const0(s""""cultureid""""), fr"${fromWrite(unsaved.cultureid)(Write.fromPut(CultureId.put))}::bpchar")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""cultureid""""), fr"${fromWrite(unsaved.cultureid)(new Write.Single(CultureId.put))}::bpchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -78,7 +78,7 @@ class CultureRepoImpl extends CultureRepo { sql"""select "cultureid", "name", "modifieddate"::text from "production"."culture"""".query(using CultureRow.read).stream } override def selectById(cultureid: CultureId): ConnectionIO[Option[CultureRow]] = { - sql"""select "cultureid", "name", "modifieddate"::text from "production"."culture" where "cultureid" = ${fromWrite(cultureid)(Write.fromPut(CultureId.put))}""".query(using CultureRow.read).option + sql"""select "cultureid", "name", "modifieddate"::text from "production"."culture" where "cultureid" = ${fromWrite(cultureid)(new Write.Single(CultureId.put))}""".query(using CultureRow.read).option } override def selectByIds(cultureids: Array[CultureId]): Stream[ConnectionIO, CultureRow] = { sql"""select "cultureid", "name", "modifieddate"::text from "production"."culture" where "cultureid" = ANY(${cultureids})""".query(using CultureRow.read).stream @@ -95,9 +95,9 @@ class CultureRepoImpl extends CultureRepo { override def update(row: CultureRow): ConnectionIO[Boolean] = { val cultureid = row.cultureid sql"""update "production"."culture" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "cultureid" = ${fromWrite(cultureid)(Write.fromPut(CultureId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "cultureid" = ${fromWrite(cultureid)(new Write.Single(CultureId.put))}""" .update .run .map(_ > 0) @@ -105,9 +105,9 @@ class CultureRepoImpl extends CultureRepo { override def upsert(unsaved: CultureRow): ConnectionIO[CultureRow] = { sql"""insert into "production"."culture"("cultureid", "name", "modifieddate") values ( - ${fromWrite(unsaved.cultureid)(Write.fromPut(CultureId.put))}::bpchar, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.cultureid)(new Write.Single(CultureId.put))}::bpchar, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("cultureid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRow.scala index eae0873980..df7a3d0045 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/culture/CultureRow.scala @@ -10,13 +10,11 @@ package culture import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.culture Lookup table containing the languages in which some AdventureWorks data is stored. @@ -37,18 +35,17 @@ case class CultureRow( object CultureRow { implicit lazy val decoder: Decoder[CultureRow] = Decoder.forProduct3[CultureRow, CultureId, Name, TypoLocalDateTime]("cultureid", "name", "modifieddate")(CultureRow.apply)(CultureId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CultureRow] = Encoder.forProduct3[CultureRow, CultureId, Name, TypoLocalDateTime]("cultureid", "name", "modifieddate")(x => (x.cultureid, x.name, x.modifieddate))(CultureId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CultureRow] = new Read[CultureRow]( - gets = List( - (CultureId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CultureRow( - cultureid = CultureId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[CultureRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CultureId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CultureRow( + cultureid = arr(0).asInstanceOf[CultureId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CultureRow] = Text.instance[CultureRow]{ (row, sb) => CultureId.text.unsafeEncode(row.cultureid, sb) sb.append(Text.DELIMETER) @@ -56,20 +53,10 @@ object CultureRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CultureRow] = new Write[CultureRow]( - puts = List((CultureId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.cultureid, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - CultureId.put.unsafeSetNonNullable(rs, i + 0, a.cultureid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - CultureId.put.unsafeUpdateNonNullable(ps, i + 0, a.cultureid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[CultureRow] = new Write.Composite[CultureRow]( + List(new Write.Single(CultureId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.cultureid, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRepoImpl.scala index 5e51e2d625..8c159e3fba 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRepoImpl.scala @@ -34,46 +34,46 @@ class DocumentRepoImpl extends DocumentRepo { DeleteBuilder(""""production"."document"""", DocumentFields.structure) } override def deleteById(documentnode: DocumentId): ConnectionIO[Boolean] = { - sql"""delete from "production"."document" where "documentnode" = ${fromWrite(documentnode)(Write.fromPut(DocumentId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."document" where "documentnode" = ${fromWrite(documentnode)(new Write.Single(DocumentId.put))}""".update.run.map(_ > 0) } override def deleteByIds(documentnodes: Array[DocumentId]): ConnectionIO[Int] = { sql"""delete from "production"."document" where "documentnode" = ANY(${documentnodes})""".update.run } override def insert(unsaved: DocumentRow): ConnectionIO[DocumentRow] = { sql"""insert into "production"."document"("title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate", "documentnode") - values (${fromWrite(unsaved.title)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.owner)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.folderflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.filename)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.fileextension)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.revision)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.changenumber)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.documentsummary)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.document)(Write.fromPutOption(TypoBytea.put))}::bytea, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.documentnode)(Write.fromPut(DocumentId.put))}) + values (${fromWrite(unsaved.title)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.owner)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.folderflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.filename)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.fileextension)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.revision)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.changenumber)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.documentsummary)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.document)(new Write.SingleOpt(TypoBytea.put))}::bytea, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.documentnode)(new Write.Single(DocumentId.put))}) returning "title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate"::text, "documentnode" """.query(using DocumentRow.read).unique } override def insert(unsaved: DocumentRowUnsaved): ConnectionIO[DocumentRow] = { val fs = List( - Some((Fragment.const0(s""""title""""), fr"${fromWrite(unsaved.title)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""owner""""), fr"${fromWrite(unsaved.owner)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""filename""""), fr"${fromWrite(unsaved.filename)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""fileextension""""), fr"${fromWrite(unsaved.fileextension)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""revision""""), fr"${fromWrite(unsaved.revision)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""status""""), fr"${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""documentsummary""""), fr"${fromWrite(unsaved.documentsummary)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""document""""), fr"${fromWrite(unsaved.document)(Write.fromPutOption(TypoBytea.put))}::bytea")), + Some((Fragment.const0(s""""title""""), fr"${fromWrite(unsaved.title)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""owner""""), fr"${fromWrite(unsaved.owner)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""filename""""), fr"${fromWrite(unsaved.filename)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""fileextension""""), fr"${fromWrite(unsaved.fileextension)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""revision""""), fr"${fromWrite(unsaved.revision)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""status""""), fr"${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""documentsummary""""), fr"${fromWrite(unsaved.documentsummary)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""document""""), fr"${fromWrite(unsaved.document)(new Write.SingleOpt(TypoBytea.put))}::bytea")), unsaved.folderflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""folderflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""folderflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.changenumber match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""changenumber""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""changenumber""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.documentnode match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""documentnode""""), fr"${fromWrite(value: DocumentId)(Write.fromPut(DocumentId.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""documentnode""""), fr"${fromWrite(value: DocumentId)(new Write.Single(DocumentId.put))}")) } ).flatten @@ -105,7 +105,7 @@ class DocumentRepoImpl extends DocumentRepo { sql"""select "title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate"::text, "documentnode" from "production"."document"""".query(using DocumentRow.read).stream } override def selectById(documentnode: DocumentId): ConnectionIO[Option[DocumentRow]] = { - sql"""select "title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate"::text, "documentnode" from "production"."document" where "documentnode" = ${fromWrite(documentnode)(Write.fromPut(DocumentId.put))}""".query(using DocumentRow.read).option + sql"""select "title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate"::text, "documentnode" from "production"."document" where "documentnode" = ${fromWrite(documentnode)(new Write.Single(DocumentId.put))}""".query(using DocumentRow.read).option } override def selectByIds(documentnodes: Array[DocumentId]): Stream[ConnectionIO, DocumentRow] = { sql"""select "title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate"::text, "documentnode" from "production"."document" where "documentnode" = ANY(${documentnodes})""".query(using DocumentRow.read).stream @@ -119,7 +119,7 @@ class DocumentRepoImpl extends DocumentRepo { override def selectByUniqueRowguid(rowguid: TypoUUID): ConnectionIO[Option[DocumentRow]] = { sql"""select "title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate"::text, "documentnode" from "production"."document" - where "rowguid" = ${fromWrite(rowguid)(Write.fromPut(TypoUUID.put))} + where "rowguid" = ${fromWrite(rowguid)(new Write.Single(TypoUUID.put))} """.query(using DocumentRow.read).option } override def update: UpdateBuilder[DocumentFields, DocumentRow] = { @@ -128,19 +128,19 @@ class DocumentRepoImpl extends DocumentRepo { override def update(row: DocumentRow): ConnectionIO[Boolean] = { val documentnode = row.documentnode sql"""update "production"."document" - set "title" = ${fromWrite(row.title)(Write.fromPut(Meta.StringMeta.put))}, - "owner" = ${fromWrite(row.owner)(Write.fromPut(BusinessentityId.put))}::int4, - "folderflag" = ${fromWrite(row.folderflag)(Write.fromPut(Flag.put))}::bool, - "filename" = ${fromWrite(row.filename)(Write.fromPut(Meta.StringMeta.put))}, - "fileextension" = ${fromWrite(row.fileextension)(Write.fromPutOption(Meta.StringMeta.put))}, - "revision" = ${fromWrite(row.revision)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "changenumber" = ${fromWrite(row.changenumber)(Write.fromPut(Meta.IntMeta.put))}::int4, - "status" = ${fromWrite(row.status)(Write.fromPut(TypoShort.put))}::int2, - "documentsummary" = ${fromWrite(row.documentsummary)(Write.fromPutOption(Meta.StringMeta.put))}, - "document" = ${fromWrite(row.document)(Write.fromPutOption(TypoBytea.put))}::bytea, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "documentnode" = ${fromWrite(documentnode)(Write.fromPut(DocumentId.put))}""" + set "title" = ${fromWrite(row.title)(new Write.Single(Meta.StringMeta.put))}, + "owner" = ${fromWrite(row.owner)(new Write.Single(BusinessentityId.put))}::int4, + "folderflag" = ${fromWrite(row.folderflag)(new Write.Single(Flag.put))}::bool, + "filename" = ${fromWrite(row.filename)(new Write.Single(Meta.StringMeta.put))}, + "fileextension" = ${fromWrite(row.fileextension)(new Write.SingleOpt(Meta.StringMeta.put))}, + "revision" = ${fromWrite(row.revision)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "changenumber" = ${fromWrite(row.changenumber)(new Write.Single(Meta.IntMeta.put))}::int4, + "status" = ${fromWrite(row.status)(new Write.Single(TypoShort.put))}::int2, + "documentsummary" = ${fromWrite(row.documentsummary)(new Write.SingleOpt(Meta.StringMeta.put))}, + "document" = ${fromWrite(row.document)(new Write.SingleOpt(TypoBytea.put))}::bytea, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "documentnode" = ${fromWrite(documentnode)(new Write.Single(DocumentId.put))}""" .update .run .map(_ > 0) @@ -148,19 +148,19 @@ class DocumentRepoImpl extends DocumentRepo { override def upsert(unsaved: DocumentRow): ConnectionIO[DocumentRow] = { sql"""insert into "production"."document"("title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate", "documentnode") values ( - ${fromWrite(unsaved.title)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.owner)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.folderflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.filename)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.fileextension)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.revision)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.changenumber)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.documentsummary)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.document)(Write.fromPutOption(TypoBytea.put))}::bytea, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.documentnode)(Write.fromPut(DocumentId.put))} + ${fromWrite(unsaved.title)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.owner)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.folderflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.filename)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.fileextension)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.revision)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.changenumber)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.documentsummary)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.document)(new Write.SingleOpt(TypoBytea.put))}::bytea, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.documentnode)(new Write.Single(DocumentId.put))} ) on conflict ("documentnode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRow.scala index 99269ec784..17301c3fec 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/document/DocumentRow.scala @@ -14,14 +14,12 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Flag -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.document Product maintenance documents. @@ -68,38 +66,37 @@ case class DocumentRow( object DocumentRow { implicit lazy val decoder: Decoder[DocumentRow] = Decoder.forProduct13[DocumentRow, /* max 50 chars */ String, BusinessentityId, Flag, /* max 400 chars */ String, Option[/* max 8 chars */ String], /* bpchar, max 5 chars */ String, Int, TypoShort, Option[String], Option[TypoBytea], TypoUUID, TypoLocalDateTime, DocumentId]("title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate", "documentnode")(DocumentRow.apply)(Decoder.decodeString, BusinessentityId.decoder, Flag.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Decoder.decodeInt, TypoShort.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoBytea.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder, DocumentId.decoder) implicit lazy val encoder: Encoder[DocumentRow] = Encoder.forProduct13[DocumentRow, /* max 50 chars */ String, BusinessentityId, Flag, /* max 400 chars */ String, Option[/* max 8 chars */ String], /* bpchar, max 5 chars */ String, Int, TypoShort, Option[String], Option[TypoBytea], TypoUUID, TypoLocalDateTime, DocumentId]("title", "owner", "folderflag", "filename", "fileextension", "revision", "changenumber", "status", "documentsummary", "document", "rowguid", "modifieddate", "documentnode")(x => (x.title, x.owner, x.folderflag, x.filename, x.fileextension, x.revision, x.changenumber, x.status, x.documentsummary, x.document, x.rowguid, x.modifieddate, x.documentnode))(Encoder.encodeString, BusinessentityId.encoder, Flag.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Encoder.encodeInt, TypoShort.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoBytea.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder, DocumentId.encoder) - implicit lazy val read: Read[DocumentRow] = new Read[DocumentRow]( - gets = List( - (Meta.StringMeta.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoBytea.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (DocumentId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => DocumentRow( - title = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 0), - owner = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - folderflag = Flag.get.unsafeGetNonNullable(rs, i + 2), - filename = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - fileextension = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - revision = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - changenumber = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 6), - status = TypoShort.get.unsafeGetNonNullable(rs, i + 7), - documentsummary = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - document = TypoBytea.get.unsafeGetNullable(rs, i + 9), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 10), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 11), - documentnode = DocumentId.get.unsafeGetNonNullable(rs, i + 12) + implicit lazy val read: Read[DocumentRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(DocumentId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + DocumentRow( + title = arr(0).asInstanceOf[/* max 50 chars */ String], + owner = arr(1).asInstanceOf[BusinessentityId], + folderflag = arr(2).asInstanceOf[Flag], + filename = arr(3).asInstanceOf[/* max 400 chars */ String], + fileextension = arr(4).asInstanceOf[Option[/* max 8 chars */ String]], + revision = arr(5).asInstanceOf[/* bpchar, max 5 chars */ String], + changenumber = arr(6).asInstanceOf[Int], + status = arr(7).asInstanceOf[TypoShort], + documentsummary = arr(8).asInstanceOf[Option[String]], + document = arr(9).asInstanceOf[Option[TypoBytea]], + rowguid = arr(10).asInstanceOf[TypoUUID], + modifieddate = arr(11).asInstanceOf[TypoLocalDateTime], + documentnode = arr(12).asInstanceOf[DocumentId] ) - ) + } implicit lazy val text: Text[DocumentRow] = Text.instance[DocumentRow]{ (row, sb) => Text.stringInstance.unsafeEncode(row.title, sb) sb.append(Text.DELIMETER) @@ -127,50 +124,20 @@ object DocumentRow { sb.append(Text.DELIMETER) DocumentId.text.unsafeEncode(row.documentnode, sb) } - implicit lazy val write: Write[DocumentRow] = new Write[DocumentRow]( - puts = List((Meta.StringMeta.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoBytea.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (DocumentId.put, Nullability.NoNulls)), - toList = x => List(x.title, x.owner, x.folderflag, x.filename, x.fileextension, x.revision, x.changenumber, x.status, x.documentsummary, x.document, x.rowguid, x.modifieddate, x.documentnode), - unsafeSet = (rs, i, a) => { - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 0, a.title) - BusinessentityId.put.unsafeSetNonNullable(rs, i + 1, a.owner) - Flag.put.unsafeSetNonNullable(rs, i + 2, a.folderflag) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 3, a.filename) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 4, a.fileextension) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.revision) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 6, a.changenumber) - TypoShort.put.unsafeSetNonNullable(rs, i + 7, a.status) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 8, a.documentsummary) - TypoBytea.put.unsafeSetNullable(rs, i + 9, a.document) - TypoUUID.put.unsafeSetNonNullable(rs, i + 10, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 11, a.modifieddate) - DocumentId.put.unsafeSetNonNullable(rs, i + 12, a.documentnode) - }, - unsafeUpdate = (ps, i, a) => { - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.title) - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 1, a.owner) - Flag.put.unsafeUpdateNonNullable(ps, i + 2, a.folderflag) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.filename) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 4, a.fileextension) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.revision) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.changenumber) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 7, a.status) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 8, a.documentsummary) - TypoBytea.put.unsafeUpdateNullable(ps, i + 9, a.document) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 10, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 11, a.modifieddate) - DocumentId.put.unsafeUpdateNonNullable(ps, i + 12, a.documentnode) - } + implicit lazy val write: Write[DocumentRow] = new Write.Composite[DocumentRow]( + List(new Write.Single(Meta.StringMeta.put), + new Write.Single(BusinessentityId.put), + new Write.Single(Flag.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoShort.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoBytea.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(DocumentId.put)), + a => List(a.title, a.owner, a.folderflag, a.filename, a.fileextension, a.revision, a.changenumber, a.status, a.documentsummary, a.document, a.rowguid, a.modifieddate, a.documentnode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRepoImpl.scala index b4a0e8321a..0e69198c8a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRepoImpl.scala @@ -29,27 +29,27 @@ class IllustrationRepoImpl extends IllustrationRepo { DeleteBuilder(""""production"."illustration"""", IllustrationFields.structure) } override def deleteById(illustrationid: IllustrationId): ConnectionIO[Boolean] = { - sql"""delete from "production"."illustration" where "illustrationid" = ${fromWrite(illustrationid)(Write.fromPut(IllustrationId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."illustration" where "illustrationid" = ${fromWrite(illustrationid)(new Write.Single(IllustrationId.put))}""".update.run.map(_ > 0) } override def deleteByIds(illustrationids: Array[IllustrationId]): ConnectionIO[Int] = { sql"""delete from "production"."illustration" where "illustrationid" = ANY(${illustrationids})""".update.run } override def insert(unsaved: IllustrationRow): ConnectionIO[IllustrationRow] = { sql"""insert into "production"."illustration"("illustrationid", "diagram", "modifieddate") - values (${fromWrite(unsaved.illustrationid)(Write.fromPut(IllustrationId.put))}::int4, ${fromWrite(unsaved.diagram)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.illustrationid)(new Write.Single(IllustrationId.put))}::int4, ${fromWrite(unsaved.diagram)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "illustrationid", "diagram", "modifieddate"::text """.query(using IllustrationRow.read).unique } override def insert(unsaved: IllustrationRowUnsaved): ConnectionIO[IllustrationRow] = { val fs = List( - Some((Fragment.const0(s""""diagram""""), fr"${fromWrite(unsaved.diagram)(Write.fromPutOption(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""diagram""""), fr"${fromWrite(unsaved.diagram)(new Write.SingleOpt(TypoXml.put))}::xml")), unsaved.illustrationid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""illustrationid""""), fr"${fromWrite(value: IllustrationId)(Write.fromPut(IllustrationId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""illustrationid""""), fr"${fromWrite(value: IllustrationId)(new Write.Single(IllustrationId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -81,7 +81,7 @@ class IllustrationRepoImpl extends IllustrationRepo { sql"""select "illustrationid", "diagram", "modifieddate"::text from "production"."illustration"""".query(using IllustrationRow.read).stream } override def selectById(illustrationid: IllustrationId): ConnectionIO[Option[IllustrationRow]] = { - sql"""select "illustrationid", "diagram", "modifieddate"::text from "production"."illustration" where "illustrationid" = ${fromWrite(illustrationid)(Write.fromPut(IllustrationId.put))}""".query(using IllustrationRow.read).option + sql"""select "illustrationid", "diagram", "modifieddate"::text from "production"."illustration" where "illustrationid" = ${fromWrite(illustrationid)(new Write.Single(IllustrationId.put))}""".query(using IllustrationRow.read).option } override def selectByIds(illustrationids: Array[IllustrationId]): Stream[ConnectionIO, IllustrationRow] = { sql"""select "illustrationid", "diagram", "modifieddate"::text from "production"."illustration" where "illustrationid" = ANY(${illustrationids})""".query(using IllustrationRow.read).stream @@ -98,9 +98,9 @@ class IllustrationRepoImpl extends IllustrationRepo { override def update(row: IllustrationRow): ConnectionIO[Boolean] = { val illustrationid = row.illustrationid sql"""update "production"."illustration" - set "diagram" = ${fromWrite(row.diagram)(Write.fromPutOption(TypoXml.put))}::xml, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "illustrationid" = ${fromWrite(illustrationid)(Write.fromPut(IllustrationId.put))}""" + set "diagram" = ${fromWrite(row.diagram)(new Write.SingleOpt(TypoXml.put))}::xml, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "illustrationid" = ${fromWrite(illustrationid)(new Write.Single(IllustrationId.put))}""" .update .run .map(_ > 0) @@ -108,9 +108,9 @@ class IllustrationRepoImpl extends IllustrationRepo { override def upsert(unsaved: IllustrationRow): ConnectionIO[IllustrationRow] = { sql"""insert into "production"."illustration"("illustrationid", "diagram", "modifieddate") values ( - ${fromWrite(unsaved.illustrationid)(Write.fromPut(IllustrationId.put))}::int4, - ${fromWrite(unsaved.diagram)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.illustrationid)(new Write.Single(IllustrationId.put))}::int4, + ${fromWrite(unsaved.diagram)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("illustrationid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRow.scala index 90975d9052..3e22461e0b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/illustration/IllustrationRow.scala @@ -10,13 +10,11 @@ package illustration import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoXml -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.illustration Bicycle assembly diagrams. @@ -38,18 +36,17 @@ case class IllustrationRow( object IllustrationRow { implicit lazy val decoder: Decoder[IllustrationRow] = Decoder.forProduct3[IllustrationRow, IllustrationId, Option[TypoXml], TypoLocalDateTime]("illustrationid", "diagram", "modifieddate")(IllustrationRow.apply)(IllustrationId.decoder, Decoder.decodeOption(TypoXml.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[IllustrationRow] = Encoder.forProduct3[IllustrationRow, IllustrationId, Option[TypoXml], TypoLocalDateTime]("illustrationid", "diagram", "modifieddate")(x => (x.illustrationid, x.diagram, x.modifieddate))(IllustrationId.encoder, Encoder.encodeOption(TypoXml.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[IllustrationRow] = new Read[IllustrationRow]( - gets = List( - (IllustrationId.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => IllustrationRow( - illustrationid = IllustrationId.get.unsafeGetNonNullable(rs, i + 0), - diagram = TypoXml.get.unsafeGetNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[IllustrationRow] = new Read.CompositeOfInstances(Array( + new Read.Single(IllustrationId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + IllustrationRow( + illustrationid = arr(0).asInstanceOf[IllustrationId], + diagram = arr(1).asInstanceOf[Option[TypoXml]], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[IllustrationRow] = Text.instance[IllustrationRow]{ (row, sb) => IllustrationId.text.unsafeEncode(row.illustrationid, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object IllustrationRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[IllustrationRow] = new Write[IllustrationRow]( - puts = List((IllustrationId.put, Nullability.NoNulls), - (TypoXml.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.illustrationid, x.diagram, x.modifieddate), - unsafeSet = (rs, i, a) => { - IllustrationId.put.unsafeSetNonNullable(rs, i + 0, a.illustrationid) - TypoXml.put.unsafeSetNullable(rs, i + 1, a.diagram) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - IllustrationId.put.unsafeUpdateNonNullable(ps, i + 0, a.illustrationid) - TypoXml.put.unsafeUpdateNullable(ps, i + 1, a.diagram) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[IllustrationRow] = new Write.Composite[IllustrationRow]( + List(new Write.Single(IllustrationId.put), + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.illustrationid, a.diagram, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRepoImpl.scala index ecd967fb9e..ffe94fba44 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRepoImpl.scala @@ -30,35 +30,35 @@ class LocationRepoImpl extends LocationRepo { DeleteBuilder(""""production"."location"""", LocationFields.structure) } override def deleteById(locationid: LocationId): ConnectionIO[Boolean] = { - sql"""delete from "production"."location" where "locationid" = ${fromWrite(locationid)(Write.fromPut(LocationId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."location" where "locationid" = ${fromWrite(locationid)(new Write.Single(LocationId.put))}""".update.run.map(_ > 0) } override def deleteByIds(locationids: Array[LocationId]): ConnectionIO[Int] = { sql"""delete from "production"."location" where "locationid" = ANY(${locationids})""".update.run } override def insert(unsaved: LocationRow): ConnectionIO[LocationRow] = { sql"""insert into "production"."location"("locationid", "name", "costrate", "availability", "modifieddate") - values (${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.costrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.availability)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.costrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.availability)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "locationid", "name", "costrate", "availability", "modifieddate"::text """.query(using LocationRow.read).unique } override def insert(unsaved: LocationRowUnsaved): ConnectionIO[LocationRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.locationid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""locationid""""), fr"${fromWrite(value: LocationId)(Write.fromPut(LocationId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""locationid""""), fr"${fromWrite(value: LocationId)(new Write.Single(LocationId.put))}::int4")) }, unsaved.costrate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""costrate""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""costrate""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.availability match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""availability""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""availability""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -90,7 +90,7 @@ class LocationRepoImpl extends LocationRepo { sql"""select "locationid", "name", "costrate", "availability", "modifieddate"::text from "production"."location"""".query(using LocationRow.read).stream } override def selectById(locationid: LocationId): ConnectionIO[Option[LocationRow]] = { - sql"""select "locationid", "name", "costrate", "availability", "modifieddate"::text from "production"."location" where "locationid" = ${fromWrite(locationid)(Write.fromPut(LocationId.put))}""".query(using LocationRow.read).option + sql"""select "locationid", "name", "costrate", "availability", "modifieddate"::text from "production"."location" where "locationid" = ${fromWrite(locationid)(new Write.Single(LocationId.put))}""".query(using LocationRow.read).option } override def selectByIds(locationids: Array[LocationId]): Stream[ConnectionIO, LocationRow] = { sql"""select "locationid", "name", "costrate", "availability", "modifieddate"::text from "production"."location" where "locationid" = ANY(${locationids})""".query(using LocationRow.read).stream @@ -107,11 +107,11 @@ class LocationRepoImpl extends LocationRepo { override def update(row: LocationRow): ConnectionIO[Boolean] = { val locationid = row.locationid sql"""update "production"."location" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "costrate" = ${fromWrite(row.costrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "availability" = ${fromWrite(row.availability)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "locationid" = ${fromWrite(locationid)(Write.fromPut(LocationId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "costrate" = ${fromWrite(row.costrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "availability" = ${fromWrite(row.availability)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "locationid" = ${fromWrite(locationid)(new Write.Single(LocationId.put))}""" .update .run .map(_ > 0) @@ -119,11 +119,11 @@ class LocationRepoImpl extends LocationRepo { override def upsert(unsaved: LocationRow): ConnectionIO[LocationRow] = { sql"""insert into "production"."location"("locationid", "name", "costrate", "availability", "modifieddate") values ( - ${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.costrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.availability)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.costrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.availability)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("locationid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRow.scala index 63fc662d84..58924b2027 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/location/LocationRow.scala @@ -10,14 +10,12 @@ package location import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.location Product inventory and manufacturing locations. @@ -47,22 +45,21 @@ case class LocationRow( object LocationRow { implicit lazy val decoder: Decoder[LocationRow] = Decoder.forProduct5[LocationRow, LocationId, Name, BigDecimal, BigDecimal, TypoLocalDateTime]("locationid", "name", "costrate", "availability", "modifieddate")(LocationRow.apply)(LocationId.decoder, Name.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[LocationRow] = Encoder.forProduct5[LocationRow, LocationId, Name, BigDecimal, BigDecimal, TypoLocalDateTime]("locationid", "name", "costrate", "availability", "modifieddate")(x => (x.locationid, x.name, x.costrate, x.availability, x.modifieddate))(LocationId.encoder, Name.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[LocationRow] = new Read[LocationRow]( - gets = List( - (LocationId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => LocationRow( - locationid = LocationId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - costrate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 2), - availability = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[LocationRow] = new Read.CompositeOfInstances(Array( + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + LocationRow( + locationid = arr(0).asInstanceOf[LocationId], + name = arr(1).asInstanceOf[Name], + costrate = arr(2).asInstanceOf[BigDecimal], + availability = arr(3).asInstanceOf[BigDecimal], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[LocationRow] = Text.instance[LocationRow]{ (row, sb) => LocationId.text.unsafeEncode(row.locationid, sb) sb.append(Text.DELIMETER) @@ -74,26 +71,12 @@ object LocationRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[LocationRow] = new Write[LocationRow]( - puts = List((LocationId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.locationid, x.name, x.costrate, x.availability, x.modifieddate), - unsafeSet = (rs, i, a) => { - LocationId.put.unsafeSetNonNullable(rs, i + 0, a.locationid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 2, a.costrate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.availability) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - LocationId.put.unsafeUpdateNonNullable(ps, i + 0, a.locationid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.costrate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.availability) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[LocationRow] = new Write.Composite[LocationRow]( + List(new Write.Single(LocationId.put), + new Write.Single(Name.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.locationid, a.name, a.costrate, a.availability, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRepoImpl.scala index 05a535bb0e..0f35e1c5be 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRepoImpl.scala @@ -36,58 +36,58 @@ class ProductRepoImpl extends ProductRepo { DeleteBuilder(""""production"."product"""", ProductFields.structure) } override def deleteById(productid: ProductId): ConnectionIO[Boolean] = { - sql"""delete from "production"."product" where "productid" = ${fromWrite(productid)(Write.fromPut(ProductId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."product" where "productid" = ${fromWrite(productid)(new Write.Single(ProductId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productids: Array[ProductId]): ConnectionIO[Int] = { sql"""delete from "production"."product" where "productid" = ANY(${productids})""".update.run } override def insert(unsaved: ProductRow): ConnectionIO[ProductRow] = { sql"""insert into "production"."product"("productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate", "sellenddate", "discontinueddate", "rowguid", "modifieddate") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.productnumber)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.makeflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.finishedgoodsflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.color)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.safetystocklevel)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.reorderpoint)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.size)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.sizeunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.weightunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.weight)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.daystomanufacture)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.productline)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.`class`)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.style)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.productsubcategoryid)(Write.fromPutOption(ProductsubcategoryId.put))}::int4, ${fromWrite(unsaved.productmodelid)(Write.fromPutOption(ProductmodelId.put))}::int4, ${fromWrite(unsaved.sellstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.sellenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.discontinueddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.productnumber)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.makeflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.finishedgoodsflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.color)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.safetystocklevel)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.reorderpoint)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.size)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.sizeunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.weightunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.weight)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.daystomanufacture)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.productline)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.`class`)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.style)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.productsubcategoryid)(new Write.SingleOpt(ProductsubcategoryId.put))}::int4, ${fromWrite(unsaved.productmodelid)(new Write.SingleOpt(ProductmodelId.put))}::int4, ${fromWrite(unsaved.sellstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.sellenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.discontinueddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text """.query(using ProductRow.read).unique } override def insert(unsaved: ProductRowUnsaved): ConnectionIO[ProductRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""productnumber""""), fr"${fromWrite(unsaved.productnumber)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""color""""), fr"${fromWrite(unsaved.color)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""safetystocklevel""""), fr"${fromWrite(unsaved.safetystocklevel)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""reorderpoint""""), fr"${fromWrite(unsaved.reorderpoint)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""standardcost""""), fr"${fromWrite(unsaved.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""listprice""""), fr"${fromWrite(unsaved.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""size""""), fr"${fromWrite(unsaved.size)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""sizeunitmeasurecode""""), fr"${fromWrite(unsaved.sizeunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar")), - Some((Fragment.const0(s""""weightunitmeasurecode""""), fr"${fromWrite(unsaved.weightunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar")), - Some((Fragment.const0(s""""weight""""), fr"${fromWrite(unsaved.weight)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""daystomanufacture""""), fr"${fromWrite(unsaved.daystomanufacture)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""productline""""), fr"${fromWrite(unsaved.productline)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""class""""), fr"${fromWrite(unsaved.`class`)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""style""""), fr"${fromWrite(unsaved.style)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""productsubcategoryid""""), fr"${fromWrite(unsaved.productsubcategoryid)(Write.fromPutOption(ProductsubcategoryId.put))}::int4")), - Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(unsaved.productmodelid)(Write.fromPutOption(ProductmodelId.put))}::int4")), - Some((Fragment.const0(s""""sellstartdate""""), fr"${fromWrite(unsaved.sellstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""sellenddate""""), fr"${fromWrite(unsaved.sellenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""discontinueddate""""), fr"${fromWrite(unsaved.discontinueddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""productnumber""""), fr"${fromWrite(unsaved.productnumber)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""color""""), fr"${fromWrite(unsaved.color)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""safetystocklevel""""), fr"${fromWrite(unsaved.safetystocklevel)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""reorderpoint""""), fr"${fromWrite(unsaved.reorderpoint)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""standardcost""""), fr"${fromWrite(unsaved.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""listprice""""), fr"${fromWrite(unsaved.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""size""""), fr"${fromWrite(unsaved.size)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""sizeunitmeasurecode""""), fr"${fromWrite(unsaved.sizeunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar")), + Some((Fragment.const0(s""""weightunitmeasurecode""""), fr"${fromWrite(unsaved.weightunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar")), + Some((Fragment.const0(s""""weight""""), fr"${fromWrite(unsaved.weight)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""daystomanufacture""""), fr"${fromWrite(unsaved.daystomanufacture)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""productline""""), fr"${fromWrite(unsaved.productline)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""class""""), fr"${fromWrite(unsaved.`class`)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""style""""), fr"${fromWrite(unsaved.style)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""productsubcategoryid""""), fr"${fromWrite(unsaved.productsubcategoryid)(new Write.SingleOpt(ProductsubcategoryId.put))}::int4")), + Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(unsaved.productmodelid)(new Write.SingleOpt(ProductmodelId.put))}::int4")), + Some((Fragment.const0(s""""sellstartdate""""), fr"${fromWrite(unsaved.sellstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""sellenddate""""), fr"${fromWrite(unsaved.sellenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""discontinueddate""""), fr"${fromWrite(unsaved.discontinueddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), unsaved.productid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productid""""), fr"${fromWrite(value: ProductId)(Write.fromPut(ProductId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productid""""), fr"${fromWrite(value: ProductId)(new Write.Single(ProductId.put))}::int4")) }, unsaved.makeflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""makeflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""makeflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.finishedgoodsflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""finishedgoodsflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""finishedgoodsflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -119,7 +119,7 @@ class ProductRepoImpl extends ProductRepo { sql"""select "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text from "production"."product"""".query(using ProductRow.read).stream } override def selectById(productid: ProductId): ConnectionIO[Option[ProductRow]] = { - sql"""select "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text from "production"."product" where "productid" = ${fromWrite(productid)(Write.fromPut(ProductId.put))}""".query(using ProductRow.read).option + sql"""select "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text from "production"."product" where "productid" = ${fromWrite(productid)(new Write.Single(ProductId.put))}""".query(using ProductRow.read).option } override def selectByIds(productids: Array[ProductId]): Stream[ConnectionIO, ProductRow] = { sql"""select "productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate"::text, "sellenddate"::text, "discontinueddate"::text, "rowguid", "modifieddate"::text from "production"."product" where "productid" = ANY(${productids})""".query(using ProductRow.read).stream @@ -136,31 +136,31 @@ class ProductRepoImpl extends ProductRepo { override def update(row: ProductRow): ConnectionIO[Boolean] = { val productid = row.productid sql"""update "production"."product" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "productnumber" = ${fromWrite(row.productnumber)(Write.fromPut(Meta.StringMeta.put))}, - "makeflag" = ${fromWrite(row.makeflag)(Write.fromPut(Flag.put))}::bool, - "finishedgoodsflag" = ${fromWrite(row.finishedgoodsflag)(Write.fromPut(Flag.put))}::bool, - "color" = ${fromWrite(row.color)(Write.fromPutOption(Meta.StringMeta.put))}, - "safetystocklevel" = ${fromWrite(row.safetystocklevel)(Write.fromPut(TypoShort.put))}::int2, - "reorderpoint" = ${fromWrite(row.reorderpoint)(Write.fromPut(TypoShort.put))}::int2, - "standardcost" = ${fromWrite(row.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "listprice" = ${fromWrite(row.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "size" = ${fromWrite(row.size)(Write.fromPutOption(Meta.StringMeta.put))}, - "sizeunitmeasurecode" = ${fromWrite(row.sizeunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar, - "weightunitmeasurecode" = ${fromWrite(row.weightunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar, - "weight" = ${fromWrite(row.weight)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - "daystomanufacture" = ${fromWrite(row.daystomanufacture)(Write.fromPut(Meta.IntMeta.put))}::int4, - "productline" = ${fromWrite(row.productline)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, - "class" = ${fromWrite(row.`class`)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, - "style" = ${fromWrite(row.style)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, - "productsubcategoryid" = ${fromWrite(row.productsubcategoryid)(Write.fromPutOption(ProductsubcategoryId.put))}::int4, - "productmodelid" = ${fromWrite(row.productmodelid)(Write.fromPutOption(ProductmodelId.put))}::int4, - "sellstartdate" = ${fromWrite(row.sellstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "sellenddate" = ${fromWrite(row.sellenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "discontinueddate" = ${fromWrite(row.discontinueddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(productid)(Write.fromPut(ProductId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "productnumber" = ${fromWrite(row.productnumber)(new Write.Single(Meta.StringMeta.put))}, + "makeflag" = ${fromWrite(row.makeflag)(new Write.Single(Flag.put))}::bool, + "finishedgoodsflag" = ${fromWrite(row.finishedgoodsflag)(new Write.Single(Flag.put))}::bool, + "color" = ${fromWrite(row.color)(new Write.SingleOpt(Meta.StringMeta.put))}, + "safetystocklevel" = ${fromWrite(row.safetystocklevel)(new Write.Single(TypoShort.put))}::int2, + "reorderpoint" = ${fromWrite(row.reorderpoint)(new Write.Single(TypoShort.put))}::int2, + "standardcost" = ${fromWrite(row.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "listprice" = ${fromWrite(row.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "size" = ${fromWrite(row.size)(new Write.SingleOpt(Meta.StringMeta.put))}, + "sizeunitmeasurecode" = ${fromWrite(row.sizeunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar, + "weightunitmeasurecode" = ${fromWrite(row.weightunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar, + "weight" = ${fromWrite(row.weight)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + "daystomanufacture" = ${fromWrite(row.daystomanufacture)(new Write.Single(Meta.IntMeta.put))}::int4, + "productline" = ${fromWrite(row.productline)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, + "class" = ${fromWrite(row.`class`)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, + "style" = ${fromWrite(row.style)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, + "productsubcategoryid" = ${fromWrite(row.productsubcategoryid)(new Write.SingleOpt(ProductsubcategoryId.put))}::int4, + "productmodelid" = ${fromWrite(row.productmodelid)(new Write.SingleOpt(ProductmodelId.put))}::int4, + "sellstartdate" = ${fromWrite(row.sellstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "sellenddate" = ${fromWrite(row.sellenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "discontinueddate" = ${fromWrite(row.discontinueddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(productid)(new Write.Single(ProductId.put))}""" .update .run .map(_ > 0) @@ -168,31 +168,31 @@ class ProductRepoImpl extends ProductRepo { override def upsert(unsaved: ProductRow): ConnectionIO[ProductRow] = { sql"""insert into "production"."product"("productid", "name", "productnumber", "makeflag", "finishedgoodsflag", "color", "safetystocklevel", "reorderpoint", "standardcost", "listprice", "size", "sizeunitmeasurecode", "weightunitmeasurecode", "weight", "daystomanufacture", "productline", "class", "style", "productsubcategoryid", "productmodelid", "sellstartdate", "sellenddate", "discontinueddate", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.productnumber)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.makeflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.finishedgoodsflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.color)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.safetystocklevel)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.reorderpoint)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.size)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.sizeunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar, - ${fromWrite(unsaved.weightunitmeasurecode)(Write.fromPutOption(UnitmeasureId.put))}::bpchar, - ${fromWrite(unsaved.weight)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.daystomanufacture)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.productline)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.`class`)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.style)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.productsubcategoryid)(Write.fromPutOption(ProductsubcategoryId.put))}::int4, - ${fromWrite(unsaved.productmodelid)(Write.fromPutOption(ProductmodelId.put))}::int4, - ${fromWrite(unsaved.sellstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.sellenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.discontinueddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.productnumber)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.makeflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.finishedgoodsflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.color)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.safetystocklevel)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.reorderpoint)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.size)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.sizeunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar, + ${fromWrite(unsaved.weightunitmeasurecode)(new Write.SingleOpt(UnitmeasureId.put))}::bpchar, + ${fromWrite(unsaved.weight)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.daystomanufacture)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.productline)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.`class`)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.style)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.productsubcategoryid)(new Write.SingleOpt(ProductsubcategoryId.put))}::int4, + ${fromWrite(unsaved.productmodelid)(new Write.SingleOpt(ProductmodelId.put))}::int4, + ${fromWrite(unsaved.sellstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.sellenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.discontinueddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRow.scala index bda24fd71a..9a9da5dc24 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/product/ProductRow.scala @@ -16,7 +16,6 @@ import adventureworks.production.productsubcategory.ProductsubcategoryId import adventureworks.production.unitmeasure.UnitmeasureId import adventureworks.public.Flag import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write @@ -26,7 +25,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** Table: production.product @@ -172,62 +170,61 @@ object ProductRow { "modifieddate" -> TypoLocalDateTime.encoder.apply(row.modifieddate) ) ) - implicit lazy val read: Read[ProductRow] = new Read[ProductRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (ProductsubcategoryId.get, Nullability.Nullable), - (ProductmodelId.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - productnumber = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - makeflag = Flag.get.unsafeGetNonNullable(rs, i + 3), - finishedgoodsflag = Flag.get.unsafeGetNonNullable(rs, i + 4), - color = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - safetystocklevel = TypoShort.get.unsafeGetNonNullable(rs, i + 6), - reorderpoint = TypoShort.get.unsafeGetNonNullable(rs, i + 7), - standardcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - listprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 9), - size = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - sizeunitmeasurecode = UnitmeasureId.get.unsafeGetNullable(rs, i + 11), - weightunitmeasurecode = UnitmeasureId.get.unsafeGetNullable(rs, i + 12), - weight = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 13), - daystomanufacture = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 14), - productline = Meta.StringMeta.get.unsafeGetNullable(rs, i + 15), - `class` = Meta.StringMeta.get.unsafeGetNullable(rs, i + 16), - style = Meta.StringMeta.get.unsafeGetNullable(rs, i + 17), - productsubcategoryid = ProductsubcategoryId.get.unsafeGetNullable(rs, i + 18), - productmodelid = ProductmodelId.get.unsafeGetNullable(rs, i + 19), - sellstartdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 20), - sellenddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 21), - discontinueddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 22), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 23), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 24) + implicit lazy val read: Read[ProductRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ProductsubcategoryId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductRow( + productid = arr(0).asInstanceOf[ProductId], + name = arr(1).asInstanceOf[Name], + productnumber = arr(2).asInstanceOf[/* max 25 chars */ String], + makeflag = arr(3).asInstanceOf[Flag], + finishedgoodsflag = arr(4).asInstanceOf[Flag], + color = arr(5).asInstanceOf[Option[/* max 15 chars */ String]], + safetystocklevel = arr(6).asInstanceOf[TypoShort], + reorderpoint = arr(7).asInstanceOf[TypoShort], + standardcost = arr(8).asInstanceOf[BigDecimal], + listprice = arr(9).asInstanceOf[BigDecimal], + size = arr(10).asInstanceOf[Option[/* max 5 chars */ String]], + sizeunitmeasurecode = arr(11).asInstanceOf[Option[UnitmeasureId]], + weightunitmeasurecode = arr(12).asInstanceOf[Option[UnitmeasureId]], + weight = arr(13).asInstanceOf[Option[BigDecimal]], + daystomanufacture = arr(14).asInstanceOf[Int], + productline = arr(15).asInstanceOf[Option[/* bpchar, max 2 chars */ String]], + `class` = arr(16).asInstanceOf[Option[/* bpchar, max 2 chars */ String]], + style = arr(17).asInstanceOf[Option[/* bpchar, max 2 chars */ String]], + productsubcategoryid = arr(18).asInstanceOf[Option[ProductsubcategoryId]], + productmodelid = arr(19).asInstanceOf[Option[ProductmodelId]], + sellstartdate = arr(20).asInstanceOf[TypoLocalDateTime], + sellenddate = arr(21).asInstanceOf[Option[TypoLocalDateTime]], + discontinueddate = arr(22).asInstanceOf[Option[TypoLocalDateTime]], + rowguid = arr(23).asInstanceOf[TypoUUID], + modifieddate = arr(24).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductRow] = Text.instance[ProductRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -279,86 +276,32 @@ object ProductRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductRow] = new Write[ProductRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoShort.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (UnitmeasureId.put, Nullability.Nullable), - (UnitmeasureId.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (ProductsubcategoryId.put, Nullability.Nullable), - (ProductmodelId.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.name, x.productnumber, x.makeflag, x.finishedgoodsflag, x.color, x.safetystocklevel, x.reorderpoint, x.standardcost, x.listprice, x.size, x.sizeunitmeasurecode, x.weightunitmeasurecode, x.weight, x.daystomanufacture, x.productline, x.`class`, x.style, x.productsubcategoryid, x.productmodelid, x.sellstartdate, x.sellenddate, x.discontinueddate, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.productnumber) - Flag.put.unsafeSetNonNullable(rs, i + 3, a.makeflag) - Flag.put.unsafeSetNonNullable(rs, i + 4, a.finishedgoodsflag) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 5, a.color) - TypoShort.put.unsafeSetNonNullable(rs, i + 6, a.safetystocklevel) - TypoShort.put.unsafeSetNonNullable(rs, i + 7, a.reorderpoint) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 8, a.standardcost) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 9, a.listprice) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 10, a.size) - UnitmeasureId.put.unsafeSetNullable(rs, i + 11, a.sizeunitmeasurecode) - UnitmeasureId.put.unsafeSetNullable(rs, i + 12, a.weightunitmeasurecode) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 13, a.weight) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 14, a.daystomanufacture) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 15, a.productline) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 16, a.`class`) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 17, a.style) - ProductsubcategoryId.put.unsafeSetNullable(rs, i + 18, a.productsubcategoryid) - ProductmodelId.put.unsafeSetNullable(rs, i + 19, a.productmodelid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 20, a.sellstartdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 21, a.sellenddate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 22, a.discontinueddate) - TypoUUID.put.unsafeSetNonNullable(rs, i + 23, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 24, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.productnumber) - Flag.put.unsafeUpdateNonNullable(ps, i + 3, a.makeflag) - Flag.put.unsafeUpdateNonNullable(ps, i + 4, a.finishedgoodsflag) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 5, a.color) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 6, a.safetystocklevel) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 7, a.reorderpoint) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 8, a.standardcost) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 9, a.listprice) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 10, a.size) - UnitmeasureId.put.unsafeUpdateNullable(ps, i + 11, a.sizeunitmeasurecode) - UnitmeasureId.put.unsafeUpdateNullable(ps, i + 12, a.weightunitmeasurecode) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 13, a.weight) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 14, a.daystomanufacture) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 15, a.productline) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 16, a.`class`) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 17, a.style) - ProductsubcategoryId.put.unsafeUpdateNullable(ps, i + 18, a.productsubcategoryid) - ProductmodelId.put.unsafeUpdateNullable(ps, i + 19, a.productmodelid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 20, a.sellstartdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 21, a.sellenddate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 22, a.discontinueddate) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 23, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 24, a.modifieddate) - } + implicit lazy val write: Write[ProductRow] = new Write.Composite[ProductRow]( + List(new Write.Single(ProductId.put), + new Write.Single(Name.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Flag.put), + new Write.Single(Flag.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoShort.put), + new Write.Single(TypoShort.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(UnitmeasureId.put).toOpt, + new Write.Single(UnitmeasureId.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(ProductsubcategoryId.put).toOpt, + new Write.Single(ProductmodelId.put).toOpt, + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productid, a.name, a.productnumber, a.makeflag, a.finishedgoodsflag, a.color, a.safetystocklevel, a.reorderpoint, a.standardcost, a.listprice, a.size, a.sizeunitmeasurecode, a.weightunitmeasurecode, a.weight, a.daystomanufacture, a.productline, a.`class`, a.style, a.productsubcategoryid, a.productmodelid, a.sellstartdate, a.sellenddate, a.discontinueddate, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRepoImpl.scala index c8b05e1d47..ab00c9d7c0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRepoImpl.scala @@ -30,31 +30,31 @@ class ProductcategoryRepoImpl extends ProductcategoryRepo { DeleteBuilder(""""production"."productcategory"""", ProductcategoryFields.structure) } override def deleteById(productcategoryid: ProductcategoryId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productcategory" where "productcategoryid" = ${fromWrite(productcategoryid)(Write.fromPut(ProductcategoryId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productcategory" where "productcategoryid" = ${fromWrite(productcategoryid)(new Write.Single(ProductcategoryId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productcategoryids: Array[ProductcategoryId]): ConnectionIO[Int] = { sql"""delete from "production"."productcategory" where "productcategoryid" = ANY(${productcategoryids})""".update.run } override def insert(unsaved: ProductcategoryRow): ConnectionIO[ProductcategoryRow] = { sql"""insert into "production"."productcategory"("productcategoryid", "name", "rowguid", "modifieddate") - values (${fromWrite(unsaved.productcategoryid)(Write.fromPut(ProductcategoryId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productcategoryid)(new Write.Single(ProductcategoryId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productcategoryid", "name", "rowguid", "modifieddate"::text """.query(using ProductcategoryRow.read).unique } override def insert(unsaved: ProductcategoryRowUnsaved): ConnectionIO[ProductcategoryRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.productcategoryid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productcategoryid""""), fr"${fromWrite(value: ProductcategoryId)(Write.fromPut(ProductcategoryId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productcategoryid""""), fr"${fromWrite(value: ProductcategoryId)(new Write.Single(ProductcategoryId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class ProductcategoryRepoImpl extends ProductcategoryRepo { sql"""select "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productcategory"""".query(using ProductcategoryRow.read).stream } override def selectById(productcategoryid: ProductcategoryId): ConnectionIO[Option[ProductcategoryRow]] = { - sql"""select "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productcategory" where "productcategoryid" = ${fromWrite(productcategoryid)(Write.fromPut(ProductcategoryId.put))}""".query(using ProductcategoryRow.read).option + sql"""select "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productcategory" where "productcategoryid" = ${fromWrite(productcategoryid)(new Write.Single(ProductcategoryId.put))}""".query(using ProductcategoryRow.read).option } override def selectByIds(productcategoryids: Array[ProductcategoryId]): Stream[ConnectionIO, ProductcategoryRow] = { sql"""select "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productcategory" where "productcategoryid" = ANY(${productcategoryids})""".query(using ProductcategoryRow.read).stream @@ -103,10 +103,10 @@ class ProductcategoryRepoImpl extends ProductcategoryRepo { override def update(row: ProductcategoryRow): ConnectionIO[Boolean] = { val productcategoryid = row.productcategoryid sql"""update "production"."productcategory" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productcategoryid" = ${fromWrite(productcategoryid)(Write.fromPut(ProductcategoryId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productcategoryid" = ${fromWrite(productcategoryid)(new Write.Single(ProductcategoryId.put))}""" .update .run .map(_ > 0) @@ -114,10 +114,10 @@ class ProductcategoryRepoImpl extends ProductcategoryRepo { override def upsert(unsaved: ProductcategoryRow): ConnectionIO[ProductcategoryRow] = { sql"""insert into "production"."productcategory"("productcategoryid", "name", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.productcategoryid)(Write.fromPut(ProductcategoryId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productcategoryid)(new Write.Single(ProductcategoryId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productcategoryid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRow.scala index 1d76e7087d..c669144333 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcategory/ProductcategoryRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productcategory High-level product categorization. @@ -41,20 +39,19 @@ case class ProductcategoryRow( object ProductcategoryRow { implicit lazy val decoder: Decoder[ProductcategoryRow] = Decoder.forProduct4[ProductcategoryRow, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("productcategoryid", "name", "rowguid", "modifieddate")(ProductcategoryRow.apply)(ProductcategoryId.decoder, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductcategoryRow] = Encoder.forProduct4[ProductcategoryRow, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("productcategoryid", "name", "rowguid", "modifieddate")(x => (x.productcategoryid, x.name, x.rowguid, x.modifieddate))(ProductcategoryId.encoder, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductcategoryRow] = new Read[ProductcategoryRow]( - gets = List( - (ProductcategoryId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductcategoryRow( - productcategoryid = ProductcategoryId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[ProductcategoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductcategoryRow( + productcategoryid = arr(0).asInstanceOf[ProductcategoryId], + name = arr(1).asInstanceOf[Name], + rowguid = arr(2).asInstanceOf[TypoUUID], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductcategoryRow] = Text.instance[ProductcategoryRow]{ (row, sb) => ProductcategoryId.text.unsafeEncode(row.productcategoryid, sb) sb.append(Text.DELIMETER) @@ -64,23 +61,11 @@ object ProductcategoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductcategoryRow] = new Write[ProductcategoryRow]( - puts = List((ProductcategoryId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productcategoryid, x.name, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductcategoryId.put.unsafeSetNonNullable(rs, i + 0, a.productcategoryid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoUUID.put.unsafeSetNonNullable(rs, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductcategoryId.put.unsafeUpdateNonNullable(ps, i + 0, a.productcategoryid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[ProductcategoryRow] = new Write.Composite[ProductcategoryRow]( + List(new Write.Single(ProductcategoryId.put), + new Write.Single(Name.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productcategoryid, a.name, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRepoImpl.scala index 742cdef0c9..5f50d2b841 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRepoImpl.scala @@ -30,7 +30,7 @@ class ProductcosthistoryRepoImpl extends ProductcosthistoryRepo { DeleteBuilder(""""production"."productcosthistory"""", ProductcosthistoryFields.structure) } override def deleteById(compositeId: ProductcosthistoryId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productcosthistory" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productcosthistory" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductcosthistoryId]): ConnectionIO[Int] = { val productid = compositeIds.map(_.productid) @@ -44,19 +44,19 @@ class ProductcosthistoryRepoImpl extends ProductcosthistoryRepo { } override def insert(unsaved: ProductcosthistoryRow): ConnectionIO[ProductcosthistoryRow] = { sql"""insert into "production"."productcosthistory"("productid", "startdate", "enddate", "standardcost", "modifieddate") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productid", "startdate"::text, "enddate"::text, "standardcost", "modifieddate"::text """.query(using ProductcosthistoryRow.read).unique } override def insert(unsaved: ProductcosthistoryRowUnsaved): ConnectionIO[ProductcosthistoryRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""standardcost""""), fr"${fromWrite(unsaved.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""standardcost""""), fr"${fromWrite(unsaved.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -88,7 +88,7 @@ class ProductcosthistoryRepoImpl extends ProductcosthistoryRepo { sql"""select "productid", "startdate"::text, "enddate"::text, "standardcost", "modifieddate"::text from "production"."productcosthistory"""".query(using ProductcosthistoryRow.read).stream } override def selectById(compositeId: ProductcosthistoryId): ConnectionIO[Option[ProductcosthistoryRow]] = { - sql"""select "productid", "startdate"::text, "enddate"::text, "standardcost", "modifieddate"::text from "production"."productcosthistory" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))}""".query(using ProductcosthistoryRow.read).option + sql"""select "productid", "startdate"::text, "enddate"::text, "standardcost", "modifieddate"::text from "production"."productcosthistory" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))}""".query(using ProductcosthistoryRow.read).option } override def selectByIds(compositeIds: Array[ProductcosthistoryId]): Stream[ConnectionIO, ProductcosthistoryRow] = { val productid = compositeIds.map(_.productid) @@ -112,10 +112,10 @@ class ProductcosthistoryRepoImpl extends ProductcosthistoryRepo { override def update(row: ProductcosthistoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productcosthistory" - set "enddate" = ${fromWrite(row.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "standardcost" = ${fromWrite(row.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))}""" + set "enddate" = ${fromWrite(row.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "standardcost" = ${fromWrite(row.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))}""" .update .run .map(_ > 0) @@ -123,11 +123,11 @@ class ProductcosthistoryRepoImpl extends ProductcosthistoryRepo { override def upsert(unsaved: ProductcosthistoryRow): ConnectionIO[ProductcosthistoryRow] = { sql"""insert into "production"."productcosthistory"("productid", "startdate", "enddate", "standardcost", "modifieddate") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.standardcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.standardcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productid", "startdate") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRow.scala index 77159deb07..4058c4081f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productcosthistory/ProductcosthistoryRow.scala @@ -10,14 +10,12 @@ package productcosthistory import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productcosthistory Changes in the cost of a product over time. @@ -49,22 +47,21 @@ object ProductcosthistoryRow { new ProductcosthistoryRow(compositeId.productid, compositeId.startdate, enddate, standardcost, modifieddate) implicit lazy val decoder: Decoder[ProductcosthistoryRow] = Decoder.forProduct5[ProductcosthistoryRow, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("productid", "startdate", "enddate", "standardcost", "modifieddate")(ProductcosthistoryRow.apply)(ProductId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductcosthistoryRow] = Encoder.forProduct5[ProductcosthistoryRow, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("productid", "startdate", "enddate", "standardcost", "modifieddate")(x => (x.productid, x.startdate, x.enddate, x.standardcost, x.modifieddate))(ProductId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductcosthistoryRow] = new Read[ProductcosthistoryRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductcosthistoryRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 2), - standardcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[ProductcosthistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductcosthistoryRow( + productid = arr(0).asInstanceOf[ProductId], + startdate = arr(1).asInstanceOf[TypoLocalDateTime], + enddate = arr(2).asInstanceOf[Option[TypoLocalDateTime]], + standardcost = arr(3).asInstanceOf[BigDecimal], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductcosthistoryRow] = Text.instance[ProductcosthistoryRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -76,26 +73,12 @@ object ProductcosthistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductcosthistoryRow] = new Write[ProductcosthistoryRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.startdate, x.enddate, x.standardcost, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 1, a.startdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 2, a.enddate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.standardcost) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 1, a.startdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 2, a.enddate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.standardcost) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[ProductcosthistoryRow] = new Write.Composite[ProductcosthistoryRow]( + List(new Write.Single(ProductId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productid, a.startdate, a.enddate, a.standardcost, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRepoImpl.scala index 69a5a90bc8..2e4899fd04 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRepoImpl.scala @@ -30,31 +30,31 @@ class ProductdescriptionRepoImpl extends ProductdescriptionRepo { DeleteBuilder(""""production"."productdescription"""", ProductdescriptionFields.structure) } override def deleteById(productdescriptionid: ProductdescriptionId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productdescription" where "productdescriptionid" = ${fromWrite(productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productdescription" where "productdescriptionid" = ${fromWrite(productdescriptionid)(new Write.Single(ProductdescriptionId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productdescriptionids: Array[ProductdescriptionId]): ConnectionIO[Int] = { sql"""delete from "production"."productdescription" where "productdescriptionid" = ANY(${productdescriptionids})""".update.run } override def insert(unsaved: ProductdescriptionRow): ConnectionIO[ProductdescriptionRow] = { sql"""insert into "production"."productdescription"("productdescriptionid", "description", "rowguid", "modifieddate") - values (${fromWrite(unsaved.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}::int4, ${fromWrite(unsaved.description)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productdescriptionid)(new Write.Single(ProductdescriptionId.put))}::int4, ${fromWrite(unsaved.description)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productdescriptionid", "description", "rowguid", "modifieddate"::text """.query(using ProductdescriptionRow.read).unique } override def insert(unsaved: ProductdescriptionRowUnsaved): ConnectionIO[ProductdescriptionRow] = { val fs = List( - Some((Fragment.const0(s""""description""""), fr"${fromWrite(unsaved.description)(Write.fromPut(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""description""""), fr"${fromWrite(unsaved.description)(new Write.Single(Meta.StringMeta.put))}")), unsaved.productdescriptionid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productdescriptionid""""), fr"${fromWrite(value: ProductdescriptionId)(Write.fromPut(ProductdescriptionId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productdescriptionid""""), fr"${fromWrite(value: ProductdescriptionId)(new Write.Single(ProductdescriptionId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class ProductdescriptionRepoImpl extends ProductdescriptionRepo { sql"""select "productdescriptionid", "description", "rowguid", "modifieddate"::text from "production"."productdescription"""".query(using ProductdescriptionRow.read).stream } override def selectById(productdescriptionid: ProductdescriptionId): ConnectionIO[Option[ProductdescriptionRow]] = { - sql"""select "productdescriptionid", "description", "rowguid", "modifieddate"::text from "production"."productdescription" where "productdescriptionid" = ${fromWrite(productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}""".query(using ProductdescriptionRow.read).option + sql"""select "productdescriptionid", "description", "rowguid", "modifieddate"::text from "production"."productdescription" where "productdescriptionid" = ${fromWrite(productdescriptionid)(new Write.Single(ProductdescriptionId.put))}""".query(using ProductdescriptionRow.read).option } override def selectByIds(productdescriptionids: Array[ProductdescriptionId]): Stream[ConnectionIO, ProductdescriptionRow] = { sql"""select "productdescriptionid", "description", "rowguid", "modifieddate"::text from "production"."productdescription" where "productdescriptionid" = ANY(${productdescriptionids})""".query(using ProductdescriptionRow.read).stream @@ -103,10 +103,10 @@ class ProductdescriptionRepoImpl extends ProductdescriptionRepo { override def update(row: ProductdescriptionRow): ConnectionIO[Boolean] = { val productdescriptionid = row.productdescriptionid sql"""update "production"."productdescription" - set "description" = ${fromWrite(row.description)(Write.fromPut(Meta.StringMeta.put))}, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productdescriptionid" = ${fromWrite(productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}""" + set "description" = ${fromWrite(row.description)(new Write.Single(Meta.StringMeta.put))}, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productdescriptionid" = ${fromWrite(productdescriptionid)(new Write.Single(ProductdescriptionId.put))}""" .update .run .map(_ > 0) @@ -114,10 +114,10 @@ class ProductdescriptionRepoImpl extends ProductdescriptionRepo { override def upsert(unsaved: ProductdescriptionRow): ConnectionIO[ProductdescriptionRow] = { sql"""insert into "production"."productdescription"("productdescriptionid", "description", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}::int4, - ${fromWrite(unsaved.description)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productdescriptionid)(new Write.Single(ProductdescriptionId.put))}::int4, + ${fromWrite(unsaved.description)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productdescriptionid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRow.scala index 7d9da3f265..50f4bac433 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdescription/ProductdescriptionRow.scala @@ -10,14 +10,12 @@ package productdescription import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productdescription Product descriptions in several languages. @@ -41,20 +39,19 @@ case class ProductdescriptionRow( object ProductdescriptionRow { implicit lazy val decoder: Decoder[ProductdescriptionRow] = Decoder.forProduct4[ProductdescriptionRow, ProductdescriptionId, /* max 400 chars */ String, TypoUUID, TypoLocalDateTime]("productdescriptionid", "description", "rowguid", "modifieddate")(ProductdescriptionRow.apply)(ProductdescriptionId.decoder, Decoder.decodeString, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductdescriptionRow] = Encoder.forProduct4[ProductdescriptionRow, ProductdescriptionId, /* max 400 chars */ String, TypoUUID, TypoLocalDateTime]("productdescriptionid", "description", "rowguid", "modifieddate")(x => (x.productdescriptionid, x.description, x.rowguid, x.modifieddate))(ProductdescriptionId.encoder, Encoder.encodeString, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductdescriptionRow] = new Read[ProductdescriptionRow]( - gets = List( - (ProductdescriptionId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductdescriptionRow( - productdescriptionid = ProductdescriptionId.get.unsafeGetNonNullable(rs, i + 0), - description = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[ProductdescriptionRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductdescriptionId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductdescriptionRow( + productdescriptionid = arr(0).asInstanceOf[ProductdescriptionId], + description = arr(1).asInstanceOf[/* max 400 chars */ String], + rowguid = arr(2).asInstanceOf[TypoUUID], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductdescriptionRow] = Text.instance[ProductdescriptionRow]{ (row, sb) => ProductdescriptionId.text.unsafeEncode(row.productdescriptionid, sb) sb.append(Text.DELIMETER) @@ -64,23 +61,11 @@ object ProductdescriptionRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductdescriptionRow] = new Write[ProductdescriptionRow]( - puts = List((ProductdescriptionId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productdescriptionid, x.description, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductdescriptionId.put.unsafeSetNonNullable(rs, i + 0, a.productdescriptionid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.description) - TypoUUID.put.unsafeSetNonNullable(rs, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductdescriptionId.put.unsafeUpdateNonNullable(ps, i + 0, a.productdescriptionid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.description) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[ProductdescriptionRow] = new Write.Composite[ProductdescriptionRow]( + List(new Write.Single(ProductdescriptionId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productdescriptionid, a.description, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRepoImpl.scala index 7952a73623..82f69d017e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRepoImpl.scala @@ -30,7 +30,7 @@ class ProductdocumentRepoImpl extends ProductdocumentRepo { DeleteBuilder(""""production"."productdocument"""", ProductdocumentFields.structure) } override def deleteById(compositeId: ProductdocumentId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productdocument" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "documentnode" = ${fromWrite(compositeId.documentnode)(Write.fromPut(DocumentId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productdocument" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "documentnode" = ${fromWrite(compositeId.documentnode)(new Write.Single(DocumentId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductdocumentId]): ConnectionIO[Int] = { val productid = compositeIds.map(_.productid) @@ -44,20 +44,20 @@ class ProductdocumentRepoImpl extends ProductdocumentRepo { } override def insert(unsaved: ProductdocumentRow): ConnectionIO[ProductdocumentRow] = { sql"""insert into "production"."productdocument"("productid", "modifieddate", "documentnode") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.documentnode)(Write.fromPut(DocumentId.put))}) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.documentnode)(new Write.Single(DocumentId.put))}) returning "productid", "modifieddate"::text, "documentnode" """.query(using ProductdocumentRow.read).unique } override def insert(unsaved: ProductdocumentRowUnsaved): ConnectionIO[ProductdocumentRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.documentnode match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""documentnode""""), fr"${fromWrite(value: DocumentId)(Write.fromPut(DocumentId.put))}")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""documentnode""""), fr"${fromWrite(value: DocumentId)(new Write.Single(DocumentId.put))}")) } ).flatten @@ -89,7 +89,7 @@ class ProductdocumentRepoImpl extends ProductdocumentRepo { sql"""select "productid", "modifieddate"::text, "documentnode" from "production"."productdocument"""".query(using ProductdocumentRow.read).stream } override def selectById(compositeId: ProductdocumentId): ConnectionIO[Option[ProductdocumentRow]] = { - sql"""select "productid", "modifieddate"::text, "documentnode" from "production"."productdocument" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "documentnode" = ${fromWrite(compositeId.documentnode)(Write.fromPut(DocumentId.put))}""".query(using ProductdocumentRow.read).option + sql"""select "productid", "modifieddate"::text, "documentnode" from "production"."productdocument" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "documentnode" = ${fromWrite(compositeId.documentnode)(new Write.Single(DocumentId.put))}""".query(using ProductdocumentRow.read).option } override def selectByIds(compositeIds: Array[ProductdocumentId]): Stream[ConnectionIO, ProductdocumentRow] = { val productid = compositeIds.map(_.productid) @@ -113,8 +113,8 @@ class ProductdocumentRepoImpl extends ProductdocumentRepo { override def update(row: ProductdocumentRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productdocument" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "documentnode" = ${fromWrite(compositeId.documentnode)(Write.fromPut(DocumentId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "documentnode" = ${fromWrite(compositeId.documentnode)(new Write.Single(DocumentId.put))}""" .update .run .map(_ > 0) @@ -122,9 +122,9 @@ class ProductdocumentRepoImpl extends ProductdocumentRepo { override def upsert(unsaved: ProductdocumentRow): ConnectionIO[ProductdocumentRow] = { sql"""insert into "production"."productdocument"("productid", "modifieddate", "documentnode") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.documentnode)(Write.fromPut(DocumentId.put))} + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.documentnode)(new Write.Single(DocumentId.put))} ) on conflict ("productid", "documentnode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRow.scala index 2f32ee36d5..ffceb53f92 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productdocument/ProductdocumentRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.document.DocumentId import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productdocument Cross-reference table mapping products to related product documents. @@ -44,18 +42,17 @@ object ProductdocumentRow { new ProductdocumentRow(compositeId.productid, modifieddate, compositeId.documentnode) implicit lazy val decoder: Decoder[ProductdocumentRow] = Decoder.forProduct3[ProductdocumentRow, ProductId, TypoLocalDateTime, DocumentId]("productid", "modifieddate", "documentnode")(ProductdocumentRow.apply)(ProductId.decoder, TypoLocalDateTime.decoder, DocumentId.decoder) implicit lazy val encoder: Encoder[ProductdocumentRow] = Encoder.forProduct3[ProductdocumentRow, ProductId, TypoLocalDateTime, DocumentId]("productid", "modifieddate", "documentnode")(x => (x.productid, x.modifieddate, x.documentnode))(ProductId.encoder, TypoLocalDateTime.encoder, DocumentId.encoder) - implicit lazy val read: Read[ProductdocumentRow] = new Read[ProductdocumentRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (DocumentId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductdocumentRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - documentnode = DocumentId.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[ProductdocumentRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(DocumentId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductdocumentRow( + productid = arr(0).asInstanceOf[ProductId], + modifieddate = arr(1).asInstanceOf[TypoLocalDateTime], + documentnode = arr(2).asInstanceOf[DocumentId] ) - ) + } implicit lazy val text: Text[ProductdocumentRow] = Text.instance[ProductdocumentRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -63,20 +60,10 @@ object ProductdocumentRow { sb.append(Text.DELIMETER) DocumentId.text.unsafeEncode(row.documentnode, sb) } - implicit lazy val write: Write[ProductdocumentRow] = new Write[ProductdocumentRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (DocumentId.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.modifieddate, x.documentnode), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 1, a.modifieddate) - DocumentId.put.unsafeSetNonNullable(rs, i + 2, a.documentnode) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 1, a.modifieddate) - DocumentId.put.unsafeUpdateNonNullable(ps, i + 2, a.documentnode) - } + implicit lazy val write: Write[ProductdocumentRow] = new Write.Composite[ProductdocumentRow]( + List(new Write.Single(ProductId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(DocumentId.put)), + a => List(a.productid, a.modifieddate, a.documentnode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRepoImpl.scala index 1eebb09ab1..2b1ddcb29d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRepoImpl.scala @@ -33,7 +33,7 @@ class ProductinventoryRepoImpl extends ProductinventoryRepo { DeleteBuilder(""""production"."productinventory"""", ProductinventoryFields.structure) } override def deleteById(compositeId: ProductinventoryId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productinventory" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "locationid" = ${fromWrite(compositeId.locationid)(Write.fromPut(LocationId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productinventory" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "locationid" = ${fromWrite(compositeId.locationid)(new Write.Single(LocationId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductinventoryId]): ConnectionIO[Int] = { val productid = compositeIds.map(_.productid) @@ -47,27 +47,27 @@ class ProductinventoryRepoImpl extends ProductinventoryRepo { } override def insert(unsaved: ProductinventoryRow): ConnectionIO[ProductinventoryRow] = { sql"""insert into "production"."productinventory"("productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int2, ${fromWrite(unsaved.shelf)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.bin)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.quantity)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int2, ${fromWrite(unsaved.shelf)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.bin)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.quantity)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate"::text """.query(using ProductinventoryRow.read).unique } override def insert(unsaved: ProductinventoryRowUnsaved): ConnectionIO[ProductinventoryRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""locationid""""), fr"${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int2")), - Some((Fragment.const0(s""""shelf""""), fr"${fromWrite(unsaved.shelf)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""bin""""), fr"${fromWrite(unsaved.bin)(Write.fromPut(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""locationid""""), fr"${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int2")), + Some((Fragment.const0(s""""shelf""""), fr"${fromWrite(unsaved.shelf)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""bin""""), fr"${fromWrite(unsaved.bin)(new Write.Single(TypoShort.put))}::int2")), unsaved.quantity match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -99,7 +99,7 @@ class ProductinventoryRepoImpl extends ProductinventoryRepo { sql"""select "productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate"::text from "production"."productinventory"""".query(using ProductinventoryRow.read).stream } override def selectById(compositeId: ProductinventoryId): ConnectionIO[Option[ProductinventoryRow]] = { - sql"""select "productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate"::text from "production"."productinventory" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "locationid" = ${fromWrite(compositeId.locationid)(Write.fromPut(LocationId.put))}""".query(using ProductinventoryRow.read).option + sql"""select "productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate"::text from "production"."productinventory" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "locationid" = ${fromWrite(compositeId.locationid)(new Write.Single(LocationId.put))}""".query(using ProductinventoryRow.read).option } override def selectByIds(compositeIds: Array[ProductinventoryId]): Stream[ConnectionIO, ProductinventoryRow] = { val productid = compositeIds.map(_.productid) @@ -123,12 +123,12 @@ class ProductinventoryRepoImpl extends ProductinventoryRepo { override def update(row: ProductinventoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productinventory" - set "shelf" = ${fromWrite(row.shelf)(Write.fromPut(Meta.StringMeta.put))}, - "bin" = ${fromWrite(row.bin)(Write.fromPut(TypoShort.put))}::int2, - "quantity" = ${fromWrite(row.quantity)(Write.fromPut(TypoShort.put))}::int2, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "locationid" = ${fromWrite(compositeId.locationid)(Write.fromPut(LocationId.put))}""" + set "shelf" = ${fromWrite(row.shelf)(new Write.Single(Meta.StringMeta.put))}, + "bin" = ${fromWrite(row.bin)(new Write.Single(TypoShort.put))}::int2, + "quantity" = ${fromWrite(row.quantity)(new Write.Single(TypoShort.put))}::int2, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "locationid" = ${fromWrite(compositeId.locationid)(new Write.Single(LocationId.put))}""" .update .run .map(_ > 0) @@ -136,13 +136,13 @@ class ProductinventoryRepoImpl extends ProductinventoryRepo { override def upsert(unsaved: ProductinventoryRow): ConnectionIO[ProductinventoryRow] = { sql"""insert into "production"."productinventory"("productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int2, - ${fromWrite(unsaved.shelf)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.bin)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.quantity)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int2, + ${fromWrite(unsaved.shelf)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.bin)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.quantity)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productid", "locationid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRow.scala index 10487a5ef7..24af980947 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productinventory/ProductinventoryRow.scala @@ -13,14 +13,12 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.production.location.LocationId import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productinventory Product inventory information. @@ -56,26 +54,25 @@ object ProductinventoryRow { new ProductinventoryRow(compositeId.productid, compositeId.locationid, shelf, bin, quantity, rowguid, modifieddate) implicit lazy val decoder: Decoder[ProductinventoryRow] = Decoder.forProduct7[ProductinventoryRow, ProductId, LocationId, /* max 10 chars */ String, TypoShort, TypoShort, TypoUUID, TypoLocalDateTime]("productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate")(ProductinventoryRow.apply)(ProductId.decoder, LocationId.decoder, Decoder.decodeString, TypoShort.decoder, TypoShort.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductinventoryRow] = Encoder.forProduct7[ProductinventoryRow, ProductId, LocationId, /* max 10 chars */ String, TypoShort, TypoShort, TypoUUID, TypoLocalDateTime]("productid", "locationid", "shelf", "bin", "quantity", "rowguid", "modifieddate")(x => (x.productid, x.locationid, x.shelf, x.bin, x.quantity, x.rowguid, x.modifieddate))(ProductId.encoder, LocationId.encoder, Encoder.encodeString, TypoShort.encoder, TypoShort.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductinventoryRow] = new Read[ProductinventoryRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (LocationId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductinventoryRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - locationid = LocationId.get.unsafeGetNonNullable(rs, i + 1), - shelf = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - bin = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - quantity = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[ProductinventoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductinventoryRow( + productid = arr(0).asInstanceOf[ProductId], + locationid = arr(1).asInstanceOf[LocationId], + shelf = arr(2).asInstanceOf[/* max 10 chars */ String], + bin = arr(3).asInstanceOf[TypoShort], + quantity = arr(4).asInstanceOf[TypoShort], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductinventoryRow] = Text.instance[ProductinventoryRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -91,32 +88,14 @@ object ProductinventoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductinventoryRow] = new Write[ProductinventoryRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (LocationId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.locationid, x.shelf, x.bin, x.quantity, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - LocationId.put.unsafeSetNonNullable(rs, i + 1, a.locationid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.shelf) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.bin) - TypoShort.put.unsafeSetNonNullable(rs, i + 4, a.quantity) - TypoUUID.put.unsafeSetNonNullable(rs, i + 5, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 6, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - LocationId.put.unsafeUpdateNonNullable(ps, i + 1, a.locationid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.shelf) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.bin) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 4, a.quantity) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 5, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 6, a.modifieddate) - } + implicit lazy val write: Write[ProductinventoryRow] = new Write.Composite[ProductinventoryRow]( + List(new Write.Single(ProductId.put), + new Write.Single(LocationId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productid, a.locationid, a.shelf, a.bin, a.quantity, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRepoImpl.scala index 0864cf7d2f..1743344d0f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRepoImpl.scala @@ -30,7 +30,7 @@ class ProductlistpricehistoryRepoImpl extends ProductlistpricehistoryRepo { DeleteBuilder(""""production"."productlistpricehistory"""", ProductlistpricehistoryFields.structure) } override def deleteById(compositeId: ProductlistpricehistoryId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productlistpricehistory" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productlistpricehistory" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductlistpricehistoryId]): ConnectionIO[Int] = { val productid = compositeIds.map(_.productid) @@ -44,19 +44,19 @@ class ProductlistpricehistoryRepoImpl extends ProductlistpricehistoryRepo { } override def insert(unsaved: ProductlistpricehistoryRow): ConnectionIO[ProductlistpricehistoryRow] = { sql"""insert into "production"."productlistpricehistory"("productid", "startdate", "enddate", "listprice", "modifieddate") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productid", "startdate"::text, "enddate"::text, "listprice", "modifieddate"::text """.query(using ProductlistpricehistoryRow.read).unique } override def insert(unsaved: ProductlistpricehistoryRowUnsaved): ConnectionIO[ProductlistpricehistoryRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""listprice""""), fr"${fromWrite(unsaved.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""listprice""""), fr"${fromWrite(unsaved.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -88,7 +88,7 @@ class ProductlistpricehistoryRepoImpl extends ProductlistpricehistoryRepo { sql"""select "productid", "startdate"::text, "enddate"::text, "listprice", "modifieddate"::text from "production"."productlistpricehistory"""".query(using ProductlistpricehistoryRow.read).stream } override def selectById(compositeId: ProductlistpricehistoryId): ConnectionIO[Option[ProductlistpricehistoryRow]] = { - sql"""select "productid", "startdate"::text, "enddate"::text, "listprice", "modifieddate"::text from "production"."productlistpricehistory" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))}""".query(using ProductlistpricehistoryRow.read).option + sql"""select "productid", "startdate"::text, "enddate"::text, "listprice", "modifieddate"::text from "production"."productlistpricehistory" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))}""".query(using ProductlistpricehistoryRow.read).option } override def selectByIds(compositeIds: Array[ProductlistpricehistoryId]): Stream[ConnectionIO, ProductlistpricehistoryRow] = { val productid = compositeIds.map(_.productid) @@ -112,10 +112,10 @@ class ProductlistpricehistoryRepoImpl extends ProductlistpricehistoryRepo { override def update(row: ProductlistpricehistoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productlistpricehistory" - set "enddate" = ${fromWrite(row.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "listprice" = ${fromWrite(row.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))}""" + set "enddate" = ${fromWrite(row.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "listprice" = ${fromWrite(row.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))}""" .update .run .map(_ > 0) @@ -123,11 +123,11 @@ class ProductlistpricehistoryRepoImpl extends ProductlistpricehistoryRepo { override def upsert(unsaved: ProductlistpricehistoryRow): ConnectionIO[ProductlistpricehistoryRow] = { sql"""insert into "production"."productlistpricehistory"("productid", "startdate", "enddate", "listprice", "modifieddate") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.listprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.listprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productid", "startdate") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRow.scala index 55ad132aca..16d7e543ba 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productlistpricehistory/ProductlistpricehistoryRow.scala @@ -10,14 +10,12 @@ package productlistpricehistory import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productlistpricehistory Changes in the list price of a product over time. @@ -49,22 +47,21 @@ object ProductlistpricehistoryRow { new ProductlistpricehistoryRow(compositeId.productid, compositeId.startdate, enddate, listprice, modifieddate) implicit lazy val decoder: Decoder[ProductlistpricehistoryRow] = Decoder.forProduct5[ProductlistpricehistoryRow, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("productid", "startdate", "enddate", "listprice", "modifieddate")(ProductlistpricehistoryRow.apply)(ProductId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductlistpricehistoryRow] = Encoder.forProduct5[ProductlistpricehistoryRow, ProductId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, TypoLocalDateTime]("productid", "startdate", "enddate", "listprice", "modifieddate")(x => (x.productid, x.startdate, x.enddate, x.listprice, x.modifieddate))(ProductId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductlistpricehistoryRow] = new Read[ProductlistpricehistoryRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductlistpricehistoryRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 2), - listprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[ProductlistpricehistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductlistpricehistoryRow( + productid = arr(0).asInstanceOf[ProductId], + startdate = arr(1).asInstanceOf[TypoLocalDateTime], + enddate = arr(2).asInstanceOf[Option[TypoLocalDateTime]], + listprice = arr(3).asInstanceOf[BigDecimal], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductlistpricehistoryRow] = Text.instance[ProductlistpricehistoryRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -76,26 +73,12 @@ object ProductlistpricehistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductlistpricehistoryRow] = new Write[ProductlistpricehistoryRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.startdate, x.enddate, x.listprice, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 1, a.startdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 2, a.enddate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.listprice) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 1, a.startdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 2, a.enddate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.listprice) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[ProductlistpricehistoryRow] = new Write.Composite[ProductlistpricehistoryRow]( + List(new Write.Single(ProductId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productid, a.startdate, a.enddate, a.listprice, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRepoImpl.scala index dfc9b27daa..e6484966e9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRepoImpl.scala @@ -31,33 +31,33 @@ class ProductmodelRepoImpl extends ProductmodelRepo { DeleteBuilder(""""production"."productmodel"""", ProductmodelFields.structure) } override def deleteById(productmodelid: ProductmodelId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productmodel" where "productmodelid" = ${fromWrite(productmodelid)(Write.fromPut(ProductmodelId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productmodel" where "productmodelid" = ${fromWrite(productmodelid)(new Write.Single(ProductmodelId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productmodelids: Array[ProductmodelId]): ConnectionIO[Int] = { sql"""delete from "production"."productmodel" where "productmodelid" = ANY(${productmodelids})""".update.run } override def insert(unsaved: ProductmodelRow): ConnectionIO[ProductmodelRow] = { sql"""insert into "production"."productmodel"("productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate") - values (${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.catalogdescription)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.instructions)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.catalogdescription)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.instructions)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate"::text """.query(using ProductmodelRow.read).unique } override def insert(unsaved: ProductmodelRowUnsaved): ConnectionIO[ProductmodelRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""catalogdescription""""), fr"${fromWrite(unsaved.catalogdescription)(Write.fromPutOption(TypoXml.put))}::xml")), - Some((Fragment.const0(s""""instructions""""), fr"${fromWrite(unsaved.instructions)(Write.fromPutOption(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""catalogdescription""""), fr"${fromWrite(unsaved.catalogdescription)(new Write.SingleOpt(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""instructions""""), fr"${fromWrite(unsaved.instructions)(new Write.SingleOpt(TypoXml.put))}::xml")), unsaved.productmodelid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(value: ProductmodelId)(Write.fromPut(ProductmodelId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(value: ProductmodelId)(new Write.Single(ProductmodelId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -89,7 +89,7 @@ class ProductmodelRepoImpl extends ProductmodelRepo { sql"""select "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate"::text from "production"."productmodel"""".query(using ProductmodelRow.read).stream } override def selectById(productmodelid: ProductmodelId): ConnectionIO[Option[ProductmodelRow]] = { - sql"""select "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate"::text from "production"."productmodel" where "productmodelid" = ${fromWrite(productmodelid)(Write.fromPut(ProductmodelId.put))}""".query(using ProductmodelRow.read).option + sql"""select "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate"::text from "production"."productmodel" where "productmodelid" = ${fromWrite(productmodelid)(new Write.Single(ProductmodelId.put))}""".query(using ProductmodelRow.read).option } override def selectByIds(productmodelids: Array[ProductmodelId]): Stream[ConnectionIO, ProductmodelRow] = { sql"""select "productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate"::text from "production"."productmodel" where "productmodelid" = ANY(${productmodelids})""".query(using ProductmodelRow.read).stream @@ -106,12 +106,12 @@ class ProductmodelRepoImpl extends ProductmodelRepo { override def update(row: ProductmodelRow): ConnectionIO[Boolean] = { val productmodelid = row.productmodelid sql"""update "production"."productmodel" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "catalogdescription" = ${fromWrite(row.catalogdescription)(Write.fromPutOption(TypoXml.put))}::xml, - "instructions" = ${fromWrite(row.instructions)(Write.fromPutOption(TypoXml.put))}::xml, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productmodelid" = ${fromWrite(productmodelid)(Write.fromPut(ProductmodelId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "catalogdescription" = ${fromWrite(row.catalogdescription)(new Write.SingleOpt(TypoXml.put))}::xml, + "instructions" = ${fromWrite(row.instructions)(new Write.SingleOpt(TypoXml.put))}::xml, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productmodelid" = ${fromWrite(productmodelid)(new Write.Single(ProductmodelId.put))}""" .update .run .map(_ > 0) @@ -119,12 +119,12 @@ class ProductmodelRepoImpl extends ProductmodelRepo { override def upsert(unsaved: ProductmodelRow): ConnectionIO[ProductmodelRow] = { sql"""insert into "production"."productmodel"("productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.catalogdescription)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.instructions)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.catalogdescription)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.instructions)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productmodelid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRow.scala index fcf9fc93e9..8244d20c98 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodel/ProductmodelRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.customtypes.TypoXml import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productmodel Product model classification. @@ -46,24 +44,23 @@ case class ProductmodelRow( object ProductmodelRow { implicit lazy val decoder: Decoder[ProductmodelRow] = Decoder.forProduct6[ProductmodelRow, ProductmodelId, Name, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate")(ProductmodelRow.apply)(ProductmodelId.decoder, Name.decoder, Decoder.decodeOption(TypoXml.decoder), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductmodelRow] = Encoder.forProduct6[ProductmodelRow, ProductmodelId, Name, Option[TypoXml], Option[TypoXml], TypoUUID, TypoLocalDateTime]("productmodelid", "name", "catalogdescription", "instructions", "rowguid", "modifieddate")(x => (x.productmodelid, x.name, x.catalogdescription, x.instructions, x.rowguid, x.modifieddate))(ProductmodelId.encoder, Name.encoder, Encoder.encodeOption(TypoXml.encoder), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductmodelRow] = new Read[ProductmodelRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductmodelRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - catalogdescription = TypoXml.get.unsafeGetNullable(rs, i + 2), - instructions = TypoXml.get.unsafeGetNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[ProductmodelRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductmodelRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + name = arr(1).asInstanceOf[Name], + catalogdescription = arr(2).asInstanceOf[Option[TypoXml]], + instructions = arr(3).asInstanceOf[Option[TypoXml]], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductmodelRow] = Text.instance[ProductmodelRow]{ (row, sb) => ProductmodelId.text.unsafeEncode(row.productmodelid, sb) sb.append(Text.DELIMETER) @@ -77,29 +74,13 @@ object ProductmodelRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductmodelRow] = new Write[ProductmodelRow]( - puts = List((ProductmodelId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoXml.put, Nullability.Nullable), - (TypoXml.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productmodelid, x.name, x.catalogdescription, x.instructions, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductmodelId.put.unsafeSetNonNullable(rs, i + 0, a.productmodelid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoXml.put.unsafeSetNullable(rs, i + 2, a.catalogdescription) - TypoXml.put.unsafeSetNullable(rs, i + 3, a.instructions) - TypoUUID.put.unsafeSetNonNullable(rs, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductmodelId.put.unsafeUpdateNonNullable(ps, i + 0, a.productmodelid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoXml.put.unsafeUpdateNullable(ps, i + 2, a.catalogdescription) - TypoXml.put.unsafeUpdateNullable(ps, i + 3, a.instructions) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[ProductmodelRow] = new Write.Composite[ProductmodelRow]( + List(new Write.Single(ProductmodelId.put), + new Write.Single(Name.put), + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productmodelid, a.name, a.catalogdescription, a.instructions, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRepoImpl.scala index 3bc3397430..5c32383c34 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRepoImpl.scala @@ -30,7 +30,7 @@ class ProductmodelillustrationRepoImpl extends ProductmodelillustrationRepo { DeleteBuilder(""""production"."productmodelillustration"""", ProductmodelillustrationFields.structure) } override def deleteById(compositeId: ProductmodelillustrationId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productmodelillustration" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(Write.fromPut(ProductmodelId.put))} AND "illustrationid" = ${fromWrite(compositeId.illustrationid)(Write.fromPut(IllustrationId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productmodelillustration" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(new Write.Single(ProductmodelId.put))} AND "illustrationid" = ${fromWrite(compositeId.illustrationid)(new Write.Single(IllustrationId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductmodelillustrationId]): ConnectionIO[Int] = { val productmodelid = compositeIds.map(_.productmodelid) @@ -44,17 +44,17 @@ class ProductmodelillustrationRepoImpl extends ProductmodelillustrationRepo { } override def insert(unsaved: ProductmodelillustrationRow): ConnectionIO[ProductmodelillustrationRow] = { sql"""insert into "production"."productmodelillustration"("productmodelid", "illustrationid", "modifieddate") - values (${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4, ${fromWrite(unsaved.illustrationid)(Write.fromPut(IllustrationId.put))}::int4, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4, ${fromWrite(unsaved.illustrationid)(new Write.Single(IllustrationId.put))}::int4, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productmodelid", "illustrationid", "modifieddate"::text """.query(using ProductmodelillustrationRow.read).unique } override def insert(unsaved: ProductmodelillustrationRowUnsaved): ConnectionIO[ProductmodelillustrationRow] = { val fs = List( - Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4")), - Some((Fragment.const0(s""""illustrationid""""), fr"${fromWrite(unsaved.illustrationid)(Write.fromPut(IllustrationId.put))}::int4")), + Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4")), + Some((Fragment.const0(s""""illustrationid""""), fr"${fromWrite(unsaved.illustrationid)(new Write.Single(IllustrationId.put))}::int4")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class ProductmodelillustrationRepoImpl extends ProductmodelillustrationRepo { sql"""select "productmodelid", "illustrationid", "modifieddate"::text from "production"."productmodelillustration"""".query(using ProductmodelillustrationRow.read).stream } override def selectById(compositeId: ProductmodelillustrationId): ConnectionIO[Option[ProductmodelillustrationRow]] = { - sql"""select "productmodelid", "illustrationid", "modifieddate"::text from "production"."productmodelillustration" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(Write.fromPut(ProductmodelId.put))} AND "illustrationid" = ${fromWrite(compositeId.illustrationid)(Write.fromPut(IllustrationId.put))}""".query(using ProductmodelillustrationRow.read).option + sql"""select "productmodelid", "illustrationid", "modifieddate"::text from "production"."productmodelillustration" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(new Write.Single(ProductmodelId.put))} AND "illustrationid" = ${fromWrite(compositeId.illustrationid)(new Write.Single(IllustrationId.put))}""".query(using ProductmodelillustrationRow.read).option } override def selectByIds(compositeIds: Array[ProductmodelillustrationId]): Stream[ConnectionIO, ProductmodelillustrationRow] = { val productmodelid = compositeIds.map(_.productmodelid) @@ -110,8 +110,8 @@ class ProductmodelillustrationRepoImpl extends ProductmodelillustrationRepo { override def update(row: ProductmodelillustrationRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productmodelillustration" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productmodelid" = ${fromWrite(compositeId.productmodelid)(Write.fromPut(ProductmodelId.put))} AND "illustrationid" = ${fromWrite(compositeId.illustrationid)(Write.fromPut(IllustrationId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productmodelid" = ${fromWrite(compositeId.productmodelid)(new Write.Single(ProductmodelId.put))} AND "illustrationid" = ${fromWrite(compositeId.illustrationid)(new Write.Single(IllustrationId.put))}""" .update .run .map(_ > 0) @@ -119,9 +119,9 @@ class ProductmodelillustrationRepoImpl extends ProductmodelillustrationRepo { override def upsert(unsaved: ProductmodelillustrationRow): ConnectionIO[ProductmodelillustrationRow] = { sql"""insert into "production"."productmodelillustration"("productmodelid", "illustrationid", "modifieddate") values ( - ${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4, - ${fromWrite(unsaved.illustrationid)(Write.fromPut(IllustrationId.put))}::int4, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4, + ${fromWrite(unsaved.illustrationid)(new Write.Single(IllustrationId.put))}::int4, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productmodelid", "illustrationid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRow.scala index 01b9fc10f0..e9da54ad3c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelillustration/ProductmodelillustrationRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.illustration.IllustrationId import adventureworks.production.productmodel.ProductmodelId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productmodelillustration Cross-reference table mapping product models and illustrations. @@ -43,18 +41,17 @@ object ProductmodelillustrationRow { new ProductmodelillustrationRow(compositeId.productmodelid, compositeId.illustrationid, modifieddate) implicit lazy val decoder: Decoder[ProductmodelillustrationRow] = Decoder.forProduct3[ProductmodelillustrationRow, ProductmodelId, IllustrationId, TypoLocalDateTime]("productmodelid", "illustrationid", "modifieddate")(ProductmodelillustrationRow.apply)(ProductmodelId.decoder, IllustrationId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductmodelillustrationRow] = Encoder.forProduct3[ProductmodelillustrationRow, ProductmodelId, IllustrationId, TypoLocalDateTime]("productmodelid", "illustrationid", "modifieddate")(x => (x.productmodelid, x.illustrationid, x.modifieddate))(ProductmodelId.encoder, IllustrationId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductmodelillustrationRow] = new Read[ProductmodelillustrationRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (IllustrationId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductmodelillustrationRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - illustrationid = IllustrationId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[ProductmodelillustrationRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(IllustrationId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductmodelillustrationRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + illustrationid = arr(1).asInstanceOf[IllustrationId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductmodelillustrationRow] = Text.instance[ProductmodelillustrationRow]{ (row, sb) => ProductmodelId.text.unsafeEncode(row.productmodelid, sb) sb.append(Text.DELIMETER) @@ -62,20 +59,10 @@ object ProductmodelillustrationRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductmodelillustrationRow] = new Write[ProductmodelillustrationRow]( - puts = List((ProductmodelId.put, Nullability.NoNulls), - (IllustrationId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productmodelid, x.illustrationid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductmodelId.put.unsafeSetNonNullable(rs, i + 0, a.productmodelid) - IllustrationId.put.unsafeSetNonNullable(rs, i + 1, a.illustrationid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductmodelId.put.unsafeUpdateNonNullable(ps, i + 0, a.productmodelid) - IllustrationId.put.unsafeUpdateNonNullable(ps, i + 1, a.illustrationid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[ProductmodelillustrationRow] = new Write.Composite[ProductmodelillustrationRow]( + List(new Write.Single(ProductmodelId.put), + new Write.Single(IllustrationId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productmodelid, a.illustrationid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRepoImpl.scala index 2b7ffe45b3..d10c1ee25d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRepoImpl.scala @@ -31,7 +31,7 @@ class ProductmodelproductdescriptioncultureRepoImpl extends Productmodelproductd DeleteBuilder(""""production"."productmodelproductdescriptionculture"""", ProductmodelproductdescriptioncultureFields.structure) } override def deleteById(compositeId: ProductmodelproductdescriptioncultureId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productmodelproductdescriptionculture" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(Write.fromPut(ProductmodelId.put))} AND "productdescriptionid" = ${fromWrite(compositeId.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))} AND "cultureid" = ${fromWrite(compositeId.cultureid)(Write.fromPut(CultureId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productmodelproductdescriptionculture" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(new Write.Single(ProductmodelId.put))} AND "productdescriptionid" = ${fromWrite(compositeId.productdescriptionid)(new Write.Single(ProductdescriptionId.put))} AND "cultureid" = ${fromWrite(compositeId.cultureid)(new Write.Single(CultureId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductmodelproductdescriptioncultureId]): ConnectionIO[Int] = { val productmodelid = compositeIds.map(_.productmodelid) @@ -46,18 +46,18 @@ class ProductmodelproductdescriptioncultureRepoImpl extends Productmodelproductd } override def insert(unsaved: ProductmodelproductdescriptioncultureRow): ConnectionIO[ProductmodelproductdescriptioncultureRow] = { sql"""insert into "production"."productmodelproductdescriptionculture"("productmodelid", "productdescriptionid", "cultureid", "modifieddate") - values (${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4, ${fromWrite(unsaved.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}::int4, ${fromWrite(unsaved.cultureid)(Write.fromPut(CultureId.put))}::bpchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4, ${fromWrite(unsaved.productdescriptionid)(new Write.Single(ProductdescriptionId.put))}::int4, ${fromWrite(unsaved.cultureid)(new Write.Single(CultureId.put))}::bpchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productmodelid", "productdescriptionid", "cultureid", "modifieddate"::text """.query(using ProductmodelproductdescriptioncultureRow.read).unique } override def insert(unsaved: ProductmodelproductdescriptioncultureRowUnsaved): ConnectionIO[ProductmodelproductdescriptioncultureRow] = { val fs = List( - Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4")), - Some((Fragment.const0(s""""productdescriptionid""""), fr"${fromWrite(unsaved.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}::int4")), - Some((Fragment.const0(s""""cultureid""""), fr"${fromWrite(unsaved.cultureid)(Write.fromPut(CultureId.put))}::bpchar")), + Some((Fragment.const0(s""""productmodelid""""), fr"${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4")), + Some((Fragment.const0(s""""productdescriptionid""""), fr"${fromWrite(unsaved.productdescriptionid)(new Write.Single(ProductdescriptionId.put))}::int4")), + Some((Fragment.const0(s""""cultureid""""), fr"${fromWrite(unsaved.cultureid)(new Write.Single(CultureId.put))}::bpchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -89,7 +89,7 @@ class ProductmodelproductdescriptioncultureRepoImpl extends Productmodelproductd sql"""select "productmodelid", "productdescriptionid", "cultureid", "modifieddate"::text from "production"."productmodelproductdescriptionculture"""".query(using ProductmodelproductdescriptioncultureRow.read).stream } override def selectById(compositeId: ProductmodelproductdescriptioncultureId): ConnectionIO[Option[ProductmodelproductdescriptioncultureRow]] = { - sql"""select "productmodelid", "productdescriptionid", "cultureid", "modifieddate"::text from "production"."productmodelproductdescriptionculture" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(Write.fromPut(ProductmodelId.put))} AND "productdescriptionid" = ${fromWrite(compositeId.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))} AND "cultureid" = ${fromWrite(compositeId.cultureid)(Write.fromPut(CultureId.put))}""".query(using ProductmodelproductdescriptioncultureRow.read).option + sql"""select "productmodelid", "productdescriptionid", "cultureid", "modifieddate"::text from "production"."productmodelproductdescriptionculture" where "productmodelid" = ${fromWrite(compositeId.productmodelid)(new Write.Single(ProductmodelId.put))} AND "productdescriptionid" = ${fromWrite(compositeId.productdescriptionid)(new Write.Single(ProductdescriptionId.put))} AND "cultureid" = ${fromWrite(compositeId.cultureid)(new Write.Single(CultureId.put))}""".query(using ProductmodelproductdescriptioncultureRow.read).option } override def selectByIds(compositeIds: Array[ProductmodelproductdescriptioncultureId]): Stream[ConnectionIO, ProductmodelproductdescriptioncultureRow] = { val productmodelid = compositeIds.map(_.productmodelid) @@ -114,8 +114,8 @@ class ProductmodelproductdescriptioncultureRepoImpl extends Productmodelproductd override def update(row: ProductmodelproductdescriptioncultureRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productmodelproductdescriptionculture" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productmodelid" = ${fromWrite(compositeId.productmodelid)(Write.fromPut(ProductmodelId.put))} AND "productdescriptionid" = ${fromWrite(compositeId.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))} AND "cultureid" = ${fromWrite(compositeId.cultureid)(Write.fromPut(CultureId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productmodelid" = ${fromWrite(compositeId.productmodelid)(new Write.Single(ProductmodelId.put))} AND "productdescriptionid" = ${fromWrite(compositeId.productdescriptionid)(new Write.Single(ProductdescriptionId.put))} AND "cultureid" = ${fromWrite(compositeId.cultureid)(new Write.Single(CultureId.put))}""" .update .run .map(_ > 0) @@ -123,10 +123,10 @@ class ProductmodelproductdescriptioncultureRepoImpl extends Productmodelproductd override def upsert(unsaved: ProductmodelproductdescriptioncultureRow): ConnectionIO[ProductmodelproductdescriptioncultureRow] = { sql"""insert into "production"."productmodelproductdescriptionculture"("productmodelid", "productdescriptionid", "cultureid", "modifieddate") values ( - ${fromWrite(unsaved.productmodelid)(Write.fromPut(ProductmodelId.put))}::int4, - ${fromWrite(unsaved.productdescriptionid)(Write.fromPut(ProductdescriptionId.put))}::int4, - ${fromWrite(unsaved.cultureid)(Write.fromPut(CultureId.put))}::bpchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productmodelid)(new Write.Single(ProductmodelId.put))}::int4, + ${fromWrite(unsaved.productdescriptionid)(new Write.Single(ProductdescriptionId.put))}::int4, + ${fromWrite(unsaved.cultureid)(new Write.Single(CultureId.put))}::bpchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productmodelid", "productdescriptionid", "cultureid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRow.scala index a8b9b86797..fab42d721a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productmodelproductdescriptionculture/ProductmodelproductdescriptioncultureRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.culture.CultureId import adventureworks.production.productdescription.ProductdescriptionId import adventureworks.production.productmodel.ProductmodelId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productmodelproductdescriptionculture Cross-reference table mapping product descriptions and the language the description is written in. @@ -47,20 +45,19 @@ object ProductmodelproductdescriptioncultureRow { new ProductmodelproductdescriptioncultureRow(compositeId.productmodelid, compositeId.productdescriptionid, compositeId.cultureid, modifieddate) implicit lazy val decoder: Decoder[ProductmodelproductdescriptioncultureRow] = Decoder.forProduct4[ProductmodelproductdescriptioncultureRow, ProductmodelId, ProductdescriptionId, CultureId, TypoLocalDateTime]("productmodelid", "productdescriptionid", "cultureid", "modifieddate")(ProductmodelproductdescriptioncultureRow.apply)(ProductmodelId.decoder, ProductdescriptionId.decoder, CultureId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductmodelproductdescriptioncultureRow] = Encoder.forProduct4[ProductmodelproductdescriptioncultureRow, ProductmodelId, ProductdescriptionId, CultureId, TypoLocalDateTime]("productmodelid", "productdescriptionid", "cultureid", "modifieddate")(x => (x.productmodelid, x.productdescriptionid, x.cultureid, x.modifieddate))(ProductmodelId.encoder, ProductdescriptionId.encoder, CultureId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductmodelproductdescriptioncultureRow] = new Read[ProductmodelproductdescriptioncultureRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (ProductdescriptionId.get, Nullability.NoNulls), - (CultureId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductmodelproductdescriptioncultureRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - productdescriptionid = ProductdescriptionId.get.unsafeGetNonNullable(rs, i + 1), - cultureid = CultureId.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[ProductmodelproductdescriptioncultureRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductdescriptionId.get).asInstanceOf[Read[Any]], + new Read.Single(CultureId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductmodelproductdescriptioncultureRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + productdescriptionid = arr(1).asInstanceOf[ProductdescriptionId], + cultureid = arr(2).asInstanceOf[CultureId], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductmodelproductdescriptioncultureRow] = Text.instance[ProductmodelproductdescriptioncultureRow]{ (row, sb) => ProductmodelId.text.unsafeEncode(row.productmodelid, sb) sb.append(Text.DELIMETER) @@ -70,23 +67,11 @@ object ProductmodelproductdescriptioncultureRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductmodelproductdescriptioncultureRow] = new Write[ProductmodelproductdescriptioncultureRow]( - puts = List((ProductmodelId.put, Nullability.NoNulls), - (ProductdescriptionId.put, Nullability.NoNulls), - (CultureId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productmodelid, x.productdescriptionid, x.cultureid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductmodelId.put.unsafeSetNonNullable(rs, i + 0, a.productmodelid) - ProductdescriptionId.put.unsafeSetNonNullable(rs, i + 1, a.productdescriptionid) - CultureId.put.unsafeSetNonNullable(rs, i + 2, a.cultureid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductmodelId.put.unsafeUpdateNonNullable(ps, i + 0, a.productmodelid) - ProductdescriptionId.put.unsafeUpdateNonNullable(ps, i + 1, a.productdescriptionid) - CultureId.put.unsafeUpdateNonNullable(ps, i + 2, a.cultureid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[ProductmodelproductdescriptioncultureRow] = new Write.Composite[ProductmodelproductdescriptioncultureRow]( + List(new Write.Single(ProductmodelId.put), + new Write.Single(ProductdescriptionId.put), + new Write.Single(CultureId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productmodelid, a.productdescriptionid, a.cultureid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRepoImpl.scala index 599bc0b418..3357a995bf 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRepoImpl.scala @@ -30,30 +30,30 @@ class ProductphotoRepoImpl extends ProductphotoRepo { DeleteBuilder(""""production"."productphoto"""", ProductphotoFields.structure) } override def deleteById(productphotoid: ProductphotoId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productphoto" where "productphotoid" = ${fromWrite(productphotoid)(Write.fromPut(ProductphotoId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productphoto" where "productphotoid" = ${fromWrite(productphotoid)(new Write.Single(ProductphotoId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productphotoids: Array[ProductphotoId]): ConnectionIO[Int] = { sql"""delete from "production"."productphoto" where "productphotoid" = ANY(${productphotoids})""".update.run } override def insert(unsaved: ProductphotoRow): ConnectionIO[ProductphotoRow] = { sql"""insert into "production"."productphoto"("productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate") - values (${fromWrite(unsaved.productphotoid)(Write.fromPut(ProductphotoId.put))}::int4, ${fromWrite(unsaved.thumbnailphoto)(Write.fromPutOption(TypoBytea.put))}::bytea, ${fromWrite(unsaved.thumbnailphotofilename)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.largephoto)(Write.fromPutOption(TypoBytea.put))}::bytea, ${fromWrite(unsaved.largephotofilename)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productphotoid)(new Write.Single(ProductphotoId.put))}::int4, ${fromWrite(unsaved.thumbnailphoto)(new Write.SingleOpt(TypoBytea.put))}::bytea, ${fromWrite(unsaved.thumbnailphotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.largephoto)(new Write.SingleOpt(TypoBytea.put))}::bytea, ${fromWrite(unsaved.largephotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate"::text """.query(using ProductphotoRow.read).unique } override def insert(unsaved: ProductphotoRowUnsaved): ConnectionIO[ProductphotoRow] = { val fs = List( - Some((Fragment.const0(s""""thumbnailphoto""""), fr"${fromWrite(unsaved.thumbnailphoto)(Write.fromPutOption(TypoBytea.put))}::bytea")), - Some((Fragment.const0(s""""thumbnailphotofilename""""), fr"${fromWrite(unsaved.thumbnailphotofilename)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""largephoto""""), fr"${fromWrite(unsaved.largephoto)(Write.fromPutOption(TypoBytea.put))}::bytea")), - Some((Fragment.const0(s""""largephotofilename""""), fr"${fromWrite(unsaved.largephotofilename)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""thumbnailphoto""""), fr"${fromWrite(unsaved.thumbnailphoto)(new Write.SingleOpt(TypoBytea.put))}::bytea")), + Some((Fragment.const0(s""""thumbnailphotofilename""""), fr"${fromWrite(unsaved.thumbnailphotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""largephoto""""), fr"${fromWrite(unsaved.largephoto)(new Write.SingleOpt(TypoBytea.put))}::bytea")), + Some((Fragment.const0(s""""largephotofilename""""), fr"${fromWrite(unsaved.largephotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.productphotoid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productphotoid""""), fr"${fromWrite(value: ProductphotoId)(Write.fromPut(ProductphotoId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productphotoid""""), fr"${fromWrite(value: ProductphotoId)(new Write.Single(ProductphotoId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -85,7 +85,7 @@ class ProductphotoRepoImpl extends ProductphotoRepo { sql"""select "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate"::text from "production"."productphoto"""".query(using ProductphotoRow.read).stream } override def selectById(productphotoid: ProductphotoId): ConnectionIO[Option[ProductphotoRow]] = { - sql"""select "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate"::text from "production"."productphoto" where "productphotoid" = ${fromWrite(productphotoid)(Write.fromPut(ProductphotoId.put))}""".query(using ProductphotoRow.read).option + sql"""select "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate"::text from "production"."productphoto" where "productphotoid" = ${fromWrite(productphotoid)(new Write.Single(ProductphotoId.put))}""".query(using ProductphotoRow.read).option } override def selectByIds(productphotoids: Array[ProductphotoId]): Stream[ConnectionIO, ProductphotoRow] = { sql"""select "productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate"::text from "production"."productphoto" where "productphotoid" = ANY(${productphotoids})""".query(using ProductphotoRow.read).stream @@ -102,12 +102,12 @@ class ProductphotoRepoImpl extends ProductphotoRepo { override def update(row: ProductphotoRow): ConnectionIO[Boolean] = { val productphotoid = row.productphotoid sql"""update "production"."productphoto" - set "thumbnailphoto" = ${fromWrite(row.thumbnailphoto)(Write.fromPutOption(TypoBytea.put))}::bytea, - "thumbnailphotofilename" = ${fromWrite(row.thumbnailphotofilename)(Write.fromPutOption(Meta.StringMeta.put))}, - "largephoto" = ${fromWrite(row.largephoto)(Write.fromPutOption(TypoBytea.put))}::bytea, - "largephotofilename" = ${fromWrite(row.largephotofilename)(Write.fromPutOption(Meta.StringMeta.put))}, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productphotoid" = ${fromWrite(productphotoid)(Write.fromPut(ProductphotoId.put))}""" + set "thumbnailphoto" = ${fromWrite(row.thumbnailphoto)(new Write.SingleOpt(TypoBytea.put))}::bytea, + "thumbnailphotofilename" = ${fromWrite(row.thumbnailphotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}, + "largephoto" = ${fromWrite(row.largephoto)(new Write.SingleOpt(TypoBytea.put))}::bytea, + "largephotofilename" = ${fromWrite(row.largephotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productphotoid" = ${fromWrite(productphotoid)(new Write.Single(ProductphotoId.put))}""" .update .run .map(_ > 0) @@ -115,12 +115,12 @@ class ProductphotoRepoImpl extends ProductphotoRepo { override def upsert(unsaved: ProductphotoRow): ConnectionIO[ProductphotoRow] = { sql"""insert into "production"."productphoto"("productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate") values ( - ${fromWrite(unsaved.productphotoid)(Write.fromPut(ProductphotoId.put))}::int4, - ${fromWrite(unsaved.thumbnailphoto)(Write.fromPutOption(TypoBytea.put))}::bytea, - ${fromWrite(unsaved.thumbnailphotofilename)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.largephoto)(Write.fromPutOption(TypoBytea.put))}::bytea, - ${fromWrite(unsaved.largephotofilename)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productphotoid)(new Write.Single(ProductphotoId.put))}::int4, + ${fromWrite(unsaved.thumbnailphoto)(new Write.SingleOpt(TypoBytea.put))}::bytea, + ${fromWrite(unsaved.thumbnailphotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.largephoto)(new Write.SingleOpt(TypoBytea.put))}::bytea, + ${fromWrite(unsaved.largephotofilename)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productphotoid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRow.scala index 5b00c05042..4970a4cf97 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productphoto/ProductphotoRow.scala @@ -10,14 +10,12 @@ package productphoto import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoBytea import adventureworks.customtypes.TypoLocalDateTime -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productphoto Product images. @@ -45,24 +43,23 @@ case class ProductphotoRow( object ProductphotoRow { implicit lazy val decoder: Decoder[ProductphotoRow] = Decoder.forProduct6[ProductphotoRow, ProductphotoId, Option[TypoBytea], Option[/* max 50 chars */ String], Option[TypoBytea], Option[/* max 50 chars */ String], TypoLocalDateTime]("productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate")(ProductphotoRow.apply)(ProductphotoId.decoder, Decoder.decodeOption(TypoBytea.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(TypoBytea.decoder), Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductphotoRow] = Encoder.forProduct6[ProductphotoRow, ProductphotoId, Option[TypoBytea], Option[/* max 50 chars */ String], Option[TypoBytea], Option[/* max 50 chars */ String], TypoLocalDateTime]("productphotoid", "thumbnailphoto", "thumbnailphotofilename", "largephoto", "largephotofilename", "modifieddate")(x => (x.productphotoid, x.thumbnailphoto, x.thumbnailphotofilename, x.largephoto, x.largephotofilename, x.modifieddate))(ProductphotoId.encoder, Encoder.encodeOption(TypoBytea.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(TypoBytea.encoder), Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductphotoRow] = new Read[ProductphotoRow]( - gets = List( - (ProductphotoId.get, Nullability.NoNulls), - (TypoBytea.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoBytea.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductphotoRow( - productphotoid = ProductphotoId.get.unsafeGetNonNullable(rs, i + 0), - thumbnailphoto = TypoBytea.get.unsafeGetNullable(rs, i + 1), - thumbnailphotofilename = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - largephoto = TypoBytea.get.unsafeGetNullable(rs, i + 3), - largephotofilename = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[ProductphotoRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductphotoId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductphotoRow( + productphotoid = arr(0).asInstanceOf[ProductphotoId], + thumbnailphoto = arr(1).asInstanceOf[Option[TypoBytea]], + thumbnailphotofilename = arr(2).asInstanceOf[Option[/* max 50 chars */ String]], + largephoto = arr(3).asInstanceOf[Option[TypoBytea]], + largephotofilename = arr(4).asInstanceOf[Option[/* max 50 chars */ String]], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductphotoRow] = Text.instance[ProductphotoRow]{ (row, sb) => ProductphotoId.text.unsafeEncode(row.productphotoid, sb) sb.append(Text.DELIMETER) @@ -76,29 +73,13 @@ object ProductphotoRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductphotoRow] = new Write[ProductphotoRow]( - puts = List((ProductphotoId.put, Nullability.NoNulls), - (TypoBytea.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoBytea.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productphotoid, x.thumbnailphoto, x.thumbnailphotofilename, x.largephoto, x.largephotofilename, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductphotoId.put.unsafeSetNonNullable(rs, i + 0, a.productphotoid) - TypoBytea.put.unsafeSetNullable(rs, i + 1, a.thumbnailphoto) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.thumbnailphotofilename) - TypoBytea.put.unsafeSetNullable(rs, i + 3, a.largephoto) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 4, a.largephotofilename) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductphotoId.put.unsafeUpdateNonNullable(ps, i + 0, a.productphotoid) - TypoBytea.put.unsafeUpdateNullable(ps, i + 1, a.thumbnailphoto) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.thumbnailphotofilename) - TypoBytea.put.unsafeUpdateNullable(ps, i + 3, a.largephoto) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 4, a.largephotofilename) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[ProductphotoRow] = new Write.Composite[ProductphotoRow]( + List(new Write.Single(ProductphotoId.put), + new Write.Single(TypoBytea.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoBytea.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productphotoid, a.thumbnailphoto, a.thumbnailphotofilename, a.largephoto, a.largephotofilename, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRepoImpl.scala index 230c5a270c..67f1454dfe 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRepoImpl.scala @@ -31,7 +31,7 @@ class ProductproductphotoRepoImpl extends ProductproductphotoRepo { DeleteBuilder(""""production"."productproductphoto"""", ProductproductphotoFields.structure) } override def deleteById(compositeId: ProductproductphotoId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productproductphoto" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "productphotoid" = ${fromWrite(compositeId.productphotoid)(Write.fromPut(ProductphotoId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productproductphoto" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "productphotoid" = ${fromWrite(compositeId.productphotoid)(new Write.Single(ProductphotoId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductproductphotoId]): ConnectionIO[Int] = { val productid = compositeIds.map(_.productid) @@ -45,21 +45,21 @@ class ProductproductphotoRepoImpl extends ProductproductphotoRepo { } override def insert(unsaved: ProductproductphotoRow): ConnectionIO[ProductproductphotoRow] = { sql"""insert into "production"."productproductphoto"("productid", "productphotoid", "primary", "modifieddate") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.productphotoid)(Write.fromPut(ProductphotoId.put))}::int4, ${fromWrite(unsaved.primary)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.productphotoid)(new Write.Single(ProductphotoId.put))}::int4, ${fromWrite(unsaved.primary)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productid", "productphotoid", "primary", "modifieddate"::text """.query(using ProductproductphotoRow.read).unique } override def insert(unsaved: ProductproductphotoRowUnsaved): ConnectionIO[ProductproductphotoRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""productphotoid""""), fr"${fromWrite(unsaved.productphotoid)(Write.fromPut(ProductphotoId.put))}::int4")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""productphotoid""""), fr"${fromWrite(unsaved.productphotoid)(new Write.Single(ProductphotoId.put))}::int4")), unsaved.primary match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""primary""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""primary""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -91,7 +91,7 @@ class ProductproductphotoRepoImpl extends ProductproductphotoRepo { sql"""select "productid", "productphotoid", "primary", "modifieddate"::text from "production"."productproductphoto"""".query(using ProductproductphotoRow.read).stream } override def selectById(compositeId: ProductproductphotoId): ConnectionIO[Option[ProductproductphotoRow]] = { - sql"""select "productid", "productphotoid", "primary", "modifieddate"::text from "production"."productproductphoto" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "productphotoid" = ${fromWrite(compositeId.productphotoid)(Write.fromPut(ProductphotoId.put))}""".query(using ProductproductphotoRow.read).option + sql"""select "productid", "productphotoid", "primary", "modifieddate"::text from "production"."productproductphoto" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "productphotoid" = ${fromWrite(compositeId.productphotoid)(new Write.Single(ProductphotoId.put))}""".query(using ProductproductphotoRow.read).option } override def selectByIds(compositeIds: Array[ProductproductphotoId]): Stream[ConnectionIO, ProductproductphotoRow] = { val productid = compositeIds.map(_.productid) @@ -115,9 +115,9 @@ class ProductproductphotoRepoImpl extends ProductproductphotoRepo { override def update(row: ProductproductphotoRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."productproductphoto" - set "primary" = ${fromWrite(row.primary)(Write.fromPut(Flag.put))}::bool, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "productphotoid" = ${fromWrite(compositeId.productphotoid)(Write.fromPut(ProductphotoId.put))}""" + set "primary" = ${fromWrite(row.primary)(new Write.Single(Flag.put))}::bool, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "productphotoid" = ${fromWrite(compositeId.productphotoid)(new Write.Single(ProductphotoId.put))}""" .update .run .map(_ > 0) @@ -125,10 +125,10 @@ class ProductproductphotoRepoImpl extends ProductproductphotoRepo { override def upsert(unsaved: ProductproductphotoRow): ConnectionIO[ProductproductphotoRow] = { sql"""insert into "production"."productproductphoto"("productid", "productphotoid", "primary", "modifieddate") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.productphotoid)(Write.fromPut(ProductphotoId.put))}::int4, - ${fromWrite(unsaved.primary)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.productphotoid)(new Write.Single(ProductphotoId.put))}::int4, + ${fromWrite(unsaved.primary)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productid", "productphotoid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRow.scala index 9d03a28f28..6c8862e6c0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productproductphoto/ProductproductphotoRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId import adventureworks.production.productphoto.ProductphotoId import adventureworks.public.Flag -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productproductphoto Cross-reference table mapping products and product photos. @@ -47,20 +45,19 @@ object ProductproductphotoRow { new ProductproductphotoRow(compositeId.productid, compositeId.productphotoid, primary, modifieddate) implicit lazy val decoder: Decoder[ProductproductphotoRow] = Decoder.forProduct4[ProductproductphotoRow, ProductId, ProductphotoId, Flag, TypoLocalDateTime]("productid", "productphotoid", "primary", "modifieddate")(ProductproductphotoRow.apply)(ProductId.decoder, ProductphotoId.decoder, Flag.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductproductphotoRow] = Encoder.forProduct4[ProductproductphotoRow, ProductId, ProductphotoId, Flag, TypoLocalDateTime]("productid", "productphotoid", "primary", "modifieddate")(x => (x.productid, x.productphotoid, x.primary, x.modifieddate))(ProductId.encoder, ProductphotoId.encoder, Flag.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductproductphotoRow] = new Read[ProductproductphotoRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductphotoId.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductproductphotoRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productphotoid = ProductphotoId.get.unsafeGetNonNullable(rs, i + 1), - primary = Flag.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[ProductproductphotoRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductphotoId.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductproductphotoRow( + productid = arr(0).asInstanceOf[ProductId], + productphotoid = arr(1).asInstanceOf[ProductphotoId], + primary = arr(2).asInstanceOf[Flag], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductproductphotoRow] = Text.instance[ProductproductphotoRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -70,23 +67,11 @@ object ProductproductphotoRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductproductphotoRow] = new Write[ProductproductphotoRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (ProductphotoId.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.productphotoid, x.primary, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - ProductphotoId.put.unsafeSetNonNullable(rs, i + 1, a.productphotoid) - Flag.put.unsafeSetNonNullable(rs, i + 2, a.primary) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - ProductphotoId.put.unsafeUpdateNonNullable(ps, i + 1, a.productphotoid) - Flag.put.unsafeUpdateNonNullable(ps, i + 2, a.primary) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[ProductproductphotoRow] = new Write.Composite[ProductproductphotoRow]( + List(new Write.Single(ProductId.put), + new Write.Single(ProductphotoId.put), + new Write.Single(Flag.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productid, a.productphotoid, a.primary, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRepoImpl.scala index 1eac8e2df5..406322a62d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRepoImpl.scala @@ -31,35 +31,35 @@ class ProductreviewRepoImpl extends ProductreviewRepo { DeleteBuilder(""""production"."productreview"""", ProductreviewFields.structure) } override def deleteById(productreviewid: ProductreviewId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productreview" where "productreviewid" = ${fromWrite(productreviewid)(Write.fromPut(ProductreviewId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productreview" where "productreviewid" = ${fromWrite(productreviewid)(new Write.Single(ProductreviewId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productreviewids: Array[ProductreviewId]): ConnectionIO[Int] = { sql"""delete from "production"."productreview" where "productreviewid" = ANY(${productreviewids})""".update.run } override def insert(unsaved: ProductreviewRow): ConnectionIO[ProductreviewRow] = { sql"""insert into "production"."productreview"("productreviewid", "productid", "reviewername", "reviewdate", "emailaddress", "rating", "comments", "modifieddate") - values (${fromWrite(unsaved.productreviewid)(Write.fromPut(ProductreviewId.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.reviewername)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.reviewdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.emailaddress)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.rating)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.comments)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productreviewid)(new Write.Single(ProductreviewId.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.reviewername)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.reviewdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.emailaddress)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.rating)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.comments)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productreviewid", "productid", "reviewername", "reviewdate"::text, "emailaddress", "rating", "comments", "modifieddate"::text """.query(using ProductreviewRow.read).unique } override def insert(unsaved: ProductreviewRowUnsaved): ConnectionIO[ProductreviewRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""reviewername""""), fr"${fromWrite(unsaved.reviewername)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""emailaddress""""), fr"${fromWrite(unsaved.emailaddress)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""rating""""), fr"${fromWrite(unsaved.rating)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""comments""""), fr"${fromWrite(unsaved.comments)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""reviewername""""), fr"${fromWrite(unsaved.reviewername)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""emailaddress""""), fr"${fromWrite(unsaved.emailaddress)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""rating""""), fr"${fromWrite(unsaved.rating)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""comments""""), fr"${fromWrite(unsaved.comments)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.productreviewid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productreviewid""""), fr"${fromWrite(value: ProductreviewId)(Write.fromPut(ProductreviewId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productreviewid""""), fr"${fromWrite(value: ProductreviewId)(new Write.Single(ProductreviewId.put))}::int4")) }, unsaved.reviewdate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""reviewdate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""reviewdate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -91,7 +91,7 @@ class ProductreviewRepoImpl extends ProductreviewRepo { sql"""select "productreviewid", "productid", "reviewername", "reviewdate"::text, "emailaddress", "rating", "comments", "modifieddate"::text from "production"."productreview"""".query(using ProductreviewRow.read).stream } override def selectById(productreviewid: ProductreviewId): ConnectionIO[Option[ProductreviewRow]] = { - sql"""select "productreviewid", "productid", "reviewername", "reviewdate"::text, "emailaddress", "rating", "comments", "modifieddate"::text from "production"."productreview" where "productreviewid" = ${fromWrite(productreviewid)(Write.fromPut(ProductreviewId.put))}""".query(using ProductreviewRow.read).option + sql"""select "productreviewid", "productid", "reviewername", "reviewdate"::text, "emailaddress", "rating", "comments", "modifieddate"::text from "production"."productreview" where "productreviewid" = ${fromWrite(productreviewid)(new Write.Single(ProductreviewId.put))}""".query(using ProductreviewRow.read).option } override def selectByIds(productreviewids: Array[ProductreviewId]): Stream[ConnectionIO, ProductreviewRow] = { sql"""select "productreviewid", "productid", "reviewername", "reviewdate"::text, "emailaddress", "rating", "comments", "modifieddate"::text from "production"."productreview" where "productreviewid" = ANY(${productreviewids})""".query(using ProductreviewRow.read).stream @@ -108,14 +108,14 @@ class ProductreviewRepoImpl extends ProductreviewRepo { override def update(row: ProductreviewRow): ConnectionIO[Boolean] = { val productreviewid = row.productreviewid sql"""update "production"."productreview" - set "productid" = ${fromWrite(row.productid)(Write.fromPut(ProductId.put))}::int4, - "reviewername" = ${fromWrite(row.reviewername)(Write.fromPut(Name.put))}::varchar, - "reviewdate" = ${fromWrite(row.reviewdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "emailaddress" = ${fromWrite(row.emailaddress)(Write.fromPut(Meta.StringMeta.put))}, - "rating" = ${fromWrite(row.rating)(Write.fromPut(Meta.IntMeta.put))}::int4, - "comments" = ${fromWrite(row.comments)(Write.fromPutOption(Meta.StringMeta.put))}, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productreviewid" = ${fromWrite(productreviewid)(Write.fromPut(ProductreviewId.put))}""" + set "productid" = ${fromWrite(row.productid)(new Write.Single(ProductId.put))}::int4, + "reviewername" = ${fromWrite(row.reviewername)(new Write.Single(Name.put))}::varchar, + "reviewdate" = ${fromWrite(row.reviewdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "emailaddress" = ${fromWrite(row.emailaddress)(new Write.Single(Meta.StringMeta.put))}, + "rating" = ${fromWrite(row.rating)(new Write.Single(Meta.IntMeta.put))}::int4, + "comments" = ${fromWrite(row.comments)(new Write.SingleOpt(Meta.StringMeta.put))}, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productreviewid" = ${fromWrite(productreviewid)(new Write.Single(ProductreviewId.put))}""" .update .run .map(_ > 0) @@ -123,14 +123,14 @@ class ProductreviewRepoImpl extends ProductreviewRepo { override def upsert(unsaved: ProductreviewRow): ConnectionIO[ProductreviewRow] = { sql"""insert into "production"."productreview"("productreviewid", "productid", "reviewername", "reviewdate", "emailaddress", "rating", "comments", "modifieddate") values ( - ${fromWrite(unsaved.productreviewid)(Write.fromPut(ProductreviewId.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.reviewername)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.reviewdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.emailaddress)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.rating)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.comments)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productreviewid)(new Write.Single(ProductreviewId.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.reviewername)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.reviewdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.emailaddress)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.rating)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.comments)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productreviewid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRow.scala index 0fb4a1a398..ef97e2994d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productreview/ProductreviewRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productreview Customer reviews of products they have purchased. @@ -53,28 +51,27 @@ case class ProductreviewRow( object ProductreviewRow { implicit lazy val decoder: Decoder[ProductreviewRow] = Decoder.forProduct8[ProductreviewRow, ProductreviewId, ProductId, Name, TypoLocalDateTime, /* max 50 chars */ String, Int, Option[/* max 3850 chars */ String], TypoLocalDateTime]("productreviewid", "productid", "reviewername", "reviewdate", "emailaddress", "rating", "comments", "modifieddate")(ProductreviewRow.apply)(ProductreviewId.decoder, ProductId.decoder, Name.decoder, TypoLocalDateTime.decoder, Decoder.decodeString, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductreviewRow] = Encoder.forProduct8[ProductreviewRow, ProductreviewId, ProductId, Name, TypoLocalDateTime, /* max 50 chars */ String, Int, Option[/* max 3850 chars */ String], TypoLocalDateTime]("productreviewid", "productid", "reviewername", "reviewdate", "emailaddress", "rating", "comments", "modifieddate")(x => (x.productreviewid, x.productid, x.reviewername, x.reviewdate, x.emailaddress, x.rating, x.comments, x.modifieddate))(ProductreviewId.encoder, ProductId.encoder, Name.encoder, TypoLocalDateTime.encoder, Encoder.encodeString, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductreviewRow] = new Read[ProductreviewRow]( - gets = List( - (ProductreviewId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductreviewRow( - productreviewid = ProductreviewId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - reviewername = Name.get.unsafeGetNonNullable(rs, i + 2), - reviewdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3), - emailaddress = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - rating = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 5), - comments = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7) + implicit lazy val read: Read[ProductreviewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductreviewId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductreviewRow( + productreviewid = arr(0).asInstanceOf[ProductreviewId], + productid = arr(1).asInstanceOf[ProductId], + reviewername = arr(2).asInstanceOf[Name], + reviewdate = arr(3).asInstanceOf[TypoLocalDateTime], + emailaddress = arr(4).asInstanceOf[/* max 50 chars */ String], + rating = arr(5).asInstanceOf[Int], + comments = arr(6).asInstanceOf[Option[/* max 3850 chars */ String]], + modifieddate = arr(7).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductreviewRow] = Text.instance[ProductreviewRow]{ (row, sb) => ProductreviewId.text.unsafeEncode(row.productreviewid, sb) sb.append(Text.DELIMETER) @@ -92,35 +89,15 @@ object ProductreviewRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductreviewRow] = new Write[ProductreviewRow]( - puts = List((ProductreviewId.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productreviewid, x.productid, x.reviewername, x.reviewdate, x.emailaddress, x.rating, x.comments, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductreviewId.put.unsafeSetNonNullable(rs, i + 0, a.productreviewid) - ProductId.put.unsafeSetNonNullable(rs, i + 1, a.productid) - Name.put.unsafeSetNonNullable(rs, i + 2, a.reviewername) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.reviewdate) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 4, a.emailaddress) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 5, a.rating) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 6, a.comments) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 7, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductreviewId.put.unsafeUpdateNonNullable(ps, i + 0, a.productreviewid) - ProductId.put.unsafeUpdateNonNullable(ps, i + 1, a.productid) - Name.put.unsafeUpdateNonNullable(ps, i + 2, a.reviewername) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.reviewdate) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.emailaddress) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.rating) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 6, a.comments) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 7, a.modifieddate) - } + implicit lazy val write: Write[ProductreviewRow] = new Write.Composite[ProductreviewRow]( + List(new Write.Single(ProductreviewId.put), + new Write.Single(ProductId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productreviewid, a.productid, a.reviewername, a.reviewdate, a.emailaddress, a.rating, a.comments, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRepoImpl.scala index 5c24013b33..36515286e4 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRepoImpl.scala @@ -31,32 +31,32 @@ class ProductsubcategoryRepoImpl extends ProductsubcategoryRepo { DeleteBuilder(""""production"."productsubcategory"""", ProductsubcategoryFields.structure) } override def deleteById(productsubcategoryid: ProductsubcategoryId): ConnectionIO[Boolean] = { - sql"""delete from "production"."productsubcategory" where "productsubcategoryid" = ${fromWrite(productsubcategoryid)(Write.fromPut(ProductsubcategoryId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."productsubcategory" where "productsubcategoryid" = ${fromWrite(productsubcategoryid)(new Write.Single(ProductsubcategoryId.put))}""".update.run.map(_ > 0) } override def deleteByIds(productsubcategoryids: Array[ProductsubcategoryId]): ConnectionIO[Int] = { sql"""delete from "production"."productsubcategory" where "productsubcategoryid" = ANY(${productsubcategoryids})""".update.run } override def insert(unsaved: ProductsubcategoryRow): ConnectionIO[ProductsubcategoryRow] = { sql"""insert into "production"."productsubcategory"("productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate") - values (${fromWrite(unsaved.productsubcategoryid)(Write.fromPut(ProductsubcategoryId.put))}::int4, ${fromWrite(unsaved.productcategoryid)(Write.fromPut(ProductcategoryId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productsubcategoryid)(new Write.Single(ProductsubcategoryId.put))}::int4, ${fromWrite(unsaved.productcategoryid)(new Write.Single(ProductcategoryId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate"::text """.query(using ProductsubcategoryRow.read).unique } override def insert(unsaved: ProductsubcategoryRowUnsaved): ConnectionIO[ProductsubcategoryRow] = { val fs = List( - Some((Fragment.const0(s""""productcategoryid""""), fr"${fromWrite(unsaved.productcategoryid)(Write.fromPut(ProductcategoryId.put))}::int4")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""productcategoryid""""), fr"${fromWrite(unsaved.productcategoryid)(new Write.Single(ProductcategoryId.put))}::int4")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.productsubcategoryid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""productsubcategoryid""""), fr"${fromWrite(value: ProductsubcategoryId)(Write.fromPut(ProductsubcategoryId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""productsubcategoryid""""), fr"${fromWrite(value: ProductsubcategoryId)(new Write.Single(ProductsubcategoryId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -88,7 +88,7 @@ class ProductsubcategoryRepoImpl extends ProductsubcategoryRepo { sql"""select "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productsubcategory"""".query(using ProductsubcategoryRow.read).stream } override def selectById(productsubcategoryid: ProductsubcategoryId): ConnectionIO[Option[ProductsubcategoryRow]] = { - sql"""select "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productsubcategory" where "productsubcategoryid" = ${fromWrite(productsubcategoryid)(Write.fromPut(ProductsubcategoryId.put))}""".query(using ProductsubcategoryRow.read).option + sql"""select "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productsubcategory" where "productsubcategoryid" = ${fromWrite(productsubcategoryid)(new Write.Single(ProductsubcategoryId.put))}""".query(using ProductsubcategoryRow.read).option } override def selectByIds(productsubcategoryids: Array[ProductsubcategoryId]): Stream[ConnectionIO, ProductsubcategoryRow] = { sql"""select "productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate"::text from "production"."productsubcategory" where "productsubcategoryid" = ANY(${productsubcategoryids})""".query(using ProductsubcategoryRow.read).stream @@ -105,11 +105,11 @@ class ProductsubcategoryRepoImpl extends ProductsubcategoryRepo { override def update(row: ProductsubcategoryRow): ConnectionIO[Boolean] = { val productsubcategoryid = row.productsubcategoryid sql"""update "production"."productsubcategory" - set "productcategoryid" = ${fromWrite(row.productcategoryid)(Write.fromPut(ProductcategoryId.put))}::int4, - "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productsubcategoryid" = ${fromWrite(productsubcategoryid)(Write.fromPut(ProductsubcategoryId.put))}""" + set "productcategoryid" = ${fromWrite(row.productcategoryid)(new Write.Single(ProductcategoryId.put))}::int4, + "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productsubcategoryid" = ${fromWrite(productsubcategoryid)(new Write.Single(ProductsubcategoryId.put))}""" .update .run .map(_ > 0) @@ -117,11 +117,11 @@ class ProductsubcategoryRepoImpl extends ProductsubcategoryRepo { override def upsert(unsaved: ProductsubcategoryRow): ConnectionIO[ProductsubcategoryRow] = { sql"""insert into "production"."productsubcategory"("productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.productsubcategoryid)(Write.fromPut(ProductsubcategoryId.put))}::int4, - ${fromWrite(unsaved.productcategoryid)(Write.fromPut(ProductcategoryId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productsubcategoryid)(new Write.Single(ProductsubcategoryId.put))}::int4, + ${fromWrite(unsaved.productcategoryid)(new Write.Single(ProductcategoryId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productsubcategoryid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRow.scala index ad09819527..b40d60b5e8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/productsubcategory/ProductsubcategoryRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.productcategory.ProductcategoryId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.productsubcategory Product subcategories. See ProductCategory table. @@ -45,22 +43,21 @@ case class ProductsubcategoryRow( object ProductsubcategoryRow { implicit lazy val decoder: Decoder[ProductsubcategoryRow] = Decoder.forProduct5[ProductsubcategoryRow, ProductsubcategoryId, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate")(ProductsubcategoryRow.apply)(ProductsubcategoryId.decoder, ProductcategoryId.decoder, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductsubcategoryRow] = Encoder.forProduct5[ProductsubcategoryRow, ProductsubcategoryId, ProductcategoryId, Name, TypoUUID, TypoLocalDateTime]("productsubcategoryid", "productcategoryid", "name", "rowguid", "modifieddate")(x => (x.productsubcategoryid, x.productcategoryid, x.name, x.rowguid, x.modifieddate))(ProductsubcategoryId.encoder, ProductcategoryId.encoder, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductsubcategoryRow] = new Read[ProductsubcategoryRow]( - gets = List( - (ProductsubcategoryId.get, Nullability.NoNulls), - (ProductcategoryId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductsubcategoryRow( - productsubcategoryid = ProductsubcategoryId.get.unsafeGetNonNullable(rs, i + 0), - productcategoryid = ProductcategoryId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[ProductsubcategoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductsubcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductcategoryId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductsubcategoryRow( + productsubcategoryid = arr(0).asInstanceOf[ProductsubcategoryId], + productcategoryid = arr(1).asInstanceOf[ProductcategoryId], + name = arr(2).asInstanceOf[Name], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductsubcategoryRow] = Text.instance[ProductsubcategoryRow]{ (row, sb) => ProductsubcategoryId.text.unsafeEncode(row.productsubcategoryid, sb) sb.append(Text.DELIMETER) @@ -72,26 +69,12 @@ object ProductsubcategoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductsubcategoryRow] = new Write[ProductsubcategoryRow]( - puts = List((ProductsubcategoryId.put, Nullability.NoNulls), - (ProductcategoryId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productsubcategoryid, x.productcategoryid, x.name, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductsubcategoryId.put.unsafeSetNonNullable(rs, i + 0, a.productsubcategoryid) - ProductcategoryId.put.unsafeSetNonNullable(rs, i + 1, a.productcategoryid) - Name.put.unsafeSetNonNullable(rs, i + 2, a.name) - TypoUUID.put.unsafeSetNonNullable(rs, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductsubcategoryId.put.unsafeUpdateNonNullable(ps, i + 0, a.productsubcategoryid) - ProductcategoryId.put.unsafeUpdateNonNullable(ps, i + 1, a.productcategoryid) - Name.put.unsafeUpdateNonNullable(ps, i + 2, a.name) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[ProductsubcategoryRow] = new Write.Composite[ProductsubcategoryRow]( + List(new Write.Single(ProductsubcategoryId.put), + new Write.Single(ProductcategoryId.put), + new Write.Single(Name.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productsubcategoryid, a.productcategoryid, a.name, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRepoImpl.scala index fe30a3d89d..e23093fd91 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRepoImpl.scala @@ -29,27 +29,27 @@ class ScrapreasonRepoImpl extends ScrapreasonRepo { DeleteBuilder(""""production"."scrapreason"""", ScrapreasonFields.structure) } override def deleteById(scrapreasonid: ScrapreasonId): ConnectionIO[Boolean] = { - sql"""delete from "production"."scrapreason" where "scrapreasonid" = ${fromWrite(scrapreasonid)(Write.fromPut(ScrapreasonId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."scrapreason" where "scrapreasonid" = ${fromWrite(scrapreasonid)(new Write.Single(ScrapreasonId.put))}""".update.run.map(_ > 0) } override def deleteByIds(scrapreasonids: Array[ScrapreasonId]): ConnectionIO[Int] = { sql"""delete from "production"."scrapreason" where "scrapreasonid" = ANY(${scrapreasonids})""".update.run } override def insert(unsaved: ScrapreasonRow): ConnectionIO[ScrapreasonRow] = { sql"""insert into "production"."scrapreason"("scrapreasonid", "name", "modifieddate") - values (${fromWrite(unsaved.scrapreasonid)(Write.fromPut(ScrapreasonId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.scrapreasonid)(new Write.Single(ScrapreasonId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "scrapreasonid", "name", "modifieddate"::text """.query(using ScrapreasonRow.read).unique } override def insert(unsaved: ScrapreasonRowUnsaved): ConnectionIO[ScrapreasonRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.scrapreasonid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""scrapreasonid""""), fr"${fromWrite(value: ScrapreasonId)(Write.fromPut(ScrapreasonId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""scrapreasonid""""), fr"${fromWrite(value: ScrapreasonId)(new Write.Single(ScrapreasonId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -81,7 +81,7 @@ class ScrapreasonRepoImpl extends ScrapreasonRepo { sql"""select "scrapreasonid", "name", "modifieddate"::text from "production"."scrapreason"""".query(using ScrapreasonRow.read).stream } override def selectById(scrapreasonid: ScrapreasonId): ConnectionIO[Option[ScrapreasonRow]] = { - sql"""select "scrapreasonid", "name", "modifieddate"::text from "production"."scrapreason" where "scrapreasonid" = ${fromWrite(scrapreasonid)(Write.fromPut(ScrapreasonId.put))}""".query(using ScrapreasonRow.read).option + sql"""select "scrapreasonid", "name", "modifieddate"::text from "production"."scrapreason" where "scrapreasonid" = ${fromWrite(scrapreasonid)(new Write.Single(ScrapreasonId.put))}""".query(using ScrapreasonRow.read).option } override def selectByIds(scrapreasonids: Array[ScrapreasonId]): Stream[ConnectionIO, ScrapreasonRow] = { sql"""select "scrapreasonid", "name", "modifieddate"::text from "production"."scrapreason" where "scrapreasonid" = ANY(${scrapreasonids})""".query(using ScrapreasonRow.read).stream @@ -98,9 +98,9 @@ class ScrapreasonRepoImpl extends ScrapreasonRepo { override def update(row: ScrapreasonRow): ConnectionIO[Boolean] = { val scrapreasonid = row.scrapreasonid sql"""update "production"."scrapreason" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "scrapreasonid" = ${fromWrite(scrapreasonid)(Write.fromPut(ScrapreasonId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "scrapreasonid" = ${fromWrite(scrapreasonid)(new Write.Single(ScrapreasonId.put))}""" .update .run .map(_ > 0) @@ -108,9 +108,9 @@ class ScrapreasonRepoImpl extends ScrapreasonRepo { override def upsert(unsaved: ScrapreasonRow): ConnectionIO[ScrapreasonRow] = { sql"""insert into "production"."scrapreason"("scrapreasonid", "name", "modifieddate") values ( - ${fromWrite(unsaved.scrapreasonid)(Write.fromPut(ScrapreasonId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.scrapreasonid)(new Write.Single(ScrapreasonId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("scrapreasonid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRow.scala index f8af862fc9..4ae36726ed 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/scrapreason/ScrapreasonRow.scala @@ -10,13 +10,11 @@ package scrapreason import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.scrapreason Manufacturing failure reasons lookup table. @@ -38,18 +36,17 @@ case class ScrapreasonRow( object ScrapreasonRow { implicit lazy val decoder: Decoder[ScrapreasonRow] = Decoder.forProduct3[ScrapreasonRow, ScrapreasonId, Name, TypoLocalDateTime]("scrapreasonid", "name", "modifieddate")(ScrapreasonRow.apply)(ScrapreasonId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ScrapreasonRow] = Encoder.forProduct3[ScrapreasonRow, ScrapreasonId, Name, TypoLocalDateTime]("scrapreasonid", "name", "modifieddate")(x => (x.scrapreasonid, x.name, x.modifieddate))(ScrapreasonId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ScrapreasonRow] = new Read[ScrapreasonRow]( - gets = List( - (ScrapreasonId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ScrapreasonRow( - scrapreasonid = ScrapreasonId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[ScrapreasonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ScrapreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ScrapreasonRow( + scrapreasonid = arr(0).asInstanceOf[ScrapreasonId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ScrapreasonRow] = Text.instance[ScrapreasonRow]{ (row, sb) => ScrapreasonId.text.unsafeEncode(row.scrapreasonid, sb) sb.append(Text.DELIMETER) @@ -57,20 +54,10 @@ object ScrapreasonRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ScrapreasonRow] = new Write[ScrapreasonRow]( - puts = List((ScrapreasonId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.scrapreasonid, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - ScrapreasonId.put.unsafeSetNonNullable(rs, i + 0, a.scrapreasonid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ScrapreasonId.put.unsafeUpdateNonNullable(ps, i + 0, a.scrapreasonid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[ScrapreasonRow] = new Write.Composite[ScrapreasonRow]( + List(new Write.Single(ScrapreasonId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.scrapreasonid, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRepoImpl.scala index 3198e91fc1..3dbfa8d13f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRepoImpl.scala @@ -30,39 +30,39 @@ class TransactionhistoryRepoImpl extends TransactionhistoryRepo { DeleteBuilder(""""production"."transactionhistory"""", TransactionhistoryFields.structure) } override def deleteById(transactionid: TransactionhistoryId): ConnectionIO[Boolean] = { - sql"""delete from "production"."transactionhistory" where "transactionid" = ${fromWrite(transactionid)(Write.fromPut(TransactionhistoryId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."transactionhistory" where "transactionid" = ${fromWrite(transactionid)(new Write.Single(TransactionhistoryId.put))}""".update.run.map(_ > 0) } override def deleteByIds(transactionids: Array[TransactionhistoryId]): ConnectionIO[Int] = { sql"""delete from "production"."transactionhistory" where "transactionid" = ANY(${transactionids})""".update.run } override def insert(unsaved: TransactionhistoryRow): ConnectionIO[TransactionhistoryRow] = { sql"""insert into "production"."transactionhistory"("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate") - values (${fromWrite(unsaved.transactionid)(Write.fromPut(TransactionhistoryId.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.referenceorderlineid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.transactiondate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.transactionid)(new Write.Single(TransactionhistoryId.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.referenceorderlineid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.transactiondate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text """.query(using TransactionhistoryRow.read).unique } override def insert(unsaved: TransactionhistoryRowUnsaved): ConnectionIO[TransactionhistoryRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""referenceorderid""""), fr"${fromWrite(unsaved.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""transactiontype""""), fr"${fromWrite(unsaved.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""actualcost""""), fr"${fromWrite(unsaved.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""referenceorderid""""), fr"${fromWrite(unsaved.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""transactiontype""""), fr"${fromWrite(unsaved.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""actualcost""""), fr"${fromWrite(unsaved.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.transactionid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""transactionid""""), fr"${fromWrite(value: TransactionhistoryId)(Write.fromPut(TransactionhistoryId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""transactionid""""), fr"${fromWrite(value: TransactionhistoryId)(new Write.Single(TransactionhistoryId.put))}::int4")) }, unsaved.referenceorderlineid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""referenceorderlineid""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""referenceorderlineid""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.transactiondate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""transactiondate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""transactiondate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -94,7 +94,7 @@ class TransactionhistoryRepoImpl extends TransactionhistoryRepo { sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistory"""".query(using TransactionhistoryRow.read).stream } override def selectById(transactionid: TransactionhistoryId): ConnectionIO[Option[TransactionhistoryRow]] = { - sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistory" where "transactionid" = ${fromWrite(transactionid)(Write.fromPut(TransactionhistoryId.put))}""".query(using TransactionhistoryRow.read).option + sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistory" where "transactionid" = ${fromWrite(transactionid)(new Write.Single(TransactionhistoryId.put))}""".query(using TransactionhistoryRow.read).option } override def selectByIds(transactionids: Array[TransactionhistoryId]): Stream[ConnectionIO, TransactionhistoryRow] = { sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistory" where "transactionid" = ANY(${transactionids})""".query(using TransactionhistoryRow.read).stream @@ -111,15 +111,15 @@ class TransactionhistoryRepoImpl extends TransactionhistoryRepo { override def update(row: TransactionhistoryRow): ConnectionIO[Boolean] = { val transactionid = row.transactionid sql"""update "production"."transactionhistory" - set "productid" = ${fromWrite(row.productid)(Write.fromPut(ProductId.put))}::int4, - "referenceorderid" = ${fromWrite(row.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4, - "referenceorderlineid" = ${fromWrite(row.referenceorderlineid)(Write.fromPut(Meta.IntMeta.put))}::int4, - "transactiondate" = ${fromWrite(row.transactiondate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "transactiontype" = ${fromWrite(row.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "quantity" = ${fromWrite(row.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, - "actualcost" = ${fromWrite(row.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "transactionid" = ${fromWrite(transactionid)(Write.fromPut(TransactionhistoryId.put))}""" + set "productid" = ${fromWrite(row.productid)(new Write.Single(ProductId.put))}::int4, + "referenceorderid" = ${fromWrite(row.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4, + "referenceorderlineid" = ${fromWrite(row.referenceorderlineid)(new Write.Single(Meta.IntMeta.put))}::int4, + "transactiondate" = ${fromWrite(row.transactiondate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "transactiontype" = ${fromWrite(row.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "quantity" = ${fromWrite(row.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, + "actualcost" = ${fromWrite(row.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "transactionid" = ${fromWrite(transactionid)(new Write.Single(TransactionhistoryId.put))}""" .update .run .map(_ > 0) @@ -127,15 +127,15 @@ class TransactionhistoryRepoImpl extends TransactionhistoryRepo { override def upsert(unsaved: TransactionhistoryRow): ConnectionIO[TransactionhistoryRow] = { sql"""insert into "production"."transactionhistory"("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate") values ( - ${fromWrite(unsaved.transactionid)(Write.fromPut(TransactionhistoryId.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.referenceorderlineid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.transactiondate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.transactionid)(new Write.Single(TransactionhistoryId.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.referenceorderlineid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.transactiondate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("transactionid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRow.scala index 6fab4ee6bc..1ad1c576a0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistory/TransactionhistoryRow.scala @@ -10,14 +10,12 @@ package transactionhistory import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.transactionhistory Record of each purchase order, sales order, or work order transaction year to date. @@ -55,30 +53,29 @@ case class TransactionhistoryRow( object TransactionhistoryRow { implicit lazy val decoder: Decoder[TransactionhistoryRow] = Decoder.forProduct9[TransactionhistoryRow, TransactionhistoryId, ProductId, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(TransactionhistoryRow.apply)(TransactionhistoryId.decoder, ProductId.decoder, Decoder.decodeInt, Decoder.decodeInt, TypoLocalDateTime.decoder, Decoder.decodeString, Decoder.decodeInt, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[TransactionhistoryRow] = Encoder.forProduct9[TransactionhistoryRow, TransactionhistoryId, ProductId, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(x => (x.transactionid, x.productid, x.referenceorderid, x.referenceorderlineid, x.transactiondate, x.transactiontype, x.quantity, x.actualcost, x.modifieddate))(TransactionhistoryId.encoder, ProductId.encoder, Encoder.encodeInt, Encoder.encodeInt, TypoLocalDateTime.encoder, Encoder.encodeString, Encoder.encodeInt, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[TransactionhistoryRow] = new Read[TransactionhistoryRow]( - gets = List( - (TransactionhistoryId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TransactionhistoryRow( - transactionid = TransactionhistoryId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - referenceorderid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - referenceorderlineid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - transactiondate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - transactiontype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - quantity = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 6), - actualcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[TransactionhistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TransactionhistoryId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TransactionhistoryRow( + transactionid = arr(0).asInstanceOf[TransactionhistoryId], + productid = arr(1).asInstanceOf[ProductId], + referenceorderid = arr(2).asInstanceOf[Int], + referenceorderlineid = arr(3).asInstanceOf[Int], + transactiondate = arr(4).asInstanceOf[TypoLocalDateTime], + transactiontype = arr(5).asInstanceOf[/* bpchar, max 1 chars */ String], + quantity = arr(6).asInstanceOf[Int], + actualcost = arr(7).asInstanceOf[BigDecimal], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[TransactionhistoryRow] = Text.instance[TransactionhistoryRow]{ (row, sb) => TransactionhistoryId.text.unsafeEncode(row.transactionid, sb) sb.append(Text.DELIMETER) @@ -98,38 +95,16 @@ object TransactionhistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[TransactionhistoryRow] = new Write[TransactionhistoryRow]( - puts = List((TransactionhistoryId.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.transactionid, x.productid, x.referenceorderid, x.referenceorderlineid, x.transactiondate, x.transactiontype, x.quantity, x.actualcost, x.modifieddate), - unsafeSet = (rs, i, a) => { - TransactionhistoryId.put.unsafeSetNonNullable(rs, i + 0, a.transactionid) - ProductId.put.unsafeSetNonNullable(rs, i + 1, a.productid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 2, a.referenceorderid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 3, a.referenceorderlineid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.transactiondate) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.transactiontype) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 6, a.quantity) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 7, a.actualcost) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - TransactionhistoryId.put.unsafeUpdateNonNullable(ps, i + 0, a.transactionid) - ProductId.put.unsafeUpdateNonNullable(ps, i + 1, a.productid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.referenceorderid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.referenceorderlineid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.transactiondate) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.transactiontype) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.quantity) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.actualcost) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[TransactionhistoryRow] = new Write.Composite[TransactionhistoryRow]( + List(new Write.Single(TransactionhistoryId.put), + new Write.Single(ProductId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.transactionid, a.productid, a.referenceorderid, a.referenceorderlineid, a.transactiondate, a.transactiontype, a.quantity, a.actualcost, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRepoImpl.scala index c7065e7ae8..73d486dabd 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRepoImpl.scala @@ -29,36 +29,36 @@ class TransactionhistoryarchiveRepoImpl extends TransactionhistoryarchiveRepo { DeleteBuilder(""""production"."transactionhistoryarchive"""", TransactionhistoryarchiveFields.structure) } override def deleteById(transactionid: TransactionhistoryarchiveId): ConnectionIO[Boolean] = { - sql"""delete from "production"."transactionhistoryarchive" where "transactionid" = ${fromWrite(transactionid)(Write.fromPut(TransactionhistoryarchiveId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."transactionhistoryarchive" where "transactionid" = ${fromWrite(transactionid)(new Write.Single(TransactionhistoryarchiveId.put))}""".update.run.map(_ > 0) } override def deleteByIds(transactionids: Array[TransactionhistoryarchiveId]): ConnectionIO[Int] = { sql"""delete from "production"."transactionhistoryarchive" where "transactionid" = ANY(${transactionids})""".update.run } override def insert(unsaved: TransactionhistoryarchiveRow): ConnectionIO[TransactionhistoryarchiveRow] = { sql"""insert into "production"."transactionhistoryarchive"("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate") - values (${fromWrite(unsaved.transactionid)(Write.fromPut(TransactionhistoryarchiveId.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.referenceorderlineid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.transactiondate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.transactionid)(new Write.Single(TransactionhistoryarchiveId.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.referenceorderlineid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.transactiondate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text """.query(using TransactionhistoryarchiveRow.read).unique } override def insert(unsaved: TransactionhistoryarchiveRowUnsaved): ConnectionIO[TransactionhistoryarchiveRow] = { val fs = List( - Some((Fragment.const0(s""""transactionid""""), fr"${fromWrite(unsaved.transactionid)(Write.fromPut(TransactionhistoryarchiveId.put))}::int4")), - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""referenceorderid""""), fr"${fromWrite(unsaved.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""transactiontype""""), fr"${fromWrite(unsaved.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar")), - Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""actualcost""""), fr"${fromWrite(unsaved.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""transactionid""""), fr"${fromWrite(unsaved.transactionid)(new Write.Single(TransactionhistoryarchiveId.put))}::int4")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""referenceorderid""""), fr"${fromWrite(unsaved.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""transactiontype""""), fr"${fromWrite(unsaved.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar")), + Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""actualcost""""), fr"${fromWrite(unsaved.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.referenceorderlineid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""referenceorderlineid""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""referenceorderlineid""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.transactiondate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""transactiondate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""transactiondate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -90,7 +90,7 @@ class TransactionhistoryarchiveRepoImpl extends TransactionhistoryarchiveRepo { sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistoryarchive"""".query(using TransactionhistoryarchiveRow.read).stream } override def selectById(transactionid: TransactionhistoryarchiveId): ConnectionIO[Option[TransactionhistoryarchiveRow]] = { - sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistoryarchive" where "transactionid" = ${fromWrite(transactionid)(Write.fromPut(TransactionhistoryarchiveId.put))}""".query(using TransactionhistoryarchiveRow.read).option + sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistoryarchive" where "transactionid" = ${fromWrite(transactionid)(new Write.Single(TransactionhistoryarchiveId.put))}""".query(using TransactionhistoryarchiveRow.read).option } override def selectByIds(transactionids: Array[TransactionhistoryarchiveId]): Stream[ConnectionIO, TransactionhistoryarchiveRow] = { sql"""select "transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate"::text, "transactiontype", "quantity", "actualcost", "modifieddate"::text from "production"."transactionhistoryarchive" where "transactionid" = ANY(${transactionids})""".query(using TransactionhistoryarchiveRow.read).stream @@ -107,15 +107,15 @@ class TransactionhistoryarchiveRepoImpl extends TransactionhistoryarchiveRepo { override def update(row: TransactionhistoryarchiveRow): ConnectionIO[Boolean] = { val transactionid = row.transactionid sql"""update "production"."transactionhistoryarchive" - set "productid" = ${fromWrite(row.productid)(Write.fromPut(Meta.IntMeta.put))}::int4, - "referenceorderid" = ${fromWrite(row.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4, - "referenceorderlineid" = ${fromWrite(row.referenceorderlineid)(Write.fromPut(Meta.IntMeta.put))}::int4, - "transactiondate" = ${fromWrite(row.transactiondate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "transactiontype" = ${fromWrite(row.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - "quantity" = ${fromWrite(row.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, - "actualcost" = ${fromWrite(row.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "transactionid" = ${fromWrite(transactionid)(Write.fromPut(TransactionhistoryarchiveId.put))}""" + set "productid" = ${fromWrite(row.productid)(new Write.Single(Meta.IntMeta.put))}::int4, + "referenceorderid" = ${fromWrite(row.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4, + "referenceorderlineid" = ${fromWrite(row.referenceorderlineid)(new Write.Single(Meta.IntMeta.put))}::int4, + "transactiondate" = ${fromWrite(row.transactiondate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "transactiontype" = ${fromWrite(row.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, + "quantity" = ${fromWrite(row.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, + "actualcost" = ${fromWrite(row.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "transactionid" = ${fromWrite(transactionid)(new Write.Single(TransactionhistoryarchiveId.put))}""" .update .run .map(_ > 0) @@ -123,15 +123,15 @@ class TransactionhistoryarchiveRepoImpl extends TransactionhistoryarchiveRepo { override def upsert(unsaved: TransactionhistoryarchiveRow): ConnectionIO[TransactionhistoryarchiveRow] = { sql"""insert into "production"."transactionhistoryarchive"("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate") values ( - ${fromWrite(unsaved.transactionid)(Write.fromPut(TransactionhistoryarchiveId.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.referenceorderid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.referenceorderlineid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.transactiondate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.transactiontype)(Write.fromPut(Meta.StringMeta.put))}::bpchar, - ${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.actualcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.transactionid)(new Write.Single(TransactionhistoryarchiveId.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.referenceorderid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.referenceorderlineid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.transactiondate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.transactiontype)(new Write.Single(Meta.StringMeta.put))}::bpchar, + ${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.actualcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("transactionid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRow.scala index 8c7c8a74cf..1b8e94ae93 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/transactionhistoryarchive/TransactionhistoryarchiveRow.scala @@ -9,14 +9,12 @@ package transactionhistoryarchive import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.transactionhistoryarchive Transactions for previous years. @@ -52,30 +50,29 @@ case class TransactionhistoryarchiveRow( object TransactionhistoryarchiveRow { implicit lazy val decoder: Decoder[TransactionhistoryarchiveRow] = Decoder.forProduct9[TransactionhistoryarchiveRow, TransactionhistoryarchiveId, Int, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(TransactionhistoryarchiveRow.apply)(TransactionhistoryarchiveId.decoder, Decoder.decodeInt, Decoder.decodeInt, Decoder.decodeInt, TypoLocalDateTime.decoder, Decoder.decodeString, Decoder.decodeInt, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[TransactionhistoryarchiveRow] = Encoder.forProduct9[TransactionhistoryarchiveRow, TransactionhistoryarchiveId, Int, Int, Int, TypoLocalDateTime, /* bpchar, max 1 chars */ String, Int, BigDecimal, TypoLocalDateTime]("transactionid", "productid", "referenceorderid", "referenceorderlineid", "transactiondate", "transactiontype", "quantity", "actualcost", "modifieddate")(x => (x.transactionid, x.productid, x.referenceorderid, x.referenceorderlineid, x.transactiondate, x.transactiontype, x.quantity, x.actualcost, x.modifieddate))(TransactionhistoryarchiveId.encoder, Encoder.encodeInt, Encoder.encodeInt, Encoder.encodeInt, TypoLocalDateTime.encoder, Encoder.encodeString, Encoder.encodeInt, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[TransactionhistoryarchiveRow] = new Read[TransactionhistoryarchiveRow]( - gets = List( - (TransactionhistoryarchiveId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TransactionhistoryarchiveRow( - transactionid = TransactionhistoryarchiveId.get.unsafeGetNonNullable(rs, i + 0), - productid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - referenceorderid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - referenceorderlineid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - transactiondate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - transactiontype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - quantity = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 6), - actualcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[TransactionhistoryarchiveRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TransactionhistoryarchiveId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TransactionhistoryarchiveRow( + transactionid = arr(0).asInstanceOf[TransactionhistoryarchiveId], + productid = arr(1).asInstanceOf[Int], + referenceorderid = arr(2).asInstanceOf[Int], + referenceorderlineid = arr(3).asInstanceOf[Int], + transactiondate = arr(4).asInstanceOf[TypoLocalDateTime], + transactiontype = arr(5).asInstanceOf[/* bpchar, max 1 chars */ String], + quantity = arr(6).asInstanceOf[Int], + actualcost = arr(7).asInstanceOf[BigDecimal], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[TransactionhistoryarchiveRow] = Text.instance[TransactionhistoryarchiveRow]{ (row, sb) => TransactionhistoryarchiveId.text.unsafeEncode(row.transactionid, sb) sb.append(Text.DELIMETER) @@ -95,38 +92,16 @@ object TransactionhistoryarchiveRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[TransactionhistoryarchiveRow] = new Write[TransactionhistoryarchiveRow]( - puts = List((TransactionhistoryarchiveId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.transactionid, x.productid, x.referenceorderid, x.referenceorderlineid, x.transactiondate, x.transactiontype, x.quantity, x.actualcost, x.modifieddate), - unsafeSet = (rs, i, a) => { - TransactionhistoryarchiveId.put.unsafeSetNonNullable(rs, i + 0, a.transactionid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 1, a.productid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 2, a.referenceorderid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 3, a.referenceorderlineid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.transactiondate) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 5, a.transactiontype) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 6, a.quantity) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 7, a.actualcost) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - TransactionhistoryarchiveId.put.unsafeUpdateNonNullable(ps, i + 0, a.transactionid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.productid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.referenceorderid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.referenceorderlineid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.transactiondate) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.transactiontype) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.quantity) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.actualcost) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[TransactionhistoryarchiveRow] = new Write.Composite[TransactionhistoryarchiveRow]( + List(new Write.Single(TransactionhistoryarchiveId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.transactionid, a.productid, a.referenceorderid, a.referenceorderlineid, a.transactiondate, a.transactiontype, a.quantity, a.actualcost, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRepoImpl.scala index 557709ab26..de3e54490a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRepoImpl.scala @@ -29,24 +29,24 @@ class UnitmeasureRepoImpl extends UnitmeasureRepo { DeleteBuilder(""""production"."unitmeasure"""", UnitmeasureFields.structure) } override def deleteById(unitmeasurecode: UnitmeasureId): ConnectionIO[Boolean] = { - sql"""delete from "production"."unitmeasure" where "unitmeasurecode" = ${fromWrite(unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."unitmeasure" where "unitmeasurecode" = ${fromWrite(unitmeasurecode)(new Write.Single(UnitmeasureId.put))}""".update.run.map(_ > 0) } override def deleteByIds(unitmeasurecodes: Array[UnitmeasureId]): ConnectionIO[Int] = { sql"""delete from "production"."unitmeasure" where "unitmeasurecode" = ANY(${unitmeasurecodes})""".update.run } override def insert(unsaved: UnitmeasureRow): ConnectionIO[UnitmeasureRow] = { sql"""insert into "production"."unitmeasure"("unitmeasurecode", "name", "modifieddate") - values (${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "unitmeasurecode", "name", "modifieddate"::text """.query(using UnitmeasureRow.read).unique } override def insert(unsaved: UnitmeasureRowUnsaved): ConnectionIO[UnitmeasureRow] = { val fs = List( - Some((Fragment.const0(s""""unitmeasurecode""""), fr"${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""unitmeasurecode""""), fr"${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -78,7 +78,7 @@ class UnitmeasureRepoImpl extends UnitmeasureRepo { sql"""select "unitmeasurecode", "name", "modifieddate"::text from "production"."unitmeasure"""".query(using UnitmeasureRow.read).stream } override def selectById(unitmeasurecode: UnitmeasureId): ConnectionIO[Option[UnitmeasureRow]] = { - sql"""select "unitmeasurecode", "name", "modifieddate"::text from "production"."unitmeasure" where "unitmeasurecode" = ${fromWrite(unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}""".query(using UnitmeasureRow.read).option + sql"""select "unitmeasurecode", "name", "modifieddate"::text from "production"."unitmeasure" where "unitmeasurecode" = ${fromWrite(unitmeasurecode)(new Write.Single(UnitmeasureId.put))}""".query(using UnitmeasureRow.read).option } override def selectByIds(unitmeasurecodes: Array[UnitmeasureId]): Stream[ConnectionIO, UnitmeasureRow] = { sql"""select "unitmeasurecode", "name", "modifieddate"::text from "production"."unitmeasure" where "unitmeasurecode" = ANY(${unitmeasurecodes})""".query(using UnitmeasureRow.read).stream @@ -95,9 +95,9 @@ class UnitmeasureRepoImpl extends UnitmeasureRepo { override def update(row: UnitmeasureRow): ConnectionIO[Boolean] = { val unitmeasurecode = row.unitmeasurecode sql"""update "production"."unitmeasure" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "unitmeasurecode" = ${fromWrite(unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "unitmeasurecode" = ${fromWrite(unitmeasurecode)(new Write.Single(UnitmeasureId.put))}""" .update .run .map(_ > 0) @@ -105,9 +105,9 @@ class UnitmeasureRepoImpl extends UnitmeasureRepo { override def upsert(unsaved: UnitmeasureRow): ConnectionIO[UnitmeasureRow] = { sql"""insert into "production"."unitmeasure"("unitmeasurecode", "name", "modifieddate") values ( - ${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("unitmeasurecode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRow.scala index 34a631e618..a5da790608 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/unitmeasure/UnitmeasureRow.scala @@ -10,13 +10,11 @@ package unitmeasure import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.unitmeasure Unit of measure lookup table. @@ -37,18 +35,17 @@ case class UnitmeasureRow( object UnitmeasureRow { implicit lazy val decoder: Decoder[UnitmeasureRow] = Decoder.forProduct3[UnitmeasureRow, UnitmeasureId, Name, TypoLocalDateTime]("unitmeasurecode", "name", "modifieddate")(UnitmeasureRow.apply)(UnitmeasureId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[UnitmeasureRow] = Encoder.forProduct3[UnitmeasureRow, UnitmeasureId, Name, TypoLocalDateTime]("unitmeasurecode", "name", "modifieddate")(x => (x.unitmeasurecode, x.name, x.modifieddate))(UnitmeasureId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[UnitmeasureRow] = new Read[UnitmeasureRow]( - gets = List( - (UnitmeasureId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => UnitmeasureRow( - unitmeasurecode = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[UnitmeasureRow] = new Read.CompositeOfInstances(Array( + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + UnitmeasureRow( + unitmeasurecode = arr(0).asInstanceOf[UnitmeasureId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[UnitmeasureRow] = Text.instance[UnitmeasureRow]{ (row, sb) => UnitmeasureId.text.unsafeEncode(row.unitmeasurecode, sb) sb.append(Text.DELIMETER) @@ -56,20 +53,10 @@ object UnitmeasureRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[UnitmeasureRow] = new Write[UnitmeasureRow]( - puts = List((UnitmeasureId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.unitmeasurecode, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - UnitmeasureId.put.unsafeSetNonNullable(rs, i + 0, a.unitmeasurecode) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - UnitmeasureId.put.unsafeUpdateNonNullable(ps, i + 0, a.unitmeasurecode) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[UnitmeasureRow] = new Write.Composite[UnitmeasureRow]( + List(new Write.Single(UnitmeasureId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.unitmeasurecode, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductanddescription/VproductanddescriptionMVRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductanddescription/VproductanddescriptionMVRow.scala index dce17ded15..723e8bd768 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductanddescription/VproductanddescriptionMVRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductanddescription/VproductanddescriptionMVRow.scala @@ -10,12 +10,10 @@ package vproductanddescription import adventureworks.production.culture.CultureId import adventureworks.production.product.ProductId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Materialized View: production.vproductanddescription */ case class VproductanddescriptionMVRow( @@ -34,20 +32,19 @@ case class VproductanddescriptionMVRow( object VproductanddescriptionMVRow { implicit lazy val decoder: Decoder[VproductanddescriptionMVRow] = Decoder.forProduct5[VproductanddescriptionMVRow, ProductId, Name, Name, CultureId, /* max 400 chars */ String]("productid", "name", "productmodel", "cultureid", "description")(VproductanddescriptionMVRow.apply)(ProductId.decoder, Name.decoder, Name.decoder, CultureId.decoder, Decoder.decodeString) implicit lazy val encoder: Encoder[VproductanddescriptionMVRow] = Encoder.forProduct5[VproductanddescriptionMVRow, ProductId, Name, Name, CultureId, /* max 400 chars */ String]("productid", "name", "productmodel", "cultureid", "description")(x => (x.productid, x.name, x.productmodel, x.cultureid, x.description))(ProductId.encoder, Name.encoder, Name.encoder, CultureId.encoder, Encoder.encodeString) - implicit lazy val read: Read[VproductanddescriptionMVRow] = new Read[VproductanddescriptionMVRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (CultureId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VproductanddescriptionMVRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - productmodel = Name.get.unsafeGetNonNullable(rs, i + 2), - cultureid = CultureId.get.unsafeGetNonNullable(rs, i + 3), - description = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[VproductanddescriptionMVRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(CultureId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VproductanddescriptionMVRow( + productid = arr(0).asInstanceOf[ProductId], + name = arr(1).asInstanceOf[Name], + productmodel = arr(2).asInstanceOf[Name], + cultureid = arr(3).asInstanceOf[CultureId], + description = arr(4).asInstanceOf[/* max 400 chars */ String] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelcatalogdescription/VproductmodelcatalogdescriptionViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelcatalogdescription/VproductmodelcatalogdescriptionViewRow.scala index f956158ead..177bc3a8b8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelcatalogdescription/VproductmodelcatalogdescriptionViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelcatalogdescription/VproductmodelcatalogdescriptionViewRow.scala @@ -11,7 +11,6 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.productmodel.ProductmodelId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder @@ -19,7 +18,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** View: production.vproductmodelcatalogdescription */ @@ -120,60 +118,59 @@ object VproductmodelcatalogdescriptionViewRow { "modifieddate" -> TypoLocalDateTime.encoder.apply(row.modifieddate) ) ) - implicit lazy val read: Read[VproductmodelcatalogdescriptionViewRow] = new Read[VproductmodelcatalogdescriptionViewRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VproductmodelcatalogdescriptionViewRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - summary = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - manufacturer = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - copyright = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - producturl = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - warrantyperiod = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - warrantydescription = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - noofyears = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - maintenancedescription = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - wheel = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - saddle = Meta.StringMeta.get.unsafeGetNullable(rs, i + 11), - pedal = Meta.StringMeta.get.unsafeGetNullable(rs, i + 12), - bikeframe = Meta.StringMeta.get.unsafeGetNullable(rs, i + 13), - crankset = Meta.StringMeta.get.unsafeGetNullable(rs, i + 14), - pictureangle = Meta.StringMeta.get.unsafeGetNullable(rs, i + 15), - picturesize = Meta.StringMeta.get.unsafeGetNullable(rs, i + 16), - productphotoid = Meta.StringMeta.get.unsafeGetNullable(rs, i + 17), - material = Meta.StringMeta.get.unsafeGetNullable(rs, i + 18), - color = Meta.StringMeta.get.unsafeGetNullable(rs, i + 19), - productline = Meta.StringMeta.get.unsafeGetNullable(rs, i + 20), - style = Meta.StringMeta.get.unsafeGetNullable(rs, i + 21), - riderexperience = Meta.StringMeta.get.unsafeGetNullable(rs, i + 22), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 23), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 24) + implicit lazy val read: Read[VproductmodelcatalogdescriptionViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VproductmodelcatalogdescriptionViewRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + name = arr(1).asInstanceOf[Name], + summary = arr(2).asInstanceOf[/* nullability unknown */ Option[String]], + manufacturer = arr(3).asInstanceOf[/* nullability unknown */ Option[String]], + copyright = arr(4).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + producturl = arr(5).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + warrantyperiod = arr(6).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + warrantydescription = arr(7).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + noofyears = arr(8).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + maintenancedescription = arr(9).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + wheel = arr(10).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + saddle = arr(11).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + pedal = arr(12).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + bikeframe = arr(13).asInstanceOf[/* nullability unknown */ Option[String]], + crankset = arr(14).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + pictureangle = arr(15).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + picturesize = arr(16).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + productphotoid = arr(17).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + material = arr(18).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + color = arr(19).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + productline = arr(20).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + style = arr(21).asInstanceOf[/* nullability unknown */ Option[/* max 256 chars */ String]], + riderexperience = arr(22).asInstanceOf[/* nullability unknown */ Option[/* max 1024 chars */ String]], + rowguid = arr(23).asInstanceOf[TypoUUID], + modifieddate = arr(24).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelinstructions/VproductmodelinstructionsViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelinstructions/VproductmodelinstructionsViewRow.scala index 14d26d27ea..c8298b0815 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelinstructions/VproductmodelinstructionsViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/vproductmodelinstructions/VproductmodelinstructionsViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.productmodel.ProductmodelId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: production.vproductmodelinstructions */ case class VproductmodelinstructionsViewRow( @@ -40,32 +38,31 @@ case class VproductmodelinstructionsViewRow( object VproductmodelinstructionsViewRow { implicit lazy val decoder: Decoder[VproductmodelinstructionsViewRow] = Decoder.forProduct11[VproductmodelinstructionsViewRow, ProductmodelId, Name, /* nullability unknown */ Option[String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 1024 chars */ String], TypoUUID, TypoLocalDateTime]("productmodelid", "name", "instructions", "LocationID", "SetupHours", "MachineHours", "LaborHours", "LotSize", "Step", "rowguid", "modifieddate")(VproductmodelinstructionsViewRow.apply)(ProductmodelId.decoder, Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeString), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[VproductmodelinstructionsViewRow] = Encoder.forProduct11[VproductmodelinstructionsViewRow, ProductmodelId, Name, /* nullability unknown */ Option[String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 1024 chars */ String], TypoUUID, TypoLocalDateTime]("productmodelid", "name", "instructions", "LocationID", "SetupHours", "MachineHours", "LaborHours", "LotSize", "Step", "rowguid", "modifieddate")(x => (x.productmodelid, x.name, x.instructions, x.locationID, x.setupHours, x.machineHours, x.laborHours, x.lotSize, x.step, x.rowguid, x.modifieddate))(ProductmodelId.encoder, Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeString), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[VproductmodelinstructionsViewRow] = new Read[VproductmodelinstructionsViewRow]( - gets = List( - (ProductmodelId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VproductmodelinstructionsViewRow( - productmodelid = ProductmodelId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - instructions = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - locationID = Meta.IntMeta.get.unsafeGetNullable(rs, i + 3), - setupHours = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 4), - machineHours = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 5), - laborHours = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 6), - lotSize = Meta.IntMeta.get.unsafeGetNullable(rs, i + 7), - step = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 9), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 10) + implicit lazy val read: Read[VproductmodelinstructionsViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductmodelId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VproductmodelinstructionsViewRow( + productmodelid = arr(0).asInstanceOf[ProductmodelId], + name = arr(1).asInstanceOf[Name], + instructions = arr(2).asInstanceOf[/* nullability unknown */ Option[String]], + locationID = arr(3).asInstanceOf[/* nullability unknown */ Option[Int]], + setupHours = arr(4).asInstanceOf[/* nullability unknown */ Option[BigDecimal]], + machineHours = arr(5).asInstanceOf[/* nullability unknown */ Option[BigDecimal]], + laborHours = arr(6).asInstanceOf[/* nullability unknown */ Option[BigDecimal]], + lotSize = arr(7).asInstanceOf[/* nullability unknown */ Option[Int]], + step = arr(8).asInstanceOf[/* nullability unknown */ Option[/* max 1024 chars */ String]], + rowguid = arr(9).asInstanceOf[TypoUUID], + modifieddate = arr(10).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRepoImpl.scala index d716079f8d..21e553f34f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRepoImpl.scala @@ -32,33 +32,33 @@ class WorkorderRepoImpl extends WorkorderRepo { DeleteBuilder(""""production"."workorder"""", WorkorderFields.structure) } override def deleteById(workorderid: WorkorderId): ConnectionIO[Boolean] = { - sql"""delete from "production"."workorder" where "workorderid" = ${fromWrite(workorderid)(Write.fromPut(WorkorderId.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."workorder" where "workorderid" = ${fromWrite(workorderid)(new Write.Single(WorkorderId.put))}""".update.run.map(_ > 0) } override def deleteByIds(workorderids: Array[WorkorderId]): ConnectionIO[Int] = { sql"""delete from "production"."workorder" where "workorderid" = ANY(${workorderids})""".update.run } override def insert(unsaved: WorkorderRow): ConnectionIO[WorkorderRow] = { sql"""insert into "production"."workorder"("workorderid", "productid", "orderqty", "scrappedqty", "startdate", "enddate", "duedate", "scrapreasonid", "modifieddate") - values (${fromWrite(unsaved.workorderid)(Write.fromPut(WorkorderId.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.orderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.scrappedqty)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.scrapreasonid)(Write.fromPutOption(ScrapreasonId.put))}::int2, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.workorderid)(new Write.Single(WorkorderId.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.orderqty)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.scrappedqty)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.scrapreasonid)(new Write.SingleOpt(ScrapreasonId.put))}::int2, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "workorderid", "productid", "orderqty", "scrappedqty", "startdate"::text, "enddate"::text, "duedate"::text, "scrapreasonid", "modifieddate"::text """.query(using WorkorderRow.read).unique } override def insert(unsaved: WorkorderRowUnsaved): ConnectionIO[WorkorderRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""orderqty""""), fr"${fromWrite(unsaved.orderqty)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""scrappedqty""""), fr"${fromWrite(unsaved.scrappedqty)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""duedate""""), fr"${fromWrite(unsaved.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""scrapreasonid""""), fr"${fromWrite(unsaved.scrapreasonid)(Write.fromPutOption(ScrapreasonId.put))}::int2")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""orderqty""""), fr"${fromWrite(unsaved.orderqty)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""scrappedqty""""), fr"${fromWrite(unsaved.scrappedqty)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""duedate""""), fr"${fromWrite(unsaved.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""scrapreasonid""""), fr"${fromWrite(unsaved.scrapreasonid)(new Write.SingleOpt(ScrapreasonId.put))}::int2")), unsaved.workorderid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""workorderid""""), fr"${fromWrite(value: WorkorderId)(Write.fromPut(WorkorderId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""workorderid""""), fr"${fromWrite(value: WorkorderId)(new Write.Single(WorkorderId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -90,7 +90,7 @@ class WorkorderRepoImpl extends WorkorderRepo { sql"""select "workorderid", "productid", "orderqty", "scrappedqty", "startdate"::text, "enddate"::text, "duedate"::text, "scrapreasonid", "modifieddate"::text from "production"."workorder"""".query(using WorkorderRow.read).stream } override def selectById(workorderid: WorkorderId): ConnectionIO[Option[WorkorderRow]] = { - sql"""select "workorderid", "productid", "orderqty", "scrappedqty", "startdate"::text, "enddate"::text, "duedate"::text, "scrapreasonid", "modifieddate"::text from "production"."workorder" where "workorderid" = ${fromWrite(workorderid)(Write.fromPut(WorkorderId.put))}""".query(using WorkorderRow.read).option + sql"""select "workorderid", "productid", "orderqty", "scrappedqty", "startdate"::text, "enddate"::text, "duedate"::text, "scrapreasonid", "modifieddate"::text from "production"."workorder" where "workorderid" = ${fromWrite(workorderid)(new Write.Single(WorkorderId.put))}""".query(using WorkorderRow.read).option } override def selectByIds(workorderids: Array[WorkorderId]): Stream[ConnectionIO, WorkorderRow] = { sql"""select "workorderid", "productid", "orderqty", "scrappedqty", "startdate"::text, "enddate"::text, "duedate"::text, "scrapreasonid", "modifieddate"::text from "production"."workorder" where "workorderid" = ANY(${workorderids})""".query(using WorkorderRow.read).stream @@ -107,15 +107,15 @@ class WorkorderRepoImpl extends WorkorderRepo { override def update(row: WorkorderRow): ConnectionIO[Boolean] = { val workorderid = row.workorderid sql"""update "production"."workorder" - set "productid" = ${fromWrite(row.productid)(Write.fromPut(ProductId.put))}::int4, - "orderqty" = ${fromWrite(row.orderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - "scrappedqty" = ${fromWrite(row.scrappedqty)(Write.fromPut(TypoShort.put))}::int2, - "startdate" = ${fromWrite(row.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "enddate" = ${fromWrite(row.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "duedate" = ${fromWrite(row.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "scrapreasonid" = ${fromWrite(row.scrapreasonid)(Write.fromPutOption(ScrapreasonId.put))}::int2, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "workorderid" = ${fromWrite(workorderid)(Write.fromPut(WorkorderId.put))}""" + set "productid" = ${fromWrite(row.productid)(new Write.Single(ProductId.put))}::int4, + "orderqty" = ${fromWrite(row.orderqty)(new Write.Single(Meta.IntMeta.put))}::int4, + "scrappedqty" = ${fromWrite(row.scrappedqty)(new Write.Single(TypoShort.put))}::int2, + "startdate" = ${fromWrite(row.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "enddate" = ${fromWrite(row.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "duedate" = ${fromWrite(row.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "scrapreasonid" = ${fromWrite(row.scrapreasonid)(new Write.SingleOpt(ScrapreasonId.put))}::int2, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "workorderid" = ${fromWrite(workorderid)(new Write.Single(WorkorderId.put))}""" .update .run .map(_ > 0) @@ -123,15 +123,15 @@ class WorkorderRepoImpl extends WorkorderRepo { override def upsert(unsaved: WorkorderRow): ConnectionIO[WorkorderRow] = { sql"""insert into "production"."workorder"("workorderid", "productid", "orderqty", "scrappedqty", "startdate", "enddate", "duedate", "scrapreasonid", "modifieddate") values ( - ${fromWrite(unsaved.workorderid)(Write.fromPut(WorkorderId.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.orderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.scrappedqty)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.scrapreasonid)(Write.fromPutOption(ScrapreasonId.put))}::int2, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.workorderid)(new Write.Single(WorkorderId.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.orderqty)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.scrappedqty)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.scrapreasonid)(new Write.SingleOpt(ScrapreasonId.put))}::int2, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("workorderid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRow.scala index f57d5b8d94..218de26ce6 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorder/WorkorderRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.product.ProductId import adventureworks.production.scrapreason.ScrapreasonId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.workorder Manufacturing work orders. @@ -59,30 +57,29 @@ case class WorkorderRow( object WorkorderRow { implicit lazy val decoder: Decoder[WorkorderRow] = Decoder.forProduct9[WorkorderRow, WorkorderId, ProductId, Int, TypoShort, TypoLocalDateTime, Option[TypoLocalDateTime], TypoLocalDateTime, Option[ScrapreasonId], TypoLocalDateTime]("workorderid", "productid", "orderqty", "scrappedqty", "startdate", "enddate", "duedate", "scrapreasonid", "modifieddate")(WorkorderRow.apply)(WorkorderId.decoder, ProductId.decoder, Decoder.decodeInt, TypoShort.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), TypoLocalDateTime.decoder, Decoder.decodeOption(ScrapreasonId.decoder), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[WorkorderRow] = Encoder.forProduct9[WorkorderRow, WorkorderId, ProductId, Int, TypoShort, TypoLocalDateTime, Option[TypoLocalDateTime], TypoLocalDateTime, Option[ScrapreasonId], TypoLocalDateTime]("workorderid", "productid", "orderqty", "scrappedqty", "startdate", "enddate", "duedate", "scrapreasonid", "modifieddate")(x => (x.workorderid, x.productid, x.orderqty, x.scrappedqty, x.startdate, x.enddate, x.duedate, x.scrapreasonid, x.modifieddate))(WorkorderId.encoder, ProductId.encoder, Encoder.encodeInt, TypoShort.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), TypoLocalDateTime.encoder, Encoder.encodeOption(ScrapreasonId.encoder), TypoLocalDateTime.encoder) - implicit lazy val read: Read[WorkorderRow] = new Read[WorkorderRow]( - gets = List( - (WorkorderId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls), - (ScrapreasonId.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => WorkorderRow( - workorderid = WorkorderId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - orderqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - scrappedqty = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 5), - duedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6), - scrapreasonid = ScrapreasonId.get.unsafeGetNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[WorkorderRow] = new Read.CompositeOfInstances(Array( + new Read.Single(WorkorderId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ScrapreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + WorkorderRow( + workorderid = arr(0).asInstanceOf[WorkorderId], + productid = arr(1).asInstanceOf[ProductId], + orderqty = arr(2).asInstanceOf[Int], + scrappedqty = arr(3).asInstanceOf[TypoShort], + startdate = arr(4).asInstanceOf[TypoLocalDateTime], + enddate = arr(5).asInstanceOf[Option[TypoLocalDateTime]], + duedate = arr(6).asInstanceOf[TypoLocalDateTime], + scrapreasonid = arr(7).asInstanceOf[Option[ScrapreasonId]], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[WorkorderRow] = Text.instance[WorkorderRow]{ (row, sb) => WorkorderId.text.unsafeEncode(row.workorderid, sb) sb.append(Text.DELIMETER) @@ -102,38 +99,16 @@ object WorkorderRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[WorkorderRow] = new Write[WorkorderRow]( - puts = List((WorkorderId.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls), - (ScrapreasonId.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.workorderid, x.productid, x.orderqty, x.scrappedqty, x.startdate, x.enddate, x.duedate, x.scrapreasonid, x.modifieddate), - unsafeSet = (rs, i, a) => { - WorkorderId.put.unsafeSetNonNullable(rs, i + 0, a.workorderid) - ProductId.put.unsafeSetNonNullable(rs, i + 1, a.productid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 2, a.orderqty) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.scrappedqty) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.startdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 5, a.enddate) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 6, a.duedate) - ScrapreasonId.put.unsafeSetNullable(rs, i + 7, a.scrapreasonid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - WorkorderId.put.unsafeUpdateNonNullable(ps, i + 0, a.workorderid) - ProductId.put.unsafeUpdateNonNullable(ps, i + 1, a.productid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.orderqty) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.scrappedqty) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.startdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 5, a.enddate) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 6, a.duedate) - ScrapreasonId.put.unsafeUpdateNullable(ps, i + 7, a.scrapreasonid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[WorkorderRow] = new Write.Composite[WorkorderRow]( + List(new Write.Single(WorkorderId.put), + new Write.Single(ProductId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoLocalDateTime.put), + new Write.Single(ScrapreasonId.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.workorderid, a.productid, a.orderqty, a.scrappedqty, a.startdate, a.enddate, a.duedate, a.scrapreasonid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRepoImpl.scala index a64e56fbee..82d02ba1b6 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRepoImpl.scala @@ -32,7 +32,7 @@ class WorkorderroutingRepoImpl extends WorkorderroutingRepo { DeleteBuilder(""""production"."workorderrouting"""", WorkorderroutingFields.structure) } override def deleteById(compositeId: WorkorderroutingId): ConnectionIO[Boolean] = { - sql"""delete from "production"."workorderrouting" where "workorderid" = ${fromWrite(compositeId.workorderid)(Write.fromPut(WorkorderId.put))} AND "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(Meta.IntMeta.put))} AND "operationsequence" = ${fromWrite(compositeId.operationsequence)(Write.fromPut(TypoShort.put))}""".update.run.map(_ > 0) + sql"""delete from "production"."workorderrouting" where "workorderid" = ${fromWrite(compositeId.workorderid)(new Write.Single(WorkorderId.put))} AND "productid" = ${fromWrite(compositeId.productid)(new Write.Single(Meta.IntMeta.put))} AND "operationsequence" = ${fromWrite(compositeId.operationsequence)(new Write.Single(TypoShort.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[WorkorderroutingId]): ConnectionIO[Int] = { val workorderid = compositeIds.map(_.workorderid) @@ -47,26 +47,26 @@ class WorkorderroutingRepoImpl extends WorkorderroutingRepo { } override def insert(unsaved: WorkorderroutingRow): ConnectionIO[WorkorderroutingRow] = { sql"""insert into "production"."workorderrouting"("workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate", "scheduledenddate", "actualstartdate", "actualenddate", "actualresourcehrs", "plannedcost", "actualcost", "modifieddate") - values (${fromWrite(unsaved.workorderid)(Write.fromPut(WorkorderId.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.operationsequence)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int2, ${fromWrite(unsaved.scheduledstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.scheduledenddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.actualstartdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.actualenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.actualresourcehrs)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.plannedcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.actualcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.workorderid)(new Write.Single(WorkorderId.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.operationsequence)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int2, ${fromWrite(unsaved.scheduledstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.scheduledenddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.actualstartdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.actualenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.actualresourcehrs)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.plannedcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.actualcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate"::text, "scheduledenddate"::text, "actualstartdate"::text, "actualenddate"::text, "actualresourcehrs", "plannedcost", "actualcost", "modifieddate"::text """.query(using WorkorderroutingRow.read).unique } override def insert(unsaved: WorkorderroutingRowUnsaved): ConnectionIO[WorkorderroutingRow] = { val fs = List( - Some((Fragment.const0(s""""workorderid""""), fr"${fromWrite(unsaved.workorderid)(Write.fromPut(WorkorderId.put))}::int4")), - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""operationsequence""""), fr"${fromWrite(unsaved.operationsequence)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""locationid""""), fr"${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int2")), - Some((Fragment.const0(s""""scheduledstartdate""""), fr"${fromWrite(unsaved.scheduledstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""scheduledenddate""""), fr"${fromWrite(unsaved.scheduledenddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""actualstartdate""""), fr"${fromWrite(unsaved.actualstartdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""actualenddate""""), fr"${fromWrite(unsaved.actualenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""actualresourcehrs""""), fr"${fromWrite(unsaved.actualresourcehrs)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""plannedcost""""), fr"${fromWrite(unsaved.plannedcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""actualcost""""), fr"${fromWrite(unsaved.actualcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""workorderid""""), fr"${fromWrite(unsaved.workorderid)(new Write.Single(WorkorderId.put))}::int4")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""operationsequence""""), fr"${fromWrite(unsaved.operationsequence)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""locationid""""), fr"${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int2")), + Some((Fragment.const0(s""""scheduledstartdate""""), fr"${fromWrite(unsaved.scheduledstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""scheduledenddate""""), fr"${fromWrite(unsaved.scheduledenddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""actualstartdate""""), fr"${fromWrite(unsaved.actualstartdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""actualenddate""""), fr"${fromWrite(unsaved.actualenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""actualresourcehrs""""), fr"${fromWrite(unsaved.actualresourcehrs)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""plannedcost""""), fr"${fromWrite(unsaved.plannedcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""actualcost""""), fr"${fromWrite(unsaved.actualcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -98,7 +98,7 @@ class WorkorderroutingRepoImpl extends WorkorderroutingRepo { sql"""select "workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate"::text, "scheduledenddate"::text, "actualstartdate"::text, "actualenddate"::text, "actualresourcehrs", "plannedcost", "actualcost", "modifieddate"::text from "production"."workorderrouting"""".query(using WorkorderroutingRow.read).stream } override def selectById(compositeId: WorkorderroutingId): ConnectionIO[Option[WorkorderroutingRow]] = { - sql"""select "workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate"::text, "scheduledenddate"::text, "actualstartdate"::text, "actualenddate"::text, "actualresourcehrs", "plannedcost", "actualcost", "modifieddate"::text from "production"."workorderrouting" where "workorderid" = ${fromWrite(compositeId.workorderid)(Write.fromPut(WorkorderId.put))} AND "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(Meta.IntMeta.put))} AND "operationsequence" = ${fromWrite(compositeId.operationsequence)(Write.fromPut(TypoShort.put))}""".query(using WorkorderroutingRow.read).option + sql"""select "workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate"::text, "scheduledenddate"::text, "actualstartdate"::text, "actualenddate"::text, "actualresourcehrs", "plannedcost", "actualcost", "modifieddate"::text from "production"."workorderrouting" where "workorderid" = ${fromWrite(compositeId.workorderid)(new Write.Single(WorkorderId.put))} AND "productid" = ${fromWrite(compositeId.productid)(new Write.Single(Meta.IntMeta.put))} AND "operationsequence" = ${fromWrite(compositeId.operationsequence)(new Write.Single(TypoShort.put))}""".query(using WorkorderroutingRow.read).option } override def selectByIds(compositeIds: Array[WorkorderroutingId]): Stream[ConnectionIO, WorkorderroutingRow] = { val workorderid = compositeIds.map(_.workorderid) @@ -123,16 +123,16 @@ class WorkorderroutingRepoImpl extends WorkorderroutingRepo { override def update(row: WorkorderroutingRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "production"."workorderrouting" - set "locationid" = ${fromWrite(row.locationid)(Write.fromPut(LocationId.put))}::int2, - "scheduledstartdate" = ${fromWrite(row.scheduledstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "scheduledenddate" = ${fromWrite(row.scheduledenddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "actualstartdate" = ${fromWrite(row.actualstartdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "actualenddate" = ${fromWrite(row.actualenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "actualresourcehrs" = ${fromWrite(row.actualresourcehrs)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - "plannedcost" = ${fromWrite(row.plannedcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "actualcost" = ${fromWrite(row.actualcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "workorderid" = ${fromWrite(compositeId.workorderid)(Write.fromPut(WorkorderId.put))} AND "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(Meta.IntMeta.put))} AND "operationsequence" = ${fromWrite(compositeId.operationsequence)(Write.fromPut(TypoShort.put))}""" + set "locationid" = ${fromWrite(row.locationid)(new Write.Single(LocationId.put))}::int2, + "scheduledstartdate" = ${fromWrite(row.scheduledstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "scheduledenddate" = ${fromWrite(row.scheduledenddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "actualstartdate" = ${fromWrite(row.actualstartdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "actualenddate" = ${fromWrite(row.actualenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "actualresourcehrs" = ${fromWrite(row.actualresourcehrs)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + "plannedcost" = ${fromWrite(row.plannedcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "actualcost" = ${fromWrite(row.actualcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "workorderid" = ${fromWrite(compositeId.workorderid)(new Write.Single(WorkorderId.put))} AND "productid" = ${fromWrite(compositeId.productid)(new Write.Single(Meta.IntMeta.put))} AND "operationsequence" = ${fromWrite(compositeId.operationsequence)(new Write.Single(TypoShort.put))}""" .update .run .map(_ > 0) @@ -140,18 +140,18 @@ class WorkorderroutingRepoImpl extends WorkorderroutingRepo { override def upsert(unsaved: WorkorderroutingRow): ConnectionIO[WorkorderroutingRow] = { sql"""insert into "production"."workorderrouting"("workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate", "scheduledenddate", "actualstartdate", "actualenddate", "actualresourcehrs", "plannedcost", "actualcost", "modifieddate") values ( - ${fromWrite(unsaved.workorderid)(Write.fromPut(WorkorderId.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.operationsequence)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.locationid)(Write.fromPut(LocationId.put))}::int2, - ${fromWrite(unsaved.scheduledstartdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.scheduledenddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.actualstartdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.actualenddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.actualresourcehrs)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.plannedcost)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.actualcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.workorderid)(new Write.Single(WorkorderId.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.operationsequence)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.locationid)(new Write.Single(LocationId.put))}::int2, + ${fromWrite(unsaved.scheduledstartdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.scheduledenddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.actualstartdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.actualenddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.actualresourcehrs)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.plannedcost)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.actualcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("workorderid", "productid", "operationsequence") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRow.scala index 0e3dc46783..4a3a483b2f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/production/workorderrouting/WorkorderroutingRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.location.LocationId import adventureworks.production.workorder.WorkorderId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: production.workorderrouting Work order details. @@ -70,36 +68,35 @@ object WorkorderroutingRow { new WorkorderroutingRow(compositeId.workorderid, compositeId.productid, compositeId.operationsequence, locationid, scheduledstartdate, scheduledenddate, actualstartdate, actualenddate, actualresourcehrs, plannedcost, actualcost, modifieddate) implicit lazy val decoder: Decoder[WorkorderroutingRow] = Decoder.forProduct12[WorkorderroutingRow, WorkorderId, Int, TypoShort, LocationId, TypoLocalDateTime, TypoLocalDateTime, Option[TypoLocalDateTime], Option[TypoLocalDateTime], Option[BigDecimal], BigDecimal, Option[BigDecimal], TypoLocalDateTime]("workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate", "scheduledenddate", "actualstartdate", "actualenddate", "actualresourcehrs", "plannedcost", "actualcost", "modifieddate")(WorkorderroutingRow.apply)(WorkorderId.decoder, Decoder.decodeInt, TypoShort.decoder, LocationId.decoder, TypoLocalDateTime.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeBigDecimal, Decoder.decodeOption(Decoder.decodeBigDecimal), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[WorkorderroutingRow] = Encoder.forProduct12[WorkorderroutingRow, WorkorderId, Int, TypoShort, LocationId, TypoLocalDateTime, TypoLocalDateTime, Option[TypoLocalDateTime], Option[TypoLocalDateTime], Option[BigDecimal], BigDecimal, Option[BigDecimal], TypoLocalDateTime]("workorderid", "productid", "operationsequence", "locationid", "scheduledstartdate", "scheduledenddate", "actualstartdate", "actualenddate", "actualresourcehrs", "plannedcost", "actualcost", "modifieddate")(x => (x.workorderid, x.productid, x.operationsequence, x.locationid, x.scheduledstartdate, x.scheduledenddate, x.actualstartdate, x.actualenddate, x.actualresourcehrs, x.plannedcost, x.actualcost, x.modifieddate))(WorkorderId.encoder, Encoder.encodeInt, TypoShort.encoder, LocationId.encoder, TypoLocalDateTime.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeBigDecimal, Encoder.encodeOption(Encoder.encodeBigDecimal), TypoLocalDateTime.encoder) - implicit lazy val read: Read[WorkorderroutingRow] = new Read[WorkorderroutingRow]( - gets = List( - (WorkorderId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (LocationId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => WorkorderroutingRow( - workorderid = WorkorderId.get.unsafeGetNonNullable(rs, i + 0), - productid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - operationsequence = TypoShort.get.unsafeGetNonNullable(rs, i + 2), - locationid = LocationId.get.unsafeGetNonNullable(rs, i + 3), - scheduledstartdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - scheduledenddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - actualstartdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 6), - actualenddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 7), - actualresourcehrs = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 8), - plannedcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 9), - actualcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 10), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[WorkorderroutingRow] = new Read.CompositeOfInstances(Array( + new Read.Single(WorkorderId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(LocationId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + WorkorderroutingRow( + workorderid = arr(0).asInstanceOf[WorkorderId], + productid = arr(1).asInstanceOf[Int], + operationsequence = arr(2).asInstanceOf[TypoShort], + locationid = arr(3).asInstanceOf[LocationId], + scheduledstartdate = arr(4).asInstanceOf[TypoLocalDateTime], + scheduledenddate = arr(5).asInstanceOf[TypoLocalDateTime], + actualstartdate = arr(6).asInstanceOf[Option[TypoLocalDateTime]], + actualenddate = arr(7).asInstanceOf[Option[TypoLocalDateTime]], + actualresourcehrs = arr(8).asInstanceOf[Option[BigDecimal]], + plannedcost = arr(9).asInstanceOf[BigDecimal], + actualcost = arr(10).asInstanceOf[Option[BigDecimal]], + modifieddate = arr(11).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[WorkorderroutingRow] = Text.instance[WorkorderroutingRow]{ (row, sb) => WorkorderId.text.unsafeEncode(row.workorderid, sb) sb.append(Text.DELIMETER) @@ -125,47 +122,19 @@ object WorkorderroutingRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[WorkorderroutingRow] = new Write[WorkorderroutingRow]( - puts = List((WorkorderId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (LocationId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.workorderid, x.productid, x.operationsequence, x.locationid, x.scheduledstartdate, x.scheduledenddate, x.actualstartdate, x.actualenddate, x.actualresourcehrs, x.plannedcost, x.actualcost, x.modifieddate), - unsafeSet = (rs, i, a) => { - WorkorderId.put.unsafeSetNonNullable(rs, i + 0, a.workorderid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 1, a.productid) - TypoShort.put.unsafeSetNonNullable(rs, i + 2, a.operationsequence) - LocationId.put.unsafeSetNonNullable(rs, i + 3, a.locationid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.scheduledstartdate) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.scheduledenddate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 6, a.actualstartdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 7, a.actualenddate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 8, a.actualresourcehrs) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 9, a.plannedcost) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 10, a.actualcost) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 11, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - WorkorderId.put.unsafeUpdateNonNullable(ps, i + 0, a.workorderid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.productid) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 2, a.operationsequence) - LocationId.put.unsafeUpdateNonNullable(ps, i + 3, a.locationid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.scheduledstartdate) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.scheduledenddate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 6, a.actualstartdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 7, a.actualenddate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 8, a.actualresourcehrs) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 9, a.plannedcost) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 10, a.actualcost) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 11, a.modifieddate) - } + implicit lazy val write: Write[WorkorderroutingRow] = new Write.Composite[WorkorderroutingRow]( + List(new Write.Single(WorkorderId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoShort.put), + new Write.Single(LocationId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.workorderid, a.productid, a.operationsequence, a.locationid, a.scheduledstartdate, a.scheduledenddate, a.actualstartdate, a.actualenddate, a.actualresourcehrs, a.plannedcost, a.actualcost, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pod/PodViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pod/PodViewRow.scala index da408cec2f..5134beb527 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pod/PodViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pod/PodViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.product.ProductId import adventureworks.purchasing.purchaseorderheader.PurchaseorderheaderId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pu.pod */ case class PodViewRow( @@ -45,30 +43,29 @@ case class PodViewRow( object PodViewRow { implicit lazy val decoder: Decoder[PodViewRow] = Decoder.forProduct10[PodViewRow, Int, PurchaseorderheaderId, Int, TypoLocalDateTime, TypoShort, ProductId, BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("id", "purchaseorderid", "purchaseorderdetailid", "duedate", "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate")(PodViewRow.apply)(Decoder.decodeInt, PurchaseorderheaderId.decoder, Decoder.decodeInt, TypoLocalDateTime.decoder, TypoShort.decoder, ProductId.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PodViewRow] = Encoder.forProduct10[PodViewRow, Int, PurchaseorderheaderId, Int, TypoLocalDateTime, TypoShort, ProductId, BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("id", "purchaseorderid", "purchaseorderdetailid", "duedate", "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate")(x => (x.id, x.purchaseorderid, x.purchaseorderdetailid, x.duedate, x.orderqty, x.productid, x.unitprice, x.receivedqty, x.rejectedqty, x.modifieddate))(Encoder.encodeInt, PurchaseorderheaderId.encoder, Encoder.encodeInt, TypoLocalDateTime.encoder, TypoShort.encoder, ProductId.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PodViewRow] = new Read[PodViewRow]( - gets = List( - (Meta.IntMeta.get, Nullability.NoNulls), - (PurchaseorderheaderId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PodViewRow( - id = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 0), - purchaseorderid = PurchaseorderheaderId.get.unsafeGetNonNullable(rs, i + 1), - purchaseorderdetailid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - duedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3), - orderqty = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 5), - unitprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - receivedqty = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - rejectedqty = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[PodViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(PurchaseorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PodViewRow( + id = arr(0).asInstanceOf[Int], + purchaseorderid = arr(1).asInstanceOf[PurchaseorderheaderId], + purchaseorderdetailid = arr(2).asInstanceOf[Int], + duedate = arr(3).asInstanceOf[TypoLocalDateTime], + orderqty = arr(4).asInstanceOf[TypoShort], + productid = arr(5).asInstanceOf[ProductId], + unitprice = arr(6).asInstanceOf[BigDecimal], + receivedqty = arr(7).asInstanceOf[BigDecimal], + rejectedqty = arr(8).asInstanceOf[BigDecimal], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/poh/PohViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/poh/PohViewRow.scala index 199a5ded51..74a716eb9e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/poh/PohViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/poh/PohViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.customtypes.TypoShort import adventureworks.person.businessentity.BusinessentityId import adventureworks.purchasing.purchaseorderheader.PurchaseorderheaderId import adventureworks.purchasing.shipmethod.ShipmethodId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pu.poh */ case class PohViewRow( @@ -52,36 +50,35 @@ case class PohViewRow( object PohViewRow { implicit lazy val decoder: Decoder[PohViewRow] = Decoder.forProduct13[PohViewRow, PurchaseorderheaderId, PurchaseorderheaderId, TypoShort, TypoShort, BusinessentityId, BusinessentityId, ShipmethodId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("id", "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate", "shipdate", "subtotal", "taxamt", "freight", "modifieddate")(PohViewRow.apply)(PurchaseorderheaderId.decoder, PurchaseorderheaderId.decoder, TypoShort.decoder, TypoShort.decoder, BusinessentityId.decoder, BusinessentityId.decoder, ShipmethodId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PohViewRow] = Encoder.forProduct13[PohViewRow, PurchaseorderheaderId, PurchaseorderheaderId, TypoShort, TypoShort, BusinessentityId, BusinessentityId, ShipmethodId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("id", "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate", "shipdate", "subtotal", "taxamt", "freight", "modifieddate")(x => (x.id, x.purchaseorderid, x.revisionnumber, x.status, x.employeeid, x.vendorid, x.shipmethodid, x.orderdate, x.shipdate, x.subtotal, x.taxamt, x.freight, x.modifieddate))(PurchaseorderheaderId.encoder, PurchaseorderheaderId.encoder, TypoShort.encoder, TypoShort.encoder, BusinessentityId.encoder, BusinessentityId.encoder, ShipmethodId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PohViewRow] = new Read[PohViewRow]( - gets = List( - (PurchaseorderheaderId.get, Nullability.NoNulls), - (PurchaseorderheaderId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (ShipmethodId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PohViewRow( - id = PurchaseorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - purchaseorderid = PurchaseorderheaderId.get.unsafeGetNonNullable(rs, i + 1), - revisionnumber = TypoShort.get.unsafeGetNonNullable(rs, i + 2), - status = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - employeeid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 4), - vendorid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 5), - shipmethodid = ShipmethodId.get.unsafeGetNonNullable(rs, i + 6), - orderdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7), - shipdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 8), - subtotal = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 9), - taxamt = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 10), - freight = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 11), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 12) + implicit lazy val read: Read[PohViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PurchaseorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(PurchaseorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PohViewRow( + id = arr(0).asInstanceOf[PurchaseorderheaderId], + purchaseorderid = arr(1).asInstanceOf[PurchaseorderheaderId], + revisionnumber = arr(2).asInstanceOf[TypoShort], + status = arr(3).asInstanceOf[TypoShort], + employeeid = arr(4).asInstanceOf[BusinessentityId], + vendorid = arr(5).asInstanceOf[BusinessentityId], + shipmethodid = arr(6).asInstanceOf[ShipmethodId], + orderdate = arr(7).asInstanceOf[TypoLocalDateTime], + shipdate = arr(8).asInstanceOf[Option[TypoLocalDateTime]], + subtotal = arr(9).asInstanceOf[BigDecimal], + taxamt = arr(10).asInstanceOf[BigDecimal], + freight = arr(11).asInstanceOf[BigDecimal], + modifieddate = arr(12).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pv/PvViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pv/PvViewRow.scala index 28242eb8fa..66ef045e61 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pv/PvViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/pv/PvViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.businessentity.BusinessentityId import adventureworks.production.product.ProductId import adventureworks.production.unitmeasure.UnitmeasureId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pu.pv */ case class PvViewRow( @@ -49,34 +47,33 @@ case class PvViewRow( object PvViewRow { implicit lazy val decoder: Decoder[PvViewRow] = Decoder.forProduct12[PvViewRow, ProductId, ProductId, BusinessentityId, Int, BigDecimal, Option[BigDecimal], Option[TypoLocalDateTime], Int, Int, Option[Int], UnitmeasureId, TypoLocalDateTime]("id", "productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate", "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate")(PvViewRow.apply)(ProductId.decoder, ProductId.decoder, BusinessentityId.decoder, Decoder.decodeInt, Decoder.decodeBigDecimal, Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeInt, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeInt), UnitmeasureId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PvViewRow] = Encoder.forProduct12[PvViewRow, ProductId, ProductId, BusinessentityId, Int, BigDecimal, Option[BigDecimal], Option[TypoLocalDateTime], Int, Int, Option[Int], UnitmeasureId, TypoLocalDateTime]("id", "productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate", "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate")(x => (x.id, x.productid, x.businessentityid, x.averageleadtime, x.standardprice, x.lastreceiptcost, x.lastreceiptdate, x.minorderqty, x.maxorderqty, x.onorderqty, x.unitmeasurecode, x.modifieddate))(ProductId.encoder, ProductId.encoder, BusinessentityId.encoder, Encoder.encodeInt, Encoder.encodeBigDecimal, Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeInt, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeInt), UnitmeasureId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PvViewRow] = new Read[PvViewRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PvViewRow( - id = ProductId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 2), - averageleadtime = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - standardprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - lastreceiptcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 5), - lastreceiptdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 6), - minorderqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 7), - maxorderqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 8), - onorderqty = Meta.IntMeta.get.unsafeGetNullable(rs, i + 9), - unitmeasurecode = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 10), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[PvViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PvViewRow( + id = arr(0).asInstanceOf[ProductId], + productid = arr(1).asInstanceOf[ProductId], + businessentityid = arr(2).asInstanceOf[BusinessentityId], + averageleadtime = arr(3).asInstanceOf[Int], + standardprice = arr(4).asInstanceOf[BigDecimal], + lastreceiptcost = arr(5).asInstanceOf[Option[BigDecimal]], + lastreceiptdate = arr(6).asInstanceOf[Option[TypoLocalDateTime]], + minorderqty = arr(7).asInstanceOf[Int], + maxorderqty = arr(8).asInstanceOf[Int], + onorderqty = arr(9).asInstanceOf[Option[Int]], + unitmeasurecode = arr(10).asInstanceOf[UnitmeasureId], + modifieddate = arr(11).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/sm/SmViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/sm/SmViewRow.scala index 0a425eb219..ebed40f14b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/sm/SmViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/sm/SmViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.public.Name import adventureworks.purchasing.shipmethod.ShipmethodId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pu.sm */ case class SmViewRow( @@ -39,24 +37,23 @@ case class SmViewRow( object SmViewRow { implicit lazy val decoder: Decoder[SmViewRow] = Decoder.forProduct7[SmViewRow, ShipmethodId, ShipmethodId, Name, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate")(SmViewRow.apply)(ShipmethodId.decoder, ShipmethodId.decoder, Name.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SmViewRow] = Encoder.forProduct7[SmViewRow, ShipmethodId, ShipmethodId, Name, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate")(x => (x.id, x.shipmethodid, x.name, x.shipbase, x.shiprate, x.rowguid, x.modifieddate))(ShipmethodId.encoder, ShipmethodId.encoder, Name.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SmViewRow] = new Read[SmViewRow]( - gets = List( - (ShipmethodId.get, Nullability.NoNulls), - (ShipmethodId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SmViewRow( - id = ShipmethodId.get.unsafeGetNonNullable(rs, i + 0), - shipmethodid = ShipmethodId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - shipbase = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - shiprate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[SmViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SmViewRow( + id = arr(0).asInstanceOf[ShipmethodId], + shipmethodid = arr(1).asInstanceOf[ShipmethodId], + name = arr(2).asInstanceOf[Name], + shipbase = arr(3).asInstanceOf[BigDecimal], + shiprate = arr(4).asInstanceOf[BigDecimal], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/v/VViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/v/VViewRow.scala index 141c749154..cb0381f31e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/v/VViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/pu/v/VViewRow.scala @@ -13,12 +13,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.AccountNumber import adventureworks.public.Flag import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: pu.v */ case class VViewRow( @@ -45,28 +43,27 @@ case class VViewRow( object VViewRow { implicit lazy val decoder: Decoder[VViewRow] = Decoder.forProduct9[VViewRow, BusinessentityId, BusinessentityId, AccountNumber, Name, TypoShort, Flag, Flag, Option[/* max 1024 chars */ String], TypoLocalDateTime]("id", "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate")(VViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, AccountNumber.decoder, Name.decoder, TypoShort.decoder, Flag.decoder, Flag.decoder, Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[VViewRow] = Encoder.forProduct9[VViewRow, BusinessentityId, BusinessentityId, AccountNumber, Name, TypoShort, Flag, Flag, Option[/* max 1024 chars */ String], TypoLocalDateTime]("id", "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate")(x => (x.id, x.businessentityid, x.accountnumber, x.name, x.creditrating, x.preferredvendorstatus, x.activeflag, x.purchasingwebserviceurl, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, AccountNumber.encoder, Name.encoder, TypoShort.encoder, Flag.encoder, Flag.encoder, Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[VViewRow] = new Read[VViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (AccountNumber.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - accountnumber = AccountNumber.get.unsafeGetNonNullable(rs, i + 2), - name = Name.get.unsafeGetNonNullable(rs, i + 3), - creditrating = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - preferredvendorstatus = Flag.get.unsafeGetNonNullable(rs, i + 5), - activeflag = Flag.get.unsafeGetNonNullable(rs, i + 6), - purchasingwebserviceurl = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[VViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(AccountNumber.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + accountnumber = arr(2).asInstanceOf[AccountNumber], + name = arr(3).asInstanceOf[Name], + creditrating = arr(4).asInstanceOf[TypoShort], + preferredvendorstatus = arr(5).asInstanceOf[Flag], + activeflag = arr(6).asInstanceOf[Flag], + purchasingwebserviceurl = arr(7).asInstanceOf[Option[/* max 1024 chars */ String]], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/Myenum.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/Myenum.scala index 5864795960..e2b5f7bbdd 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/Myenum.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/Myenum.scala @@ -46,10 +46,10 @@ object Myenum { implicit lazy val get: Get[Myenum] = Meta.StringMeta.get.temap(Myenum.apply) implicit lazy val ordering: Ordering[Myenum] = Ordering.by(_.value) implicit lazy val put: Put[Myenum] = Put.Advanced.one[Myenum](JdbcType.Other, NonEmptyList.one("public.myenum"), (ps, i, a) => ps.setString(i, a.value), (rs, i, a) => rs.updateString(i, a.value)) - implicit lazy val read: Read[Myenum] = Read.fromGet(get) + implicit lazy val read: Read[Myenum] = new Read.Single(get) implicit lazy val text: Text[Myenum] = new Text[Myenum] { override def unsafeEncode(v: Myenum, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: Myenum, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[Myenum] = Write.fromPut(put) + implicit lazy val write: Write[Myenum] = new Write.Single(put) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRepoImpl.scala index b40b4d8a18..b28c0bc06d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRepoImpl.scala @@ -26,7 +26,7 @@ class FlaffRepoImpl extends FlaffRepo { DeleteBuilder(""""public"."flaff"""", FlaffFields.structure) } override def deleteById(compositeId: FlaffId): ConnectionIO[Boolean] = { - sql"""delete from "public"."flaff" where "code" = ${fromWrite(compositeId.code)(Write.fromPut(ShortText.put))} AND "another_code" = ${fromWrite(compositeId.anotherCode)(Write.fromPut(Meta.StringMeta.put))} AND "some_number" = ${fromWrite(compositeId.someNumber)(Write.fromPut(Meta.IntMeta.put))} AND "specifier" = ${fromWrite(compositeId.specifier)(Write.fromPut(ShortText.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."flaff" where "code" = ${fromWrite(compositeId.code)(new Write.Single(ShortText.put))} AND "another_code" = ${fromWrite(compositeId.anotherCode)(new Write.Single(Meta.StringMeta.put))} AND "some_number" = ${fromWrite(compositeId.someNumber)(new Write.Single(Meta.IntMeta.put))} AND "specifier" = ${fromWrite(compositeId.specifier)(new Write.Single(ShortText.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[FlaffId]): ConnectionIO[Int] = { val code = compositeIds.map(_.code) @@ -42,7 +42,7 @@ class FlaffRepoImpl extends FlaffRepo { } override def insert(unsaved: FlaffRow): ConnectionIO[FlaffRow] = { sql"""insert into "public"."flaff"("code", "another_code", "some_number", "specifier", "parentspecifier") - values (${fromWrite(unsaved.code)(Write.fromPut(ShortText.put))}::text, ${fromWrite(unsaved.anotherCode)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.someNumber)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.specifier)(Write.fromPut(ShortText.put))}::text, ${fromWrite(unsaved.parentspecifier)(Write.fromPutOption(ShortText.put))}::text) + values (${fromWrite(unsaved.code)(new Write.Single(ShortText.put))}::text, ${fromWrite(unsaved.anotherCode)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.someNumber)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.specifier)(new Write.Single(ShortText.put))}::text, ${fromWrite(unsaved.parentspecifier)(new Write.SingleOpt(ShortText.put))}::text) returning "code", "another_code", "some_number", "specifier", "parentspecifier" """.query(using FlaffRow.read).unique } @@ -56,7 +56,7 @@ class FlaffRepoImpl extends FlaffRepo { sql"""select "code", "another_code", "some_number", "specifier", "parentspecifier" from "public"."flaff"""".query(using FlaffRow.read).stream } override def selectById(compositeId: FlaffId): ConnectionIO[Option[FlaffRow]] = { - sql"""select "code", "another_code", "some_number", "specifier", "parentspecifier" from "public"."flaff" where "code" = ${fromWrite(compositeId.code)(Write.fromPut(ShortText.put))} AND "another_code" = ${fromWrite(compositeId.anotherCode)(Write.fromPut(Meta.StringMeta.put))} AND "some_number" = ${fromWrite(compositeId.someNumber)(Write.fromPut(Meta.IntMeta.put))} AND "specifier" = ${fromWrite(compositeId.specifier)(Write.fromPut(ShortText.put))}""".query(using FlaffRow.read).option + sql"""select "code", "another_code", "some_number", "specifier", "parentspecifier" from "public"."flaff" where "code" = ${fromWrite(compositeId.code)(new Write.Single(ShortText.put))} AND "another_code" = ${fromWrite(compositeId.anotherCode)(new Write.Single(Meta.StringMeta.put))} AND "some_number" = ${fromWrite(compositeId.someNumber)(new Write.Single(Meta.IntMeta.put))} AND "specifier" = ${fromWrite(compositeId.specifier)(new Write.Single(ShortText.put))}""".query(using FlaffRow.read).option } override def selectByIds(compositeIds: Array[FlaffId]): Stream[ConnectionIO, FlaffRow] = { val code = compositeIds.map(_.code) @@ -82,8 +82,8 @@ class FlaffRepoImpl extends FlaffRepo { override def update(row: FlaffRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "public"."flaff" - set "parentspecifier" = ${fromWrite(row.parentspecifier)(Write.fromPutOption(ShortText.put))}::text - where "code" = ${fromWrite(compositeId.code)(Write.fromPut(ShortText.put))} AND "another_code" = ${fromWrite(compositeId.anotherCode)(Write.fromPut(Meta.StringMeta.put))} AND "some_number" = ${fromWrite(compositeId.someNumber)(Write.fromPut(Meta.IntMeta.put))} AND "specifier" = ${fromWrite(compositeId.specifier)(Write.fromPut(ShortText.put))}""" + set "parentspecifier" = ${fromWrite(row.parentspecifier)(new Write.SingleOpt(ShortText.put))}::text + where "code" = ${fromWrite(compositeId.code)(new Write.Single(ShortText.put))} AND "another_code" = ${fromWrite(compositeId.anotherCode)(new Write.Single(Meta.StringMeta.put))} AND "some_number" = ${fromWrite(compositeId.someNumber)(new Write.Single(Meta.IntMeta.put))} AND "specifier" = ${fromWrite(compositeId.specifier)(new Write.Single(ShortText.put))}""" .update .run .map(_ > 0) @@ -91,11 +91,11 @@ class FlaffRepoImpl extends FlaffRepo { override def upsert(unsaved: FlaffRow): ConnectionIO[FlaffRow] = { sql"""insert into "public"."flaff"("code", "another_code", "some_number", "specifier", "parentspecifier") values ( - ${fromWrite(unsaved.code)(Write.fromPut(ShortText.put))}::text, - ${fromWrite(unsaved.anotherCode)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.someNumber)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.specifier)(Write.fromPut(ShortText.put))}::text, - ${fromWrite(unsaved.parentspecifier)(Write.fromPutOption(ShortText.put))}::text + ${fromWrite(unsaved.code)(new Write.Single(ShortText.put))}::text, + ${fromWrite(unsaved.anotherCode)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.someNumber)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.specifier)(new Write.Single(ShortText.put))}::text, + ${fromWrite(unsaved.parentspecifier)(new Write.SingleOpt(ShortText.put))}::text ) on conflict ("code", "another_code", "some_number", "specifier") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRow.scala index dd47320914..c8288e1baa 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/flaff/FlaffRow.scala @@ -7,14 +7,12 @@ package adventureworks package public package flaff -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.flaff Composite primary key: code, another_code, some_number, specifier */ @@ -38,22 +36,21 @@ object FlaffRow { new FlaffRow(compositeId.code, compositeId.anotherCode, compositeId.someNumber, compositeId.specifier, parentspecifier) implicit lazy val decoder: Decoder[FlaffRow] = Decoder.forProduct5[FlaffRow, ShortText, /* max 20 chars */ String, Int, ShortText, Option[ShortText]]("code", "another_code", "some_number", "specifier", "parentspecifier")(FlaffRow.apply)(ShortText.decoder, Decoder.decodeString, Decoder.decodeInt, ShortText.decoder, Decoder.decodeOption(ShortText.decoder)) implicit lazy val encoder: Encoder[FlaffRow] = Encoder.forProduct5[FlaffRow, ShortText, /* max 20 chars */ String, Int, ShortText, Option[ShortText]]("code", "another_code", "some_number", "specifier", "parentspecifier")(x => (x.code, x.anotherCode, x.someNumber, x.specifier, x.parentspecifier))(ShortText.encoder, Encoder.encodeString, Encoder.encodeInt, ShortText.encoder, Encoder.encodeOption(ShortText.encoder)) - implicit lazy val read: Read[FlaffRow] = new Read[FlaffRow]( - gets = List( - (ShortText.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (ShortText.get, Nullability.NoNulls), - (ShortText.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => FlaffRow( - code = ShortText.get.unsafeGetNonNullable(rs, i + 0), - anotherCode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - someNumber = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - specifier = ShortText.get.unsafeGetNonNullable(rs, i + 3), - parentspecifier = ShortText.get.unsafeGetNullable(rs, i + 4) + implicit lazy val read: Read[FlaffRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShortText.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(ShortText.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(ShortText.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + FlaffRow( + code = arr(0).asInstanceOf[ShortText], + anotherCode = arr(1).asInstanceOf[/* max 20 chars */ String], + someNumber = arr(2).asInstanceOf[Int], + specifier = arr(3).asInstanceOf[ShortText], + parentspecifier = arr(4).asInstanceOf[Option[ShortText]] ) - ) + } implicit lazy val text: Text[FlaffRow] = Text.instance[FlaffRow]{ (row, sb) => ShortText.text.unsafeEncode(row.code, sb) sb.append(Text.DELIMETER) @@ -65,26 +62,12 @@ object FlaffRow { sb.append(Text.DELIMETER) Text.option(ShortText.text).unsafeEncode(row.parentspecifier, sb) } - implicit lazy val write: Write[FlaffRow] = new Write[FlaffRow]( - puts = List((ShortText.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (ShortText.put, Nullability.NoNulls), - (ShortText.put, Nullability.Nullable)), - toList = x => List(x.code, x.anotherCode, x.someNumber, x.specifier, x.parentspecifier), - unsafeSet = (rs, i, a) => { - ShortText.put.unsafeSetNonNullable(rs, i + 0, a.code) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.anotherCode) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 2, a.someNumber) - ShortText.put.unsafeSetNonNullable(rs, i + 3, a.specifier) - ShortText.put.unsafeSetNullable(rs, i + 4, a.parentspecifier) - }, - unsafeUpdate = (ps, i, a) => { - ShortText.put.unsafeUpdateNonNullable(ps, i + 0, a.code) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.anotherCode) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.someNumber) - ShortText.put.unsafeUpdateNonNullable(ps, i + 3, a.specifier) - ShortText.put.unsafeUpdateNullable(ps, i + 4, a.parentspecifier) - } + implicit lazy val write: Write[FlaffRow] = new Write.Composite[FlaffRow]( + List(new Write.Single(ShortText.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(ShortText.put), + new Write.Single(ShortText.put).toOpt), + a => List(a.code, a.anotherCode, a.someNumber, a.specifier, a.parentspecifier) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala index ab350e013a..662a3fc856 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala @@ -28,23 +28,23 @@ class IdentityTestRepoImpl extends IdentityTestRepo { DeleteBuilder(""""public"."identity-test"""", IdentityTestFields.structure) } override def deleteById(name: IdentityTestId): ConnectionIO[Boolean] = { - sql"""delete from "public"."identity-test" where "name" = ${fromWrite(name)(Write.fromPut(IdentityTestId.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."identity-test" where "name" = ${fromWrite(name)(new Write.Single(IdentityTestId.put))}""".update.run.map(_ > 0) } override def deleteByIds(names: Array[IdentityTestId]): ConnectionIO[Int] = { sql"""delete from "public"."identity-test" where "name" = ANY(${names})""".update.run } override def insert(unsaved: IdentityTestRow): ConnectionIO[IdentityTestRow] = { sql"""insert into "public"."identity-test"("default_generated", "name") - values (${fromWrite(unsaved.defaultGenerated)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(IdentityTestId.put))}) + values (${fromWrite(unsaved.defaultGenerated)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(IdentityTestId.put))}) returning "always_generated", "default_generated", "name" """.query(using IdentityTestRow.read).unique } override def insert(unsaved: IdentityTestRowUnsaved): ConnectionIO[IdentityTestRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(IdentityTestId.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(IdentityTestId.put))}")), unsaved.defaultGenerated match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""default_generated""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""default_generated""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) } ).flatten @@ -76,7 +76,7 @@ class IdentityTestRepoImpl extends IdentityTestRepo { sql"""select "always_generated", "default_generated", "name" from "public"."identity-test"""".query(using IdentityTestRow.read).stream } override def selectById(name: IdentityTestId): ConnectionIO[Option[IdentityTestRow]] = { - sql"""select "always_generated", "default_generated", "name" from "public"."identity-test" where "name" = ${fromWrite(name)(Write.fromPut(IdentityTestId.put))}""".query(using IdentityTestRow.read).option + sql"""select "always_generated", "default_generated", "name" from "public"."identity-test" where "name" = ${fromWrite(name)(new Write.Single(IdentityTestId.put))}""".query(using IdentityTestRow.read).option } override def selectByIds(names: Array[IdentityTestId]): Stream[ConnectionIO, IdentityTestRow] = { sql"""select "always_generated", "default_generated", "name" from "public"."identity-test" where "name" = ANY(${names})""".query(using IdentityTestRow.read).stream @@ -93,8 +93,8 @@ class IdentityTestRepoImpl extends IdentityTestRepo { override def update(row: IdentityTestRow): ConnectionIO[Boolean] = { val name = row.name sql"""update "public"."identity-test" - set "default_generated" = ${fromWrite(row.defaultGenerated)(Write.fromPut(Meta.IntMeta.put))}::int4 - where "name" = ${fromWrite(name)(Write.fromPut(IdentityTestId.put))}""" + set "default_generated" = ${fromWrite(row.defaultGenerated)(new Write.Single(Meta.IntMeta.put))}::int4 + where "name" = ${fromWrite(name)(new Write.Single(IdentityTestId.put))}""" .update .run .map(_ > 0) @@ -102,8 +102,8 @@ class IdentityTestRepoImpl extends IdentityTestRepo { override def upsert(unsaved: IdentityTestRow): ConnectionIO[IdentityTestRow] = { sql"""insert into "public"."identity-test"("default_generated", "name") values ( - ${fromWrite(unsaved.defaultGenerated)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(IdentityTestId.put))} + ${fromWrite(unsaved.defaultGenerated)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(IdentityTestId.put))} ) on conflict ("name") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRow.scala index cec1a69636..9710fd225e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRow.scala @@ -8,14 +8,12 @@ package public package identity_test import adventureworks.customtypes.Defaulted -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.identity-test Primary key: name */ @@ -34,34 +32,25 @@ case class IdentityTestRow( object IdentityTestRow { implicit lazy val decoder: Decoder[IdentityTestRow] = Decoder.forProduct3[IdentityTestRow, Int, Int, IdentityTestId]("always_generated", "default_generated", "name")(IdentityTestRow.apply)(Decoder.decodeInt, Decoder.decodeInt, IdentityTestId.decoder) implicit lazy val encoder: Encoder[IdentityTestRow] = Encoder.forProduct3[IdentityTestRow, Int, Int, IdentityTestId]("always_generated", "default_generated", "name")(x => (x.alwaysGenerated, x.defaultGenerated, x.name))(Encoder.encodeInt, Encoder.encodeInt, IdentityTestId.encoder) - implicit lazy val read: Read[IdentityTestRow] = new Read[IdentityTestRow]( - gets = List( - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (IdentityTestId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => IdentityTestRow( - alwaysGenerated = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 0), - defaultGenerated = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - name = IdentityTestId.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[IdentityTestRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(IdentityTestId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + IdentityTestRow( + alwaysGenerated = arr(0).asInstanceOf[Int], + defaultGenerated = arr(1).asInstanceOf[Int], + name = arr(2).asInstanceOf[IdentityTestId] ) - ) + } implicit lazy val text: Text[IdentityTestRow] = Text.instance[IdentityTestRow]{ (row, sb) => Text.intInstance.unsafeEncode(row.defaultGenerated, sb) sb.append(Text.DELIMETER) IdentityTestId.text.unsafeEncode(row.name, sb) } - implicit lazy val write: Write[IdentityTestRow] = new Write[IdentityTestRow]( - puts = List((Meta.IntMeta.put, Nullability.NoNulls), - (IdentityTestId.put, Nullability.NoNulls)), - toList = x => List(x.defaultGenerated, x.name), - unsafeSet = (rs, i, a) => { - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 0, a.defaultGenerated) - IdentityTestId.put.unsafeSetNonNullable(rs, i + 1, a.name) - }, - unsafeUpdate = (ps, i, a) => { - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.defaultGenerated) - IdentityTestId.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - } + implicit lazy val write: Write[IdentityTestRow] = new Write.Composite[IdentityTestRow]( + List(new Write.Single(Meta.IntMeta.put), + new Write.Single(IdentityTestId.put)), + a => List(a.defaultGenerated, a.name) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Id.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Id.scala index 3aba85975c..097433fefb 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Id.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Id.scala @@ -38,10 +38,10 @@ object Issue142Id { implicit lazy val get: Get[Issue142Id] = Meta.StringMeta.get.map(Issue142Id.apply) implicit lazy val ordering: Ordering[Issue142Id] = Ordering.by(_.value) implicit lazy val put: Put[Issue142Id] = Meta.StringMeta.put.contramap(_.value) - implicit lazy val read: Read[Issue142Id] = Read.fromGet(get) + implicit lazy val read: Read[Issue142Id] = new Read.Single(get) implicit lazy val text: Text[Issue142Id] = new Text[Issue142Id] { override def unsafeEncode(v: Issue142Id, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: Issue142Id, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[Issue142Id] = Write.fromPut(put) + implicit lazy val write: Write[Issue142Id] = new Write.Single(put) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142RepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142RepoImpl.scala index d28df9a3e8..c18fa1443d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142RepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142RepoImpl.scala @@ -25,14 +25,14 @@ class Issue142RepoImpl extends Issue142Repo { DeleteBuilder(""""public"."issue142"""", Issue142Fields.structure) } override def deleteById(tabellkode: Issue142Id): ConnectionIO[Boolean] = { - sql"""delete from "public"."issue142" where "tabellkode" = ${fromWrite(tabellkode)(Write.fromPut(Issue142Id.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."issue142" where "tabellkode" = ${fromWrite(tabellkode)(new Write.Single(Issue142Id.put))}""".update.run.map(_ > 0) } override def deleteByIds(tabellkodes: Array[Issue142Id]): ConnectionIO[Int] = { sql"""delete from "public"."issue142" where "tabellkode" = ANY(${tabellkodes})""".update.run } override def insert(unsaved: Issue142Row): ConnectionIO[Issue142Row] = { sql"""insert into "public"."issue142"("tabellkode") - values (${fromWrite(unsaved.tabellkode)(Write.fromPut(Issue142Id.put))}) + values (${fromWrite(unsaved.tabellkode)(new Write.Single(Issue142Id.put))}) returning "tabellkode" """.query(using Issue142Row.read).unique } @@ -46,7 +46,7 @@ class Issue142RepoImpl extends Issue142Repo { sql"""select "tabellkode" from "public"."issue142"""".query(using Issue142Row.read).stream } override def selectById(tabellkode: Issue142Id): ConnectionIO[Option[Issue142Row]] = { - sql"""select "tabellkode" from "public"."issue142" where "tabellkode" = ${fromWrite(tabellkode)(Write.fromPut(Issue142Id.put))}""".query(using Issue142Row.read).option + sql"""select "tabellkode" from "public"."issue142" where "tabellkode" = ${fromWrite(tabellkode)(new Write.Single(Issue142Id.put))}""".query(using Issue142Row.read).option } override def selectByIds(tabellkodes: Array[Issue142Id]): Stream[ConnectionIO, Issue142Row] = { sql"""select "tabellkode" from "public"."issue142" where "tabellkode" = ANY(${tabellkodes})""".query(using Issue142Row.read).stream @@ -63,7 +63,7 @@ class Issue142RepoImpl extends Issue142Repo { override def upsert(unsaved: Issue142Row): ConnectionIO[Issue142Row] = { sql"""insert into "public"."issue142"("tabellkode") values ( - ${fromWrite(unsaved.tabellkode)(Write.fromPut(Issue142Id.put))} + ${fromWrite(unsaved.tabellkode)(new Write.Single(Issue142Id.put))} ) on conflict ("tabellkode") do update set "tabellkode" = EXCLUDED."tabellkode" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Row.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Row.scala index 79b4e21002..e9c7447ff1 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Row.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142/Issue142Row.scala @@ -7,13 +7,11 @@ package adventureworks package public package issue142 -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.issue142 Primary key: tabellkode */ @@ -26,25 +24,18 @@ case class Issue142Row( object Issue142Row { implicit lazy val decoder: Decoder[Issue142Row] = Decoder.forProduct1[Issue142Row, Issue142Id]("tabellkode")(Issue142Row.apply)(Issue142Id.decoder) implicit lazy val encoder: Encoder[Issue142Row] = Encoder.forProduct1[Issue142Row, Issue142Id]("tabellkode")(x => (x.tabellkode))(Issue142Id.encoder) - implicit lazy val read: Read[Issue142Row] = new Read[Issue142Row]( - gets = List( - (Issue142Id.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => Issue142Row( - tabellkode = Issue142Id.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[Issue142Row] = new Read.CompositeOfInstances(Array( + new Read.Single(Issue142Id.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + Issue142Row( + tabellkode = arr(0).asInstanceOf[Issue142Id] ) - ) + } implicit lazy val text: Text[Issue142Row] = Text.instance[Issue142Row]{ (row, sb) => Issue142Id.text.unsafeEncode(row.tabellkode, sb) } - implicit lazy val write: Write[Issue142Row] = new Write[Issue142Row]( - puts = List((Issue142Id.put, Nullability.NoNulls)), - toList = x => List(x.tabellkode), - unsafeSet = (rs, i, a) => { - Issue142Id.put.unsafeSetNonNullable(rs, i + 0, a.tabellkode) - }, - unsafeUpdate = (ps, i, a) => { - Issue142Id.put.unsafeUpdateNonNullable(ps, i + 0, a.tabellkode) - } + implicit lazy val write: Write[Issue142Row] = new Write.Composite[Issue142Row]( + List(new Write.Single(Issue142Id.put)), + a => List(a.tabellkode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422RepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422RepoImpl.scala index 57480b6763..4fc0de0973 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422RepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422RepoImpl.scala @@ -26,14 +26,14 @@ class Issue1422RepoImpl extends Issue1422Repo { DeleteBuilder(""""public"."issue142_2"""", Issue1422Fields.structure) } override def deleteById(tabellkode: Issue142Id): ConnectionIO[Boolean] = { - sql"""delete from "public"."issue142_2" where "tabellkode" = ${fromWrite(tabellkode)(Write.fromPut(Issue142Id.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."issue142_2" where "tabellkode" = ${fromWrite(tabellkode)(new Write.Single(Issue142Id.put))}""".update.run.map(_ > 0) } override def deleteByIds(tabellkodes: Array[Issue142Id]): ConnectionIO[Int] = { sql"""delete from "public"."issue142_2" where "tabellkode" = ANY(${tabellkodes})""".update.run } override def insert(unsaved: Issue1422Row): ConnectionIO[Issue1422Row] = { sql"""insert into "public"."issue142_2"("tabellkode") - values (${fromWrite(unsaved.tabellkode)(Write.fromPut(Issue142Id.put))}) + values (${fromWrite(unsaved.tabellkode)(new Write.Single(Issue142Id.put))}) returning "tabellkode" """.query(using Issue1422Row.read).unique } @@ -47,7 +47,7 @@ class Issue1422RepoImpl extends Issue1422Repo { sql"""select "tabellkode" from "public"."issue142_2"""".query(using Issue1422Row.read).stream } override def selectById(tabellkode: Issue142Id): ConnectionIO[Option[Issue1422Row]] = { - sql"""select "tabellkode" from "public"."issue142_2" where "tabellkode" = ${fromWrite(tabellkode)(Write.fromPut(Issue142Id.put))}""".query(using Issue1422Row.read).option + sql"""select "tabellkode" from "public"."issue142_2" where "tabellkode" = ${fromWrite(tabellkode)(new Write.Single(Issue142Id.put))}""".query(using Issue1422Row.read).option } override def selectByIds(tabellkodes: Array[Issue142Id]): Stream[ConnectionIO, Issue1422Row] = { sql"""select "tabellkode" from "public"."issue142_2" where "tabellkode" = ANY(${tabellkodes})""".query(using Issue1422Row.read).stream @@ -64,7 +64,7 @@ class Issue1422RepoImpl extends Issue1422Repo { override def upsert(unsaved: Issue1422Row): ConnectionIO[Issue1422Row] = { sql"""insert into "public"."issue142_2"("tabellkode") values ( - ${fromWrite(unsaved.tabellkode)(Write.fromPut(Issue142Id.put))} + ${fromWrite(unsaved.tabellkode)(new Write.Single(Issue142Id.put))} ) on conflict ("tabellkode") do update set "tabellkode" = EXCLUDED."tabellkode" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422Row.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422Row.scala index 2c9618784a..ecedf6e4a0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422Row.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/issue142_2/Issue1422Row.scala @@ -8,13 +8,11 @@ package public package issue142_2 import adventureworks.public.issue142.Issue142Id -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.issue142_2 Primary key: tabellkode */ @@ -28,25 +26,18 @@ case class Issue1422Row( object Issue1422Row { implicit lazy val decoder: Decoder[Issue1422Row] = Decoder.forProduct1[Issue1422Row, Issue142Id]("tabellkode")(Issue1422Row.apply)(Issue142Id.decoder) implicit lazy val encoder: Encoder[Issue1422Row] = Encoder.forProduct1[Issue1422Row, Issue142Id]("tabellkode")(x => (x.tabellkode))(Issue142Id.encoder) - implicit lazy val read: Read[Issue1422Row] = new Read[Issue1422Row]( - gets = List( - (Issue142Id.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => Issue1422Row( - tabellkode = Issue142Id.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[Issue1422Row] = new Read.CompositeOfInstances(Array( + new Read.Single(Issue142Id.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + Issue1422Row( + tabellkode = arr(0).asInstanceOf[Issue142Id] ) - ) + } implicit lazy val text: Text[Issue1422Row] = Text.instance[Issue1422Row]{ (row, sb) => Issue142Id.text.unsafeEncode(row.tabellkode, sb) } - implicit lazy val write: Write[Issue1422Row] = new Write[Issue1422Row]( - puts = List((Issue142Id.put, Nullability.NoNulls)), - toList = x => List(x.tabellkode), - unsafeSet = (rs, i, a) => { - Issue142Id.put.unsafeSetNonNullable(rs, i + 0, a.tabellkode) - }, - unsafeUpdate = (ps, i, a) => { - Issue142Id.put.unsafeUpdateNonNullable(ps, i + 0, a.tabellkode) - } + implicit lazy val write: Write[Issue1422Row] = new Write.Composite[Issue1422Row]( + List(new Write.Single(Issue142Id.put)), + a => List(a.tabellkode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRepoImpl.scala index 5d26a1c574..678a0dc450 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRepoImpl.scala @@ -26,7 +26,7 @@ class OnlyPkColumnsRepoImpl extends OnlyPkColumnsRepo { DeleteBuilder(""""public"."only_pk_columns"""", OnlyPkColumnsFields.structure) } override def deleteById(compositeId: OnlyPkColumnsId): ConnectionIO[Boolean] = { - sql"""delete from "public"."only_pk_columns" where "key_column_1" = ${fromWrite(compositeId.keyColumn1)(Write.fromPut(Meta.StringMeta.put))} AND "key_column_2" = ${fromWrite(compositeId.keyColumn2)(Write.fromPut(Meta.IntMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."only_pk_columns" where "key_column_1" = ${fromWrite(compositeId.keyColumn1)(new Write.Single(Meta.StringMeta.put))} AND "key_column_2" = ${fromWrite(compositeId.keyColumn2)(new Write.Single(Meta.IntMeta.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[OnlyPkColumnsId]): ConnectionIO[Int] = { val keyColumn1 = compositeIds.map(_.keyColumn1) @@ -40,7 +40,7 @@ class OnlyPkColumnsRepoImpl extends OnlyPkColumnsRepo { } override def insert(unsaved: OnlyPkColumnsRow): ConnectionIO[OnlyPkColumnsRow] = { sql"""insert into "public"."only_pk_columns"("key_column_1", "key_column_2") - values (${fromWrite(unsaved.keyColumn1)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.keyColumn2)(Write.fromPut(Meta.IntMeta.put))}::int4) + values (${fromWrite(unsaved.keyColumn1)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.keyColumn2)(new Write.Single(Meta.IntMeta.put))}::int4) returning "key_column_1", "key_column_2" """.query(using OnlyPkColumnsRow.read).unique } @@ -54,7 +54,7 @@ class OnlyPkColumnsRepoImpl extends OnlyPkColumnsRepo { sql"""select "key_column_1", "key_column_2" from "public"."only_pk_columns"""".query(using OnlyPkColumnsRow.read).stream } override def selectById(compositeId: OnlyPkColumnsId): ConnectionIO[Option[OnlyPkColumnsRow]] = { - sql"""select "key_column_1", "key_column_2" from "public"."only_pk_columns" where "key_column_1" = ${fromWrite(compositeId.keyColumn1)(Write.fromPut(Meta.StringMeta.put))} AND "key_column_2" = ${fromWrite(compositeId.keyColumn2)(Write.fromPut(Meta.IntMeta.put))}""".query(using OnlyPkColumnsRow.read).option + sql"""select "key_column_1", "key_column_2" from "public"."only_pk_columns" where "key_column_1" = ${fromWrite(compositeId.keyColumn1)(new Write.Single(Meta.StringMeta.put))} AND "key_column_2" = ${fromWrite(compositeId.keyColumn2)(new Write.Single(Meta.IntMeta.put))}""".query(using OnlyPkColumnsRow.read).option } override def selectByIds(compositeIds: Array[OnlyPkColumnsId]): Stream[ConnectionIO, OnlyPkColumnsRow] = { val keyColumn1 = compositeIds.map(_.keyColumn1) @@ -78,8 +78,8 @@ class OnlyPkColumnsRepoImpl extends OnlyPkColumnsRepo { override def upsert(unsaved: OnlyPkColumnsRow): ConnectionIO[OnlyPkColumnsRow] = { sql"""insert into "public"."only_pk_columns"("key_column_1", "key_column_2") values ( - ${fromWrite(unsaved.keyColumn1)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.keyColumn2)(Write.fromPut(Meta.IntMeta.put))}::int4 + ${fromWrite(unsaved.keyColumn1)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.keyColumn2)(new Write.Single(Meta.IntMeta.put))}::int4 ) on conflict ("key_column_1", "key_column_2") do update set "key_column_1" = EXCLUDED."key_column_1" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRow.scala index 6361387293..85cd1c275a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/only_pk_columns/OnlyPkColumnsRow.scala @@ -7,14 +7,12 @@ package adventureworks package public package only_pk_columns -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.only_pk_columns Composite primary key: key_column_1, key_column_2 */ @@ -31,32 +29,23 @@ object OnlyPkColumnsRow { new OnlyPkColumnsRow(compositeId.keyColumn1, compositeId.keyColumn2) implicit lazy val decoder: Decoder[OnlyPkColumnsRow] = Decoder.forProduct2[OnlyPkColumnsRow, String, Int]("key_column_1", "key_column_2")(OnlyPkColumnsRow.apply)(Decoder.decodeString, Decoder.decodeInt) implicit lazy val encoder: Encoder[OnlyPkColumnsRow] = Encoder.forProduct2[OnlyPkColumnsRow, String, Int]("key_column_1", "key_column_2")(x => (x.keyColumn1, x.keyColumn2))(Encoder.encodeString, Encoder.encodeInt) - implicit lazy val read: Read[OnlyPkColumnsRow] = new Read[OnlyPkColumnsRow]( - gets = List( - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => OnlyPkColumnsRow( - keyColumn1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 0), - keyColumn2 = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1) + implicit lazy val read: Read[OnlyPkColumnsRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + OnlyPkColumnsRow( + keyColumn1 = arr(0).asInstanceOf[String], + keyColumn2 = arr(1).asInstanceOf[Int] ) - ) + } implicit lazy val text: Text[OnlyPkColumnsRow] = Text.instance[OnlyPkColumnsRow]{ (row, sb) => Text.stringInstance.unsafeEncode(row.keyColumn1, sb) sb.append(Text.DELIMETER) Text.intInstance.unsafeEncode(row.keyColumn2, sb) } - implicit lazy val write: Write[OnlyPkColumnsRow] = new Write[OnlyPkColumnsRow]( - puts = List((Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls)), - toList = x => List(x.keyColumn1, x.keyColumn2), - unsafeSet = (rs, i, a) => { - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 0, a.keyColumn1) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 1, a.keyColumn2) - }, - unsafeUpdate = (ps, i, a) => { - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.keyColumn1) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.keyColumn2) - } + implicit lazy val write: Write[OnlyPkColumnsRow] = new Write.Composite[OnlyPkColumnsRow]( + List(new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put)), + a => List(a.keyColumn1, a.keyColumn2) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRepoImpl.scala index 4f770cf000..04df9b702b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRepoImpl.scala @@ -49,7 +49,7 @@ class PgtestRepoImpl extends PgtestRepo { } override def insert(unsaved: PgtestRow): ConnectionIO[PgtestRow] = { sql"""insert into "public"."pgtest"("bool", "box", "bpchar", "bytea", "char", "circle", "date", "float4", "float8", "hstore", "inet", "int2", "int2vector", "int4", "int8", "interval", "json", "jsonb", "line", "lseg", "money", "mydomain", "myenum", "name", "numeric", "path", "point", "polygon", "text", "time", "timestamp", "timestampz", "timez", "uuid", "varchar", "vector", "xml", "boxes", "bpchares", "chares", "circlees", "datees", "float4es", "float8es", "inetes", "int2es", "int2vectores", "int4es", "int8es", "intervales", "jsones", "jsonbes", "linees", "lseges", "moneyes", "mydomaines", "myenumes", "namees", "numerices", "pathes", "pointes", "polygones", "textes", "timees", "timestampes", "timestampzes", "timezes", "uuides", "varchares", "xmles") - values (${fromWrite(unsaved.bool)(Write.fromPut(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.box)(Write.fromPut(TypoBox.put))}::box, ${fromWrite(unsaved.bpchar)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.bytea)(Write.fromPut(TypoBytea.put))}::bytea, ${fromWrite(unsaved.char)(Write.fromPut(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.circle)(Write.fromPut(TypoCircle.put))}::circle, ${fromWrite(unsaved.date)(Write.fromPut(TypoLocalDate.put))}::date, ${fromWrite(unsaved.float4)(Write.fromPut(Meta.FloatMeta.put))}::float4, ${fromWrite(unsaved.float8)(Write.fromPut(Meta.DoubleMeta.put))}::float8, ${fromWrite(unsaved.hstore)(Write.fromPut(TypoHStore.put))}::hstore, ${fromWrite(unsaved.inet)(Write.fromPut(TypoInet.put))}::inet, ${fromWrite(unsaved.int2)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.int2vector)(Write.fromPut(TypoInt2Vector.put))}::int2vector, ${fromWrite(unsaved.int4)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.int8)(Write.fromPut(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.interval)(Write.fromPut(TypoInterval.put))}::interval, ${fromWrite(unsaved.json)(Write.fromPut(TypoJson.put))}::json, ${fromWrite(unsaved.jsonb)(Write.fromPut(TypoJsonb.put))}::jsonb, ${fromWrite(unsaved.line)(Write.fromPut(TypoLine.put))}::line, ${fromWrite(unsaved.lseg)(Write.fromPut(TypoLineSegment.put))}::lseg, ${fromWrite(unsaved.money)(Write.fromPut(TypoMoney.put))}::money, ${fromWrite(unsaved.mydomain)(Write.fromPut(Mydomain.put))}::text, ${fromWrite(unsaved.myenum)(Write.fromPut(Myenum.put))}::public.myenum, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}::name, ${fromWrite(unsaved.numeric)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.path)(Write.fromPut(TypoPath.put))}::path, ${fromWrite(unsaved.point)(Write.fromPut(TypoPoint.put))}::point, ${fromWrite(unsaved.polygon)(Write.fromPut(TypoPolygon.put))}::polygon, ${fromWrite(unsaved.text)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.time)(Write.fromPut(TypoLocalTime.put))}::time, ${fromWrite(unsaved.timestamp)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.timestampz)(Write.fromPut(TypoInstant.put))}::timestamptz, ${fromWrite(unsaved.timez)(Write.fromPut(TypoOffsetTime.put))}::timetz, ${fromWrite(unsaved.uuid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.varchar)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.vector)(Write.fromPut(TypoVector.put))}::vector, ${fromWrite(unsaved.xml)(Write.fromPut(TypoXml.put))}::xml, ${fromWrite(unsaved.boxes)(Write.fromPut(TypoBox.arrayPut))}::box[], ${fromWrite(unsaved.bpchares)(Write.fromPut(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.chares)(Write.fromPut(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.circlees)(Write.fromPut(TypoCircle.arrayPut))}::circle[], ${fromWrite(unsaved.datees)(Write.fromPut(TypoLocalDate.arrayPut))}::date[], ${fromWrite(unsaved.float4es)(Write.fromPut(adventureworks.FloatArrayMeta.put))}::float4[], ${fromWrite(unsaved.float8es)(Write.fromPut(adventureworks.DoubleArrayMeta.put))}::float8[], ${fromWrite(unsaved.inetes)(Write.fromPut(TypoInet.arrayPut))}::inet[], ${fromWrite(unsaved.int2es)(Write.fromPut(TypoShort.arrayPut))}::int2[], ${fromWrite(unsaved.int2vectores)(Write.fromPut(TypoInt2Vector.arrayPut))}::int2vector[], ${fromWrite(unsaved.int4es)(Write.fromPut(adventureworks.IntegerArrayMeta.put))}::int4[], ${fromWrite(unsaved.int8es)(Write.fromPut(adventureworks.LongArrayMeta.put))}::int8[], ${fromWrite(unsaved.intervales)(Write.fromPut(TypoInterval.arrayPut))}::interval[], ${fromWrite(unsaved.jsones)(Write.fromPut(TypoJson.arrayPut))}::json[], ${fromWrite(unsaved.jsonbes)(Write.fromPut(TypoJsonb.arrayPut))}::jsonb[], ${fromWrite(unsaved.linees)(Write.fromPut(TypoLine.arrayPut))}::line[], ${fromWrite(unsaved.lseges)(Write.fromPut(TypoLineSegment.arrayPut))}::lseg[], ${fromWrite(unsaved.moneyes)(Write.fromPut(TypoMoney.arrayPut))}::money[], ${fromWrite(unsaved.mydomaines)(Write.fromPut(Mydomain.arrayPut))}::mydomain[], ${fromWrite(unsaved.myenumes)(Write.fromPut(Myenum.arrayPut))}::myenum[], ${fromWrite(unsaved.namees)(Write.fromPut(adventureworks.StringArrayMeta.put))}::name[], ${fromWrite(unsaved.numerices)(Write.fromPut(adventureworks.BigDecimalMeta.put))}::numeric[], ${fromWrite(unsaved.pathes)(Write.fromPut(TypoPath.arrayPut))}::path[], ${fromWrite(unsaved.pointes)(Write.fromPut(TypoPoint.arrayPut))}::point[], ${fromWrite(unsaved.polygones)(Write.fromPut(TypoPolygon.arrayPut))}::polygon[], ${fromWrite(unsaved.textes)(Write.fromPut(adventureworks.StringArrayMeta.put))}::text[], ${fromWrite(unsaved.timees)(Write.fromPut(TypoLocalTime.arrayPut))}::time[], ${fromWrite(unsaved.timestampes)(Write.fromPut(TypoLocalDateTime.arrayPut))}::timestamp[], ${fromWrite(unsaved.timestampzes)(Write.fromPut(TypoInstant.arrayPut))}::timestamptz[], ${fromWrite(unsaved.timezes)(Write.fromPut(TypoOffsetTime.arrayPut))}::timetz[], ${fromWrite(unsaved.uuides)(Write.fromPut(TypoUUID.arrayPut))}::uuid[], ${fromWrite(unsaved.varchares)(Write.fromPut(adventureworks.StringArrayMeta.put))}::varchar[], ${fromWrite(unsaved.xmles)(Write.fromPut(TypoXml.arrayPut))}::xml[]) + values (${fromWrite(unsaved.bool)(new Write.Single(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.box)(new Write.Single(TypoBox.put))}::box, ${fromWrite(unsaved.bpchar)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.bytea)(new Write.Single(TypoBytea.put))}::bytea, ${fromWrite(unsaved.char)(new Write.Single(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.circle)(new Write.Single(TypoCircle.put))}::circle, ${fromWrite(unsaved.date)(new Write.Single(TypoLocalDate.put))}::date, ${fromWrite(unsaved.float4)(new Write.Single(Meta.FloatMeta.put))}::float4, ${fromWrite(unsaved.float8)(new Write.Single(Meta.DoubleMeta.put))}::float8, ${fromWrite(unsaved.hstore)(new Write.Single(TypoHStore.put))}::hstore, ${fromWrite(unsaved.inet)(new Write.Single(TypoInet.put))}::inet, ${fromWrite(unsaved.int2)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.int2vector)(new Write.Single(TypoInt2Vector.put))}::int2vector, ${fromWrite(unsaved.int4)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.int8)(new Write.Single(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.interval)(new Write.Single(TypoInterval.put))}::interval, ${fromWrite(unsaved.json)(new Write.Single(TypoJson.put))}::json, ${fromWrite(unsaved.jsonb)(new Write.Single(TypoJsonb.put))}::jsonb, ${fromWrite(unsaved.line)(new Write.Single(TypoLine.put))}::line, ${fromWrite(unsaved.lseg)(new Write.Single(TypoLineSegment.put))}::lseg, ${fromWrite(unsaved.money)(new Write.Single(TypoMoney.put))}::money, ${fromWrite(unsaved.mydomain)(new Write.Single(Mydomain.put))}::text, ${fromWrite(unsaved.myenum)(new Write.Single(Myenum.put))}::public.myenum, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}::name, ${fromWrite(unsaved.numeric)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.path)(new Write.Single(TypoPath.put))}::path, ${fromWrite(unsaved.point)(new Write.Single(TypoPoint.put))}::point, ${fromWrite(unsaved.polygon)(new Write.Single(TypoPolygon.put))}::polygon, ${fromWrite(unsaved.text)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.time)(new Write.Single(TypoLocalTime.put))}::time, ${fromWrite(unsaved.timestamp)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.timestampz)(new Write.Single(TypoInstant.put))}::timestamptz, ${fromWrite(unsaved.timez)(new Write.Single(TypoOffsetTime.put))}::timetz, ${fromWrite(unsaved.uuid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.varchar)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.vector)(new Write.Single(TypoVector.put))}::vector, ${fromWrite(unsaved.xml)(new Write.Single(TypoXml.put))}::xml, ${fromWrite(unsaved.boxes)(new Write.Single(TypoBox.arrayPut))}::box[], ${fromWrite(unsaved.bpchares)(new Write.Single(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.chares)(new Write.Single(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.circlees)(new Write.Single(TypoCircle.arrayPut))}::circle[], ${fromWrite(unsaved.datees)(new Write.Single(TypoLocalDate.arrayPut))}::date[], ${fromWrite(unsaved.float4es)(new Write.Single(adventureworks.FloatArrayMeta.put))}::float4[], ${fromWrite(unsaved.float8es)(new Write.Single(adventureworks.DoubleArrayMeta.put))}::float8[], ${fromWrite(unsaved.inetes)(new Write.Single(TypoInet.arrayPut))}::inet[], ${fromWrite(unsaved.int2es)(new Write.Single(TypoShort.arrayPut))}::int2[], ${fromWrite(unsaved.int2vectores)(new Write.Single(TypoInt2Vector.arrayPut))}::int2vector[], ${fromWrite(unsaved.int4es)(new Write.Single(adventureworks.IntegerArrayMeta.put))}::int4[], ${fromWrite(unsaved.int8es)(new Write.Single(adventureworks.LongArrayMeta.put))}::int8[], ${fromWrite(unsaved.intervales)(new Write.Single(TypoInterval.arrayPut))}::interval[], ${fromWrite(unsaved.jsones)(new Write.Single(TypoJson.arrayPut))}::json[], ${fromWrite(unsaved.jsonbes)(new Write.Single(TypoJsonb.arrayPut))}::jsonb[], ${fromWrite(unsaved.linees)(new Write.Single(TypoLine.arrayPut))}::line[], ${fromWrite(unsaved.lseges)(new Write.Single(TypoLineSegment.arrayPut))}::lseg[], ${fromWrite(unsaved.moneyes)(new Write.Single(TypoMoney.arrayPut))}::money[], ${fromWrite(unsaved.mydomaines)(new Write.Single(Mydomain.arrayPut))}::mydomain[], ${fromWrite(unsaved.myenumes)(new Write.Single(Myenum.arrayPut))}::myenum[], ${fromWrite(unsaved.namees)(new Write.Single(adventureworks.StringArrayMeta.put))}::name[], ${fromWrite(unsaved.numerices)(new Write.Single(adventureworks.BigDecimalMeta.put))}::numeric[], ${fromWrite(unsaved.pathes)(new Write.Single(TypoPath.arrayPut))}::path[], ${fromWrite(unsaved.pointes)(new Write.Single(TypoPoint.arrayPut))}::point[], ${fromWrite(unsaved.polygones)(new Write.Single(TypoPolygon.arrayPut))}::polygon[], ${fromWrite(unsaved.textes)(new Write.Single(adventureworks.StringArrayMeta.put))}::text[], ${fromWrite(unsaved.timees)(new Write.Single(TypoLocalTime.arrayPut))}::time[], ${fromWrite(unsaved.timestampes)(new Write.Single(TypoLocalDateTime.arrayPut))}::timestamp[], ${fromWrite(unsaved.timestampzes)(new Write.Single(TypoInstant.arrayPut))}::timestamptz[], ${fromWrite(unsaved.timezes)(new Write.Single(TypoOffsetTime.arrayPut))}::timetz[], ${fromWrite(unsaved.uuides)(new Write.Single(TypoUUID.arrayPut))}::uuid[], ${fromWrite(unsaved.varchares)(new Write.Single(adventureworks.StringArrayMeta.put))}::varchar[], ${fromWrite(unsaved.xmles)(new Write.Single(TypoXml.arrayPut))}::xml[]) returning "bool", "box", "bpchar", "bytea", "char", "circle", "date"::text, "float4", "float8", "hstore", "inet", "int2", "int2vector", "int4", "int8", "interval", "json", "jsonb", "line", "lseg", "money"::numeric, "mydomain", "myenum", "name", "numeric", "path", "point", "polygon", "text", "time"::text, "timestamp"::text, "timestampz"::text, "timez"::text, "uuid", "varchar", "vector"::float4[], "xml", "boxes", "bpchares", "chares", "circlees", "datees"::text[], "float4es", "float8es", "inetes", "int2es", "int2vectores", "int4es", "int8es", "intervales", "jsones", "jsonbes", "linees", "lseges", "moneyes"::numeric[], "mydomaines"::text[], "myenumes", "namees", "numerices", "pathes", "pointes", "polygones", "textes", "timees"::text[], "timestampes"::text[], "timestampzes"::text[], "timezes"::text[], "uuides", "varchares", "xmles" """.query(using PgtestRow.read).unique } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRow.scala index 1a2382de9b..8cda965c34 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtest/PgtestRow.scala @@ -31,7 +31,6 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.customtypes.TypoVector import adventureworks.customtypes.TypoXml -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write @@ -41,7 +40,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** Table: public.pgtest */ @@ -273,152 +271,151 @@ object PgtestRow { "xmles" -> Encoder.encodeIterable[TypoXml, Array](TypoXml.encoder, implicitly).apply(row.xmles) ) ) - implicit lazy val read: Read[PgtestRow] = new Read[PgtestRow]( - gets = List( - (Meta.BooleanMeta.get, Nullability.NoNulls), - (TypoBox.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoBytea.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoCircle.get, Nullability.NoNulls), - (TypoLocalDate.get, Nullability.NoNulls), - (Meta.FloatMeta.get, Nullability.NoNulls), - (Meta.DoubleMeta.get, Nullability.NoNulls), - (TypoHStore.get, Nullability.NoNulls), - (TypoInet.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoInt2Vector.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.LongMeta.get, Nullability.NoNulls), - (TypoInterval.get, Nullability.NoNulls), - (TypoJson.get, Nullability.NoNulls), - (TypoJsonb.get, Nullability.NoNulls), - (TypoLine.get, Nullability.NoNulls), - (TypoLineSegment.get, Nullability.NoNulls), - (TypoMoney.get, Nullability.NoNulls), - (Mydomain.get, Nullability.NoNulls), - (Myenum.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoPath.get, Nullability.NoNulls), - (TypoPoint.get, Nullability.NoNulls), - (TypoPolygon.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoInstant.get, Nullability.NoNulls), - (TypoOffsetTime.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoVector.get, Nullability.NoNulls), - (TypoXml.get, Nullability.NoNulls), - (TypoBox.arrayGet, Nullability.NoNulls), - (adventureworks.StringArrayMeta.get, Nullability.NoNulls), - (adventureworks.StringArrayMeta.get, Nullability.NoNulls), - (TypoCircle.arrayGet, Nullability.NoNulls), - (TypoLocalDate.arrayGet, Nullability.NoNulls), - (adventureworks.FloatArrayMeta.get, Nullability.NoNulls), - (adventureworks.DoubleArrayMeta.get, Nullability.NoNulls), - (TypoInet.arrayGet, Nullability.NoNulls), - (TypoShort.arrayGet, Nullability.NoNulls), - (TypoInt2Vector.arrayGet, Nullability.NoNulls), - (adventureworks.IntegerArrayMeta.get, Nullability.NoNulls), - (adventureworks.LongArrayMeta.get, Nullability.NoNulls), - (TypoInterval.arrayGet, Nullability.NoNulls), - (TypoJson.arrayGet, Nullability.NoNulls), - (TypoJsonb.arrayGet, Nullability.NoNulls), - (TypoLine.arrayGet, Nullability.NoNulls), - (TypoLineSegment.arrayGet, Nullability.NoNulls), - (TypoMoney.arrayGet, Nullability.NoNulls), - (Mydomain.arrayGet, Nullability.NoNulls), - (Myenum.arrayGet, Nullability.NoNulls), - (adventureworks.StringArrayMeta.get, Nullability.NoNulls), - (adventureworks.BigDecimalMeta.get, Nullability.NoNulls), - (TypoPath.arrayGet, Nullability.NoNulls), - (TypoPoint.arrayGet, Nullability.NoNulls), - (TypoPolygon.arrayGet, Nullability.NoNulls), - (adventureworks.StringArrayMeta.get, Nullability.NoNulls), - (TypoLocalTime.arrayGet, Nullability.NoNulls), - (TypoLocalDateTime.arrayGet, Nullability.NoNulls), - (TypoInstant.arrayGet, Nullability.NoNulls), - (TypoOffsetTime.arrayGet, Nullability.NoNulls), - (TypoUUID.arrayGet, Nullability.NoNulls), - (adventureworks.StringArrayMeta.get, Nullability.NoNulls), - (TypoXml.arrayGet, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PgtestRow( - bool = Meta.BooleanMeta.get.unsafeGetNonNullable(rs, i + 0), - box = TypoBox.get.unsafeGetNonNullable(rs, i + 1), - bpchar = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - bytea = TypoBytea.get.unsafeGetNonNullable(rs, i + 3), - char = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - circle = TypoCircle.get.unsafeGetNonNullable(rs, i + 5), - date = TypoLocalDate.get.unsafeGetNonNullable(rs, i + 6), - float4 = Meta.FloatMeta.get.unsafeGetNonNullable(rs, i + 7), - float8 = Meta.DoubleMeta.get.unsafeGetNonNullable(rs, i + 8), - hstore = TypoHStore.get.unsafeGetNonNullable(rs, i + 9), - inet = TypoInet.get.unsafeGetNonNullable(rs, i + 10), - int2 = TypoShort.get.unsafeGetNonNullable(rs, i + 11), - int2vector = TypoInt2Vector.get.unsafeGetNonNullable(rs, i + 12), - int4 = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 13), - int8 = Meta.LongMeta.get.unsafeGetNonNullable(rs, i + 14), - interval = TypoInterval.get.unsafeGetNonNullable(rs, i + 15), - json = TypoJson.get.unsafeGetNonNullable(rs, i + 16), - jsonb = TypoJsonb.get.unsafeGetNonNullable(rs, i + 17), - line = TypoLine.get.unsafeGetNonNullable(rs, i + 18), - lseg = TypoLineSegment.get.unsafeGetNonNullable(rs, i + 19), - money = TypoMoney.get.unsafeGetNonNullable(rs, i + 20), - mydomain = Mydomain.get.unsafeGetNonNullable(rs, i + 21), - myenum = Myenum.get.unsafeGetNonNullable(rs, i + 22), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 23), - numeric = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 24), - path = TypoPath.get.unsafeGetNonNullable(rs, i + 25), - point = TypoPoint.get.unsafeGetNonNullable(rs, i + 26), - polygon = TypoPolygon.get.unsafeGetNonNullable(rs, i + 27), - text = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 28), - time = TypoLocalTime.get.unsafeGetNonNullable(rs, i + 29), - timestamp = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 30), - timestampz = TypoInstant.get.unsafeGetNonNullable(rs, i + 31), - timez = TypoOffsetTime.get.unsafeGetNonNullable(rs, i + 32), - uuid = TypoUUID.get.unsafeGetNonNullable(rs, i + 33), - varchar = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 34), - vector = TypoVector.get.unsafeGetNonNullable(rs, i + 35), - xml = TypoXml.get.unsafeGetNonNullable(rs, i + 36), - boxes = TypoBox.arrayGet.unsafeGetNonNullable(rs, i + 37), - bpchares = adventureworks.StringArrayMeta.get.unsafeGetNonNullable(rs, i + 38), - chares = adventureworks.StringArrayMeta.get.unsafeGetNonNullable(rs, i + 39), - circlees = TypoCircle.arrayGet.unsafeGetNonNullable(rs, i + 40), - datees = TypoLocalDate.arrayGet.unsafeGetNonNullable(rs, i + 41), - float4es = adventureworks.FloatArrayMeta.get.unsafeGetNonNullable(rs, i + 42), - float8es = adventureworks.DoubleArrayMeta.get.unsafeGetNonNullable(rs, i + 43), - inetes = TypoInet.arrayGet.unsafeGetNonNullable(rs, i + 44), - int2es = TypoShort.arrayGet.unsafeGetNonNullable(rs, i + 45), - int2vectores = TypoInt2Vector.arrayGet.unsafeGetNonNullable(rs, i + 46), - int4es = adventureworks.IntegerArrayMeta.get.unsafeGetNonNullable(rs, i + 47), - int8es = adventureworks.LongArrayMeta.get.unsafeGetNonNullable(rs, i + 48), - intervales = TypoInterval.arrayGet.unsafeGetNonNullable(rs, i + 49), - jsones = TypoJson.arrayGet.unsafeGetNonNullable(rs, i + 50), - jsonbes = TypoJsonb.arrayGet.unsafeGetNonNullable(rs, i + 51), - linees = TypoLine.arrayGet.unsafeGetNonNullable(rs, i + 52), - lseges = TypoLineSegment.arrayGet.unsafeGetNonNullable(rs, i + 53), - moneyes = TypoMoney.arrayGet.unsafeGetNonNullable(rs, i + 54), - mydomaines = Mydomain.arrayGet.unsafeGetNonNullable(rs, i + 55), - myenumes = Myenum.arrayGet.unsafeGetNonNullable(rs, i + 56), - namees = adventureworks.StringArrayMeta.get.unsafeGetNonNullable(rs, i + 57), - numerices = adventureworks.BigDecimalMeta.get.unsafeGetNonNullable(rs, i + 58), - pathes = TypoPath.arrayGet.unsafeGetNonNullable(rs, i + 59), - pointes = TypoPoint.arrayGet.unsafeGetNonNullable(rs, i + 60), - polygones = TypoPolygon.arrayGet.unsafeGetNonNullable(rs, i + 61), - textes = adventureworks.StringArrayMeta.get.unsafeGetNonNullable(rs, i + 62), - timees = TypoLocalTime.arrayGet.unsafeGetNonNullable(rs, i + 63), - timestampes = TypoLocalDateTime.arrayGet.unsafeGetNonNullable(rs, i + 64), - timestampzes = TypoInstant.arrayGet.unsafeGetNonNullable(rs, i + 65), - timezes = TypoOffsetTime.arrayGet.unsafeGetNonNullable(rs, i + 66), - uuides = TypoUUID.arrayGet.unsafeGetNonNullable(rs, i + 67), - varchares = adventureworks.StringArrayMeta.get.unsafeGetNonNullable(rs, i + 68), - xmles = TypoXml.arrayGet.unsafeGetNonNullable(rs, i + 69) + implicit lazy val read: Read[PgtestRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.BooleanMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoBox.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoCircle.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.FloatMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.DoubleMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoHStore.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInet.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInt2Vector.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.LongMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInterval.get).asInstanceOf[Read[Any]], + new Read.Single(TypoJson.get).asInstanceOf[Read[Any]], + new Read.Single(TypoJsonb.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLine.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLineSegment.get).asInstanceOf[Read[Any]], + new Read.Single(TypoMoney.get).asInstanceOf[Read[Any]], + new Read.Single(Mydomain.get).asInstanceOf[Read[Any]], + new Read.Single(Myenum.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoPath.get).asInstanceOf[Read[Any]], + new Read.Single(TypoPoint.get).asInstanceOf[Read[Any]], + new Read.Single(TypoPolygon.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInstant.get).asInstanceOf[Read[Any]], + new Read.Single(TypoOffsetTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoVector.get).asInstanceOf[Read[Any]], + new Read.Single(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoBox.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoCircle.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDate.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.FloatArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.DoubleArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInet.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoInt2Vector.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.IntegerArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.LongArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInterval.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoJson.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoJsonb.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoLine.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoLineSegment.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoMoney.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(Mydomain.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(Myenum.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.BigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoPath.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoPoint.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoPolygon.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalTime.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoInstant.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoOffsetTime.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.arrayGet).asInstanceOf[Read[Any]], + new Read.Single(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoXml.arrayGet).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PgtestRow( + bool = arr(0).asInstanceOf[Boolean], + box = arr(1).asInstanceOf[TypoBox], + bpchar = arr(2).asInstanceOf[/* bpchar, max 3 chars */ String], + bytea = arr(3).asInstanceOf[TypoBytea], + char = arr(4).asInstanceOf[/* bpchar, max 1 chars */ String], + circle = arr(5).asInstanceOf[TypoCircle], + date = arr(6).asInstanceOf[TypoLocalDate], + float4 = arr(7).asInstanceOf[Float], + float8 = arr(8).asInstanceOf[Double], + hstore = arr(9).asInstanceOf[TypoHStore], + inet = arr(10).asInstanceOf[TypoInet], + int2 = arr(11).asInstanceOf[TypoShort], + int2vector = arr(12).asInstanceOf[TypoInt2Vector], + int4 = arr(13).asInstanceOf[Int], + int8 = arr(14).asInstanceOf[Long], + interval = arr(15).asInstanceOf[TypoInterval], + json = arr(16).asInstanceOf[TypoJson], + jsonb = arr(17).asInstanceOf[TypoJsonb], + line = arr(18).asInstanceOf[TypoLine], + lseg = arr(19).asInstanceOf[TypoLineSegment], + money = arr(20).asInstanceOf[TypoMoney], + mydomain = arr(21).asInstanceOf[Mydomain], + myenum = arr(22).asInstanceOf[Myenum], + name = arr(23).asInstanceOf[String], + numeric = arr(24).asInstanceOf[BigDecimal], + path = arr(25).asInstanceOf[TypoPath], + point = arr(26).asInstanceOf[TypoPoint], + polygon = arr(27).asInstanceOf[TypoPolygon], + text = arr(28).asInstanceOf[String], + time = arr(29).asInstanceOf[TypoLocalTime], + timestamp = arr(30).asInstanceOf[TypoLocalDateTime], + timestampz = arr(31).asInstanceOf[TypoInstant], + timez = arr(32).asInstanceOf[TypoOffsetTime], + uuid = arr(33).asInstanceOf[TypoUUID], + varchar = arr(34).asInstanceOf[String], + vector = arr(35).asInstanceOf[TypoVector], + xml = arr(36).asInstanceOf[TypoXml], + boxes = arr(37).asInstanceOf[Array[TypoBox]], + bpchares = arr(38).asInstanceOf[Array[/* bpchar */ String]], + chares = arr(39).asInstanceOf[Array[/* bpchar */ String]], + circlees = arr(40).asInstanceOf[Array[TypoCircle]], + datees = arr(41).asInstanceOf[Array[TypoLocalDate]], + float4es = arr(42).asInstanceOf[Array[Float]], + float8es = arr(43).asInstanceOf[Array[Double]], + inetes = arr(44).asInstanceOf[Array[TypoInet]], + int2es = arr(45).asInstanceOf[Array[TypoShort]], + int2vectores = arr(46).asInstanceOf[Array[TypoInt2Vector]], + int4es = arr(47).asInstanceOf[Array[Int]], + int8es = arr(48).asInstanceOf[Array[Long]], + intervales = arr(49).asInstanceOf[Array[TypoInterval]], + jsones = arr(50).asInstanceOf[Array[TypoJson]], + jsonbes = arr(51).asInstanceOf[Array[TypoJsonb]], + linees = arr(52).asInstanceOf[Array[TypoLine]], + lseges = arr(53).asInstanceOf[Array[TypoLineSegment]], + moneyes = arr(54).asInstanceOf[Array[TypoMoney]], + mydomaines = arr(55).asInstanceOf[Array[Mydomain]], + myenumes = arr(56).asInstanceOf[Array[Myenum]], + namees = arr(57).asInstanceOf[Array[String]], + numerices = arr(58).asInstanceOf[Array[BigDecimal]], + pathes = arr(59).asInstanceOf[Array[TypoPath]], + pointes = arr(60).asInstanceOf[Array[TypoPoint]], + polygones = arr(61).asInstanceOf[Array[TypoPolygon]], + textes = arr(62).asInstanceOf[Array[String]], + timees = arr(63).asInstanceOf[Array[TypoLocalTime]], + timestampes = arr(64).asInstanceOf[Array[TypoLocalDateTime]], + timestampzes = arr(65).asInstanceOf[Array[TypoInstant]], + timezes = arr(66).asInstanceOf[Array[TypoOffsetTime]], + uuides = arr(67).asInstanceOf[Array[TypoUUID]], + varchares = arr(68).asInstanceOf[Array[String]], + xmles = arr(69).asInstanceOf[Array[TypoXml]] ) - ) + } implicit lazy val text: Text[PgtestRow] = Text.instance[PgtestRow]{ (row, sb) => Text.booleanInstance.unsafeEncode(row.bool, sb) sb.append(Text.DELIMETER) @@ -560,221 +557,77 @@ object PgtestRow { sb.append(Text.DELIMETER) Text.iterableInstance[Array, TypoXml](TypoXml.text, implicitly).unsafeEncode(row.xmles, sb) } - implicit lazy val write: Write[PgtestRow] = new Write[PgtestRow]( - puts = List((Meta.BooleanMeta.put, Nullability.NoNulls), - (TypoBox.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoBytea.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoCircle.put, Nullability.NoNulls), - (TypoLocalDate.put, Nullability.NoNulls), - (Meta.FloatMeta.put, Nullability.NoNulls), - (Meta.DoubleMeta.put, Nullability.NoNulls), - (TypoHStore.put, Nullability.NoNulls), - (TypoInet.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoInt2Vector.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.LongMeta.put, Nullability.NoNulls), - (TypoInterval.put, Nullability.NoNulls), - (TypoJson.put, Nullability.NoNulls), - (TypoJsonb.put, Nullability.NoNulls), - (TypoLine.put, Nullability.NoNulls), - (TypoLineSegment.put, Nullability.NoNulls), - (TypoMoney.put, Nullability.NoNulls), - (Mydomain.put, Nullability.NoNulls), - (Myenum.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoPath.put, Nullability.NoNulls), - (TypoPoint.put, Nullability.NoNulls), - (TypoPolygon.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoLocalTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoInstant.put, Nullability.NoNulls), - (TypoOffsetTime.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoVector.put, Nullability.NoNulls), - (TypoXml.put, Nullability.NoNulls), - (TypoBox.arrayPut, Nullability.NoNulls), - (adventureworks.StringArrayMeta.put, Nullability.NoNulls), - (adventureworks.StringArrayMeta.put, Nullability.NoNulls), - (TypoCircle.arrayPut, Nullability.NoNulls), - (TypoLocalDate.arrayPut, Nullability.NoNulls), - (adventureworks.FloatArrayMeta.put, Nullability.NoNulls), - (adventureworks.DoubleArrayMeta.put, Nullability.NoNulls), - (TypoInet.arrayPut, Nullability.NoNulls), - (TypoShort.arrayPut, Nullability.NoNulls), - (TypoInt2Vector.arrayPut, Nullability.NoNulls), - (adventureworks.IntegerArrayMeta.put, Nullability.NoNulls), - (adventureworks.LongArrayMeta.put, Nullability.NoNulls), - (TypoInterval.arrayPut, Nullability.NoNulls), - (TypoJson.arrayPut, Nullability.NoNulls), - (TypoJsonb.arrayPut, Nullability.NoNulls), - (TypoLine.arrayPut, Nullability.NoNulls), - (TypoLineSegment.arrayPut, Nullability.NoNulls), - (TypoMoney.arrayPut, Nullability.NoNulls), - (Mydomain.arrayPut, Nullability.NoNulls), - (Myenum.arrayPut, Nullability.NoNulls), - (adventureworks.StringArrayMeta.put, Nullability.NoNulls), - (adventureworks.BigDecimalMeta.put, Nullability.NoNulls), - (TypoPath.arrayPut, Nullability.NoNulls), - (TypoPoint.arrayPut, Nullability.NoNulls), - (TypoPolygon.arrayPut, Nullability.NoNulls), - (adventureworks.StringArrayMeta.put, Nullability.NoNulls), - (TypoLocalTime.arrayPut, Nullability.NoNulls), - (TypoLocalDateTime.arrayPut, Nullability.NoNulls), - (TypoInstant.arrayPut, Nullability.NoNulls), - (TypoOffsetTime.arrayPut, Nullability.NoNulls), - (TypoUUID.arrayPut, Nullability.NoNulls), - (adventureworks.StringArrayMeta.put, Nullability.NoNulls), - (TypoXml.arrayPut, Nullability.NoNulls)), - toList = x => List(x.bool, x.box, x.bpchar, x.bytea, x.char, x.circle, x.date, x.float4, x.float8, x.hstore, x.inet, x.int2, x.int2vector, x.int4, x.int8, x.interval, x.json, x.jsonb, x.line, x.lseg, x.money, x.mydomain, x.myenum, x.name, x.numeric, x.path, x.point, x.polygon, x.text, x.time, x.timestamp, x.timestampz, x.timez, x.uuid, x.varchar, x.vector, x.xml, x.boxes, x.bpchares, x.chares, x.circlees, x.datees, x.float4es, x.float8es, x.inetes, x.int2es, x.int2vectores, x.int4es, x.int8es, x.intervales, x.jsones, x.jsonbes, x.linees, x.lseges, x.moneyes, x.mydomaines, x.myenumes, x.namees, x.numerices, x.pathes, x.pointes, x.polygones, x.textes, x.timees, x.timestampes, x.timestampzes, x.timezes, x.uuides, x.varchares, x.xmles), - unsafeSet = (rs, i, a) => { - Meta.BooleanMeta.put.unsafeSetNonNullable(rs, i + 0, a.bool) - TypoBox.put.unsafeSetNonNullable(rs, i + 1, a.box) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.bpchar) - TypoBytea.put.unsafeSetNonNullable(rs, i + 3, a.bytea) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 4, a.char) - TypoCircle.put.unsafeSetNonNullable(rs, i + 5, a.circle) - TypoLocalDate.put.unsafeSetNonNullable(rs, i + 6, a.date) - Meta.FloatMeta.put.unsafeSetNonNullable(rs, i + 7, a.float4) - Meta.DoubleMeta.put.unsafeSetNonNullable(rs, i + 8, a.float8) - TypoHStore.put.unsafeSetNonNullable(rs, i + 9, a.hstore) - TypoInet.put.unsafeSetNonNullable(rs, i + 10, a.inet) - TypoShort.put.unsafeSetNonNullable(rs, i + 11, a.int2) - TypoInt2Vector.put.unsafeSetNonNullable(rs, i + 12, a.int2vector) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 13, a.int4) - Meta.LongMeta.put.unsafeSetNonNullable(rs, i + 14, a.int8) - TypoInterval.put.unsafeSetNonNullable(rs, i + 15, a.interval) - TypoJson.put.unsafeSetNonNullable(rs, i + 16, a.json) - TypoJsonb.put.unsafeSetNonNullable(rs, i + 17, a.jsonb) - TypoLine.put.unsafeSetNonNullable(rs, i + 18, a.line) - TypoLineSegment.put.unsafeSetNonNullable(rs, i + 19, a.lseg) - TypoMoney.put.unsafeSetNonNullable(rs, i + 20, a.money) - Mydomain.put.unsafeSetNonNullable(rs, i + 21, a.mydomain) - Myenum.put.unsafeSetNonNullable(rs, i + 22, a.myenum) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 23, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 24, a.numeric) - TypoPath.put.unsafeSetNonNullable(rs, i + 25, a.path) - TypoPoint.put.unsafeSetNonNullable(rs, i + 26, a.point) - TypoPolygon.put.unsafeSetNonNullable(rs, i + 27, a.polygon) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 28, a.text) - TypoLocalTime.put.unsafeSetNonNullable(rs, i + 29, a.time) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 30, a.timestamp) - TypoInstant.put.unsafeSetNonNullable(rs, i + 31, a.timestampz) - TypoOffsetTime.put.unsafeSetNonNullable(rs, i + 32, a.timez) - TypoUUID.put.unsafeSetNonNullable(rs, i + 33, a.uuid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 34, a.varchar) - TypoVector.put.unsafeSetNonNullable(rs, i + 35, a.vector) - TypoXml.put.unsafeSetNonNullable(rs, i + 36, a.xml) - TypoBox.arrayPut.unsafeSetNonNullable(rs, i + 37, a.boxes) - adventureworks.StringArrayMeta.put.unsafeSetNonNullable(rs, i + 38, a.bpchares) - adventureworks.StringArrayMeta.put.unsafeSetNonNullable(rs, i + 39, a.chares) - TypoCircle.arrayPut.unsafeSetNonNullable(rs, i + 40, a.circlees) - TypoLocalDate.arrayPut.unsafeSetNonNullable(rs, i + 41, a.datees) - adventureworks.FloatArrayMeta.put.unsafeSetNonNullable(rs, i + 42, a.float4es) - adventureworks.DoubleArrayMeta.put.unsafeSetNonNullable(rs, i + 43, a.float8es) - TypoInet.arrayPut.unsafeSetNonNullable(rs, i + 44, a.inetes) - TypoShort.arrayPut.unsafeSetNonNullable(rs, i + 45, a.int2es) - TypoInt2Vector.arrayPut.unsafeSetNonNullable(rs, i + 46, a.int2vectores) - adventureworks.IntegerArrayMeta.put.unsafeSetNonNullable(rs, i + 47, a.int4es) - adventureworks.LongArrayMeta.put.unsafeSetNonNullable(rs, i + 48, a.int8es) - TypoInterval.arrayPut.unsafeSetNonNullable(rs, i + 49, a.intervales) - TypoJson.arrayPut.unsafeSetNonNullable(rs, i + 50, a.jsones) - TypoJsonb.arrayPut.unsafeSetNonNullable(rs, i + 51, a.jsonbes) - TypoLine.arrayPut.unsafeSetNonNullable(rs, i + 52, a.linees) - TypoLineSegment.arrayPut.unsafeSetNonNullable(rs, i + 53, a.lseges) - TypoMoney.arrayPut.unsafeSetNonNullable(rs, i + 54, a.moneyes) - Mydomain.arrayPut.unsafeSetNonNullable(rs, i + 55, a.mydomaines) - Myenum.arrayPut.unsafeSetNonNullable(rs, i + 56, a.myenumes) - adventureworks.StringArrayMeta.put.unsafeSetNonNullable(rs, i + 57, a.namees) - adventureworks.BigDecimalMeta.put.unsafeSetNonNullable(rs, i + 58, a.numerices) - TypoPath.arrayPut.unsafeSetNonNullable(rs, i + 59, a.pathes) - TypoPoint.arrayPut.unsafeSetNonNullable(rs, i + 60, a.pointes) - TypoPolygon.arrayPut.unsafeSetNonNullable(rs, i + 61, a.polygones) - adventureworks.StringArrayMeta.put.unsafeSetNonNullable(rs, i + 62, a.textes) - TypoLocalTime.arrayPut.unsafeSetNonNullable(rs, i + 63, a.timees) - TypoLocalDateTime.arrayPut.unsafeSetNonNullable(rs, i + 64, a.timestampes) - TypoInstant.arrayPut.unsafeSetNonNullable(rs, i + 65, a.timestampzes) - TypoOffsetTime.arrayPut.unsafeSetNonNullable(rs, i + 66, a.timezes) - TypoUUID.arrayPut.unsafeSetNonNullable(rs, i + 67, a.uuides) - adventureworks.StringArrayMeta.put.unsafeSetNonNullable(rs, i + 68, a.varchares) - TypoXml.arrayPut.unsafeSetNonNullable(rs, i + 69, a.xmles) - }, - unsafeUpdate = (ps, i, a) => { - Meta.BooleanMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.bool) - TypoBox.put.unsafeUpdateNonNullable(ps, i + 1, a.box) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.bpchar) - TypoBytea.put.unsafeUpdateNonNullable(ps, i + 3, a.bytea) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.char) - TypoCircle.put.unsafeUpdateNonNullable(ps, i + 5, a.circle) - TypoLocalDate.put.unsafeUpdateNonNullable(ps, i + 6, a.date) - Meta.FloatMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.float4) - Meta.DoubleMeta.put.unsafeUpdateNonNullable(ps, i + 8, a.float8) - TypoHStore.put.unsafeUpdateNonNullable(ps, i + 9, a.hstore) - TypoInet.put.unsafeUpdateNonNullable(ps, i + 10, a.inet) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 11, a.int2) - TypoInt2Vector.put.unsafeUpdateNonNullable(ps, i + 12, a.int2vector) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 13, a.int4) - Meta.LongMeta.put.unsafeUpdateNonNullable(ps, i + 14, a.int8) - TypoInterval.put.unsafeUpdateNonNullable(ps, i + 15, a.interval) - TypoJson.put.unsafeUpdateNonNullable(ps, i + 16, a.json) - TypoJsonb.put.unsafeUpdateNonNullable(ps, i + 17, a.jsonb) - TypoLine.put.unsafeUpdateNonNullable(ps, i + 18, a.line) - TypoLineSegment.put.unsafeUpdateNonNullable(ps, i + 19, a.lseg) - TypoMoney.put.unsafeUpdateNonNullable(ps, i + 20, a.money) - Mydomain.put.unsafeUpdateNonNullable(ps, i + 21, a.mydomain) - Myenum.put.unsafeUpdateNonNullable(ps, i + 22, a.myenum) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 23, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 24, a.numeric) - TypoPath.put.unsafeUpdateNonNullable(ps, i + 25, a.path) - TypoPoint.put.unsafeUpdateNonNullable(ps, i + 26, a.point) - TypoPolygon.put.unsafeUpdateNonNullable(ps, i + 27, a.polygon) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 28, a.text) - TypoLocalTime.put.unsafeUpdateNonNullable(ps, i + 29, a.time) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 30, a.timestamp) - TypoInstant.put.unsafeUpdateNonNullable(ps, i + 31, a.timestampz) - TypoOffsetTime.put.unsafeUpdateNonNullable(ps, i + 32, a.timez) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 33, a.uuid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 34, a.varchar) - TypoVector.put.unsafeUpdateNonNullable(ps, i + 35, a.vector) - TypoXml.put.unsafeUpdateNonNullable(ps, i + 36, a.xml) - TypoBox.arrayPut.unsafeUpdateNonNullable(ps, i + 37, a.boxes) - adventureworks.StringArrayMeta.put.unsafeUpdateNonNullable(ps, i + 38, a.bpchares) - adventureworks.StringArrayMeta.put.unsafeUpdateNonNullable(ps, i + 39, a.chares) - TypoCircle.arrayPut.unsafeUpdateNonNullable(ps, i + 40, a.circlees) - TypoLocalDate.arrayPut.unsafeUpdateNonNullable(ps, i + 41, a.datees) - adventureworks.FloatArrayMeta.put.unsafeUpdateNonNullable(ps, i + 42, a.float4es) - adventureworks.DoubleArrayMeta.put.unsafeUpdateNonNullable(ps, i + 43, a.float8es) - TypoInet.arrayPut.unsafeUpdateNonNullable(ps, i + 44, a.inetes) - TypoShort.arrayPut.unsafeUpdateNonNullable(ps, i + 45, a.int2es) - TypoInt2Vector.arrayPut.unsafeUpdateNonNullable(ps, i + 46, a.int2vectores) - adventureworks.IntegerArrayMeta.put.unsafeUpdateNonNullable(ps, i + 47, a.int4es) - adventureworks.LongArrayMeta.put.unsafeUpdateNonNullable(ps, i + 48, a.int8es) - TypoInterval.arrayPut.unsafeUpdateNonNullable(ps, i + 49, a.intervales) - TypoJson.arrayPut.unsafeUpdateNonNullable(ps, i + 50, a.jsones) - TypoJsonb.arrayPut.unsafeUpdateNonNullable(ps, i + 51, a.jsonbes) - TypoLine.arrayPut.unsafeUpdateNonNullable(ps, i + 52, a.linees) - TypoLineSegment.arrayPut.unsafeUpdateNonNullable(ps, i + 53, a.lseges) - TypoMoney.arrayPut.unsafeUpdateNonNullable(ps, i + 54, a.moneyes) - Mydomain.arrayPut.unsafeUpdateNonNullable(ps, i + 55, a.mydomaines) - Myenum.arrayPut.unsafeUpdateNonNullable(ps, i + 56, a.myenumes) - adventureworks.StringArrayMeta.put.unsafeUpdateNonNullable(ps, i + 57, a.namees) - adventureworks.BigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 58, a.numerices) - TypoPath.arrayPut.unsafeUpdateNonNullable(ps, i + 59, a.pathes) - TypoPoint.arrayPut.unsafeUpdateNonNullable(ps, i + 60, a.pointes) - TypoPolygon.arrayPut.unsafeUpdateNonNullable(ps, i + 61, a.polygones) - adventureworks.StringArrayMeta.put.unsafeUpdateNonNullable(ps, i + 62, a.textes) - TypoLocalTime.arrayPut.unsafeUpdateNonNullable(ps, i + 63, a.timees) - TypoLocalDateTime.arrayPut.unsafeUpdateNonNullable(ps, i + 64, a.timestampes) - TypoInstant.arrayPut.unsafeUpdateNonNullable(ps, i + 65, a.timestampzes) - TypoOffsetTime.arrayPut.unsafeUpdateNonNullable(ps, i + 66, a.timezes) - TypoUUID.arrayPut.unsafeUpdateNonNullable(ps, i + 67, a.uuides) - adventureworks.StringArrayMeta.put.unsafeUpdateNonNullable(ps, i + 68, a.varchares) - TypoXml.arrayPut.unsafeUpdateNonNullable(ps, i + 69, a.xmles) - } + implicit lazy val write: Write[PgtestRow] = new Write.Composite[PgtestRow]( + List(new Write.Single(Meta.BooleanMeta.put), + new Write.Single(TypoBox.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoBytea.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoCircle.put), + new Write.Single(TypoLocalDate.put), + new Write.Single(Meta.FloatMeta.put), + new Write.Single(Meta.DoubleMeta.put), + new Write.Single(TypoHStore.put), + new Write.Single(TypoInet.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoInt2Vector.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.LongMeta.put), + new Write.Single(TypoInterval.put), + new Write.Single(TypoJson.put), + new Write.Single(TypoJsonb.put), + new Write.Single(TypoLine.put), + new Write.Single(TypoLineSegment.put), + new Write.Single(TypoMoney.put), + new Write.Single(Mydomain.put), + new Write.Single(Myenum.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoPath.put), + new Write.Single(TypoPoint.put), + new Write.Single(TypoPolygon.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoLocalTime.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoInstant.put), + new Write.Single(TypoOffsetTime.put), + new Write.Single(TypoUUID.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoVector.put), + new Write.Single(TypoXml.put), + new Write.Single(TypoBox.arrayPut), + new Write.Single(adventureworks.StringArrayMeta.put), + new Write.Single(adventureworks.StringArrayMeta.put), + new Write.Single(TypoCircle.arrayPut), + new Write.Single(TypoLocalDate.arrayPut), + new Write.Single(adventureworks.FloatArrayMeta.put), + new Write.Single(adventureworks.DoubleArrayMeta.put), + new Write.Single(TypoInet.arrayPut), + new Write.Single(TypoShort.arrayPut), + new Write.Single(TypoInt2Vector.arrayPut), + new Write.Single(adventureworks.IntegerArrayMeta.put), + new Write.Single(adventureworks.LongArrayMeta.put), + new Write.Single(TypoInterval.arrayPut), + new Write.Single(TypoJson.arrayPut), + new Write.Single(TypoJsonb.arrayPut), + new Write.Single(TypoLine.arrayPut), + new Write.Single(TypoLineSegment.arrayPut), + new Write.Single(TypoMoney.arrayPut), + new Write.Single(Mydomain.arrayPut), + new Write.Single(Myenum.arrayPut), + new Write.Single(adventureworks.StringArrayMeta.put), + new Write.Single(adventureworks.BigDecimalMeta.put), + new Write.Single(TypoPath.arrayPut), + new Write.Single(TypoPoint.arrayPut), + new Write.Single(TypoPolygon.arrayPut), + new Write.Single(adventureworks.StringArrayMeta.put), + new Write.Single(TypoLocalTime.arrayPut), + new Write.Single(TypoLocalDateTime.arrayPut), + new Write.Single(TypoInstant.arrayPut), + new Write.Single(TypoOffsetTime.arrayPut), + new Write.Single(TypoUUID.arrayPut), + new Write.Single(adventureworks.StringArrayMeta.put), + new Write.Single(TypoXml.arrayPut)), + a => List(a.bool, a.box, a.bpchar, a.bytea, a.char, a.circle, a.date, a.float4, a.float8, a.hstore, a.inet, a.int2, a.int2vector, a.int4, a.int8, a.interval, a.json, a.jsonb, a.line, a.lseg, a.money, a.mydomain, a.myenum, a.name, a.numeric, a.path, a.point, a.polygon, a.text, a.time, a.timestamp, a.timestampz, a.timez, a.uuid, a.varchar, a.vector, a.xml, a.boxes, a.bpchares, a.chares, a.circlees, a.datees, a.float4es, a.float8es, a.inetes, a.int2es, a.int2vectores, a.int4es, a.int8es, a.intervales, a.jsones, a.jsonbes, a.linees, a.lseges, a.moneyes, a.mydomaines, a.myenumes, a.namees, a.numerices, a.pathes, a.pointes, a.polygones, a.textes, a.timees, a.timestampes, a.timestampzes, a.timezes, a.uuides, a.varchares, a.xmles) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRepoImpl.scala index bc6494e332..cd1e11efc5 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRepoImpl.scala @@ -49,7 +49,7 @@ class PgtestnullRepoImpl extends PgtestnullRepo { } override def insert(unsaved: PgtestnullRow): ConnectionIO[PgtestnullRow] = { sql"""insert into "public"."pgtestnull"("bool", "box", "bpchar", "bytea", "char", "circle", "date", "float4", "float8", "hstore", "inet", "int2", "int2vector", "int4", "int8", "interval", "json", "jsonb", "line", "lseg", "money", "mydomain", "myenum", "name", "numeric", "path", "point", "polygon", "text", "time", "timestamp", "timestampz", "timez", "uuid", "varchar", "vector", "xml", "boxes", "bpchares", "chares", "circlees", "datees", "float4es", "float8es", "inetes", "int2es", "int2vectores", "int4es", "int8es", "intervales", "jsones", "jsonbes", "linees", "lseges", "moneyes", "mydomaines", "myenumes", "namees", "numerices", "pathes", "pointes", "polygones", "textes", "timees", "timestampes", "timestampzes", "timezes", "uuides", "varchares", "xmles") - values (${fromWrite(unsaved.bool)(Write.fromPutOption(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.box)(Write.fromPutOption(TypoBox.put))}::box, ${fromWrite(unsaved.bpchar)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.bytea)(Write.fromPutOption(TypoBytea.put))}::bytea, ${fromWrite(unsaved.char)(Write.fromPutOption(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.circle)(Write.fromPutOption(TypoCircle.put))}::circle, ${fromWrite(unsaved.date)(Write.fromPutOption(TypoLocalDate.put))}::date, ${fromWrite(unsaved.float4)(Write.fromPutOption(Meta.FloatMeta.put))}::float4, ${fromWrite(unsaved.float8)(Write.fromPutOption(Meta.DoubleMeta.put))}::float8, ${fromWrite(unsaved.hstore)(Write.fromPutOption(TypoHStore.put))}::hstore, ${fromWrite(unsaved.inet)(Write.fromPutOption(TypoInet.put))}::inet, ${fromWrite(unsaved.int2)(Write.fromPutOption(TypoShort.put))}::int2, ${fromWrite(unsaved.int2vector)(Write.fromPutOption(TypoInt2Vector.put))}::int2vector, ${fromWrite(unsaved.int4)(Write.fromPutOption(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.int8)(Write.fromPutOption(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.interval)(Write.fromPutOption(TypoInterval.put))}::interval, ${fromWrite(unsaved.json)(Write.fromPutOption(TypoJson.put))}::json, ${fromWrite(unsaved.jsonb)(Write.fromPutOption(TypoJsonb.put))}::jsonb, ${fromWrite(unsaved.line)(Write.fromPutOption(TypoLine.put))}::line, ${fromWrite(unsaved.lseg)(Write.fromPutOption(TypoLineSegment.put))}::lseg, ${fromWrite(unsaved.money)(Write.fromPutOption(TypoMoney.put))}::money, ${fromWrite(unsaved.mydomain)(Write.fromPutOption(Mydomain.put))}::text, ${fromWrite(unsaved.myenum)(Write.fromPutOption(Myenum.put))}::public.myenum, ${fromWrite(unsaved.name)(Write.fromPutOption(Meta.StringMeta.put))}::name, ${fromWrite(unsaved.numeric)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.path)(Write.fromPutOption(TypoPath.put))}::path, ${fromWrite(unsaved.point)(Write.fromPutOption(TypoPoint.put))}::point, ${fromWrite(unsaved.polygon)(Write.fromPutOption(TypoPolygon.put))}::polygon, ${fromWrite(unsaved.text)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.time)(Write.fromPutOption(TypoLocalTime.put))}::time, ${fromWrite(unsaved.timestamp)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.timestampz)(Write.fromPutOption(TypoInstant.put))}::timestamptz, ${fromWrite(unsaved.timez)(Write.fromPutOption(TypoOffsetTime.put))}::timetz, ${fromWrite(unsaved.uuid)(Write.fromPutOption(TypoUUID.put))}::uuid, ${fromWrite(unsaved.varchar)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.vector)(Write.fromPutOption(TypoVector.put))}::vector, ${fromWrite(unsaved.xml)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.boxes)(Write.fromPutOption(TypoBox.arrayPut))}::box[], ${fromWrite(unsaved.bpchares)(Write.fromPutOption(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.chares)(Write.fromPutOption(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.circlees)(Write.fromPutOption(TypoCircle.arrayPut))}::circle[], ${fromWrite(unsaved.datees)(Write.fromPutOption(TypoLocalDate.arrayPut))}::date[], ${fromWrite(unsaved.float4es)(Write.fromPutOption(adventureworks.FloatArrayMeta.put))}::float4[], ${fromWrite(unsaved.float8es)(Write.fromPutOption(adventureworks.DoubleArrayMeta.put))}::float8[], ${fromWrite(unsaved.inetes)(Write.fromPutOption(TypoInet.arrayPut))}::inet[], ${fromWrite(unsaved.int2es)(Write.fromPutOption(TypoShort.arrayPut))}::int2[], ${fromWrite(unsaved.int2vectores)(Write.fromPutOption(TypoInt2Vector.arrayPut))}::int2vector[], ${fromWrite(unsaved.int4es)(Write.fromPutOption(adventureworks.IntegerArrayMeta.put))}::int4[], ${fromWrite(unsaved.int8es)(Write.fromPutOption(adventureworks.LongArrayMeta.put))}::int8[], ${fromWrite(unsaved.intervales)(Write.fromPutOption(TypoInterval.arrayPut))}::interval[], ${fromWrite(unsaved.jsones)(Write.fromPutOption(TypoJson.arrayPut))}::json[], ${fromWrite(unsaved.jsonbes)(Write.fromPutOption(TypoJsonb.arrayPut))}::jsonb[], ${fromWrite(unsaved.linees)(Write.fromPutOption(TypoLine.arrayPut))}::line[], ${fromWrite(unsaved.lseges)(Write.fromPutOption(TypoLineSegment.arrayPut))}::lseg[], ${fromWrite(unsaved.moneyes)(Write.fromPutOption(TypoMoney.arrayPut))}::money[], ${fromWrite(unsaved.mydomaines)(Write.fromPutOption(Mydomain.arrayPut))}::mydomain[], ${fromWrite(unsaved.myenumes)(Write.fromPutOption(Myenum.arrayPut))}::myenum[], ${fromWrite(unsaved.namees)(Write.fromPutOption(adventureworks.StringArrayMeta.put))}::name[], ${fromWrite(unsaved.numerices)(Write.fromPutOption(adventureworks.BigDecimalMeta.put))}::numeric[], ${fromWrite(unsaved.pathes)(Write.fromPutOption(TypoPath.arrayPut))}::path[], ${fromWrite(unsaved.pointes)(Write.fromPutOption(TypoPoint.arrayPut))}::point[], ${fromWrite(unsaved.polygones)(Write.fromPutOption(TypoPolygon.arrayPut))}::polygon[], ${fromWrite(unsaved.textes)(Write.fromPutOption(adventureworks.StringArrayMeta.put))}::text[], ${fromWrite(unsaved.timees)(Write.fromPutOption(TypoLocalTime.arrayPut))}::time[], ${fromWrite(unsaved.timestampes)(Write.fromPutOption(TypoLocalDateTime.arrayPut))}::timestamp[], ${fromWrite(unsaved.timestampzes)(Write.fromPutOption(TypoInstant.arrayPut))}::timestamptz[], ${fromWrite(unsaved.timezes)(Write.fromPutOption(TypoOffsetTime.arrayPut))}::timetz[], ${fromWrite(unsaved.uuides)(Write.fromPutOption(TypoUUID.arrayPut))}::uuid[], ${fromWrite(unsaved.varchares)(Write.fromPutOption(adventureworks.StringArrayMeta.put))}::varchar[], ${fromWrite(unsaved.xmles)(Write.fromPutOption(TypoXml.arrayPut))}::xml[]) + values (${fromWrite(unsaved.bool)(new Write.SingleOpt(Meta.BooleanMeta.put))}, ${fromWrite(unsaved.box)(new Write.SingleOpt(TypoBox.put))}::box, ${fromWrite(unsaved.bpchar)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.bytea)(new Write.SingleOpt(TypoBytea.put))}::bytea, ${fromWrite(unsaved.char)(new Write.SingleOpt(Meta.StringMeta.put))}::bpchar, ${fromWrite(unsaved.circle)(new Write.SingleOpt(TypoCircle.put))}::circle, ${fromWrite(unsaved.date)(new Write.SingleOpt(TypoLocalDate.put))}::date, ${fromWrite(unsaved.float4)(new Write.SingleOpt(Meta.FloatMeta.put))}::float4, ${fromWrite(unsaved.float8)(new Write.SingleOpt(Meta.DoubleMeta.put))}::float8, ${fromWrite(unsaved.hstore)(new Write.SingleOpt(TypoHStore.put))}::hstore, ${fromWrite(unsaved.inet)(new Write.SingleOpt(TypoInet.put))}::inet, ${fromWrite(unsaved.int2)(new Write.SingleOpt(TypoShort.put))}::int2, ${fromWrite(unsaved.int2vector)(new Write.SingleOpt(TypoInt2Vector.put))}::int2vector, ${fromWrite(unsaved.int4)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.int8)(new Write.SingleOpt(Meta.LongMeta.put))}::int8, ${fromWrite(unsaved.interval)(new Write.SingleOpt(TypoInterval.put))}::interval, ${fromWrite(unsaved.json)(new Write.SingleOpt(TypoJson.put))}::json, ${fromWrite(unsaved.jsonb)(new Write.SingleOpt(TypoJsonb.put))}::jsonb, ${fromWrite(unsaved.line)(new Write.SingleOpt(TypoLine.put))}::line, ${fromWrite(unsaved.lseg)(new Write.SingleOpt(TypoLineSegment.put))}::lseg, ${fromWrite(unsaved.money)(new Write.SingleOpt(TypoMoney.put))}::money, ${fromWrite(unsaved.mydomain)(new Write.SingleOpt(Mydomain.put))}::text, ${fromWrite(unsaved.myenum)(new Write.SingleOpt(Myenum.put))}::public.myenum, ${fromWrite(unsaved.name)(new Write.SingleOpt(Meta.StringMeta.put))}::name, ${fromWrite(unsaved.numeric)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.path)(new Write.SingleOpt(TypoPath.put))}::path, ${fromWrite(unsaved.point)(new Write.SingleOpt(TypoPoint.put))}::point, ${fromWrite(unsaved.polygon)(new Write.SingleOpt(TypoPolygon.put))}::polygon, ${fromWrite(unsaved.text)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.time)(new Write.SingleOpt(TypoLocalTime.put))}::time, ${fromWrite(unsaved.timestamp)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.timestampz)(new Write.SingleOpt(TypoInstant.put))}::timestamptz, ${fromWrite(unsaved.timez)(new Write.SingleOpt(TypoOffsetTime.put))}::timetz, ${fromWrite(unsaved.uuid)(new Write.SingleOpt(TypoUUID.put))}::uuid, ${fromWrite(unsaved.varchar)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.vector)(new Write.SingleOpt(TypoVector.put))}::vector, ${fromWrite(unsaved.xml)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.boxes)(new Write.SingleOpt(TypoBox.arrayPut))}::box[], ${fromWrite(unsaved.bpchares)(new Write.SingleOpt(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.chares)(new Write.SingleOpt(adventureworks.StringArrayMeta.put))}::bpchar[], ${fromWrite(unsaved.circlees)(new Write.SingleOpt(TypoCircle.arrayPut))}::circle[], ${fromWrite(unsaved.datees)(new Write.SingleOpt(TypoLocalDate.arrayPut))}::date[], ${fromWrite(unsaved.float4es)(new Write.SingleOpt(adventureworks.FloatArrayMeta.put))}::float4[], ${fromWrite(unsaved.float8es)(new Write.SingleOpt(adventureworks.DoubleArrayMeta.put))}::float8[], ${fromWrite(unsaved.inetes)(new Write.SingleOpt(TypoInet.arrayPut))}::inet[], ${fromWrite(unsaved.int2es)(new Write.SingleOpt(TypoShort.arrayPut))}::int2[], ${fromWrite(unsaved.int2vectores)(new Write.SingleOpt(TypoInt2Vector.arrayPut))}::int2vector[], ${fromWrite(unsaved.int4es)(new Write.SingleOpt(adventureworks.IntegerArrayMeta.put))}::int4[], ${fromWrite(unsaved.int8es)(new Write.SingleOpt(adventureworks.LongArrayMeta.put))}::int8[], ${fromWrite(unsaved.intervales)(new Write.SingleOpt(TypoInterval.arrayPut))}::interval[], ${fromWrite(unsaved.jsones)(new Write.SingleOpt(TypoJson.arrayPut))}::json[], ${fromWrite(unsaved.jsonbes)(new Write.SingleOpt(TypoJsonb.arrayPut))}::jsonb[], ${fromWrite(unsaved.linees)(new Write.SingleOpt(TypoLine.arrayPut))}::line[], ${fromWrite(unsaved.lseges)(new Write.SingleOpt(TypoLineSegment.arrayPut))}::lseg[], ${fromWrite(unsaved.moneyes)(new Write.SingleOpt(TypoMoney.arrayPut))}::money[], ${fromWrite(unsaved.mydomaines)(new Write.SingleOpt(Mydomain.arrayPut))}::mydomain[], ${fromWrite(unsaved.myenumes)(new Write.SingleOpt(Myenum.arrayPut))}::myenum[], ${fromWrite(unsaved.namees)(new Write.SingleOpt(adventureworks.StringArrayMeta.put))}::name[], ${fromWrite(unsaved.numerices)(new Write.SingleOpt(adventureworks.BigDecimalMeta.put))}::numeric[], ${fromWrite(unsaved.pathes)(new Write.SingleOpt(TypoPath.arrayPut))}::path[], ${fromWrite(unsaved.pointes)(new Write.SingleOpt(TypoPoint.arrayPut))}::point[], ${fromWrite(unsaved.polygones)(new Write.SingleOpt(TypoPolygon.arrayPut))}::polygon[], ${fromWrite(unsaved.textes)(new Write.SingleOpt(adventureworks.StringArrayMeta.put))}::text[], ${fromWrite(unsaved.timees)(new Write.SingleOpt(TypoLocalTime.arrayPut))}::time[], ${fromWrite(unsaved.timestampes)(new Write.SingleOpt(TypoLocalDateTime.arrayPut))}::timestamp[], ${fromWrite(unsaved.timestampzes)(new Write.SingleOpt(TypoInstant.arrayPut))}::timestamptz[], ${fromWrite(unsaved.timezes)(new Write.SingleOpt(TypoOffsetTime.arrayPut))}::timetz[], ${fromWrite(unsaved.uuides)(new Write.SingleOpt(TypoUUID.arrayPut))}::uuid[], ${fromWrite(unsaved.varchares)(new Write.SingleOpt(adventureworks.StringArrayMeta.put))}::varchar[], ${fromWrite(unsaved.xmles)(new Write.SingleOpt(TypoXml.arrayPut))}::xml[]) returning "bool", "box", "bpchar", "bytea", "char", "circle", "date"::text, "float4", "float8", "hstore", "inet", "int2", "int2vector", "int4", "int8", "interval", "json", "jsonb", "line", "lseg", "money"::numeric, "mydomain", "myenum", "name", "numeric", "path", "point", "polygon", "text", "time"::text, "timestamp"::text, "timestampz"::text, "timez"::text, "uuid", "varchar", "vector"::float4[], "xml", "boxes", "bpchares", "chares", "circlees", "datees"::text[], "float4es", "float8es", "inetes", "int2es", "int2vectores", "int4es", "int8es", "intervales", "jsones", "jsonbes", "linees", "lseges", "moneyes"::numeric[], "mydomaines"::text[], "myenumes", "namees", "numerices", "pathes", "pointes", "polygones", "textes", "timees"::text[], "timestampes"::text[], "timestampzes"::text[], "timezes"::text[], "uuides", "varchares", "xmles" """.query(using PgtestnullRow.read).unique } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRow.scala index 0ca5e5d0a9..b2fd447274 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/pgtestnull/PgtestnullRow.scala @@ -31,7 +31,6 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.customtypes.TypoVector import adventureworks.customtypes.TypoXml -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write @@ -41,7 +40,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** Table: public.pgtestnull */ @@ -273,152 +271,151 @@ object PgtestnullRow { "xmles" -> Encoder.encodeOption(Encoder.encodeIterable[TypoXml, Array](TypoXml.encoder, implicitly)).apply(row.xmles) ) ) - implicit lazy val read: Read[PgtestnullRow] = new Read[PgtestnullRow]( - gets = List( - (Meta.BooleanMeta.get, Nullability.Nullable), - (TypoBox.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoBytea.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoCircle.get, Nullability.Nullable), - (TypoLocalDate.get, Nullability.Nullable), - (Meta.FloatMeta.get, Nullability.Nullable), - (Meta.DoubleMeta.get, Nullability.Nullable), - (TypoHStore.get, Nullability.Nullable), - (TypoInet.get, Nullability.Nullable), - (TypoShort.get, Nullability.Nullable), - (TypoInt2Vector.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.LongMeta.get, Nullability.Nullable), - (TypoInterval.get, Nullability.Nullable), - (TypoJson.get, Nullability.Nullable), - (TypoJsonb.get, Nullability.Nullable), - (TypoLine.get, Nullability.Nullable), - (TypoLineSegment.get, Nullability.Nullable), - (TypoMoney.get, Nullability.Nullable), - (Mydomain.get, Nullability.Nullable), - (Myenum.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (TypoPath.get, Nullability.Nullable), - (TypoPoint.get, Nullability.Nullable), - (TypoPolygon.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalTime.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoInstant.get, Nullability.Nullable), - (TypoOffsetTime.get, Nullability.Nullable), - (TypoUUID.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoVector.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoBox.arrayGet, Nullability.Nullable), - (adventureworks.StringArrayMeta.get, Nullability.Nullable), - (adventureworks.StringArrayMeta.get, Nullability.Nullable), - (TypoCircle.arrayGet, Nullability.Nullable), - (TypoLocalDate.arrayGet, Nullability.Nullable), - (adventureworks.FloatArrayMeta.get, Nullability.Nullable), - (adventureworks.DoubleArrayMeta.get, Nullability.Nullable), - (TypoInet.arrayGet, Nullability.Nullable), - (TypoShort.arrayGet, Nullability.Nullable), - (TypoInt2Vector.arrayGet, Nullability.Nullable), - (adventureworks.IntegerArrayMeta.get, Nullability.Nullable), - (adventureworks.LongArrayMeta.get, Nullability.Nullable), - (TypoInterval.arrayGet, Nullability.Nullable), - (TypoJson.arrayGet, Nullability.Nullable), - (TypoJsonb.arrayGet, Nullability.Nullable), - (TypoLine.arrayGet, Nullability.Nullable), - (TypoLineSegment.arrayGet, Nullability.Nullable), - (TypoMoney.arrayGet, Nullability.Nullable), - (Mydomain.arrayGet, Nullability.Nullable), - (Myenum.arrayGet, Nullability.Nullable), - (adventureworks.StringArrayMeta.get, Nullability.Nullable), - (adventureworks.BigDecimalMeta.get, Nullability.Nullable), - (TypoPath.arrayGet, Nullability.Nullable), - (TypoPoint.arrayGet, Nullability.Nullable), - (TypoPolygon.arrayGet, Nullability.Nullable), - (adventureworks.StringArrayMeta.get, Nullability.Nullable), - (TypoLocalTime.arrayGet, Nullability.Nullable), - (TypoLocalDateTime.arrayGet, Nullability.Nullable), - (TypoInstant.arrayGet, Nullability.Nullable), - (TypoOffsetTime.arrayGet, Nullability.Nullable), - (TypoUUID.arrayGet, Nullability.Nullable), - (adventureworks.StringArrayMeta.get, Nullability.Nullable), - (TypoXml.arrayGet, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => PgtestnullRow( - bool = Meta.BooleanMeta.get.unsafeGetNullable(rs, i + 0), - box = TypoBox.get.unsafeGetNullable(rs, i + 1), - bpchar = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - bytea = TypoBytea.get.unsafeGetNullable(rs, i + 3), - char = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - circle = TypoCircle.get.unsafeGetNullable(rs, i + 5), - date = TypoLocalDate.get.unsafeGetNullable(rs, i + 6), - float4 = Meta.FloatMeta.get.unsafeGetNullable(rs, i + 7), - float8 = Meta.DoubleMeta.get.unsafeGetNullable(rs, i + 8), - hstore = TypoHStore.get.unsafeGetNullable(rs, i + 9), - inet = TypoInet.get.unsafeGetNullable(rs, i + 10), - int2 = TypoShort.get.unsafeGetNullable(rs, i + 11), - int2vector = TypoInt2Vector.get.unsafeGetNullable(rs, i + 12), - int4 = Meta.IntMeta.get.unsafeGetNullable(rs, i + 13), - int8 = Meta.LongMeta.get.unsafeGetNullable(rs, i + 14), - interval = TypoInterval.get.unsafeGetNullable(rs, i + 15), - json = TypoJson.get.unsafeGetNullable(rs, i + 16), - jsonb = TypoJsonb.get.unsafeGetNullable(rs, i + 17), - line = TypoLine.get.unsafeGetNullable(rs, i + 18), - lseg = TypoLineSegment.get.unsafeGetNullable(rs, i + 19), - money = TypoMoney.get.unsafeGetNullable(rs, i + 20), - mydomain = Mydomain.get.unsafeGetNullable(rs, i + 21), - myenum = Myenum.get.unsafeGetNullable(rs, i + 22), - name = Meta.StringMeta.get.unsafeGetNullable(rs, i + 23), - numeric = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 24), - path = TypoPath.get.unsafeGetNullable(rs, i + 25), - point = TypoPoint.get.unsafeGetNullable(rs, i + 26), - polygon = TypoPolygon.get.unsafeGetNullable(rs, i + 27), - text = Meta.StringMeta.get.unsafeGetNullable(rs, i + 28), - time = TypoLocalTime.get.unsafeGetNullable(rs, i + 29), - timestamp = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 30), - timestampz = TypoInstant.get.unsafeGetNullable(rs, i + 31), - timez = TypoOffsetTime.get.unsafeGetNullable(rs, i + 32), - uuid = TypoUUID.get.unsafeGetNullable(rs, i + 33), - varchar = Meta.StringMeta.get.unsafeGetNullable(rs, i + 34), - vector = TypoVector.get.unsafeGetNullable(rs, i + 35), - xml = TypoXml.get.unsafeGetNullable(rs, i + 36), - boxes = TypoBox.arrayGet.unsafeGetNullable(rs, i + 37), - bpchares = adventureworks.StringArrayMeta.get.unsafeGetNullable(rs, i + 38), - chares = adventureworks.StringArrayMeta.get.unsafeGetNullable(rs, i + 39), - circlees = TypoCircle.arrayGet.unsafeGetNullable(rs, i + 40), - datees = TypoLocalDate.arrayGet.unsafeGetNullable(rs, i + 41), - float4es = adventureworks.FloatArrayMeta.get.unsafeGetNullable(rs, i + 42), - float8es = adventureworks.DoubleArrayMeta.get.unsafeGetNullable(rs, i + 43), - inetes = TypoInet.arrayGet.unsafeGetNullable(rs, i + 44), - int2es = TypoShort.arrayGet.unsafeGetNullable(rs, i + 45), - int2vectores = TypoInt2Vector.arrayGet.unsafeGetNullable(rs, i + 46), - int4es = adventureworks.IntegerArrayMeta.get.unsafeGetNullable(rs, i + 47), - int8es = adventureworks.LongArrayMeta.get.unsafeGetNullable(rs, i + 48), - intervales = TypoInterval.arrayGet.unsafeGetNullable(rs, i + 49), - jsones = TypoJson.arrayGet.unsafeGetNullable(rs, i + 50), - jsonbes = TypoJsonb.arrayGet.unsafeGetNullable(rs, i + 51), - linees = TypoLine.arrayGet.unsafeGetNullable(rs, i + 52), - lseges = TypoLineSegment.arrayGet.unsafeGetNullable(rs, i + 53), - moneyes = TypoMoney.arrayGet.unsafeGetNullable(rs, i + 54), - mydomaines = Mydomain.arrayGet.unsafeGetNullable(rs, i + 55), - myenumes = Myenum.arrayGet.unsafeGetNullable(rs, i + 56), - namees = adventureworks.StringArrayMeta.get.unsafeGetNullable(rs, i + 57), - numerices = adventureworks.BigDecimalMeta.get.unsafeGetNullable(rs, i + 58), - pathes = TypoPath.arrayGet.unsafeGetNullable(rs, i + 59), - pointes = TypoPoint.arrayGet.unsafeGetNullable(rs, i + 60), - polygones = TypoPolygon.arrayGet.unsafeGetNullable(rs, i + 61), - textes = adventureworks.StringArrayMeta.get.unsafeGetNullable(rs, i + 62), - timees = TypoLocalTime.arrayGet.unsafeGetNullable(rs, i + 63), - timestampes = TypoLocalDateTime.arrayGet.unsafeGetNullable(rs, i + 64), - timestampzes = TypoInstant.arrayGet.unsafeGetNullable(rs, i + 65), - timezes = TypoOffsetTime.arrayGet.unsafeGetNullable(rs, i + 66), - uuides = TypoUUID.arrayGet.unsafeGetNullable(rs, i + 67), - varchares = adventureworks.StringArrayMeta.get.unsafeGetNullable(rs, i + 68), - xmles = TypoXml.arrayGet.unsafeGetNullable(rs, i + 69) + implicit lazy val read: Read[PgtestnullRow] = new Read.CompositeOfInstances(Array( + new Read.SingleOpt(Meta.BooleanMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBox.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBytea.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoCircle.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.FloatMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.DoubleMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoHStore.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInet.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoShort.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInt2Vector.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.LongMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInterval.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoJson.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoJsonb.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLine.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLineSegment.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoMoney.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Mydomain.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Myenum.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoPath.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoPoint.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoPolygon.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInstant.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoOffsetTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoVector.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoBox.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoCircle.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.FloatArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.DoubleArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInet.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoShort.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInt2Vector.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.IntegerArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.LongArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInterval.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoJson.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoJsonb.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLine.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLineSegment.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoMoney.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(Mydomain.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(Myenum.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.BigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoPath.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoPoint.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoPolygon.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalTime.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInstant.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoOffsetTime.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoUUID.arrayGet).asInstanceOf[Read[Any]], + new Read.SingleOpt(adventureworks.StringArrayMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.arrayGet).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PgtestnullRow( + bool = arr(0).asInstanceOf[Option[Boolean]], + box = arr(1).asInstanceOf[Option[TypoBox]], + bpchar = arr(2).asInstanceOf[Option[/* bpchar, max 3 chars */ String]], + bytea = arr(3).asInstanceOf[Option[TypoBytea]], + char = arr(4).asInstanceOf[Option[/* bpchar, max 1 chars */ String]], + circle = arr(5).asInstanceOf[Option[TypoCircle]], + date = arr(6).asInstanceOf[Option[TypoLocalDate]], + float4 = arr(7).asInstanceOf[Option[Float]], + float8 = arr(8).asInstanceOf[Option[Double]], + hstore = arr(9).asInstanceOf[Option[TypoHStore]], + inet = arr(10).asInstanceOf[Option[TypoInet]], + int2 = arr(11).asInstanceOf[Option[TypoShort]], + int2vector = arr(12).asInstanceOf[Option[TypoInt2Vector]], + int4 = arr(13).asInstanceOf[Option[Int]], + int8 = arr(14).asInstanceOf[Option[Long]], + interval = arr(15).asInstanceOf[Option[TypoInterval]], + json = arr(16).asInstanceOf[Option[TypoJson]], + jsonb = arr(17).asInstanceOf[Option[TypoJsonb]], + line = arr(18).asInstanceOf[Option[TypoLine]], + lseg = arr(19).asInstanceOf[Option[TypoLineSegment]], + money = arr(20).asInstanceOf[Option[TypoMoney]], + mydomain = arr(21).asInstanceOf[Option[Mydomain]], + myenum = arr(22).asInstanceOf[Option[Myenum]], + name = arr(23).asInstanceOf[Option[String]], + numeric = arr(24).asInstanceOf[Option[BigDecimal]], + path = arr(25).asInstanceOf[Option[TypoPath]], + point = arr(26).asInstanceOf[Option[TypoPoint]], + polygon = arr(27).asInstanceOf[Option[TypoPolygon]], + text = arr(28).asInstanceOf[Option[String]], + time = arr(29).asInstanceOf[Option[TypoLocalTime]], + timestamp = arr(30).asInstanceOf[Option[TypoLocalDateTime]], + timestampz = arr(31).asInstanceOf[Option[TypoInstant]], + timez = arr(32).asInstanceOf[Option[TypoOffsetTime]], + uuid = arr(33).asInstanceOf[Option[TypoUUID]], + varchar = arr(34).asInstanceOf[Option[String]], + vector = arr(35).asInstanceOf[Option[TypoVector]], + xml = arr(36).asInstanceOf[Option[TypoXml]], + boxes = arr(37).asInstanceOf[Option[Array[TypoBox]]], + bpchares = arr(38).asInstanceOf[Option[Array[/* bpchar */ String]]], + chares = arr(39).asInstanceOf[Option[Array[/* bpchar */ String]]], + circlees = arr(40).asInstanceOf[Option[Array[TypoCircle]]], + datees = arr(41).asInstanceOf[Option[Array[TypoLocalDate]]], + float4es = arr(42).asInstanceOf[Option[Array[Float]]], + float8es = arr(43).asInstanceOf[Option[Array[Double]]], + inetes = arr(44).asInstanceOf[Option[Array[TypoInet]]], + int2es = arr(45).asInstanceOf[Option[Array[TypoShort]]], + int2vectores = arr(46).asInstanceOf[Option[Array[TypoInt2Vector]]], + int4es = arr(47).asInstanceOf[Option[Array[Int]]], + int8es = arr(48).asInstanceOf[Option[Array[Long]]], + intervales = arr(49).asInstanceOf[Option[Array[TypoInterval]]], + jsones = arr(50).asInstanceOf[Option[Array[TypoJson]]], + jsonbes = arr(51).asInstanceOf[Option[Array[TypoJsonb]]], + linees = arr(52).asInstanceOf[Option[Array[TypoLine]]], + lseges = arr(53).asInstanceOf[Option[Array[TypoLineSegment]]], + moneyes = arr(54).asInstanceOf[Option[Array[TypoMoney]]], + mydomaines = arr(55).asInstanceOf[Option[Array[Mydomain]]], + myenumes = arr(56).asInstanceOf[Option[Array[Myenum]]], + namees = arr(57).asInstanceOf[Option[Array[String]]], + numerices = arr(58).asInstanceOf[Option[Array[BigDecimal]]], + pathes = arr(59).asInstanceOf[Option[Array[TypoPath]]], + pointes = arr(60).asInstanceOf[Option[Array[TypoPoint]]], + polygones = arr(61).asInstanceOf[Option[Array[TypoPolygon]]], + textes = arr(62).asInstanceOf[Option[Array[String]]], + timees = arr(63).asInstanceOf[Option[Array[TypoLocalTime]]], + timestampes = arr(64).asInstanceOf[Option[Array[TypoLocalDateTime]]], + timestampzes = arr(65).asInstanceOf[Option[Array[TypoInstant]]], + timezes = arr(66).asInstanceOf[Option[Array[TypoOffsetTime]]], + uuides = arr(67).asInstanceOf[Option[Array[TypoUUID]]], + varchares = arr(68).asInstanceOf[Option[Array[String]]], + xmles = arr(69).asInstanceOf[Option[Array[TypoXml]]] ) - ) + } implicit lazy val text: Text[PgtestnullRow] = Text.instance[PgtestnullRow]{ (row, sb) => Text.option(Text.booleanInstance).unsafeEncode(row.bool, sb) sb.append(Text.DELIMETER) @@ -560,221 +557,77 @@ object PgtestnullRow { sb.append(Text.DELIMETER) Text.option(Text.iterableInstance[Array, TypoXml](TypoXml.text, implicitly)).unsafeEncode(row.xmles, sb) } - implicit lazy val write: Write[PgtestnullRow] = new Write[PgtestnullRow]( - puts = List((Meta.BooleanMeta.put, Nullability.Nullable), - (TypoBox.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoBytea.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoCircle.put, Nullability.Nullable), - (TypoLocalDate.put, Nullability.Nullable), - (Meta.FloatMeta.put, Nullability.Nullable), - (Meta.DoubleMeta.put, Nullability.Nullable), - (TypoHStore.put, Nullability.Nullable), - (TypoInet.put, Nullability.Nullable), - (TypoShort.put, Nullability.Nullable), - (TypoInt2Vector.put, Nullability.Nullable), - (Meta.IntMeta.put, Nullability.Nullable), - (Meta.LongMeta.put, Nullability.Nullable), - (TypoInterval.put, Nullability.Nullable), - (TypoJson.put, Nullability.Nullable), - (TypoJsonb.put, Nullability.Nullable), - (TypoLine.put, Nullability.Nullable), - (TypoLineSegment.put, Nullability.Nullable), - (TypoMoney.put, Nullability.Nullable), - (Mydomain.put, Nullability.Nullable), - (Myenum.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (TypoPath.put, Nullability.Nullable), - (TypoPoint.put, Nullability.Nullable), - (TypoPolygon.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoLocalTime.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoInstant.put, Nullability.Nullable), - (TypoOffsetTime.put, Nullability.Nullable), - (TypoUUID.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoVector.put, Nullability.Nullable), - (TypoXml.put, Nullability.Nullable), - (TypoBox.arrayPut, Nullability.Nullable), - (adventureworks.StringArrayMeta.put, Nullability.Nullable), - (adventureworks.StringArrayMeta.put, Nullability.Nullable), - (TypoCircle.arrayPut, Nullability.Nullable), - (TypoLocalDate.arrayPut, Nullability.Nullable), - (adventureworks.FloatArrayMeta.put, Nullability.Nullable), - (adventureworks.DoubleArrayMeta.put, Nullability.Nullable), - (TypoInet.arrayPut, Nullability.Nullable), - (TypoShort.arrayPut, Nullability.Nullable), - (TypoInt2Vector.arrayPut, Nullability.Nullable), - (adventureworks.IntegerArrayMeta.put, Nullability.Nullable), - (adventureworks.LongArrayMeta.put, Nullability.Nullable), - (TypoInterval.arrayPut, Nullability.Nullable), - (TypoJson.arrayPut, Nullability.Nullable), - (TypoJsonb.arrayPut, Nullability.Nullable), - (TypoLine.arrayPut, Nullability.Nullable), - (TypoLineSegment.arrayPut, Nullability.Nullable), - (TypoMoney.arrayPut, Nullability.Nullable), - (Mydomain.arrayPut, Nullability.Nullable), - (Myenum.arrayPut, Nullability.Nullable), - (adventureworks.StringArrayMeta.put, Nullability.Nullable), - (adventureworks.BigDecimalMeta.put, Nullability.Nullable), - (TypoPath.arrayPut, Nullability.Nullable), - (TypoPoint.arrayPut, Nullability.Nullable), - (TypoPolygon.arrayPut, Nullability.Nullable), - (adventureworks.StringArrayMeta.put, Nullability.Nullable), - (TypoLocalTime.arrayPut, Nullability.Nullable), - (TypoLocalDateTime.arrayPut, Nullability.Nullable), - (TypoInstant.arrayPut, Nullability.Nullable), - (TypoOffsetTime.arrayPut, Nullability.Nullable), - (TypoUUID.arrayPut, Nullability.Nullable), - (adventureworks.StringArrayMeta.put, Nullability.Nullable), - (TypoXml.arrayPut, Nullability.Nullable)), - toList = x => List(x.bool, x.box, x.bpchar, x.bytea, x.char, x.circle, x.date, x.float4, x.float8, x.hstore, x.inet, x.int2, x.int2vector, x.int4, x.int8, x.interval, x.json, x.jsonb, x.line, x.lseg, x.money, x.mydomain, x.myenum, x.name, x.numeric, x.path, x.point, x.polygon, x.text, x.time, x.timestamp, x.timestampz, x.timez, x.uuid, x.varchar, x.vector, x.xml, x.boxes, x.bpchares, x.chares, x.circlees, x.datees, x.float4es, x.float8es, x.inetes, x.int2es, x.int2vectores, x.int4es, x.int8es, x.intervales, x.jsones, x.jsonbes, x.linees, x.lseges, x.moneyes, x.mydomaines, x.myenumes, x.namees, x.numerices, x.pathes, x.pointes, x.polygones, x.textes, x.timees, x.timestampes, x.timestampzes, x.timezes, x.uuides, x.varchares, x.xmles), - unsafeSet = (rs, i, a) => { - Meta.BooleanMeta.put.unsafeSetNullable(rs, i + 0, a.bool) - TypoBox.put.unsafeSetNullable(rs, i + 1, a.box) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.bpchar) - TypoBytea.put.unsafeSetNullable(rs, i + 3, a.bytea) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 4, a.char) - TypoCircle.put.unsafeSetNullable(rs, i + 5, a.circle) - TypoLocalDate.put.unsafeSetNullable(rs, i + 6, a.date) - Meta.FloatMeta.put.unsafeSetNullable(rs, i + 7, a.float4) - Meta.DoubleMeta.put.unsafeSetNullable(rs, i + 8, a.float8) - TypoHStore.put.unsafeSetNullable(rs, i + 9, a.hstore) - TypoInet.put.unsafeSetNullable(rs, i + 10, a.inet) - TypoShort.put.unsafeSetNullable(rs, i + 11, a.int2) - TypoInt2Vector.put.unsafeSetNullable(rs, i + 12, a.int2vector) - Meta.IntMeta.put.unsafeSetNullable(rs, i + 13, a.int4) - Meta.LongMeta.put.unsafeSetNullable(rs, i + 14, a.int8) - TypoInterval.put.unsafeSetNullable(rs, i + 15, a.interval) - TypoJson.put.unsafeSetNullable(rs, i + 16, a.json) - TypoJsonb.put.unsafeSetNullable(rs, i + 17, a.jsonb) - TypoLine.put.unsafeSetNullable(rs, i + 18, a.line) - TypoLineSegment.put.unsafeSetNullable(rs, i + 19, a.lseg) - TypoMoney.put.unsafeSetNullable(rs, i + 20, a.money) - Mydomain.put.unsafeSetNullable(rs, i + 21, a.mydomain) - Myenum.put.unsafeSetNullable(rs, i + 22, a.myenum) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 23, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 24, a.numeric) - TypoPath.put.unsafeSetNullable(rs, i + 25, a.path) - TypoPoint.put.unsafeSetNullable(rs, i + 26, a.point) - TypoPolygon.put.unsafeSetNullable(rs, i + 27, a.polygon) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 28, a.text) - TypoLocalTime.put.unsafeSetNullable(rs, i + 29, a.time) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 30, a.timestamp) - TypoInstant.put.unsafeSetNullable(rs, i + 31, a.timestampz) - TypoOffsetTime.put.unsafeSetNullable(rs, i + 32, a.timez) - TypoUUID.put.unsafeSetNullable(rs, i + 33, a.uuid) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 34, a.varchar) - TypoVector.put.unsafeSetNullable(rs, i + 35, a.vector) - TypoXml.put.unsafeSetNullable(rs, i + 36, a.xml) - TypoBox.arrayPut.unsafeSetNullable(rs, i + 37, a.boxes) - adventureworks.StringArrayMeta.put.unsafeSetNullable(rs, i + 38, a.bpchares) - adventureworks.StringArrayMeta.put.unsafeSetNullable(rs, i + 39, a.chares) - TypoCircle.arrayPut.unsafeSetNullable(rs, i + 40, a.circlees) - TypoLocalDate.arrayPut.unsafeSetNullable(rs, i + 41, a.datees) - adventureworks.FloatArrayMeta.put.unsafeSetNullable(rs, i + 42, a.float4es) - adventureworks.DoubleArrayMeta.put.unsafeSetNullable(rs, i + 43, a.float8es) - TypoInet.arrayPut.unsafeSetNullable(rs, i + 44, a.inetes) - TypoShort.arrayPut.unsafeSetNullable(rs, i + 45, a.int2es) - TypoInt2Vector.arrayPut.unsafeSetNullable(rs, i + 46, a.int2vectores) - adventureworks.IntegerArrayMeta.put.unsafeSetNullable(rs, i + 47, a.int4es) - adventureworks.LongArrayMeta.put.unsafeSetNullable(rs, i + 48, a.int8es) - TypoInterval.arrayPut.unsafeSetNullable(rs, i + 49, a.intervales) - TypoJson.arrayPut.unsafeSetNullable(rs, i + 50, a.jsones) - TypoJsonb.arrayPut.unsafeSetNullable(rs, i + 51, a.jsonbes) - TypoLine.arrayPut.unsafeSetNullable(rs, i + 52, a.linees) - TypoLineSegment.arrayPut.unsafeSetNullable(rs, i + 53, a.lseges) - TypoMoney.arrayPut.unsafeSetNullable(rs, i + 54, a.moneyes) - Mydomain.arrayPut.unsafeSetNullable(rs, i + 55, a.mydomaines) - Myenum.arrayPut.unsafeSetNullable(rs, i + 56, a.myenumes) - adventureworks.StringArrayMeta.put.unsafeSetNullable(rs, i + 57, a.namees) - adventureworks.BigDecimalMeta.put.unsafeSetNullable(rs, i + 58, a.numerices) - TypoPath.arrayPut.unsafeSetNullable(rs, i + 59, a.pathes) - TypoPoint.arrayPut.unsafeSetNullable(rs, i + 60, a.pointes) - TypoPolygon.arrayPut.unsafeSetNullable(rs, i + 61, a.polygones) - adventureworks.StringArrayMeta.put.unsafeSetNullable(rs, i + 62, a.textes) - TypoLocalTime.arrayPut.unsafeSetNullable(rs, i + 63, a.timees) - TypoLocalDateTime.arrayPut.unsafeSetNullable(rs, i + 64, a.timestampes) - TypoInstant.arrayPut.unsafeSetNullable(rs, i + 65, a.timestampzes) - TypoOffsetTime.arrayPut.unsafeSetNullable(rs, i + 66, a.timezes) - TypoUUID.arrayPut.unsafeSetNullable(rs, i + 67, a.uuides) - adventureworks.StringArrayMeta.put.unsafeSetNullable(rs, i + 68, a.varchares) - TypoXml.arrayPut.unsafeSetNullable(rs, i + 69, a.xmles) - }, - unsafeUpdate = (ps, i, a) => { - Meta.BooleanMeta.put.unsafeUpdateNullable(ps, i + 0, a.bool) - TypoBox.put.unsafeUpdateNullable(ps, i + 1, a.box) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.bpchar) - TypoBytea.put.unsafeUpdateNullable(ps, i + 3, a.bytea) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 4, a.char) - TypoCircle.put.unsafeUpdateNullable(ps, i + 5, a.circle) - TypoLocalDate.put.unsafeUpdateNullable(ps, i + 6, a.date) - Meta.FloatMeta.put.unsafeUpdateNullable(ps, i + 7, a.float4) - Meta.DoubleMeta.put.unsafeUpdateNullable(ps, i + 8, a.float8) - TypoHStore.put.unsafeUpdateNullable(ps, i + 9, a.hstore) - TypoInet.put.unsafeUpdateNullable(ps, i + 10, a.inet) - TypoShort.put.unsafeUpdateNullable(ps, i + 11, a.int2) - TypoInt2Vector.put.unsafeUpdateNullable(ps, i + 12, a.int2vector) - Meta.IntMeta.put.unsafeUpdateNullable(ps, i + 13, a.int4) - Meta.LongMeta.put.unsafeUpdateNullable(ps, i + 14, a.int8) - TypoInterval.put.unsafeUpdateNullable(ps, i + 15, a.interval) - TypoJson.put.unsafeUpdateNullable(ps, i + 16, a.json) - TypoJsonb.put.unsafeUpdateNullable(ps, i + 17, a.jsonb) - TypoLine.put.unsafeUpdateNullable(ps, i + 18, a.line) - TypoLineSegment.put.unsafeUpdateNullable(ps, i + 19, a.lseg) - TypoMoney.put.unsafeUpdateNullable(ps, i + 20, a.money) - Mydomain.put.unsafeUpdateNullable(ps, i + 21, a.mydomain) - Myenum.put.unsafeUpdateNullable(ps, i + 22, a.myenum) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 23, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 24, a.numeric) - TypoPath.put.unsafeUpdateNullable(ps, i + 25, a.path) - TypoPoint.put.unsafeUpdateNullable(ps, i + 26, a.point) - TypoPolygon.put.unsafeUpdateNullable(ps, i + 27, a.polygon) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 28, a.text) - TypoLocalTime.put.unsafeUpdateNullable(ps, i + 29, a.time) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 30, a.timestamp) - TypoInstant.put.unsafeUpdateNullable(ps, i + 31, a.timestampz) - TypoOffsetTime.put.unsafeUpdateNullable(ps, i + 32, a.timez) - TypoUUID.put.unsafeUpdateNullable(ps, i + 33, a.uuid) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 34, a.varchar) - TypoVector.put.unsafeUpdateNullable(ps, i + 35, a.vector) - TypoXml.put.unsafeUpdateNullable(ps, i + 36, a.xml) - TypoBox.arrayPut.unsafeUpdateNullable(ps, i + 37, a.boxes) - adventureworks.StringArrayMeta.put.unsafeUpdateNullable(ps, i + 38, a.bpchares) - adventureworks.StringArrayMeta.put.unsafeUpdateNullable(ps, i + 39, a.chares) - TypoCircle.arrayPut.unsafeUpdateNullable(ps, i + 40, a.circlees) - TypoLocalDate.arrayPut.unsafeUpdateNullable(ps, i + 41, a.datees) - adventureworks.FloatArrayMeta.put.unsafeUpdateNullable(ps, i + 42, a.float4es) - adventureworks.DoubleArrayMeta.put.unsafeUpdateNullable(ps, i + 43, a.float8es) - TypoInet.arrayPut.unsafeUpdateNullable(ps, i + 44, a.inetes) - TypoShort.arrayPut.unsafeUpdateNullable(ps, i + 45, a.int2es) - TypoInt2Vector.arrayPut.unsafeUpdateNullable(ps, i + 46, a.int2vectores) - adventureworks.IntegerArrayMeta.put.unsafeUpdateNullable(ps, i + 47, a.int4es) - adventureworks.LongArrayMeta.put.unsafeUpdateNullable(ps, i + 48, a.int8es) - TypoInterval.arrayPut.unsafeUpdateNullable(ps, i + 49, a.intervales) - TypoJson.arrayPut.unsafeUpdateNullable(ps, i + 50, a.jsones) - TypoJsonb.arrayPut.unsafeUpdateNullable(ps, i + 51, a.jsonbes) - TypoLine.arrayPut.unsafeUpdateNullable(ps, i + 52, a.linees) - TypoLineSegment.arrayPut.unsafeUpdateNullable(ps, i + 53, a.lseges) - TypoMoney.arrayPut.unsafeUpdateNullable(ps, i + 54, a.moneyes) - Mydomain.arrayPut.unsafeUpdateNullable(ps, i + 55, a.mydomaines) - Myenum.arrayPut.unsafeUpdateNullable(ps, i + 56, a.myenumes) - adventureworks.StringArrayMeta.put.unsafeUpdateNullable(ps, i + 57, a.namees) - adventureworks.BigDecimalMeta.put.unsafeUpdateNullable(ps, i + 58, a.numerices) - TypoPath.arrayPut.unsafeUpdateNullable(ps, i + 59, a.pathes) - TypoPoint.arrayPut.unsafeUpdateNullable(ps, i + 60, a.pointes) - TypoPolygon.arrayPut.unsafeUpdateNullable(ps, i + 61, a.polygones) - adventureworks.StringArrayMeta.put.unsafeUpdateNullable(ps, i + 62, a.textes) - TypoLocalTime.arrayPut.unsafeUpdateNullable(ps, i + 63, a.timees) - TypoLocalDateTime.arrayPut.unsafeUpdateNullable(ps, i + 64, a.timestampes) - TypoInstant.arrayPut.unsafeUpdateNullable(ps, i + 65, a.timestampzes) - TypoOffsetTime.arrayPut.unsafeUpdateNullable(ps, i + 66, a.timezes) - TypoUUID.arrayPut.unsafeUpdateNullable(ps, i + 67, a.uuides) - adventureworks.StringArrayMeta.put.unsafeUpdateNullable(ps, i + 68, a.varchares) - TypoXml.arrayPut.unsafeUpdateNullable(ps, i + 69, a.xmles) - } + implicit lazy val write: Write[PgtestnullRow] = new Write.Composite[PgtestnullRow]( + List(new Write.Single(Meta.BooleanMeta.put).toOpt, + new Write.Single(TypoBox.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoBytea.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoCircle.put).toOpt, + new Write.Single(TypoLocalDate.put).toOpt, + new Write.Single(Meta.FloatMeta.put).toOpt, + new Write.Single(Meta.DoubleMeta.put).toOpt, + new Write.Single(TypoHStore.put).toOpt, + new Write.Single(TypoInet.put).toOpt, + new Write.Single(TypoShort.put).toOpt, + new Write.Single(TypoInt2Vector.put).toOpt, + new Write.Single(Meta.IntMeta.put).toOpt, + new Write.Single(Meta.LongMeta.put).toOpt, + new Write.Single(TypoInterval.put).toOpt, + new Write.Single(TypoJson.put).toOpt, + new Write.Single(TypoJsonb.put).toOpt, + new Write.Single(TypoLine.put).toOpt, + new Write.Single(TypoLineSegment.put).toOpt, + new Write.Single(TypoMoney.put).toOpt, + new Write.Single(Mydomain.put).toOpt, + new Write.Single(Myenum.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(TypoPath.put).toOpt, + new Write.Single(TypoPoint.put).toOpt, + new Write.Single(TypoPolygon.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoLocalTime.put).toOpt, + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoInstant.put).toOpt, + new Write.Single(TypoOffsetTime.put).toOpt, + new Write.Single(TypoUUID.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoVector.put).toOpt, + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoBox.arrayPut).toOpt, + new Write.Single(adventureworks.StringArrayMeta.put).toOpt, + new Write.Single(adventureworks.StringArrayMeta.put).toOpt, + new Write.Single(TypoCircle.arrayPut).toOpt, + new Write.Single(TypoLocalDate.arrayPut).toOpt, + new Write.Single(adventureworks.FloatArrayMeta.put).toOpt, + new Write.Single(adventureworks.DoubleArrayMeta.put).toOpt, + new Write.Single(TypoInet.arrayPut).toOpt, + new Write.Single(TypoShort.arrayPut).toOpt, + new Write.Single(TypoInt2Vector.arrayPut).toOpt, + new Write.Single(adventureworks.IntegerArrayMeta.put).toOpt, + new Write.Single(adventureworks.LongArrayMeta.put).toOpt, + new Write.Single(TypoInterval.arrayPut).toOpt, + new Write.Single(TypoJson.arrayPut).toOpt, + new Write.Single(TypoJsonb.arrayPut).toOpt, + new Write.Single(TypoLine.arrayPut).toOpt, + new Write.Single(TypoLineSegment.arrayPut).toOpt, + new Write.Single(TypoMoney.arrayPut).toOpt, + new Write.Single(Mydomain.arrayPut).toOpt, + new Write.Single(Myenum.arrayPut).toOpt, + new Write.Single(adventureworks.StringArrayMeta.put).toOpt, + new Write.Single(adventureworks.BigDecimalMeta.put).toOpt, + new Write.Single(TypoPath.arrayPut).toOpt, + new Write.Single(TypoPoint.arrayPut).toOpt, + new Write.Single(TypoPolygon.arrayPut).toOpt, + new Write.Single(adventureworks.StringArrayMeta.put).toOpt, + new Write.Single(TypoLocalTime.arrayPut).toOpt, + new Write.Single(TypoLocalDateTime.arrayPut).toOpt, + new Write.Single(TypoInstant.arrayPut).toOpt, + new Write.Single(TypoOffsetTime.arrayPut).toOpt, + new Write.Single(TypoUUID.arrayPut).toOpt, + new Write.Single(adventureworks.StringArrayMeta.put).toOpt, + new Write.Single(TypoXml.arrayPut).toOpt), + a => List(a.bool, a.box, a.bpchar, a.bytea, a.char, a.circle, a.date, a.float4, a.float8, a.hstore, a.inet, a.int2, a.int2vector, a.int4, a.int8, a.interval, a.json, a.jsonb, a.line, a.lseg, a.money, a.mydomain, a.myenum, a.name, a.numeric, a.path, a.point, a.polygon, a.text, a.time, a.timestamp, a.timestampz, a.timez, a.uuid, a.varchar, a.vector, a.xml, a.boxes, a.bpchares, a.chares, a.circlees, a.datees, a.float4es, a.float8es, a.inetes, a.int2es, a.int2vectores, a.int4es, a.int8es, a.intervales, a.jsones, a.jsonbes, a.linees, a.lseges, a.moneyes, a.mydomaines, a.myenumes, a.namees, a.numerices, a.pathes, a.pointes, a.polygones, a.textes, a.timees, a.timestampes, a.timestampzes, a.timezes, a.uuides, a.varchares, a.xmles) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRepoImpl.scala index c952fffe02..73b010b140 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRepoImpl.scala @@ -26,20 +26,20 @@ class TableWithGeneratedColumnsRepoImpl extends TableWithGeneratedColumnsRepo { DeleteBuilder(""""public"."table-with-generated-columns"""", TableWithGeneratedColumnsFields.structure) } override def deleteById(name: TableWithGeneratedColumnsId): ConnectionIO[Boolean] = { - sql"""delete from "public"."table-with-generated-columns" where "name" = ${fromWrite(name)(Write.fromPut(TableWithGeneratedColumnsId.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."table-with-generated-columns" where "name" = ${fromWrite(name)(new Write.Single(TableWithGeneratedColumnsId.put))}""".update.run.map(_ > 0) } override def deleteByIds(names: Array[TableWithGeneratedColumnsId]): ConnectionIO[Int] = { sql"""delete from "public"."table-with-generated-columns" where "name" = ANY(${names})""".update.run } override def insert(unsaved: TableWithGeneratedColumnsRow): ConnectionIO[TableWithGeneratedColumnsRow] = { sql"""insert into "public"."table-with-generated-columns"("name") - values (${fromWrite(unsaved.name)(Write.fromPut(TableWithGeneratedColumnsId.put))}) + values (${fromWrite(unsaved.name)(new Write.Single(TableWithGeneratedColumnsId.put))}) returning "name", "name-type-always" """.query(using TableWithGeneratedColumnsRow.read).unique } override def insert(unsaved: TableWithGeneratedColumnsRowUnsaved): ConnectionIO[TableWithGeneratedColumnsRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(TableWithGeneratedColumnsId.put))}")) + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(TableWithGeneratedColumnsId.put))}")) ).flatten val q = if (fs.isEmpty) { @@ -70,7 +70,7 @@ class TableWithGeneratedColumnsRepoImpl extends TableWithGeneratedColumnsRepo { sql"""select "name", "name-type-always" from "public"."table-with-generated-columns"""".query(using TableWithGeneratedColumnsRow.read).stream } override def selectById(name: TableWithGeneratedColumnsId): ConnectionIO[Option[TableWithGeneratedColumnsRow]] = { - sql"""select "name", "name-type-always" from "public"."table-with-generated-columns" where "name" = ${fromWrite(name)(Write.fromPut(TableWithGeneratedColumnsId.put))}""".query(using TableWithGeneratedColumnsRow.read).option + sql"""select "name", "name-type-always" from "public"."table-with-generated-columns" where "name" = ${fromWrite(name)(new Write.Single(TableWithGeneratedColumnsId.put))}""".query(using TableWithGeneratedColumnsRow.read).option } override def selectByIds(names: Array[TableWithGeneratedColumnsId]): Stream[ConnectionIO, TableWithGeneratedColumnsRow] = { sql"""select "name", "name-type-always" from "public"."table-with-generated-columns" where "name" = ANY(${names})""".query(using TableWithGeneratedColumnsRow.read).stream @@ -87,7 +87,7 @@ class TableWithGeneratedColumnsRepoImpl extends TableWithGeneratedColumnsRepo { override def upsert(unsaved: TableWithGeneratedColumnsRow): ConnectionIO[TableWithGeneratedColumnsRow] = { sql"""insert into "public"."table-with-generated-columns"("name") values ( - ${fromWrite(unsaved.name)(Write.fromPut(TableWithGeneratedColumnsId.put))} + ${fromWrite(unsaved.name)(new Write.Single(TableWithGeneratedColumnsId.put))} ) on conflict ("name") do update set "name" = EXCLUDED."name" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRow.scala index 6d573d5df9..0d9da394aa 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/table_with_generated_columns/TableWithGeneratedColumnsRow.scala @@ -7,14 +7,12 @@ package adventureworks package public package table_with_generated_columns -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.table-with-generated-columns Primary key: name */ @@ -36,27 +34,20 @@ case class TableWithGeneratedColumnsRow( object TableWithGeneratedColumnsRow { implicit lazy val decoder: Decoder[TableWithGeneratedColumnsRow] = Decoder.forProduct2[TableWithGeneratedColumnsRow, TableWithGeneratedColumnsId, String]("name", "name-type-always")(TableWithGeneratedColumnsRow.apply)(TableWithGeneratedColumnsId.decoder, Decoder.decodeString) implicit lazy val encoder: Encoder[TableWithGeneratedColumnsRow] = Encoder.forProduct2[TableWithGeneratedColumnsRow, TableWithGeneratedColumnsId, String]("name", "name-type-always")(x => (x.name, x.nameTypeAlways))(TableWithGeneratedColumnsId.encoder, Encoder.encodeString) - implicit lazy val read: Read[TableWithGeneratedColumnsRow] = new Read[TableWithGeneratedColumnsRow]( - gets = List( - (TableWithGeneratedColumnsId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TableWithGeneratedColumnsRow( - name = TableWithGeneratedColumnsId.get.unsafeGetNonNullable(rs, i + 0), - nameTypeAlways = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1) + implicit lazy val read: Read[TableWithGeneratedColumnsRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TableWithGeneratedColumnsId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TableWithGeneratedColumnsRow( + name = arr(0).asInstanceOf[TableWithGeneratedColumnsId], + nameTypeAlways = arr(1).asInstanceOf[String] ) - ) + } implicit lazy val text: Text[TableWithGeneratedColumnsRow] = Text.instance[TableWithGeneratedColumnsRow]{ (row, sb) => TableWithGeneratedColumnsId.text.unsafeEncode(row.name, sb) } - implicit lazy val write: Write[TableWithGeneratedColumnsRow] = new Write[TableWithGeneratedColumnsRow]( - puts = List((TableWithGeneratedColumnsId.put, Nullability.NoNulls)), - toList = x => List(x.name), - unsafeSet = (rs, i, a) => { - TableWithGeneratedColumnsId.put.unsafeSetNonNullable(rs, i + 0, a.name) - }, - unsafeUpdate = (ps, i, a) => { - TableWithGeneratedColumnsId.put.unsafeUpdateNonNullable(ps, i + 0, a.name) - } + implicit lazy val write: Write[TableWithGeneratedColumnsRow] = new Write.Composite[TableWithGeneratedColumnsRow]( + List(new Write.Single(TableWithGeneratedColumnsId.put)), + a => List(a.name) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRepoImpl.scala index 3d964d70cc..8d2521caad 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRepoImpl.scala @@ -25,14 +25,14 @@ class TestOrganisasjonRepoImpl extends TestOrganisasjonRepo { DeleteBuilder(""""public"."test_organisasjon"""", TestOrganisasjonFields.structure) } override def deleteById(organisasjonskode: TestOrganisasjonId): ConnectionIO[Boolean] = { - sql"""delete from "public"."test_organisasjon" where "organisasjonskode" = ${fromWrite(organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."test_organisasjon" where "organisasjonskode" = ${fromWrite(organisasjonskode)(new Write.Single(TestOrganisasjonId.put))}""".update.run.map(_ > 0) } override def deleteByIds(organisasjonskodes: Array[TestOrganisasjonId]): ConnectionIO[Int] = { sql"""delete from "public"."test_organisasjon" where "organisasjonskode" = ANY(${organisasjonskodes})""".update.run } override def insert(unsaved: TestOrganisasjonRow): ConnectionIO[TestOrganisasjonRow] = { sql"""insert into "public"."test_organisasjon"("organisasjonskode") - values (${fromWrite(unsaved.organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))}) + values (${fromWrite(unsaved.organisasjonskode)(new Write.Single(TestOrganisasjonId.put))}) returning "organisasjonskode" """.query(using TestOrganisasjonRow.read).unique } @@ -46,7 +46,7 @@ class TestOrganisasjonRepoImpl extends TestOrganisasjonRepo { sql"""select "organisasjonskode" from "public"."test_organisasjon"""".query(using TestOrganisasjonRow.read).stream } override def selectById(organisasjonskode: TestOrganisasjonId): ConnectionIO[Option[TestOrganisasjonRow]] = { - sql"""select "organisasjonskode" from "public"."test_organisasjon" where "organisasjonskode" = ${fromWrite(organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))}""".query(using TestOrganisasjonRow.read).option + sql"""select "organisasjonskode" from "public"."test_organisasjon" where "organisasjonskode" = ${fromWrite(organisasjonskode)(new Write.Single(TestOrganisasjonId.put))}""".query(using TestOrganisasjonRow.read).option } override def selectByIds(organisasjonskodes: Array[TestOrganisasjonId]): Stream[ConnectionIO, TestOrganisasjonRow] = { sql"""select "organisasjonskode" from "public"."test_organisasjon" where "organisasjonskode" = ANY(${organisasjonskodes})""".query(using TestOrganisasjonRow.read).stream @@ -63,7 +63,7 @@ class TestOrganisasjonRepoImpl extends TestOrganisasjonRepo { override def upsert(unsaved: TestOrganisasjonRow): ConnectionIO[TestOrganisasjonRow] = { sql"""insert into "public"."test_organisasjon"("organisasjonskode") values ( - ${fromWrite(unsaved.organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))} + ${fromWrite(unsaved.organisasjonskode)(new Write.Single(TestOrganisasjonId.put))} ) on conflict ("organisasjonskode") do update set "organisasjonskode" = EXCLUDED."organisasjonskode" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRow.scala index aa5c7ee7b7..cfa722050a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_organisasjon/TestOrganisasjonRow.scala @@ -7,13 +7,11 @@ package adventureworks package public package test_organisasjon -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.test_organisasjon Primary key: organisasjonskode */ @@ -26,25 +24,18 @@ case class TestOrganisasjonRow( object TestOrganisasjonRow { implicit lazy val decoder: Decoder[TestOrganisasjonRow] = Decoder.forProduct1[TestOrganisasjonRow, TestOrganisasjonId]("organisasjonskode")(TestOrganisasjonRow.apply)(TestOrganisasjonId.decoder) implicit lazy val encoder: Encoder[TestOrganisasjonRow] = Encoder.forProduct1[TestOrganisasjonRow, TestOrganisasjonId]("organisasjonskode")(x => (x.organisasjonskode))(TestOrganisasjonId.encoder) - implicit lazy val read: Read[TestOrganisasjonRow] = new Read[TestOrganisasjonRow]( - gets = List( - (TestOrganisasjonId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TestOrganisasjonRow( - organisasjonskode = TestOrganisasjonId.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[TestOrganisasjonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TestOrganisasjonId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TestOrganisasjonRow( + organisasjonskode = arr(0).asInstanceOf[TestOrganisasjonId] ) - ) + } implicit lazy val text: Text[TestOrganisasjonRow] = Text.instance[TestOrganisasjonRow]{ (row, sb) => TestOrganisasjonId.text.unsafeEncode(row.organisasjonskode, sb) } - implicit lazy val write: Write[TestOrganisasjonRow] = new Write[TestOrganisasjonRow]( - puts = List((TestOrganisasjonId.put, Nullability.NoNulls)), - toList = x => List(x.organisasjonskode), - unsafeSet = (rs, i, a) => { - TestOrganisasjonId.put.unsafeSetNonNullable(rs, i + 0, a.organisasjonskode) - }, - unsafeUpdate = (ps, i, a) => { - TestOrganisasjonId.put.unsafeUpdateNonNullable(ps, i + 0, a.organisasjonskode) - } + implicit lazy val write: Write[TestOrganisasjonRow] = new Write.Composite[TestOrganisasjonRow]( + List(new Write.Single(TestOrganisasjonId.put)), + a => List(a.organisasjonskode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRepoImpl.scala index 221914bd32..4b4c628ddb 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRepoImpl.scala @@ -27,7 +27,7 @@ class TestSakSoknadsalternativRepoImpl extends TestSakSoknadsalternativRepo { DeleteBuilder(""""public"."test_sak_soknadsalternativ"""", TestSakSoknadsalternativFields.structure) } override def deleteById(compositeId: TestSakSoknadsalternativId): ConnectionIO[Boolean] = { - sql"""delete from "public"."test_sak_soknadsalternativ" where "organisasjonskode_saksbehandler" = ${fromWrite(compositeId.organisasjonskodeSaksbehandler)(Write.fromPut(Meta.StringMeta.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."test_sak_soknadsalternativ" where "organisasjonskode_saksbehandler" = ${fromWrite(compositeId.organisasjonskodeSaksbehandler)(new Write.Single(Meta.StringMeta.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[TestSakSoknadsalternativId]): ConnectionIO[Int] = { val organisasjonskodeSaksbehandler = compositeIds.map(_.organisasjonskodeSaksbehandler) @@ -41,7 +41,7 @@ class TestSakSoknadsalternativRepoImpl extends TestSakSoknadsalternativRepo { } override def insert(unsaved: TestSakSoknadsalternativRow): ConnectionIO[TestSakSoknadsalternativRow] = { sql"""insert into "public"."test_sak_soknadsalternativ"("organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder") - values (${fromWrite(unsaved.organisasjonskodeSaksbehandler)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.organisasjonskodeTilbyder)(Write.fromPut(TestOrganisasjonId.put))}) + values (${fromWrite(unsaved.organisasjonskodeSaksbehandler)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.organisasjonskodeTilbyder)(new Write.Single(TestOrganisasjonId.put))}) returning "organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder" """.query(using TestSakSoknadsalternativRow.read).unique } @@ -55,7 +55,7 @@ class TestSakSoknadsalternativRepoImpl extends TestSakSoknadsalternativRepo { sql"""select "organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder" from "public"."test_sak_soknadsalternativ"""".query(using TestSakSoknadsalternativRow.read).stream } override def selectById(compositeId: TestSakSoknadsalternativId): ConnectionIO[Option[TestSakSoknadsalternativRow]] = { - sql"""select "organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder" from "public"."test_sak_soknadsalternativ" where "organisasjonskode_saksbehandler" = ${fromWrite(compositeId.organisasjonskodeSaksbehandler)(Write.fromPut(Meta.StringMeta.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}""".query(using TestSakSoknadsalternativRow.read).option + sql"""select "organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder" from "public"."test_sak_soknadsalternativ" where "organisasjonskode_saksbehandler" = ${fromWrite(compositeId.organisasjonskodeSaksbehandler)(new Write.Single(Meta.StringMeta.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}""".query(using TestSakSoknadsalternativRow.read).option } override def selectByIds(compositeIds: Array[TestSakSoknadsalternativId]): Stream[ConnectionIO, TestSakSoknadsalternativRow] = { val organisasjonskodeSaksbehandler = compositeIds.map(_.organisasjonskodeSaksbehandler) @@ -79,8 +79,8 @@ class TestSakSoknadsalternativRepoImpl extends TestSakSoknadsalternativRepo { override def update(row: TestSakSoknadsalternativRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "public"."test_sak_soknadsalternativ" - set "organisasjonskode_tilbyder" = ${fromWrite(row.organisasjonskodeTilbyder)(Write.fromPut(TestOrganisasjonId.put))} - where "organisasjonskode_saksbehandler" = ${fromWrite(compositeId.organisasjonskodeSaksbehandler)(Write.fromPut(Meta.StringMeta.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}""" + set "organisasjonskode_tilbyder" = ${fromWrite(row.organisasjonskodeTilbyder)(new Write.Single(TestOrganisasjonId.put))} + where "organisasjonskode_saksbehandler" = ${fromWrite(compositeId.organisasjonskodeSaksbehandler)(new Write.Single(Meta.StringMeta.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}""" .update .run .map(_ > 0) @@ -88,9 +88,9 @@ class TestSakSoknadsalternativRepoImpl extends TestSakSoknadsalternativRepo { override def upsert(unsaved: TestSakSoknadsalternativRow): ConnectionIO[TestSakSoknadsalternativRow] = { sql"""insert into "public"."test_sak_soknadsalternativ"("organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder") values ( - ${fromWrite(unsaved.organisasjonskodeSaksbehandler)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.organisasjonskodeTilbyder)(Write.fromPut(TestOrganisasjonId.put))} + ${fromWrite(unsaved.organisasjonskodeSaksbehandler)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.organisasjonskodeTilbyder)(new Write.Single(TestOrganisasjonId.put))} ) on conflict ("organisasjonskode_saksbehandler", "utdanningsmulighet_kode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRow.scala index ace8c149cc..42e6edd302 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_sak_soknadsalternativ/TestSakSoknadsalternativRow.scala @@ -9,14 +9,12 @@ package test_sak_soknadsalternativ import adventureworks.public.test_organisasjon.TestOrganisasjonId import adventureworks.public.test_utdanningstilbud.TestUtdanningstilbudId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.test_sak_soknadsalternativ Composite primary key: organisasjonskode_saksbehandler, utdanningsmulighet_kode */ @@ -40,18 +38,17 @@ object TestSakSoknadsalternativRow { new TestSakSoknadsalternativRow(compositeId.organisasjonskodeSaksbehandler, compositeId.utdanningsmulighetKode, organisasjonskodeTilbyder) implicit lazy val decoder: Decoder[TestSakSoknadsalternativRow] = Decoder.forProduct3[TestSakSoknadsalternativRow, String, String, TestOrganisasjonId]("organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder")(TestSakSoknadsalternativRow.apply)(Decoder.decodeString, Decoder.decodeString, TestOrganisasjonId.decoder) implicit lazy val encoder: Encoder[TestSakSoknadsalternativRow] = Encoder.forProduct3[TestSakSoknadsalternativRow, String, String, TestOrganisasjonId]("organisasjonskode_saksbehandler", "utdanningsmulighet_kode", "organisasjonskode_tilbyder")(x => (x.organisasjonskodeSaksbehandler, x.utdanningsmulighetKode, x.organisasjonskodeTilbyder))(Encoder.encodeString, Encoder.encodeString, TestOrganisasjonId.encoder) - implicit lazy val read: Read[TestSakSoknadsalternativRow] = new Read[TestSakSoknadsalternativRow]( - gets = List( - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TestOrganisasjonId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TestSakSoknadsalternativRow( - organisasjonskodeSaksbehandler = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 0), - utdanningsmulighetKode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - organisasjonskodeTilbyder = TestOrganisasjonId.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[TestSakSoknadsalternativRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TestOrganisasjonId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TestSakSoknadsalternativRow( + organisasjonskodeSaksbehandler = arr(0).asInstanceOf[String], + utdanningsmulighetKode = arr(1).asInstanceOf[String], + organisasjonskodeTilbyder = arr(2).asInstanceOf[TestOrganisasjonId] ) - ) + } implicit lazy val text: Text[TestSakSoknadsalternativRow] = Text.instance[TestSakSoknadsalternativRow]{ (row, sb) => Text.stringInstance.unsafeEncode(row.organisasjonskodeSaksbehandler, sb) sb.append(Text.DELIMETER) @@ -59,20 +56,10 @@ object TestSakSoknadsalternativRow { sb.append(Text.DELIMETER) TestOrganisasjonId.text.unsafeEncode(row.organisasjonskodeTilbyder, sb) } - implicit lazy val write: Write[TestSakSoknadsalternativRow] = new Write[TestSakSoknadsalternativRow]( - puts = List((Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TestOrganisasjonId.put, Nullability.NoNulls)), - toList = x => List(x.organisasjonskodeSaksbehandler, x.utdanningsmulighetKode, x.organisasjonskodeTilbyder), - unsafeSet = (rs, i, a) => { - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 0, a.organisasjonskodeSaksbehandler) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.utdanningsmulighetKode) - TestOrganisasjonId.put.unsafeSetNonNullable(rs, i + 2, a.organisasjonskodeTilbyder) - }, - unsafeUpdate = (ps, i, a) => { - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 0, a.organisasjonskodeSaksbehandler) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.utdanningsmulighetKode) - TestOrganisasjonId.put.unsafeUpdateNonNullable(ps, i + 2, a.organisasjonskodeTilbyder) - } + implicit lazy val write: Write[TestSakSoknadsalternativRow] = new Write.Composite[TestSakSoknadsalternativRow]( + List(new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TestOrganisasjonId.put)), + a => List(a.organisasjonskodeSaksbehandler, a.utdanningsmulighetKode, a.organisasjonskodeTilbyder) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRepoImpl.scala index df4fd25df1..1f0faf4408 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRepoImpl.scala @@ -27,7 +27,7 @@ class TestUtdanningstilbudRepoImpl extends TestUtdanningstilbudRepo { DeleteBuilder(""""public"."test_utdanningstilbud"""", TestUtdanningstilbudFields.structure) } override def deleteById(compositeId: TestUtdanningstilbudId): ConnectionIO[Boolean] = { - sql"""delete from "public"."test_utdanningstilbud" where "organisasjonskode" = ${fromWrite(compositeId.organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."test_utdanningstilbud" where "organisasjonskode" = ${fromWrite(compositeId.organisasjonskode)(new Write.Single(TestOrganisasjonId.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[TestUtdanningstilbudId]): ConnectionIO[Int] = { val organisasjonskode = compositeIds.map(_.organisasjonskode) @@ -41,7 +41,7 @@ class TestUtdanningstilbudRepoImpl extends TestUtdanningstilbudRepo { } override def insert(unsaved: TestUtdanningstilbudRow): ConnectionIO[TestUtdanningstilbudRow] = { sql"""insert into "public"."test_utdanningstilbud"("organisasjonskode", "utdanningsmulighet_kode") - values (${fromWrite(unsaved.organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))}, ${fromWrite(unsaved.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.organisasjonskode)(new Write.Single(TestOrganisasjonId.put))}, ${fromWrite(unsaved.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}) returning "organisasjonskode", "utdanningsmulighet_kode" """.query(using TestUtdanningstilbudRow.read).unique } @@ -55,7 +55,7 @@ class TestUtdanningstilbudRepoImpl extends TestUtdanningstilbudRepo { sql"""select "organisasjonskode", "utdanningsmulighet_kode" from "public"."test_utdanningstilbud"""".query(using TestUtdanningstilbudRow.read).stream } override def selectById(compositeId: TestUtdanningstilbudId): ConnectionIO[Option[TestUtdanningstilbudRow]] = { - sql"""select "organisasjonskode", "utdanningsmulighet_kode" from "public"."test_utdanningstilbud" where "organisasjonskode" = ${fromWrite(compositeId.organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))}""".query(using TestUtdanningstilbudRow.read).option + sql"""select "organisasjonskode", "utdanningsmulighet_kode" from "public"."test_utdanningstilbud" where "organisasjonskode" = ${fromWrite(compositeId.organisasjonskode)(new Write.Single(TestOrganisasjonId.put))} AND "utdanningsmulighet_kode" = ${fromWrite(compositeId.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))}""".query(using TestUtdanningstilbudRow.read).option } override def selectByIds(compositeIds: Array[TestUtdanningstilbudId]): Stream[ConnectionIO, TestUtdanningstilbudRow] = { val organisasjonskode = compositeIds.map(_.organisasjonskode) @@ -79,8 +79,8 @@ class TestUtdanningstilbudRepoImpl extends TestUtdanningstilbudRepo { override def upsert(unsaved: TestUtdanningstilbudRow): ConnectionIO[TestUtdanningstilbudRow] = { sql"""insert into "public"."test_utdanningstilbud"("organisasjonskode", "utdanningsmulighet_kode") values ( - ${fromWrite(unsaved.organisasjonskode)(Write.fromPut(TestOrganisasjonId.put))}, - ${fromWrite(unsaved.utdanningsmulighetKode)(Write.fromPut(Meta.StringMeta.put))} + ${fromWrite(unsaved.organisasjonskode)(new Write.Single(TestOrganisasjonId.put))}, + ${fromWrite(unsaved.utdanningsmulighetKode)(new Write.Single(Meta.StringMeta.put))} ) on conflict ("organisasjonskode", "utdanningsmulighet_kode") do update set "organisasjonskode" = EXCLUDED."organisasjonskode" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRow.scala index abca6e3077..c7bcceb32e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/test_utdanningstilbud/TestUtdanningstilbudRow.scala @@ -8,14 +8,12 @@ package public package test_utdanningstilbud import adventureworks.public.test_organisasjon.TestOrganisasjonId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.test_utdanningstilbud Composite primary key: organisasjonskode, utdanningsmulighet_kode */ @@ -33,32 +31,23 @@ object TestUtdanningstilbudRow { new TestUtdanningstilbudRow(compositeId.organisasjonskode, compositeId.utdanningsmulighetKode) implicit lazy val decoder: Decoder[TestUtdanningstilbudRow] = Decoder.forProduct2[TestUtdanningstilbudRow, TestOrganisasjonId, String]("organisasjonskode", "utdanningsmulighet_kode")(TestUtdanningstilbudRow.apply)(TestOrganisasjonId.decoder, Decoder.decodeString) implicit lazy val encoder: Encoder[TestUtdanningstilbudRow] = Encoder.forProduct2[TestUtdanningstilbudRow, TestOrganisasjonId, String]("organisasjonskode", "utdanningsmulighet_kode")(x => (x.organisasjonskode, x.utdanningsmulighetKode))(TestOrganisasjonId.encoder, Encoder.encodeString) - implicit lazy val read: Read[TestUtdanningstilbudRow] = new Read[TestUtdanningstilbudRow]( - gets = List( - (TestOrganisasjonId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TestUtdanningstilbudRow( - organisasjonskode = TestOrganisasjonId.get.unsafeGetNonNullable(rs, i + 0), - utdanningsmulighetKode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1) + implicit lazy val read: Read[TestUtdanningstilbudRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TestOrganisasjonId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TestUtdanningstilbudRow( + organisasjonskode = arr(0).asInstanceOf[TestOrganisasjonId], + utdanningsmulighetKode = arr(1).asInstanceOf[String] ) - ) + } implicit lazy val text: Text[TestUtdanningstilbudRow] = Text.instance[TestUtdanningstilbudRow]{ (row, sb) => TestOrganisasjonId.text.unsafeEncode(row.organisasjonskode, sb) sb.append(Text.DELIMETER) Text.stringInstance.unsafeEncode(row.utdanningsmulighetKode, sb) } - implicit lazy val write: Write[TestUtdanningstilbudRow] = new Write[TestUtdanningstilbudRow]( - puts = List((TestOrganisasjonId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls)), - toList = x => List(x.organisasjonskode, x.utdanningsmulighetKode), - unsafeSet = (rs, i, a) => { - TestOrganisasjonId.put.unsafeSetNonNullable(rs, i + 0, a.organisasjonskode) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.utdanningsmulighetKode) - }, - unsafeUpdate = (ps, i, a) => { - TestOrganisasjonId.put.unsafeUpdateNonNullable(ps, i + 0, a.organisasjonskode) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.utdanningsmulighetKode) - } + implicit lazy val write: Write[TestUtdanningstilbudRow] = new Write.Composite[TestUtdanningstilbudRow]( + List(new Write.Single(TestOrganisasjonId.put), + new Write.Single(Meta.StringMeta.put)), + a => List(a.organisasjonskode, a.utdanningsmulighetKode) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleId.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleId.scala index 6a2ac39805..1bdf1e07a7 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleId.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleId.scala @@ -42,10 +42,10 @@ object TitleId { implicit lazy val get: Get[TitleId] = Meta.StringMeta.get.map(TitleId.apply) implicit lazy val ordering: Ordering[TitleId] = Ordering.by(_.value) implicit lazy val put: Put[TitleId] = Meta.StringMeta.put.contramap(_.value) - implicit lazy val read: Read[TitleId] = Read.fromGet(get) + implicit lazy val read: Read[TitleId] = new Read.Single(get) implicit lazy val text: Text[TitleId] = new Text[TitleId] { override def unsafeEncode(v: TitleId, sb: StringBuilder) = Text.stringInstance.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: TitleId, sb: StringBuilder) = Text.stringInstance.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[TitleId] = Write.fromPut(put) + implicit lazy val write: Write[TitleId] = new Write.Single(put) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRepoImpl.scala index 7d90667729..5aa23179af 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRepoImpl.scala @@ -25,14 +25,14 @@ class TitleRepoImpl extends TitleRepo { DeleteBuilder(""""public"."title"""", TitleFields.structure) } override def deleteById(code: TitleId): ConnectionIO[Boolean] = { - sql"""delete from "public"."title" where "code" = ${fromWrite(code)(Write.fromPut(TitleId.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."title" where "code" = ${fromWrite(code)(new Write.Single(TitleId.put))}""".update.run.map(_ > 0) } override def deleteByIds(codes: Array[TitleId]): ConnectionIO[Int] = { sql"""delete from "public"."title" where "code" = ANY(${codes})""".update.run } override def insert(unsaved: TitleRow): ConnectionIO[TitleRow] = { sql"""insert into "public"."title"("code") - values (${fromWrite(unsaved.code)(Write.fromPut(TitleId.put))}) + values (${fromWrite(unsaved.code)(new Write.Single(TitleId.put))}) returning "code" """.query(using TitleRow.read).unique } @@ -46,7 +46,7 @@ class TitleRepoImpl extends TitleRepo { sql"""select "code" from "public"."title"""".query(using TitleRow.read).stream } override def selectById(code: TitleId): ConnectionIO[Option[TitleRow]] = { - sql"""select "code" from "public"."title" where "code" = ${fromWrite(code)(Write.fromPut(TitleId.put))}""".query(using TitleRow.read).option + sql"""select "code" from "public"."title" where "code" = ${fromWrite(code)(new Write.Single(TitleId.put))}""".query(using TitleRow.read).option } override def selectByIds(codes: Array[TitleId]): Stream[ConnectionIO, TitleRow] = { sql"""select "code" from "public"."title" where "code" = ANY(${codes})""".query(using TitleRow.read).stream @@ -63,7 +63,7 @@ class TitleRepoImpl extends TitleRepo { override def upsert(unsaved: TitleRow): ConnectionIO[TitleRow] = { sql"""insert into "public"."title"("code") values ( - ${fromWrite(unsaved.code)(Write.fromPut(TitleId.put))} + ${fromWrite(unsaved.code)(new Write.Single(TitleId.put))} ) on conflict ("code") do update set "code" = EXCLUDED."code" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRow.scala index f669817066..9635ab3e5f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title/TitleRow.scala @@ -7,13 +7,11 @@ package adventureworks package public package title -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.title Primary key: code */ @@ -26,25 +24,18 @@ case class TitleRow( object TitleRow { implicit lazy val decoder: Decoder[TitleRow] = Decoder.forProduct1[TitleRow, TitleId]("code")(TitleRow.apply)(TitleId.decoder) implicit lazy val encoder: Encoder[TitleRow] = Encoder.forProduct1[TitleRow, TitleId]("code")(x => (x.code))(TitleId.encoder) - implicit lazy val read: Read[TitleRow] = new Read[TitleRow]( - gets = List( - (TitleId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TitleRow( - code = TitleId.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[TitleRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TitleId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TitleRow( + code = arr(0).asInstanceOf[TitleId] ) - ) + } implicit lazy val text: Text[TitleRow] = Text.instance[TitleRow]{ (row, sb) => TitleId.text.unsafeEncode(row.code, sb) } - implicit lazy val write: Write[TitleRow] = new Write[TitleRow]( - puts = List((TitleId.put, Nullability.NoNulls)), - toList = x => List(x.code), - unsafeSet = (rs, i, a) => { - TitleId.put.unsafeSetNonNullable(rs, i + 0, a.code) - }, - unsafeUpdate = (ps, i, a) => { - TitleId.put.unsafeUpdateNonNullable(ps, i + 0, a.code) - } + implicit lazy val write: Write[TitleRow] = new Write.Composite[TitleRow]( + List(new Write.Single(TitleId.put)), + a => List(a.code) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainId.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainId.scala index 4232f77fc4..d7851170e9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainId.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainId.scala @@ -42,10 +42,10 @@ object TitleDomainId { implicit lazy val get: Get[TitleDomainId] = ShortText.get.map(TitleDomainId.apply) implicit lazy val ordering: Ordering[TitleDomainId] = Ordering.by(_.value) implicit lazy val put: Put[TitleDomainId] = ShortText.put.contramap(_.value) - implicit lazy val read: Read[TitleDomainId] = Read.fromGet(get) + implicit lazy val read: Read[TitleDomainId] = new Read.Single(get) implicit lazy val text: Text[TitleDomainId] = new Text[TitleDomainId] { override def unsafeEncode(v: TitleDomainId, sb: StringBuilder) = ShortText.text.unsafeEncode(v.value, sb) override def unsafeArrayEncode(v: TitleDomainId, sb: StringBuilder) = ShortText.text.unsafeArrayEncode(v.value, sb) } - implicit lazy val write: Write[TitleDomainId] = Write.fromPut(put) + implicit lazy val write: Write[TitleDomainId] = new Write.Single(put) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRepoImpl.scala index 8ceddcd01d..005bd10477 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRepoImpl.scala @@ -25,14 +25,14 @@ class TitleDomainRepoImpl extends TitleDomainRepo { DeleteBuilder(""""public"."title_domain"""", TitleDomainFields.structure) } override def deleteById(code: TitleDomainId): ConnectionIO[Boolean] = { - sql"""delete from "public"."title_domain" where "code" = ${fromWrite(code)(Write.fromPut(TitleDomainId.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."title_domain" where "code" = ${fromWrite(code)(new Write.Single(TitleDomainId.put))}""".update.run.map(_ > 0) } override def deleteByIds(codes: Array[TitleDomainId]): ConnectionIO[Int] = { sql"""delete from "public"."title_domain" where "code" = ANY(${codes})""".update.run } override def insert(unsaved: TitleDomainRow): ConnectionIO[TitleDomainRow] = { sql"""insert into "public"."title_domain"("code") - values (${fromWrite(unsaved.code)(Write.fromPut(TitleDomainId.put))}::text) + values (${fromWrite(unsaved.code)(new Write.Single(TitleDomainId.put))}::text) returning "code" """.query(using TitleDomainRow.read).unique } @@ -46,7 +46,7 @@ class TitleDomainRepoImpl extends TitleDomainRepo { sql"""select "code" from "public"."title_domain"""".query(using TitleDomainRow.read).stream } override def selectById(code: TitleDomainId): ConnectionIO[Option[TitleDomainRow]] = { - sql"""select "code" from "public"."title_domain" where "code" = ${fromWrite(code)(Write.fromPut(TitleDomainId.put))}""".query(using TitleDomainRow.read).option + sql"""select "code" from "public"."title_domain" where "code" = ${fromWrite(code)(new Write.Single(TitleDomainId.put))}""".query(using TitleDomainRow.read).option } override def selectByIds(codes: Array[TitleDomainId]): Stream[ConnectionIO, TitleDomainRow] = { sql"""select "code" from "public"."title_domain" where "code" = ANY(${codes})""".query(using TitleDomainRow.read).stream @@ -63,7 +63,7 @@ class TitleDomainRepoImpl extends TitleDomainRepo { override def upsert(unsaved: TitleDomainRow): ConnectionIO[TitleDomainRow] = { sql"""insert into "public"."title_domain"("code") values ( - ${fromWrite(unsaved.code)(Write.fromPut(TitleDomainId.put))}::text + ${fromWrite(unsaved.code)(new Write.Single(TitleDomainId.put))}::text ) on conflict ("code") do update set "code" = EXCLUDED."code" diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRow.scala index a902169cd8..16568af0e8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/title_domain/TitleDomainRow.scala @@ -7,13 +7,11 @@ package adventureworks package public package title_domain -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.title_domain Primary key: code */ @@ -26,25 +24,18 @@ case class TitleDomainRow( object TitleDomainRow { implicit lazy val decoder: Decoder[TitleDomainRow] = Decoder.forProduct1[TitleDomainRow, TitleDomainId]("code")(TitleDomainRow.apply)(TitleDomainId.decoder) implicit lazy val encoder: Encoder[TitleDomainRow] = Encoder.forProduct1[TitleDomainRow, TitleDomainId]("code")(x => (x.code))(TitleDomainId.encoder) - implicit lazy val read: Read[TitleDomainRow] = new Read[TitleDomainRow]( - gets = List( - (TitleDomainId.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TitleDomainRow( - code = TitleDomainId.get.unsafeGetNonNullable(rs, i + 0) + implicit lazy val read: Read[TitleDomainRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TitleDomainId.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TitleDomainRow( + code = arr(0).asInstanceOf[TitleDomainId] ) - ) + } implicit lazy val text: Text[TitleDomainRow] = Text.instance[TitleDomainRow]{ (row, sb) => TitleDomainId.text.unsafeEncode(row.code, sb) } - implicit lazy val write: Write[TitleDomainRow] = new Write[TitleDomainRow]( - puts = List((TitleDomainId.put, Nullability.NoNulls)), - toList = x => List(x.code), - unsafeSet = (rs, i, a) => { - TitleDomainId.put.unsafeSetNonNullable(rs, i + 0, a.code) - }, - unsafeUpdate = (ps, i, a) => { - TitleDomainId.put.unsafeUpdateNonNullable(ps, i + 0, a.code) - } + implicit lazy val write: Write[TitleDomainRow] = new Write.Composite[TitleDomainRow]( + List(new Write.Single(TitleDomainId.put)), + a => List(a.code) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRepoImpl.scala index 22aad81606..36eb054a77 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRepoImpl.scala @@ -27,7 +27,7 @@ class TitledpersonRepoImpl extends TitledpersonRepo { } override def insert(unsaved: TitledpersonRow): ConnectionIO[TitledpersonRow] = { sql"""insert into "public"."titledperson"("title_short", "title", "name") - values (${fromWrite(unsaved.titleShort)(Write.fromPut(TitleDomainId.put))}::text, ${fromWrite(unsaved.title)(Write.fromPut(TitleId.put))}, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}) + values (${fromWrite(unsaved.titleShort)(new Write.Single(TitleDomainId.put))}::text, ${fromWrite(unsaved.title)(new Write.Single(TitleId.put))}, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}) returning "title_short", "title", "name" """.query(using TitledpersonRow.read).unique } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRow.scala index 5ebf689ff4..6fb62f697c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/titledperson/TitledpersonRow.scala @@ -9,14 +9,12 @@ package titledperson import adventureworks.public.title.TitleId import adventureworks.public.title_domain.TitleDomainId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.titledperson */ case class TitledpersonRow( @@ -30,18 +28,17 @@ case class TitledpersonRow( object TitledpersonRow { implicit lazy val decoder: Decoder[TitledpersonRow] = Decoder.forProduct3[TitledpersonRow, TitleDomainId, TitleId, String]("title_short", "title", "name")(TitledpersonRow.apply)(TitleDomainId.decoder, TitleId.decoder, Decoder.decodeString) implicit lazy val encoder: Encoder[TitledpersonRow] = Encoder.forProduct3[TitledpersonRow, TitleDomainId, TitleId, String]("title_short", "title", "name")(x => (x.titleShort, x.title, x.name))(TitleDomainId.encoder, TitleId.encoder, Encoder.encodeString) - implicit lazy val read: Read[TitledpersonRow] = new Read[TitledpersonRow]( - gets = List( - (TitleDomainId.get, Nullability.NoNulls), - (TitleId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TitledpersonRow( - titleShort = TitleDomainId.get.unsafeGetNonNullable(rs, i + 0), - title = TitleId.get.unsafeGetNonNullable(rs, i + 1), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[TitledpersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(TitleDomainId.get).asInstanceOf[Read[Any]], + new Read.Single(TitleId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TitledpersonRow( + titleShort = arr(0).asInstanceOf[TitleDomainId], + title = arr(1).asInstanceOf[TitleId], + name = arr(2).asInstanceOf[String] ) - ) + } implicit lazy val text: Text[TitledpersonRow] = Text.instance[TitledpersonRow]{ (row, sb) => TitleDomainId.text.unsafeEncode(row.titleShort, sb) sb.append(Text.DELIMETER) @@ -49,20 +46,10 @@ object TitledpersonRow { sb.append(Text.DELIMETER) Text.stringInstance.unsafeEncode(row.name, sb) } - implicit lazy val write: Write[TitledpersonRow] = new Write[TitledpersonRow]( - puts = List((TitleDomainId.put, Nullability.NoNulls), - (TitleId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls)), - toList = x => List(x.titleShort, x.title, x.name), - unsafeSet = (rs, i, a) => { - TitleDomainId.put.unsafeSetNonNullable(rs, i + 0, a.titleShort) - TitleId.put.unsafeSetNonNullable(rs, i + 1, a.title) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.name) - }, - unsafeUpdate = (ps, i, a) => { - TitleDomainId.put.unsafeUpdateNonNullable(ps, i + 0, a.titleShort) - TitleId.put.unsafeUpdateNonNullable(ps, i + 1, a.title) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.name) - } + implicit lazy val write: Write[TitledpersonRow] = new Write.Composite[TitledpersonRow]( + List(new Write.Single(TitleDomainId.put), + new Write.Single(TitleId.put), + new Write.Single(Meta.StringMeta.put)), + a => List(a.titleShort, a.title, a.name) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRepoImpl.scala index b19b326d4f..8b92cc45e2 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRepoImpl.scala @@ -30,28 +30,28 @@ class UsersRepoImpl extends UsersRepo { DeleteBuilder(""""public"."users"""", UsersFields.structure) } override def deleteById(userId: UsersId): ConnectionIO[Boolean] = { - sql"""delete from "public"."users" where "user_id" = ${fromWrite(userId)(Write.fromPut(UsersId.put))}""".update.run.map(_ > 0) + sql"""delete from "public"."users" where "user_id" = ${fromWrite(userId)(new Write.Single(UsersId.put))}""".update.run.map(_ > 0) } override def deleteByIds(userIds: Array[UsersId]): ConnectionIO[Int] = { sql"""delete from "public"."users" where "user_id" = ANY(${userIds})""".update.run } override def insert(unsaved: UsersRow): ConnectionIO[UsersRow] = { sql"""insert into "public"."users"("user_id", "name", "last_name", "email", "password", "created_at", "verified_on") - values (${fromWrite(unsaved.userId)(Write.fromPut(UsersId.put))}::uuid, ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.lastName)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.email)(Write.fromPut(TypoUnknownCitext.put))}::citext, ${fromWrite(unsaved.password)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.createdAt)(Write.fromPut(TypoInstant.put))}::timestamptz, ${fromWrite(unsaved.verifiedOn)(Write.fromPutOption(TypoInstant.put))}::timestamptz) + values (${fromWrite(unsaved.userId)(new Write.Single(UsersId.put))}::uuid, ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.lastName)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.email)(new Write.Single(TypoUnknownCitext.put))}::citext, ${fromWrite(unsaved.password)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.createdAt)(new Write.Single(TypoInstant.put))}::timestamptz, ${fromWrite(unsaved.verifiedOn)(new Write.SingleOpt(TypoInstant.put))}::timestamptz) returning "user_id", "name", "last_name", "email"::text, "password", "created_at"::text, "verified_on"::text """.query(using UsersRow.read).unique } override def insert(unsaved: UsersRowUnsaved): ConnectionIO[UsersRow] = { val fs = List( - Some((Fragment.const0(s""""user_id""""), fr"${fromWrite(unsaved.userId)(Write.fromPut(UsersId.put))}::uuid")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""last_name""""), fr"${fromWrite(unsaved.lastName)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""email""""), fr"${fromWrite(unsaved.email)(Write.fromPut(TypoUnknownCitext.put))}::citext")), - Some((Fragment.const0(s""""password""""), fr"${fromWrite(unsaved.password)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""verified_on""""), fr"${fromWrite(unsaved.verifiedOn)(Write.fromPutOption(TypoInstant.put))}::timestamptz")), + Some((Fragment.const0(s""""user_id""""), fr"${fromWrite(unsaved.userId)(new Write.Single(UsersId.put))}::uuid")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""last_name""""), fr"${fromWrite(unsaved.lastName)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""email""""), fr"${fromWrite(unsaved.email)(new Write.Single(TypoUnknownCitext.put))}::citext")), + Some((Fragment.const0(s""""password""""), fr"${fromWrite(unsaved.password)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""verified_on""""), fr"${fromWrite(unsaved.verifiedOn)(new Write.SingleOpt(TypoInstant.put))}::timestamptz")), unsaved.createdAt match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""created_at""""), fr"${fromWrite(value: TypoInstant)(Write.fromPut(TypoInstant.put))}::timestamptz")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""created_at""""), fr"${fromWrite(value: TypoInstant)(new Write.Single(TypoInstant.put))}::timestamptz")) } ).flatten @@ -83,7 +83,7 @@ class UsersRepoImpl extends UsersRepo { sql"""select "user_id", "name", "last_name", "email"::text, "password", "created_at"::text, "verified_on"::text from "public"."users"""".query(using UsersRow.read).stream } override def selectById(userId: UsersId): ConnectionIO[Option[UsersRow]] = { - sql"""select "user_id", "name", "last_name", "email"::text, "password", "created_at"::text, "verified_on"::text from "public"."users" where "user_id" = ${fromWrite(userId)(Write.fromPut(UsersId.put))}""".query(using UsersRow.read).option + sql"""select "user_id", "name", "last_name", "email"::text, "password", "created_at"::text, "verified_on"::text from "public"."users" where "user_id" = ${fromWrite(userId)(new Write.Single(UsersId.put))}""".query(using UsersRow.read).option } override def selectByIds(userIds: Array[UsersId]): Stream[ConnectionIO, UsersRow] = { sql"""select "user_id", "name", "last_name", "email"::text, "password", "created_at"::text, "verified_on"::text from "public"."users" where "user_id" = ANY(${userIds})""".query(using UsersRow.read).stream @@ -97,7 +97,7 @@ class UsersRepoImpl extends UsersRepo { override def selectByUniqueEmail(email: TypoUnknownCitext): ConnectionIO[Option[UsersRow]] = { sql"""select "user_id", "name", "last_name", "email"::text, "password", "created_at"::text, "verified_on"::text from "public"."users" - where "email" = ${fromWrite(email)(Write.fromPut(TypoUnknownCitext.put))} + where "email" = ${fromWrite(email)(new Write.Single(TypoUnknownCitext.put))} """.query(using UsersRow.read).option } override def update: UpdateBuilder[UsersFields, UsersRow] = { @@ -106,13 +106,13 @@ class UsersRepoImpl extends UsersRepo { override def update(row: UsersRow): ConnectionIO[Boolean] = { val userId = row.userId sql"""update "public"."users" - set "name" = ${fromWrite(row.name)(Write.fromPut(Meta.StringMeta.put))}, - "last_name" = ${fromWrite(row.lastName)(Write.fromPutOption(Meta.StringMeta.put))}, - "email" = ${fromWrite(row.email)(Write.fromPut(TypoUnknownCitext.put))}::citext, - "password" = ${fromWrite(row.password)(Write.fromPut(Meta.StringMeta.put))}, - "created_at" = ${fromWrite(row.createdAt)(Write.fromPut(TypoInstant.put))}::timestamptz, - "verified_on" = ${fromWrite(row.verifiedOn)(Write.fromPutOption(TypoInstant.put))}::timestamptz - where "user_id" = ${fromWrite(userId)(Write.fromPut(UsersId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Meta.StringMeta.put))}, + "last_name" = ${fromWrite(row.lastName)(new Write.SingleOpt(Meta.StringMeta.put))}, + "email" = ${fromWrite(row.email)(new Write.Single(TypoUnknownCitext.put))}::citext, + "password" = ${fromWrite(row.password)(new Write.Single(Meta.StringMeta.put))}, + "created_at" = ${fromWrite(row.createdAt)(new Write.Single(TypoInstant.put))}::timestamptz, + "verified_on" = ${fromWrite(row.verifiedOn)(new Write.SingleOpt(TypoInstant.put))}::timestamptz + where "user_id" = ${fromWrite(userId)(new Write.Single(UsersId.put))}""" .update .run .map(_ > 0) @@ -120,13 +120,13 @@ class UsersRepoImpl extends UsersRepo { override def upsert(unsaved: UsersRow): ConnectionIO[UsersRow] = { sql"""insert into "public"."users"("user_id", "name", "last_name", "email", "password", "created_at", "verified_on") values ( - ${fromWrite(unsaved.userId)(Write.fromPut(UsersId.put))}::uuid, - ${fromWrite(unsaved.name)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.lastName)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.email)(Write.fromPut(TypoUnknownCitext.put))}::citext, - ${fromWrite(unsaved.password)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.createdAt)(Write.fromPut(TypoInstant.put))}::timestamptz, - ${fromWrite(unsaved.verifiedOn)(Write.fromPutOption(TypoInstant.put))}::timestamptz + ${fromWrite(unsaved.userId)(new Write.Single(UsersId.put))}::uuid, + ${fromWrite(unsaved.name)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.lastName)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.email)(new Write.Single(TypoUnknownCitext.put))}::citext, + ${fromWrite(unsaved.password)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.createdAt)(new Write.Single(TypoInstant.put))}::timestamptz, + ${fromWrite(unsaved.verifiedOn)(new Write.SingleOpt(TypoInstant.put))}::timestamptz ) on conflict ("user_id") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRow.scala index cb941331c1..e757279225 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/public/users/UsersRow.scala @@ -10,14 +10,12 @@ package users import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoInstant import adventureworks.customtypes.TypoUnknownCitext -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: public.users Primary key: user_id */ @@ -39,26 +37,25 @@ case class UsersRow( object UsersRow { implicit lazy val decoder: Decoder[UsersRow] = Decoder.forProduct7[UsersRow, UsersId, String, Option[String], TypoUnknownCitext, String, TypoInstant, Option[TypoInstant]]("user_id", "name", "last_name", "email", "password", "created_at", "verified_on")(UsersRow.apply)(UsersId.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), TypoUnknownCitext.decoder, Decoder.decodeString, TypoInstant.decoder, Decoder.decodeOption(TypoInstant.decoder)) implicit lazy val encoder: Encoder[UsersRow] = Encoder.forProduct7[UsersRow, UsersId, String, Option[String], TypoUnknownCitext, String, TypoInstant, Option[TypoInstant]]("user_id", "name", "last_name", "email", "password", "created_at", "verified_on")(x => (x.userId, x.name, x.lastName, x.email, x.password, x.createdAt, x.verifiedOn))(UsersId.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), TypoUnknownCitext.encoder, Encoder.encodeString, TypoInstant.encoder, Encoder.encodeOption(TypoInstant.encoder)) - implicit lazy val read: Read[UsersRow] = new Read[UsersRow]( - gets = List( - (UsersId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUnknownCitext.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoInstant.get, Nullability.NoNulls), - (TypoInstant.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => UsersRow( - userId = UsersId.get.unsafeGetNonNullable(rs, i + 0), - name = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - lastName = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - email = TypoUnknownCitext.get.unsafeGetNonNullable(rs, i + 3), - password = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - createdAt = TypoInstant.get.unsafeGetNonNullable(rs, i + 5), - verifiedOn = TypoInstant.get.unsafeGetNullable(rs, i + 6) + implicit lazy val read: Read[UsersRow] = new Read.CompositeOfInstances(Array( + new Read.Single(UsersId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUnknownCitext.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoInstant.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoInstant.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + UsersRow( + userId = arr(0).asInstanceOf[UsersId], + name = arr(1).asInstanceOf[String], + lastName = arr(2).asInstanceOf[Option[String]], + email = arr(3).asInstanceOf[TypoUnknownCitext], + password = arr(4).asInstanceOf[String], + createdAt = arr(5).asInstanceOf[TypoInstant], + verifiedOn = arr(6).asInstanceOf[Option[TypoInstant]] ) - ) + } implicit lazy val text: Text[UsersRow] = Text.instance[UsersRow]{ (row, sb) => UsersId.text.unsafeEncode(row.userId, sb) sb.append(Text.DELIMETER) @@ -74,32 +71,14 @@ object UsersRow { sb.append(Text.DELIMETER) Text.option(TypoInstant.text).unsafeEncode(row.verifiedOn, sb) } - implicit lazy val write: Write[UsersRow] = new Write[UsersRow]( - puts = List((UsersId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoUnknownCitext.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoInstant.put, Nullability.NoNulls), - (TypoInstant.put, Nullability.Nullable)), - toList = x => List(x.userId, x.name, x.lastName, x.email, x.password, x.createdAt, x.verifiedOn), - unsafeSet = (rs, i, a) => { - UsersId.put.unsafeSetNonNullable(rs, i + 0, a.userId) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.name) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.lastName) - TypoUnknownCitext.put.unsafeSetNonNullable(rs, i + 3, a.email) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 4, a.password) - TypoInstant.put.unsafeSetNonNullable(rs, i + 5, a.createdAt) - TypoInstant.put.unsafeSetNullable(rs, i + 6, a.verifiedOn) - }, - unsafeUpdate = (ps, i, a) => { - UsersId.put.unsafeUpdateNonNullable(ps, i + 0, a.userId) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.lastName) - TypoUnknownCitext.put.unsafeUpdateNonNullable(ps, i + 3, a.email) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.password) - TypoInstant.put.unsafeUpdateNonNullable(ps, i + 5, a.createdAt) - TypoInstant.put.unsafeUpdateNullable(ps, i + 6, a.verifiedOn) - } + implicit lazy val write: Write[UsersRow] = new Write.Composite[UsersRow]( + List(new Write.Single(UsersId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoUnknownCitext.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoInstant.put), + new Write.Single(TypoInstant.put).toOpt), + a => List(a.userId, a.name, a.lastName, a.email, a.password, a.createdAt, a.verifiedOn) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRepoImpl.scala index cf2f09973f..6c3f32543d 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRepoImpl.scala @@ -32,7 +32,7 @@ class ProductvendorRepoImpl extends ProductvendorRepo { DeleteBuilder(""""purchasing"."productvendor"""", ProductvendorFields.structure) } override def deleteById(compositeId: ProductvendorId): ConnectionIO[Boolean] = { - sql"""delete from "purchasing"."productvendor" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "purchasing"."productvendor" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[ProductvendorId]): ConnectionIO[Int] = { val productid = compositeIds.map(_.productid) @@ -46,25 +46,25 @@ class ProductvendorRepoImpl extends ProductvendorRepo { } override def insert(unsaved: ProductvendorRow): ConnectionIO[ProductvendorRow] = { sql"""insert into "purchasing"."productvendor"("productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate", "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate") - values (${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.averageleadtime)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.standardprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.lastreceiptcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.lastreceiptdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.minorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.maxorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.onorderqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.averageleadtime)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.standardprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.lastreceiptcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.lastreceiptdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.minorderqty)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.maxorderqty)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.onorderqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate"::text, "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate"::text """.query(using ProductvendorRow.read).unique } override def insert(unsaved: ProductvendorRowUnsaved): ConnectionIO[ProductvendorRow] = { val fs = List( - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""averageleadtime""""), fr"${fromWrite(unsaved.averageleadtime)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""standardprice""""), fr"${fromWrite(unsaved.standardprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""lastreceiptcost""""), fr"${fromWrite(unsaved.lastreceiptcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""lastreceiptdate""""), fr"${fromWrite(unsaved.lastreceiptdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""minorderqty""""), fr"${fromWrite(unsaved.minorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""maxorderqty""""), fr"${fromWrite(unsaved.maxorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""onorderqty""""), fr"${fromWrite(unsaved.onorderqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4")), - Some((Fragment.const0(s""""unitmeasurecode""""), fr"${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""averageleadtime""""), fr"${fromWrite(unsaved.averageleadtime)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""standardprice""""), fr"${fromWrite(unsaved.standardprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""lastreceiptcost""""), fr"${fromWrite(unsaved.lastreceiptcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""lastreceiptdate""""), fr"${fromWrite(unsaved.lastreceiptdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""minorderqty""""), fr"${fromWrite(unsaved.minorderqty)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""maxorderqty""""), fr"${fromWrite(unsaved.maxorderqty)(new Write.Single(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""onorderqty""""), fr"${fromWrite(unsaved.onorderqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""unitmeasurecode""""), fr"${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -96,7 +96,7 @@ class ProductvendorRepoImpl extends ProductvendorRepo { sql"""select "productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate"::text, "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate"::text from "purchasing"."productvendor"""".query(using ProductvendorRow.read).stream } override def selectById(compositeId: ProductvendorId): ConnectionIO[Option[ProductvendorRow]] = { - sql"""select "productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate"::text, "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate"::text from "purchasing"."productvendor" where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using ProductvendorRow.read).option + sql"""select "productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate"::text, "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate"::text from "purchasing"."productvendor" where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using ProductvendorRow.read).option } override def selectByIds(compositeIds: Array[ProductvendorId]): Stream[ConnectionIO, ProductvendorRow] = { val productid = compositeIds.map(_.productid) @@ -120,16 +120,16 @@ class ProductvendorRepoImpl extends ProductvendorRepo { override def update(row: ProductvendorRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "purchasing"."productvendor" - set "averageleadtime" = ${fromWrite(row.averageleadtime)(Write.fromPut(Meta.IntMeta.put))}::int4, - "standardprice" = ${fromWrite(row.standardprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "lastreceiptcost" = ${fromWrite(row.lastreceiptcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - "lastreceiptdate" = ${fromWrite(row.lastreceiptdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "minorderqty" = ${fromWrite(row.minorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - "maxorderqty" = ${fromWrite(row.maxorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - "onorderqty" = ${fromWrite(row.onorderqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4, - "unitmeasurecode" = ${fromWrite(row.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))} AND "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "averageleadtime" = ${fromWrite(row.averageleadtime)(new Write.Single(Meta.IntMeta.put))}::int4, + "standardprice" = ${fromWrite(row.standardprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "lastreceiptcost" = ${fromWrite(row.lastreceiptcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + "lastreceiptdate" = ${fromWrite(row.lastreceiptdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "minorderqty" = ${fromWrite(row.minorderqty)(new Write.Single(Meta.IntMeta.put))}::int4, + "maxorderqty" = ${fromWrite(row.maxorderqty)(new Write.Single(Meta.IntMeta.put))}::int4, + "onorderqty" = ${fromWrite(row.onorderqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, + "unitmeasurecode" = ${fromWrite(row.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))} AND "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -137,17 +137,17 @@ class ProductvendorRepoImpl extends ProductvendorRepo { override def upsert(unsaved: ProductvendorRow): ConnectionIO[ProductvendorRow] = { sql"""insert into "purchasing"."productvendor"("productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate", "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate") values ( - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.averageleadtime)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.standardprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.lastreceiptcost)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.lastreceiptdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.minorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.maxorderqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.onorderqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.unitmeasurecode)(Write.fromPut(UnitmeasureId.put))}::bpchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.averageleadtime)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.standardprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.lastreceiptcost)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.lastreceiptdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.minorderqty)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.maxorderqty)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.onorderqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.unitmeasurecode)(new Write.Single(UnitmeasureId.put))}::bpchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("productid", "businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRow.scala index 70e91b70c5..4b7005c97f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/productvendor/ProductvendorRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.businessentity.BusinessentityId import adventureworks.production.product.ProductId import adventureworks.production.unitmeasure.UnitmeasureId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: purchasing.productvendor Cross-reference table mapping vendors with the products they supply. @@ -68,34 +66,33 @@ object ProductvendorRow { new ProductvendorRow(compositeId.productid, compositeId.businessentityid, averageleadtime, standardprice, lastreceiptcost, lastreceiptdate, minorderqty, maxorderqty, onorderqty, unitmeasurecode, modifieddate) implicit lazy val decoder: Decoder[ProductvendorRow] = Decoder.forProduct11[ProductvendorRow, ProductId, BusinessentityId, Int, BigDecimal, Option[BigDecimal], Option[TypoLocalDateTime], Int, Int, Option[Int], UnitmeasureId, TypoLocalDateTime]("productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate", "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate")(ProductvendorRow.apply)(ProductId.decoder, BusinessentityId.decoder, Decoder.decodeInt, Decoder.decodeBigDecimal, Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeInt, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeInt), UnitmeasureId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ProductvendorRow] = Encoder.forProduct11[ProductvendorRow, ProductId, BusinessentityId, Int, BigDecimal, Option[BigDecimal], Option[TypoLocalDateTime], Int, Int, Option[Int], UnitmeasureId, TypoLocalDateTime]("productid", "businessentityid", "averageleadtime", "standardprice", "lastreceiptcost", "lastreceiptdate", "minorderqty", "maxorderqty", "onorderqty", "unitmeasurecode", "modifieddate")(x => (x.productid, x.businessentityid, x.averageleadtime, x.standardprice, x.lastreceiptcost, x.lastreceiptdate, x.minorderqty, x.maxorderqty, x.onorderqty, x.unitmeasurecode, x.modifieddate))(ProductId.encoder, BusinessentityId.encoder, Encoder.encodeInt, Encoder.encodeBigDecimal, Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeInt, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeInt), UnitmeasureId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ProductvendorRow] = new Read[ProductvendorRow]( - gets = List( - (ProductId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.Nullable), - (UnitmeasureId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ProductvendorRow( - productid = ProductId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - averageleadtime = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - standardprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - lastreceiptcost = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 4), - lastreceiptdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 5), - minorderqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 6), - maxorderqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 7), - onorderqty = Meta.IntMeta.get.unsafeGetNullable(rs, i + 8), - unitmeasurecode = UnitmeasureId.get.unsafeGetNonNullable(rs, i + 9), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 10) + implicit lazy val read: Read[ProductvendorRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(UnitmeasureId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ProductvendorRow( + productid = arr(0).asInstanceOf[ProductId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + averageleadtime = arr(2).asInstanceOf[Int], + standardprice = arr(3).asInstanceOf[BigDecimal], + lastreceiptcost = arr(4).asInstanceOf[Option[BigDecimal]], + lastreceiptdate = arr(5).asInstanceOf[Option[TypoLocalDateTime]], + minorderqty = arr(6).asInstanceOf[Int], + maxorderqty = arr(7).asInstanceOf[Int], + onorderqty = arr(8).asInstanceOf[Option[Int]], + unitmeasurecode = arr(9).asInstanceOf[UnitmeasureId], + modifieddate = arr(10).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ProductvendorRow] = Text.instance[ProductvendorRow]{ (row, sb) => ProductId.text.unsafeEncode(row.productid, sb) sb.append(Text.DELIMETER) @@ -119,44 +116,18 @@ object ProductvendorRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ProductvendorRow] = new Write[ProductvendorRow]( - puts = List((ProductId.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.Nullable), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.Nullable), - (UnitmeasureId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.productid, x.businessentityid, x.averageleadtime, x.standardprice, x.lastreceiptcost, x.lastreceiptdate, x.minorderqty, x.maxorderqty, x.onorderqty, x.unitmeasurecode, x.modifieddate), - unsafeSet = (rs, i, a) => { - ProductId.put.unsafeSetNonNullable(rs, i + 0, a.productid) - BusinessentityId.put.unsafeSetNonNullable(rs, i + 1, a.businessentityid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 2, a.averageleadtime) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.standardprice) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 4, a.lastreceiptcost) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 5, a.lastreceiptdate) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 6, a.minorderqty) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 7, a.maxorderqty) - Meta.IntMeta.put.unsafeSetNullable(rs, i + 8, a.onorderqty) - UnitmeasureId.put.unsafeSetNonNullable(rs, i + 9, a.unitmeasurecode) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 10, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ProductId.put.unsafeUpdateNonNullable(ps, i + 0, a.productid) - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 1, a.businessentityid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.averageleadtime) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.standardprice) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 4, a.lastreceiptcost) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 5, a.lastreceiptdate) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.minorderqty) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.maxorderqty) - Meta.IntMeta.put.unsafeUpdateNullable(ps, i + 8, a.onorderqty) - UnitmeasureId.put.unsafeUpdateNonNullable(ps, i + 9, a.unitmeasurecode) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 10, a.modifieddate) - } + implicit lazy val write: Write[ProductvendorRow] = new Write.Composite[ProductvendorRow]( + List(new Write.Single(ProductId.put), + new Write.Single(BusinessentityId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.IntMeta.put).toOpt, + new Write.Single(UnitmeasureId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.productid, a.businessentityid, a.averageleadtime, a.standardprice, a.lastreceiptcost, a.lastreceiptdate, a.minorderqty, a.maxorderqty, a.onorderqty, a.unitmeasurecode, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRepoImpl.scala index 9b98552f77..6e6118c290 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRepoImpl.scala @@ -25,7 +25,7 @@ class PurchaseorderdetailRepoImpl extends PurchaseorderdetailRepo { sql"""select "purchaseorderid", "purchaseorderdetailid", "duedate"::text, "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate"::text from "purchasing"."purchaseorderdetail"""".query(using PurchaseorderdetailRow.read).stream } override def selectById(compositeId: PurchaseorderdetailId): ConnectionIO[Option[PurchaseorderdetailRow]] = { - sql"""select "purchaseorderid", "purchaseorderdetailid", "duedate"::text, "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate"::text from "purchasing"."purchaseorderdetail" where "purchaseorderid" = ${fromWrite(compositeId.purchaseorderid)(Write.fromPut(PurchaseorderheaderId.put))} AND "purchaseorderdetailid" = ${fromWrite(compositeId.purchaseorderdetailid)(Write.fromPut(Meta.IntMeta.put))}""".query(using PurchaseorderdetailRow.read).option + sql"""select "purchaseorderid", "purchaseorderdetailid", "duedate"::text, "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate"::text from "purchasing"."purchaseorderdetail" where "purchaseorderid" = ${fromWrite(compositeId.purchaseorderid)(new Write.Single(PurchaseorderheaderId.put))} AND "purchaseorderdetailid" = ${fromWrite(compositeId.purchaseorderdetailid)(new Write.Single(Meta.IntMeta.put))}""".query(using PurchaseorderdetailRow.read).option } override def selectByIds(compositeIds: Array[PurchaseorderdetailId]): Stream[ConnectionIO, PurchaseorderdetailRow] = { val purchaseorderid = compositeIds.map(_.purchaseorderid) diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRow.scala index 403259997b..6ebfdbe62a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderdetail/PurchaseorderdetailRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.production.product.ProductId import adventureworks.purchasing.purchaseorderheader.PurchaseorderheaderId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: purchasing.purchaseorderdetail Individual products associated with a specific purchase order. See PurchaseOrderHeader. @@ -62,30 +60,29 @@ object PurchaseorderdetailRow { new PurchaseorderdetailRow(compositeId.purchaseorderid, compositeId.purchaseorderdetailid, duedate, orderqty, productid, unitprice, receivedqty, rejectedqty, modifieddate) implicit lazy val decoder: Decoder[PurchaseorderdetailRow] = Decoder.forProduct9[PurchaseorderdetailRow, PurchaseorderheaderId, Int, TypoLocalDateTime, TypoShort, ProductId, BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("purchaseorderid", "purchaseorderdetailid", "duedate", "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate")(PurchaseorderdetailRow.apply)(PurchaseorderheaderId.decoder, Decoder.decodeInt, TypoLocalDateTime.decoder, TypoShort.decoder, ProductId.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PurchaseorderdetailRow] = Encoder.forProduct9[PurchaseorderdetailRow, PurchaseorderheaderId, Int, TypoLocalDateTime, TypoShort, ProductId, BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("purchaseorderid", "purchaseorderdetailid", "duedate", "orderqty", "productid", "unitprice", "receivedqty", "rejectedqty", "modifieddate")(x => (x.purchaseorderid, x.purchaseorderdetailid, x.duedate, x.orderqty, x.productid, x.unitprice, x.receivedqty, x.rejectedqty, x.modifieddate))(PurchaseorderheaderId.encoder, Encoder.encodeInt, TypoLocalDateTime.encoder, TypoShort.encoder, ProductId.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PurchaseorderdetailRow] = new Read[PurchaseorderdetailRow]( - gets = List( - (PurchaseorderheaderId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PurchaseorderdetailRow( - purchaseorderid = PurchaseorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - purchaseorderdetailid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - duedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - orderqty = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 4), - unitprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - receivedqty = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - rejectedqty = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[PurchaseorderdetailRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PurchaseorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PurchaseorderdetailRow( + purchaseorderid = arr(0).asInstanceOf[PurchaseorderheaderId], + purchaseorderdetailid = arr(1).asInstanceOf[Int], + duedate = arr(2).asInstanceOf[TypoLocalDateTime], + orderqty = arr(3).asInstanceOf[TypoShort], + productid = arr(4).asInstanceOf[ProductId], + unitprice = arr(5).asInstanceOf[BigDecimal], + receivedqty = arr(6).asInstanceOf[BigDecimal], + rejectedqty = arr(7).asInstanceOf[BigDecimal], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PurchaseorderdetailRow] = Text.instance[PurchaseorderdetailRow]{ (row, sb) => PurchaseorderheaderId.text.unsafeEncode(row.purchaseorderid, sb) sb.append(Text.DELIMETER) @@ -105,38 +102,16 @@ object PurchaseorderdetailRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PurchaseorderdetailRow] = new Write[PurchaseorderdetailRow]( - puts = List((PurchaseorderheaderId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.purchaseorderid, x.purchaseorderdetailid, x.duedate, x.orderqty, x.productid, x.unitprice, x.receivedqty, x.rejectedqty, x.modifieddate), - unsafeSet = (rs, i, a) => { - PurchaseorderheaderId.put.unsafeSetNonNullable(rs, i + 0, a.purchaseorderid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 1, a.purchaseorderdetailid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.duedate) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.orderqty) - ProductId.put.unsafeSetNonNullable(rs, i + 4, a.productid) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 5, a.unitprice) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 6, a.receivedqty) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 7, a.rejectedqty) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - PurchaseorderheaderId.put.unsafeUpdateNonNullable(ps, i + 0, a.purchaseorderid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.purchaseorderdetailid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.duedate) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.orderqty) - ProductId.put.unsafeUpdateNonNullable(ps, i + 4, a.productid) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.unitprice) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.receivedqty) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.rejectedqty) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[PurchaseorderdetailRow] = new Write.Composite[PurchaseorderdetailRow]( + List(new Write.Single(PurchaseorderheaderId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoShort.put), + new Write.Single(ProductId.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.purchaseorderid, a.purchaseorderdetailid, a.duedate, a.orderqty, a.productid, a.unitprice, a.receivedqty, a.rejectedqty, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRepoImpl.scala index 7cce42e5cd..0cfc06e579 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRepoImpl.scala @@ -32,54 +32,54 @@ class PurchaseorderheaderRepoImpl extends PurchaseorderheaderRepo { DeleteBuilder(""""purchasing"."purchaseorderheader"""", PurchaseorderheaderFields.structure) } override def deleteById(purchaseorderid: PurchaseorderheaderId): ConnectionIO[Boolean] = { - sql"""delete from "purchasing"."purchaseorderheader" where "purchaseorderid" = ${fromWrite(purchaseorderid)(Write.fromPut(PurchaseorderheaderId.put))}""".update.run.map(_ > 0) + sql"""delete from "purchasing"."purchaseorderheader" where "purchaseorderid" = ${fromWrite(purchaseorderid)(new Write.Single(PurchaseorderheaderId.put))}""".update.run.map(_ > 0) } override def deleteByIds(purchaseorderids: Array[PurchaseorderheaderId]): ConnectionIO[Int] = { sql"""delete from "purchasing"."purchaseorderheader" where "purchaseorderid" = ANY(${purchaseorderids})""".update.run } override def insert(unsaved: PurchaseorderheaderRow): ConnectionIO[PurchaseorderheaderRow] = { sql"""insert into "purchasing"."purchaseorderheader"("purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate", "shipdate", "subtotal", "taxamt", "freight", "modifieddate") - values (${fromWrite(unsaved.purchaseorderid)(Write.fromPut(PurchaseorderheaderId.put))}::int4, ${fromWrite(unsaved.revisionnumber)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.employeeid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.vendorid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, ${fromWrite(unsaved.orderdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.subtotal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.taxamt)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.freight)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.purchaseorderid)(new Write.Single(PurchaseorderheaderId.put))}::int4, ${fromWrite(unsaved.revisionnumber)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.employeeid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.vendorid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, ${fromWrite(unsaved.orderdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.subtotal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.taxamt)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.freight)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate"::text, "shipdate"::text, "subtotal", "taxamt", "freight", "modifieddate"::text """.query(using PurchaseorderheaderRow.read).unique } override def insert(unsaved: PurchaseorderheaderRowUnsaved): ConnectionIO[PurchaseorderheaderRow] = { val fs = List( - Some((Fragment.const0(s""""employeeid""""), fr"${fromWrite(unsaved.employeeid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""vendorid""""), fr"${fromWrite(unsaved.vendorid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""shipmethodid""""), fr"${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4")), - Some((Fragment.const0(s""""shipdate""""), fr"${fromWrite(unsaved.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""employeeid""""), fr"${fromWrite(unsaved.employeeid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""vendorid""""), fr"${fromWrite(unsaved.vendorid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""shipmethodid""""), fr"${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4")), + Some((Fragment.const0(s""""shipdate""""), fr"${fromWrite(unsaved.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), unsaved.purchaseorderid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""purchaseorderid""""), fr"${fromWrite(value: PurchaseorderheaderId)(Write.fromPut(PurchaseorderheaderId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""purchaseorderid""""), fr"${fromWrite(value: PurchaseorderheaderId)(new Write.Single(PurchaseorderheaderId.put))}::int4")) }, unsaved.revisionnumber match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""revisionnumber""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""revisionnumber""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.status match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""status""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""status""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.orderdate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""orderdate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""orderdate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.subtotal match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""subtotal""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""subtotal""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.taxamt match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""taxamt""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""taxamt""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.freight match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""freight""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""freight""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -111,7 +111,7 @@ class PurchaseorderheaderRepoImpl extends PurchaseorderheaderRepo { sql"""select "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate"::text, "shipdate"::text, "subtotal", "taxamt", "freight", "modifieddate"::text from "purchasing"."purchaseorderheader"""".query(using PurchaseorderheaderRow.read).stream } override def selectById(purchaseorderid: PurchaseorderheaderId): ConnectionIO[Option[PurchaseorderheaderRow]] = { - sql"""select "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate"::text, "shipdate"::text, "subtotal", "taxamt", "freight", "modifieddate"::text from "purchasing"."purchaseorderheader" where "purchaseorderid" = ${fromWrite(purchaseorderid)(Write.fromPut(PurchaseorderheaderId.put))}""".query(using PurchaseorderheaderRow.read).option + sql"""select "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate"::text, "shipdate"::text, "subtotal", "taxamt", "freight", "modifieddate"::text from "purchasing"."purchaseorderheader" where "purchaseorderid" = ${fromWrite(purchaseorderid)(new Write.Single(PurchaseorderheaderId.put))}""".query(using PurchaseorderheaderRow.read).option } override def selectByIds(purchaseorderids: Array[PurchaseorderheaderId]): Stream[ConnectionIO, PurchaseorderheaderRow] = { sql"""select "purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate"::text, "shipdate"::text, "subtotal", "taxamt", "freight", "modifieddate"::text from "purchasing"."purchaseorderheader" where "purchaseorderid" = ANY(${purchaseorderids})""".query(using PurchaseorderheaderRow.read).stream @@ -128,18 +128,18 @@ class PurchaseorderheaderRepoImpl extends PurchaseorderheaderRepo { override def update(row: PurchaseorderheaderRow): ConnectionIO[Boolean] = { val purchaseorderid = row.purchaseorderid sql"""update "purchasing"."purchaseorderheader" - set "revisionnumber" = ${fromWrite(row.revisionnumber)(Write.fromPut(TypoShort.put))}::int2, - "status" = ${fromWrite(row.status)(Write.fromPut(TypoShort.put))}::int2, - "employeeid" = ${fromWrite(row.employeeid)(Write.fromPut(BusinessentityId.put))}::int4, - "vendorid" = ${fromWrite(row.vendorid)(Write.fromPut(BusinessentityId.put))}::int4, - "shipmethodid" = ${fromWrite(row.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, - "orderdate" = ${fromWrite(row.orderdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "shipdate" = ${fromWrite(row.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "subtotal" = ${fromWrite(row.subtotal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "taxamt" = ${fromWrite(row.taxamt)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "freight" = ${fromWrite(row.freight)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "purchaseorderid" = ${fromWrite(purchaseorderid)(Write.fromPut(PurchaseorderheaderId.put))}""" + set "revisionnumber" = ${fromWrite(row.revisionnumber)(new Write.Single(TypoShort.put))}::int2, + "status" = ${fromWrite(row.status)(new Write.Single(TypoShort.put))}::int2, + "employeeid" = ${fromWrite(row.employeeid)(new Write.Single(BusinessentityId.put))}::int4, + "vendorid" = ${fromWrite(row.vendorid)(new Write.Single(BusinessentityId.put))}::int4, + "shipmethodid" = ${fromWrite(row.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, + "orderdate" = ${fromWrite(row.orderdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "shipdate" = ${fromWrite(row.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "subtotal" = ${fromWrite(row.subtotal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "taxamt" = ${fromWrite(row.taxamt)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "freight" = ${fromWrite(row.freight)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "purchaseorderid" = ${fromWrite(purchaseorderid)(new Write.Single(PurchaseorderheaderId.put))}""" .update .run .map(_ > 0) @@ -147,18 +147,18 @@ class PurchaseorderheaderRepoImpl extends PurchaseorderheaderRepo { override def upsert(unsaved: PurchaseorderheaderRow): ConnectionIO[PurchaseorderheaderRow] = { sql"""insert into "purchasing"."purchaseorderheader"("purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate", "shipdate", "subtotal", "taxamt", "freight", "modifieddate") values ( - ${fromWrite(unsaved.purchaseorderid)(Write.fromPut(PurchaseorderheaderId.put))}::int4, - ${fromWrite(unsaved.revisionnumber)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.employeeid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.vendorid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, - ${fromWrite(unsaved.orderdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.subtotal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.taxamt)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.freight)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.purchaseorderid)(new Write.Single(PurchaseorderheaderId.put))}::int4, + ${fromWrite(unsaved.revisionnumber)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.employeeid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.vendorid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, + ${fromWrite(unsaved.orderdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.subtotal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.taxamt)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.freight)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("purchaseorderid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRow.scala index 7a1f8db943..e115be17c3 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/purchaseorderheader/PurchaseorderheaderRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.person.businessentity.BusinessentityId import adventureworks.purchasing.shipmethod.ShipmethodId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: purchasing.purchaseorderheader General purchase order information. See PurchaseOrderDetail. @@ -74,36 +72,35 @@ case class PurchaseorderheaderRow( object PurchaseorderheaderRow { implicit lazy val decoder: Decoder[PurchaseorderheaderRow] = Decoder.forProduct12[PurchaseorderheaderRow, PurchaseorderheaderId, TypoShort, TypoShort, BusinessentityId, BusinessentityId, ShipmethodId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate", "shipdate", "subtotal", "taxamt", "freight", "modifieddate")(PurchaseorderheaderRow.apply)(PurchaseorderheaderId.decoder, TypoShort.decoder, TypoShort.decoder, BusinessentityId.decoder, BusinessentityId.decoder, ShipmethodId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PurchaseorderheaderRow] = Encoder.forProduct12[PurchaseorderheaderRow, PurchaseorderheaderId, TypoShort, TypoShort, BusinessentityId, BusinessentityId, ShipmethodId, TypoLocalDateTime, Option[TypoLocalDateTime], BigDecimal, BigDecimal, BigDecimal, TypoLocalDateTime]("purchaseorderid", "revisionnumber", "status", "employeeid", "vendorid", "shipmethodid", "orderdate", "shipdate", "subtotal", "taxamt", "freight", "modifieddate")(x => (x.purchaseorderid, x.revisionnumber, x.status, x.employeeid, x.vendorid, x.shipmethodid, x.orderdate, x.shipdate, x.subtotal, x.taxamt, x.freight, x.modifieddate))(PurchaseorderheaderId.encoder, TypoShort.encoder, TypoShort.encoder, BusinessentityId.encoder, BusinessentityId.encoder, ShipmethodId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PurchaseorderheaderRow] = new Read[PurchaseorderheaderRow]( - gets = List( - (PurchaseorderheaderId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (ShipmethodId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PurchaseorderheaderRow( - purchaseorderid = PurchaseorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - revisionnumber = TypoShort.get.unsafeGetNonNullable(rs, i + 1), - status = TypoShort.get.unsafeGetNonNullable(rs, i + 2), - employeeid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 3), - vendorid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 4), - shipmethodid = ShipmethodId.get.unsafeGetNonNullable(rs, i + 5), - orderdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6), - shipdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 7), - subtotal = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - taxamt = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 9), - freight = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 10), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[PurchaseorderheaderRow] = new Read.CompositeOfInstances(Array( + new Read.Single(PurchaseorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PurchaseorderheaderRow( + purchaseorderid = arr(0).asInstanceOf[PurchaseorderheaderId], + revisionnumber = arr(1).asInstanceOf[TypoShort], + status = arr(2).asInstanceOf[TypoShort], + employeeid = arr(3).asInstanceOf[BusinessentityId], + vendorid = arr(4).asInstanceOf[BusinessentityId], + shipmethodid = arr(5).asInstanceOf[ShipmethodId], + orderdate = arr(6).asInstanceOf[TypoLocalDateTime], + shipdate = arr(7).asInstanceOf[Option[TypoLocalDateTime]], + subtotal = arr(8).asInstanceOf[BigDecimal], + taxamt = arr(9).asInstanceOf[BigDecimal], + freight = arr(10).asInstanceOf[BigDecimal], + modifieddate = arr(11).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PurchaseorderheaderRow] = Text.instance[PurchaseorderheaderRow]{ (row, sb) => PurchaseorderheaderId.text.unsafeEncode(row.purchaseorderid, sb) sb.append(Text.DELIMETER) @@ -129,47 +126,19 @@ object PurchaseorderheaderRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PurchaseorderheaderRow] = new Write[PurchaseorderheaderRow]( - puts = List((PurchaseorderheaderId.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.NoNulls), - (ShipmethodId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.purchaseorderid, x.revisionnumber, x.status, x.employeeid, x.vendorid, x.shipmethodid, x.orderdate, x.shipdate, x.subtotal, x.taxamt, x.freight, x.modifieddate), - unsafeSet = (rs, i, a) => { - PurchaseorderheaderId.put.unsafeSetNonNullable(rs, i + 0, a.purchaseorderid) - TypoShort.put.unsafeSetNonNullable(rs, i + 1, a.revisionnumber) - TypoShort.put.unsafeSetNonNullable(rs, i + 2, a.status) - BusinessentityId.put.unsafeSetNonNullable(rs, i + 3, a.employeeid) - BusinessentityId.put.unsafeSetNonNullable(rs, i + 4, a.vendorid) - ShipmethodId.put.unsafeSetNonNullable(rs, i + 5, a.shipmethodid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 6, a.orderdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 7, a.shipdate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 8, a.subtotal) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 9, a.taxamt) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 10, a.freight) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 11, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - PurchaseorderheaderId.put.unsafeUpdateNonNullable(ps, i + 0, a.purchaseorderid) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 1, a.revisionnumber) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 2, a.status) - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 3, a.employeeid) - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 4, a.vendorid) - ShipmethodId.put.unsafeUpdateNonNullable(ps, i + 5, a.shipmethodid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 6, a.orderdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 7, a.shipdate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 8, a.subtotal) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 9, a.taxamt) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 10, a.freight) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 11, a.modifieddate) - } + implicit lazy val write: Write[PurchaseorderheaderRow] = new Write.Composite[PurchaseorderheaderRow]( + List(new Write.Single(PurchaseorderheaderId.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoShort.put), + new Write.Single(BusinessentityId.put), + new Write.Single(BusinessentityId.put), + new Write.Single(ShipmethodId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.purchaseorderid, a.revisionnumber, a.status, a.employeeid, a.vendorid, a.shipmethodid, a.orderdate, a.shipdate, a.subtotal, a.taxamt, a.freight, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRepoImpl.scala index 6f7594ae1e..63f0995e1c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRepoImpl.scala @@ -31,39 +31,39 @@ class ShipmethodRepoImpl extends ShipmethodRepo { DeleteBuilder(""""purchasing"."shipmethod"""", ShipmethodFields.structure) } override def deleteById(shipmethodid: ShipmethodId): ConnectionIO[Boolean] = { - sql"""delete from "purchasing"."shipmethod" where "shipmethodid" = ${fromWrite(shipmethodid)(Write.fromPut(ShipmethodId.put))}""".update.run.map(_ > 0) + sql"""delete from "purchasing"."shipmethod" where "shipmethodid" = ${fromWrite(shipmethodid)(new Write.Single(ShipmethodId.put))}""".update.run.map(_ > 0) } override def deleteByIds(shipmethodids: Array[ShipmethodId]): ConnectionIO[Int] = { sql"""delete from "purchasing"."shipmethod" where "shipmethodid" = ANY(${shipmethodids})""".update.run } override def insert(unsaved: ShipmethodRow): ConnectionIO[ShipmethodRow] = { sql"""insert into "purchasing"."shipmethod"("shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate") - values (${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.shipbase)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.shiprate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.shipbase)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.shiprate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate"::text """.query(using ShipmethodRow.read).unique } override def insert(unsaved: ShipmethodRowUnsaved): ConnectionIO[ShipmethodRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.shipmethodid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""shipmethodid""""), fr"${fromWrite(value: ShipmethodId)(Write.fromPut(ShipmethodId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""shipmethodid""""), fr"${fromWrite(value: ShipmethodId)(new Write.Single(ShipmethodId.put))}::int4")) }, unsaved.shipbase match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""shipbase""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""shipbase""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.shiprate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""shiprate""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""shiprate""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -95,7 +95,7 @@ class ShipmethodRepoImpl extends ShipmethodRepo { sql"""select "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate"::text from "purchasing"."shipmethod"""".query(using ShipmethodRow.read).stream } override def selectById(shipmethodid: ShipmethodId): ConnectionIO[Option[ShipmethodRow]] = { - sql"""select "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate"::text from "purchasing"."shipmethod" where "shipmethodid" = ${fromWrite(shipmethodid)(Write.fromPut(ShipmethodId.put))}""".query(using ShipmethodRow.read).option + sql"""select "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate"::text from "purchasing"."shipmethod" where "shipmethodid" = ${fromWrite(shipmethodid)(new Write.Single(ShipmethodId.put))}""".query(using ShipmethodRow.read).option } override def selectByIds(shipmethodids: Array[ShipmethodId]): Stream[ConnectionIO, ShipmethodRow] = { sql"""select "shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate"::text from "purchasing"."shipmethod" where "shipmethodid" = ANY(${shipmethodids})""".query(using ShipmethodRow.read).stream @@ -112,12 +112,12 @@ class ShipmethodRepoImpl extends ShipmethodRepo { override def update(row: ShipmethodRow): ConnectionIO[Boolean] = { val shipmethodid = row.shipmethodid sql"""update "purchasing"."shipmethod" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "shipbase" = ${fromWrite(row.shipbase)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "shiprate" = ${fromWrite(row.shiprate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "shipmethodid" = ${fromWrite(shipmethodid)(Write.fromPut(ShipmethodId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "shipbase" = ${fromWrite(row.shipbase)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "shiprate" = ${fromWrite(row.shiprate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "shipmethodid" = ${fromWrite(shipmethodid)(new Write.Single(ShipmethodId.put))}""" .update .run .map(_ > 0) @@ -125,12 +125,12 @@ class ShipmethodRepoImpl extends ShipmethodRepo { override def upsert(unsaved: ShipmethodRow): ConnectionIO[ShipmethodRow] = { sql"""insert into "purchasing"."shipmethod"("shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.shipbase)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.shiprate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.shipbase)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.shiprate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("shipmethodid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRow.scala index a2ce260cd5..227fa3c0f0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/shipmethod/ShipmethodRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: purchasing.shipmethod Shipping company lookup table. @@ -50,24 +48,23 @@ case class ShipmethodRow( object ShipmethodRow { implicit lazy val decoder: Decoder[ShipmethodRow] = Decoder.forProduct6[ShipmethodRow, ShipmethodId, Name, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate")(ShipmethodRow.apply)(ShipmethodId.decoder, Name.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ShipmethodRow] = Encoder.forProduct6[ShipmethodRow, ShipmethodId, Name, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("shipmethodid", "name", "shipbase", "shiprate", "rowguid", "modifieddate")(x => (x.shipmethodid, x.name, x.shipbase, x.shiprate, x.rowguid, x.modifieddate))(ShipmethodId.encoder, Name.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ShipmethodRow] = new Read[ShipmethodRow]( - gets = List( - (ShipmethodId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ShipmethodRow( - shipmethodid = ShipmethodId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - shipbase = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 2), - shiprate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[ShipmethodRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ShipmethodRow( + shipmethodid = arr(0).asInstanceOf[ShipmethodId], + name = arr(1).asInstanceOf[Name], + shipbase = arr(2).asInstanceOf[BigDecimal], + shiprate = arr(3).asInstanceOf[BigDecimal], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ShipmethodRow] = Text.instance[ShipmethodRow]{ (row, sb) => ShipmethodId.text.unsafeEncode(row.shipmethodid, sb) sb.append(Text.DELIMETER) @@ -81,29 +78,13 @@ object ShipmethodRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ShipmethodRow] = new Write[ShipmethodRow]( - puts = List((ShipmethodId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.shipmethodid, x.name, x.shipbase, x.shiprate, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - ShipmethodId.put.unsafeSetNonNullable(rs, i + 0, a.shipmethodid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 2, a.shipbase) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.shiprate) - TypoUUID.put.unsafeSetNonNullable(rs, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ShipmethodId.put.unsafeUpdateNonNullable(ps, i + 0, a.shipmethodid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.shipbase) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.shiprate) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[ShipmethodRow] = new Write.Composite[ShipmethodRow]( + List(new Write.Single(ShipmethodId.put), + new Write.Single(Name.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.shipmethodid, a.name, a.shipbase, a.shiprate, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRepoImpl.scala index b496f9a485..489b227398 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRepoImpl.scala @@ -34,35 +34,35 @@ class VendorRepoImpl extends VendorRepo { DeleteBuilder(""""purchasing"."vendor"""", VendorFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "purchasing"."vendor" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "purchasing"."vendor" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "purchasing"."vendor" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: VendorRow): ConnectionIO[VendorRow] = { sql"""insert into "purchasing"."vendor"("businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.accountnumber)(Write.fromPut(AccountNumber.put))}::varchar, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.creditrating)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.preferredvendorstatus)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.activeflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.purchasingwebserviceurl)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.accountnumber)(new Write.Single(AccountNumber.put))}::varchar, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.creditrating)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.preferredvendorstatus)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.activeflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.purchasingwebserviceurl)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate"::text """.query(using VendorRow.read).unique } override def insert(unsaved: VendorRowUnsaved): ConnectionIO[VendorRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""accountnumber""""), fr"${fromWrite(unsaved.accountnumber)(Write.fromPut(AccountNumber.put))}::varchar")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""creditrating""""), fr"${fromWrite(unsaved.creditrating)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""purchasingwebserviceurl""""), fr"${fromWrite(unsaved.purchasingwebserviceurl)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""accountnumber""""), fr"${fromWrite(unsaved.accountnumber)(new Write.Single(AccountNumber.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""creditrating""""), fr"${fromWrite(unsaved.creditrating)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""purchasingwebserviceurl""""), fr"${fromWrite(unsaved.purchasingwebserviceurl)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.preferredvendorstatus match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""preferredvendorstatus""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""preferredvendorstatus""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.activeflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""activeflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""activeflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -94,7 +94,7 @@ class VendorRepoImpl extends VendorRepo { sql"""select "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate"::text from "purchasing"."vendor"""".query(using VendorRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[VendorRow]] = { - sql"""select "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate"::text from "purchasing"."vendor" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using VendorRow.read).option + sql"""select "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate"::text from "purchasing"."vendor" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using VendorRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, VendorRow] = { sql"""select "businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate"::text from "purchasing"."vendor" where "businessentityid" = ANY(${businessentityids})""".query(using VendorRow.read).stream @@ -111,14 +111,14 @@ class VendorRepoImpl extends VendorRepo { override def update(row: VendorRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "purchasing"."vendor" - set "accountnumber" = ${fromWrite(row.accountnumber)(Write.fromPut(AccountNumber.put))}::varchar, - "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "creditrating" = ${fromWrite(row.creditrating)(Write.fromPut(TypoShort.put))}::int2, - "preferredvendorstatus" = ${fromWrite(row.preferredvendorstatus)(Write.fromPut(Flag.put))}::bool, - "activeflag" = ${fromWrite(row.activeflag)(Write.fromPut(Flag.put))}::bool, - "purchasingwebserviceurl" = ${fromWrite(row.purchasingwebserviceurl)(Write.fromPutOption(Meta.StringMeta.put))}, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "accountnumber" = ${fromWrite(row.accountnumber)(new Write.Single(AccountNumber.put))}::varchar, + "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "creditrating" = ${fromWrite(row.creditrating)(new Write.Single(TypoShort.put))}::int2, + "preferredvendorstatus" = ${fromWrite(row.preferredvendorstatus)(new Write.Single(Flag.put))}::bool, + "activeflag" = ${fromWrite(row.activeflag)(new Write.Single(Flag.put))}::bool, + "purchasingwebserviceurl" = ${fromWrite(row.purchasingwebserviceurl)(new Write.SingleOpt(Meta.StringMeta.put))}, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -126,14 +126,14 @@ class VendorRepoImpl extends VendorRepo { override def upsert(unsaved: VendorRow): ConnectionIO[VendorRow] = { sql"""insert into "purchasing"."vendor"("businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.accountnumber)(Write.fromPut(AccountNumber.put))}::varchar, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.creditrating)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.preferredvendorstatus)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.activeflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.purchasingwebserviceurl)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.accountnumber)(new Write.Single(AccountNumber.put))}::varchar, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.creditrating)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.preferredvendorstatus)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.activeflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.purchasingwebserviceurl)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRow.scala index bf93102c6d..4cb3d7207f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vendor/VendorRow.scala @@ -14,14 +14,12 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.AccountNumber import adventureworks.public.Flag import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: purchasing.vendor Companies from whom Adventure Works Cycles purchases parts or other goods. @@ -56,28 +54,27 @@ case class VendorRow( object VendorRow { implicit lazy val decoder: Decoder[VendorRow] = Decoder.forProduct8[VendorRow, BusinessentityId, AccountNumber, Name, TypoShort, Flag, Flag, Option[/* max 1024 chars */ String], TypoLocalDateTime]("businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate")(VendorRow.apply)(BusinessentityId.decoder, AccountNumber.decoder, Name.decoder, TypoShort.decoder, Flag.decoder, Flag.decoder, Decoder.decodeOption(Decoder.decodeString), TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[VendorRow] = Encoder.forProduct8[VendorRow, BusinessentityId, AccountNumber, Name, TypoShort, Flag, Flag, Option[/* max 1024 chars */ String], TypoLocalDateTime]("businessentityid", "accountnumber", "name", "creditrating", "preferredvendorstatus", "activeflag", "purchasingwebserviceurl", "modifieddate")(x => (x.businessentityid, x.accountnumber, x.name, x.creditrating, x.preferredvendorstatus, x.activeflag, x.purchasingwebserviceurl, x.modifieddate))(BusinessentityId.encoder, AccountNumber.encoder, Name.encoder, TypoShort.encoder, Flag.encoder, Flag.encoder, Encoder.encodeOption(Encoder.encodeString), TypoLocalDateTime.encoder) - implicit lazy val read: Read[VendorRow] = new Read[VendorRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (AccountNumber.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VendorRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - accountnumber = AccountNumber.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - creditrating = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - preferredvendorstatus = Flag.get.unsafeGetNonNullable(rs, i + 4), - activeflag = Flag.get.unsafeGetNonNullable(rs, i + 5), - purchasingwebserviceurl = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7) + implicit lazy val read: Read[VendorRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(AccountNumber.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VendorRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + accountnumber = arr(1).asInstanceOf[AccountNumber], + name = arr(2).asInstanceOf[Name], + creditrating = arr(3).asInstanceOf[TypoShort], + preferredvendorstatus = arr(4).asInstanceOf[Flag], + activeflag = arr(5).asInstanceOf[Flag], + purchasingwebserviceurl = arr(6).asInstanceOf[Option[/* max 1024 chars */ String]], + modifieddate = arr(7).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[VendorRow] = Text.instance[VendorRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -95,35 +92,15 @@ object VendorRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[VendorRow] = new Write[VendorRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (AccountNumber.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.accountnumber, x.name, x.creditrating, x.preferredvendorstatus, x.activeflag, x.purchasingwebserviceurl, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - AccountNumber.put.unsafeSetNonNullable(rs, i + 1, a.accountnumber) - Name.put.unsafeSetNonNullable(rs, i + 2, a.name) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.creditrating) - Flag.put.unsafeSetNonNullable(rs, i + 4, a.preferredvendorstatus) - Flag.put.unsafeSetNonNullable(rs, i + 5, a.activeflag) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 6, a.purchasingwebserviceurl) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 7, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - AccountNumber.put.unsafeUpdateNonNullable(ps, i + 1, a.accountnumber) - Name.put.unsafeUpdateNonNullable(ps, i + 2, a.name) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.creditrating) - Flag.put.unsafeUpdateNonNullable(ps, i + 4, a.preferredvendorstatus) - Flag.put.unsafeUpdateNonNullable(ps, i + 5, a.activeflag) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 6, a.purchasingwebserviceurl) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 7, a.modifieddate) - } + implicit lazy val write: Write[VendorRow] = new Write.Composite[VendorRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(AccountNumber.put), + new Write.Single(Name.put), + new Write.Single(TypoShort.put), + new Write.Single(Flag.put), + new Write.Single(Flag.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.accountnumber, a.name, a.creditrating, a.preferredvendorstatus, a.activeflag, a.purchasingwebserviceurl, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithaddresses/VvendorwithaddressesViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithaddresses/VvendorwithaddressesViewRow.scala index 4cd4b57400..ee2711f642 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithaddresses/VvendorwithaddressesViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithaddresses/VvendorwithaddressesViewRow.scala @@ -9,12 +9,10 @@ package vvendorwithaddresses import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: purchasing.vvendorwithaddresses */ case class VvendorwithaddressesViewRow( @@ -41,28 +39,27 @@ case class VvendorwithaddressesViewRow( object VvendorwithaddressesViewRow { implicit lazy val decoder: Decoder[VvendorwithaddressesViewRow] = Decoder.forProduct9[VvendorwithaddressesViewRow, BusinessentityId, Name, Name, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name]("businessentityid", "name", "addresstype", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname")(VvendorwithaddressesViewRow.apply)(BusinessentityId.decoder, Name.decoder, Name.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Decoder.decodeString, Name.decoder) implicit lazy val encoder: Encoder[VvendorwithaddressesViewRow] = Encoder.forProduct9[VvendorwithaddressesViewRow, BusinessentityId, Name, Name, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name]("businessentityid", "name", "addresstype", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname")(x => (x.businessentityid, x.name, x.addresstype, x.addressline1, x.addressline2, x.city, x.stateprovincename, x.postalcode, x.countryregionname))(BusinessentityId.encoder, Name.encoder, Name.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Encoder.encodeString, Name.encoder) - implicit lazy val read: Read[VvendorwithaddressesViewRow] = new Read[VvendorwithaddressesViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VvendorwithaddressesViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - addresstype = Name.get.unsafeGetNonNullable(rs, i + 2), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - stateprovincename = Name.get.unsafeGetNonNullable(rs, i + 6), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 7), - countryregionname = Name.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[VvendorwithaddressesViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VvendorwithaddressesViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + name = arr(1).asInstanceOf[Name], + addresstype = arr(2).asInstanceOf[Name], + addressline1 = arr(3).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(4).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(5).asInstanceOf[/* max 30 chars */ String], + stateprovincename = arr(6).asInstanceOf[Name], + postalcode = arr(7).asInstanceOf[/* max 15 chars */ String], + countryregionname = arr(8).asInstanceOf[Name] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithcontacts/VvendorwithcontactsViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithcontacts/VvendorwithcontactsViewRow.scala index 34a149c4a1..d0adc636fa 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithcontacts/VvendorwithcontactsViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/purchasing/vvendorwithcontacts/VvendorwithcontactsViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.Phone import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: purchasing.vvendorwithcontacts */ case class VvendorwithcontactsViewRow( @@ -49,34 +47,33 @@ case class VvendorwithcontactsViewRow( object VvendorwithcontactsViewRow { implicit lazy val decoder: Decoder[VvendorwithcontactsViewRow] = Decoder.forProduct12[VvendorwithcontactsViewRow, BusinessentityId, Name, Name, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int]("businessentityid", "name", "contacttype", "title", "firstname", "middlename", "lastname", "suffix", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion")(VvendorwithcontactsViewRow.apply)(BusinessentityId.decoder, Name.decoder, Name.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Phone.decoder), Decoder.decodeOption(Name.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt) implicit lazy val encoder: Encoder[VvendorwithcontactsViewRow] = Encoder.forProduct12[VvendorwithcontactsViewRow, BusinessentityId, Name, Name, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int]("businessentityid", "name", "contacttype", "title", "firstname", "middlename", "lastname", "suffix", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion")(x => (x.businessentityid, x.name, x.contacttype, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.phonenumber, x.phonenumbertype, x.emailaddress, x.emailpromotion))(BusinessentityId.encoder, Name.encoder, Name.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Phone.encoder), Encoder.encodeOption(Name.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt) - implicit lazy val read: Read[VvendorwithcontactsViewRow] = new Read[VvendorwithcontactsViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Phone.get, Nullability.Nullable), - (Name.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VvendorwithcontactsViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - contacttype = Name.get.unsafeGetNonNullable(rs, i + 2), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 4), - middlename = Name.get.unsafeGetNullable(rs, i + 5), - lastname = Name.get.unsafeGetNonNullable(rs, i + 6), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - phonenumber = Phone.get.unsafeGetNullable(rs, i + 8), - phonenumbertype = Name.get.unsafeGetNullable(rs, i + 9), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[VvendorwithcontactsViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Phone.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VvendorwithcontactsViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + name = arr(1).asInstanceOf[Name], + contacttype = arr(2).asInstanceOf[Name], + title = arr(3).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(4).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(5).asInstanceOf[Option[Name]], + lastname = arr(6).asInstanceOf[Name], + suffix = arr(7).asInstanceOf[Option[/* max 10 chars */ String]], + phonenumber = arr(8).asInstanceOf[Option[Phone]], + phonenumbertype = arr(9).asInstanceOf[Option[Name]], + emailaddress = arr(10).asInstanceOf[Option[/* max 50 chars */ String]], + emailpromotion = arr(11).asInstanceOf[Int] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/c/CViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/c/CViewRow.scala index 9bf9f0acc5..9c070db1ee 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/c/CViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/c/CViewRow.scala @@ -12,11 +12,9 @@ import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.sales.customer.CustomerId import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.c */ case class CViewRow( @@ -39,24 +37,23 @@ case class CViewRow( object CViewRow { implicit lazy val decoder: Decoder[CViewRow] = Decoder.forProduct7[CViewRow, CustomerId, CustomerId, Option[BusinessentityId], Option[BusinessentityId], Option[SalesterritoryId], TypoUUID, TypoLocalDateTime]("id", "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate")(CViewRow.apply)(CustomerId.decoder, CustomerId.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(SalesterritoryId.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CViewRow] = Encoder.forProduct7[CViewRow, CustomerId, CustomerId, Option[BusinessentityId], Option[BusinessentityId], Option[SalesterritoryId], TypoUUID, TypoLocalDateTime]("id", "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate")(x => (x.id, x.customerid, x.personid, x.storeid, x.territoryid, x.rowguid, x.modifieddate))(CustomerId.encoder, CustomerId.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(SalesterritoryId.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CViewRow] = new Read[CViewRow]( - gets = List( - (CustomerId.get, Nullability.NoNulls), - (CustomerId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (BusinessentityId.get, Nullability.Nullable), - (SalesterritoryId.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CViewRow( - id = CustomerId.get.unsafeGetNonNullable(rs, i + 0), - customerid = CustomerId.get.unsafeGetNonNullable(rs, i + 1), - personid = BusinessentityId.get.unsafeGetNullable(rs, i + 2), - storeid = BusinessentityId.get.unsafeGetNullable(rs, i + 3), - territoryid = SalesterritoryId.get.unsafeGetNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[CViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CustomerId.get).asInstanceOf[Read[Any]], + new Read.Single(CustomerId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CViewRow( + id = arr(0).asInstanceOf[CustomerId], + customerid = arr(1).asInstanceOf[CustomerId], + personid = arr(2).asInstanceOf[Option[BusinessentityId]], + storeid = arr(3).asInstanceOf[Option[BusinessentityId]], + territoryid = arr(4).asInstanceOf[Option[SalesterritoryId]], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cc/CcViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cc/CcViewRow.scala index cf1851386a..88e9f9f2ae 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cc/CcViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cc/CcViewRow.scala @@ -10,12 +10,10 @@ package cc import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.userdefined.CustomCreditcardId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.cc */ case class CcViewRow( @@ -38,24 +36,23 @@ case class CcViewRow( object CcViewRow { implicit lazy val decoder: Decoder[CcViewRow] = Decoder.forProduct7[CcViewRow, /* user-picked */ CustomCreditcardId, /* user-picked */ CustomCreditcardId, /* max 50 chars */ String, /* max 25 chars */ String, TypoShort, TypoShort, TypoLocalDateTime]("id", "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate")(CcViewRow.apply)(CustomCreditcardId.decoder, CustomCreditcardId.decoder, Decoder.decodeString, Decoder.decodeString, TypoShort.decoder, TypoShort.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CcViewRow] = Encoder.forProduct7[CcViewRow, /* user-picked */ CustomCreditcardId, /* user-picked */ CustomCreditcardId, /* max 50 chars */ String, /* max 25 chars */ String, TypoShort, TypoShort, TypoLocalDateTime]("id", "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate")(x => (x.id, x.creditcardid, x.cardtype, x.cardnumber, x.expmonth, x.expyear, x.modifieddate))(CustomCreditcardId.encoder, CustomCreditcardId.encoder, Encoder.encodeString, Encoder.encodeString, TypoShort.encoder, TypoShort.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CcViewRow] = new Read[CcViewRow]( - gets = List( - (/* user-picked */ CustomCreditcardId.get, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CcViewRow( - id = /* user-picked */ CustomCreditcardId.get.unsafeGetNonNullable(rs, i + 0), - creditcardid = /* user-picked */ CustomCreditcardId.get.unsafeGetNonNullable(rs, i + 1), - cardtype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - cardnumber = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - expmonth = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - expyear = TypoShort.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[CcViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CcViewRow( + id = arr(0).asInstanceOf[/* user-picked */ CustomCreditcardId], + creditcardid = arr(1).asInstanceOf[/* user-picked */ CustomCreditcardId], + cardtype = arr(2).asInstanceOf[/* max 50 chars */ String], + cardnumber = arr(3).asInstanceOf[/* max 25 chars */ String], + expmonth = arr(4).asInstanceOf[TypoShort], + expyear = arr(5).asInstanceOf[TypoShort], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cr/CrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cr/CrViewRow.scala index 651b003e5e..32b8c0459c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cr/CrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cr/CrViewRow.scala @@ -10,12 +10,10 @@ package cr import adventureworks.customtypes.TypoLocalDateTime import adventureworks.sales.currency.CurrencyId import adventureworks.sales.currencyrate.CurrencyrateId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.cr */ case class CrViewRow( @@ -38,24 +36,23 @@ case class CrViewRow( object CrViewRow { implicit lazy val decoder: Decoder[CrViewRow] = Decoder.forProduct7[CrViewRow, CurrencyrateId, TypoLocalDateTime, CurrencyId, CurrencyId, BigDecimal, BigDecimal, TypoLocalDateTime]("currencyrateid", "currencyratedate", "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate")(CrViewRow.apply)(CurrencyrateId.decoder, TypoLocalDateTime.decoder, CurrencyId.decoder, CurrencyId.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CrViewRow] = Encoder.forProduct7[CrViewRow, CurrencyrateId, TypoLocalDateTime, CurrencyId, CurrencyId, BigDecimal, BigDecimal, TypoLocalDateTime]("currencyrateid", "currencyratedate", "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate")(x => (x.currencyrateid, x.currencyratedate, x.fromcurrencycode, x.tocurrencycode, x.averagerate, x.endofdayrate, x.modifieddate))(CurrencyrateId.encoder, TypoLocalDateTime.encoder, CurrencyId.encoder, CurrencyId.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CrViewRow] = new Read[CrViewRow]( - gets = List( - (CurrencyrateId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CrViewRow( - currencyrateid = CurrencyrateId.get.unsafeGetNonNullable(rs, i + 0), - currencyratedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - fromcurrencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 2), - tocurrencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 3), - averagerate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - endofdayrate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[CrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CurrencyrateId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CrViewRow( + currencyrateid = arr(0).asInstanceOf[CurrencyrateId], + currencyratedate = arr(1).asInstanceOf[TypoLocalDateTime], + fromcurrencycode = arr(2).asInstanceOf[CurrencyId], + tocurrencycode = arr(3).asInstanceOf[CurrencyId], + averagerate = arr(4).asInstanceOf[BigDecimal], + endofdayrate = arr(5).asInstanceOf[BigDecimal], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/crc/CrcViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/crc/CrcViewRow.scala index 5720cf16a7..f7ffc1ec54 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/crc/CrcViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/crc/CrcViewRow.scala @@ -10,11 +10,9 @@ package crc import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.countryregion.CountryregionId import adventureworks.sales.currency.CurrencyId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.crc */ case class CrcViewRow( @@ -29,16 +27,15 @@ case class CrcViewRow( object CrcViewRow { implicit lazy val decoder: Decoder[CrcViewRow] = Decoder.forProduct3[CrcViewRow, CountryregionId, CurrencyId, TypoLocalDateTime]("countryregioncode", "currencycode", "modifieddate")(CrcViewRow.apply)(CountryregionId.decoder, CurrencyId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CrcViewRow] = Encoder.forProduct3[CrcViewRow, CountryregionId, CurrencyId, TypoLocalDateTime]("countryregioncode", "currencycode", "modifieddate")(x => (x.countryregioncode, x.currencycode, x.modifieddate))(CountryregionId.encoder, CurrencyId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CrcViewRow] = new Read[CrcViewRow]( - gets = List( - (CountryregionId.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CrcViewRow( - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 0), - currencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[CrcViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CrcViewRow( + countryregioncode = arr(0).asInstanceOf[CountryregionId], + currencycode = arr(1).asInstanceOf[CurrencyId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cu/CuViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cu/CuViewRow.scala index fe26b05aff..7e39847883 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cu/CuViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/cu/CuViewRow.scala @@ -10,11 +10,9 @@ package cu import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name import adventureworks.sales.currency.CurrencyId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.cu */ case class CuViewRow( @@ -31,18 +29,17 @@ case class CuViewRow( object CuViewRow { implicit lazy val decoder: Decoder[CuViewRow] = Decoder.forProduct4[CuViewRow, CurrencyId, CurrencyId, Name, TypoLocalDateTime]("id", "currencycode", "name", "modifieddate")(CuViewRow.apply)(CurrencyId.decoder, CurrencyId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CuViewRow] = Encoder.forProduct4[CuViewRow, CurrencyId, CurrencyId, Name, TypoLocalDateTime]("id", "currencycode", "name", "modifieddate")(x => (x.id, x.currencycode, x.name, x.modifieddate))(CurrencyId.encoder, CurrencyId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CuViewRow] = new Read[CuViewRow]( - gets = List( - (CurrencyId.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CuViewRow( - id = CurrencyId.get.unsafeGetNonNullable(rs, i + 0), - currencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[CuViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CuViewRow( + id = arr(0).asInstanceOf[CurrencyId], + currencycode = arr(1).asInstanceOf[CurrencyId], + name = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/pcc/PccViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/pcc/PccViewRow.scala index 7f0c3f5bbd..c1ce5a023e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/pcc/PccViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/pcc/PccViewRow.scala @@ -10,11 +10,9 @@ package pcc import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.businessentity.BusinessentityId import adventureworks.userdefined.CustomCreditcardId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.pcc */ case class PccViewRow( @@ -31,18 +29,17 @@ case class PccViewRow( object PccViewRow { implicit lazy val decoder: Decoder[PccViewRow] = Decoder.forProduct4[PccViewRow, BusinessentityId, BusinessentityId, /* user-picked */ CustomCreditcardId, TypoLocalDateTime]("id", "businessentityid", "creditcardid", "modifieddate")(PccViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, CustomCreditcardId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PccViewRow] = Encoder.forProduct4[PccViewRow, BusinessentityId, BusinessentityId, /* user-picked */ CustomCreditcardId, TypoLocalDateTime]("id", "businessentityid", "creditcardid", "modifieddate")(x => (x.id, x.businessentityid, x.creditcardid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, CustomCreditcardId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PccViewRow] = new Read[PccViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PccViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - creditcardid = /* user-picked */ CustomCreditcardId.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[PccViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PccViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + creditcardid = arr(2).asInstanceOf[/* user-picked */ CustomCreditcardId], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/s/SViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/s/SViewRow.scala index 03a3cb9e3a..f72becf77b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/s/SViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/s/SViewRow.scala @@ -12,11 +12,9 @@ import adventureworks.customtypes.TypoUUID import adventureworks.customtypes.TypoXml import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.s */ case class SViewRow( @@ -39,24 +37,23 @@ case class SViewRow( object SViewRow { implicit lazy val decoder: Decoder[SViewRow] = Decoder.forProduct7[SViewRow, BusinessentityId, BusinessentityId, Name, Option[BusinessentityId], Option[TypoXml], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate")(SViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, Name.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SViewRow] = Encoder.forProduct7[SViewRow, BusinessentityId, BusinessentityId, Name, Option[BusinessentityId], Option[TypoXml], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.name, x.salespersonid, x.demographics, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, Name.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SViewRow] = new Read[SViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - salespersonid = BusinessentityId.get.unsafeGetNullable(rs, i + 3), - demographics = TypoXml.get.unsafeGetNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[SViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + name = arr(2).asInstanceOf[Name], + salespersonid = arr(3).asInstanceOf[Option[BusinessentityId]], + demographics = arr(4).asInstanceOf[Option[TypoXml]], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sci/SciViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sci/SciViewRow.scala index 8cf2f43ca8..c2b81bb13a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sci/SciViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sci/SciViewRow.scala @@ -10,12 +10,10 @@ package sci import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId import adventureworks.sales.shoppingcartitem.ShoppingcartitemId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sci */ case class SciViewRow( @@ -38,24 +36,23 @@ case class SciViewRow( object SciViewRow { implicit lazy val decoder: Decoder[SciViewRow] = Decoder.forProduct7[SciViewRow, ShoppingcartitemId, ShoppingcartitemId, /* max 50 chars */ String, Int, ProductId, TypoLocalDateTime, TypoLocalDateTime]("id", "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated", "modifieddate")(SciViewRow.apply)(ShoppingcartitemId.decoder, ShoppingcartitemId.decoder, Decoder.decodeString, Decoder.decodeInt, ProductId.decoder, TypoLocalDateTime.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SciViewRow] = Encoder.forProduct7[SciViewRow, ShoppingcartitemId, ShoppingcartitemId, /* max 50 chars */ String, Int, ProductId, TypoLocalDateTime, TypoLocalDateTime]("id", "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated", "modifieddate")(x => (x.id, x.shoppingcartitemid, x.shoppingcartid, x.quantity, x.productid, x.datecreated, x.modifieddate))(ShoppingcartitemId.encoder, ShoppingcartitemId.encoder, Encoder.encodeString, Encoder.encodeInt, ProductId.encoder, TypoLocalDateTime.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SciViewRow] = new Read[SciViewRow]( - gets = List( - (ShoppingcartitemId.get, Nullability.NoNulls), - (ShoppingcartitemId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SciViewRow( - id = ShoppingcartitemId.get.unsafeGetNonNullable(rs, i + 0), - shoppingcartitemid = ShoppingcartitemId.get.unsafeGetNonNullable(rs, i + 1), - shoppingcartid = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - quantity = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 3), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 4), - datecreated = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[SciViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShoppingcartitemId.get).asInstanceOf[Read[Any]], + new Read.Single(ShoppingcartitemId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SciViewRow( + id = arr(0).asInstanceOf[ShoppingcartitemId], + shoppingcartitemid = arr(1).asInstanceOf[ShoppingcartitemId], + shoppingcartid = arr(2).asInstanceOf[/* max 50 chars */ String], + quantity = arr(3).asInstanceOf[Int], + productid = arr(4).asInstanceOf[ProductId], + datecreated = arr(5).asInstanceOf[TypoLocalDateTime], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/so/SoViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/so/SoViewRow.scala index 8d74aed62f..7e63eb5f9f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/so/SoViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/so/SoViewRow.scala @@ -10,12 +10,10 @@ package so import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.sales.specialoffer.SpecialofferId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.so */ case class SoViewRow( @@ -48,34 +46,33 @@ case class SoViewRow( object SoViewRow { implicit lazy val decoder: Decoder[SoViewRow] = Decoder.forProduct12[SoViewRow, SpecialofferId, SpecialofferId, /* max 255 chars */ String, BigDecimal, /* max 50 chars */ String, /* max 50 chars */ String, TypoLocalDateTime, TypoLocalDateTime, Int, Option[Int], TypoUUID, TypoLocalDateTime]("id", "specialofferid", "description", "discountpct", "type", "category", "startdate", "enddate", "minqty", "maxqty", "rowguid", "modifieddate")(SoViewRow.apply)(SpecialofferId.decoder, SpecialofferId.decoder, Decoder.decodeString, Decoder.decodeBigDecimal, Decoder.decodeString, Decoder.decodeString, TypoLocalDateTime.decoder, TypoLocalDateTime.decoder, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeInt), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SoViewRow] = Encoder.forProduct12[SoViewRow, SpecialofferId, SpecialofferId, /* max 255 chars */ String, BigDecimal, /* max 50 chars */ String, /* max 50 chars */ String, TypoLocalDateTime, TypoLocalDateTime, Int, Option[Int], TypoUUID, TypoLocalDateTime]("id", "specialofferid", "description", "discountpct", "type", "category", "startdate", "enddate", "minqty", "maxqty", "rowguid", "modifieddate")(x => (x.id, x.specialofferid, x.description, x.discountpct, x.`type`, x.category, x.startdate, x.enddate, x.minqty, x.maxqty, x.rowguid, x.modifieddate))(SpecialofferId.encoder, SpecialofferId.encoder, Encoder.encodeString, Encoder.encodeBigDecimal, Encoder.encodeString, Encoder.encodeString, TypoLocalDateTime.encoder, TypoLocalDateTime.encoder, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeInt), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SoViewRow] = new Read[SoViewRow]( - gets = List( - (SpecialofferId.get, Nullability.NoNulls), - (SpecialofferId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SoViewRow( - id = SpecialofferId.get.unsafeGetNonNullable(rs, i + 0), - specialofferid = SpecialofferId.get.unsafeGetNonNullable(rs, i + 1), - description = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - discountpct = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - `type` = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - category = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6), - enddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7), - minqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 8), - maxqty = Meta.IntMeta.get.unsafeGetNullable(rs, i + 9), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 10), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[SoViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SoViewRow( + id = arr(0).asInstanceOf[SpecialofferId], + specialofferid = arr(1).asInstanceOf[SpecialofferId], + description = arr(2).asInstanceOf[/* max 255 chars */ String], + discountpct = arr(3).asInstanceOf[BigDecimal], + `type` = arr(4).asInstanceOf[/* max 50 chars */ String], + category = arr(5).asInstanceOf[/* max 50 chars */ String], + startdate = arr(6).asInstanceOf[TypoLocalDateTime], + enddate = arr(7).asInstanceOf[TypoLocalDateTime], + minqty = arr(8).asInstanceOf[Int], + maxqty = arr(9).asInstanceOf[Option[Int]], + rowguid = arr(10).asInstanceOf[TypoUUID], + modifieddate = arr(11).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sod/SodViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sod/SodViewRow.scala index fca69c0dd9..f3db767e6e 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sod/SodViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sod/SodViewRow.scala @@ -13,12 +13,10 @@ import adventureworks.customtypes.TypoUUID import adventureworks.production.product.ProductId import adventureworks.sales.salesorderheader.SalesorderheaderId import adventureworks.sales.specialoffer.SpecialofferId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sod */ case class SodViewRow( @@ -49,32 +47,31 @@ case class SodViewRow( object SodViewRow { implicit lazy val decoder: Decoder[SodViewRow] = Decoder.forProduct11[SodViewRow, Int, SalesorderheaderId, Int, Option[/* max 25 chars */ String], TypoShort, ProductId, SpecialofferId, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate")(SodViewRow.apply)(Decoder.decodeInt, SalesorderheaderId.decoder, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeString), TypoShort.decoder, ProductId.decoder, SpecialofferId.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SodViewRow] = Encoder.forProduct11[SodViewRow, Int, SalesorderheaderId, Int, Option[/* max 25 chars */ String], TypoShort, ProductId, SpecialofferId, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate")(x => (x.id, x.salesorderid, x.salesorderdetailid, x.carriertrackingnumber, x.orderqty, x.productid, x.specialofferid, x.unitprice, x.unitpricediscount, x.rowguid, x.modifieddate))(Encoder.encodeInt, SalesorderheaderId.encoder, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeString), TypoShort.encoder, ProductId.encoder, SpecialofferId.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SodViewRow] = new Read[SodViewRow]( - gets = List( - (Meta.IntMeta.get, Nullability.NoNulls), - (SalesorderheaderId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoShort.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (SpecialofferId.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SodViewRow( - id = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 0), - salesorderid = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 1), - salesorderdetailid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - carriertrackingnumber = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - orderqty = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 5), - specialofferid = SpecialofferId.get.unsafeGetNonNullable(rs, i + 6), - unitprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - unitpricediscount = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 9), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 10) + implicit lazy val read: Read[SodViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SodViewRow( + id = arr(0).asInstanceOf[Int], + salesorderid = arr(1).asInstanceOf[SalesorderheaderId], + salesorderdetailid = arr(2).asInstanceOf[Int], + carriertrackingnumber = arr(3).asInstanceOf[Option[/* max 25 chars */ String]], + orderqty = arr(4).asInstanceOf[TypoShort], + productid = arr(5).asInstanceOf[ProductId], + specialofferid = arr(6).asInstanceOf[SpecialofferId], + unitprice = arr(7).asInstanceOf[BigDecimal], + unitpricediscount = arr(8).asInstanceOf[BigDecimal], + rowguid = arr(9).asInstanceOf[TypoUUID], + modifieddate = arr(10).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/soh/SohViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/soh/SohViewRow.scala index b65cc524f0..79cc4160f5 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/soh/SohViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/soh/SohViewRow.scala @@ -21,7 +21,6 @@ import adventureworks.sales.customer.CustomerId import adventureworks.sales.salesorderheader.SalesorderheaderId import adventureworks.sales.salesterritory.SalesterritoryId import adventureworks.userdefined.CustomCreditcardId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder @@ -29,7 +28,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** View: sa.soh */ @@ -155,62 +153,61 @@ object SohViewRow { "modifieddate" -> TypoLocalDateTime.encoder.apply(row.modifieddate) ) ) - implicit lazy val read: Read[SohViewRow] = new Read[SohViewRow]( - gets = List( - (SalesorderheaderId.get, Nullability.NoNulls), - (SalesorderheaderId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoShort.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (OrderNumber.get, Nullability.Nullable), - (AccountNumber.get, Nullability.Nullable), - (CustomerId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (SalesterritoryId.get, Nullability.Nullable), - (AddressId.get, Nullability.NoNulls), - (AddressId.get, Nullability.NoNulls), - (ShipmethodId.get, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (CurrencyrateId.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SohViewRow( - id = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - salesorderid = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 1), - revisionnumber = TypoShort.get.unsafeGetNonNullable(rs, i + 2), - orderdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3), - duedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - shipdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 5), - status = TypoShort.get.unsafeGetNonNullable(rs, i + 6), - onlineorderflag = Flag.get.unsafeGetNonNullable(rs, i + 7), - purchaseordernumber = OrderNumber.get.unsafeGetNullable(rs, i + 8), - accountnumber = AccountNumber.get.unsafeGetNullable(rs, i + 9), - customerid = CustomerId.get.unsafeGetNonNullable(rs, i + 10), - salespersonid = BusinessentityId.get.unsafeGetNullable(rs, i + 11), - territoryid = SalesterritoryId.get.unsafeGetNullable(rs, i + 12), - billtoaddressid = AddressId.get.unsafeGetNonNullable(rs, i + 13), - shiptoaddressid = AddressId.get.unsafeGetNonNullable(rs, i + 14), - shipmethodid = ShipmethodId.get.unsafeGetNonNullable(rs, i + 15), - creditcardid = /* user-picked */ CustomCreditcardId.get.unsafeGetNullable(rs, i + 16), - creditcardapprovalcode = Meta.StringMeta.get.unsafeGetNullable(rs, i + 17), - currencyrateid = CurrencyrateId.get.unsafeGetNullable(rs, i + 18), - subtotal = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 19), - taxamt = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 20), - freight = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 21), - totaldue = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 22), - comment = Meta.StringMeta.get.unsafeGetNullable(rs, i + 23), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 24), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 25) + implicit lazy val read: Read[SohViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(OrderNumber.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(AccountNumber.get).asInstanceOf[Read[Any]], + new Read.Single(CustomerId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(CurrencyrateId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SohViewRow( + id = arr(0).asInstanceOf[SalesorderheaderId], + salesorderid = arr(1).asInstanceOf[SalesorderheaderId], + revisionnumber = arr(2).asInstanceOf[TypoShort], + orderdate = arr(3).asInstanceOf[TypoLocalDateTime], + duedate = arr(4).asInstanceOf[TypoLocalDateTime], + shipdate = arr(5).asInstanceOf[Option[TypoLocalDateTime]], + status = arr(6).asInstanceOf[TypoShort], + onlineorderflag = arr(7).asInstanceOf[Flag], + purchaseordernumber = arr(8).asInstanceOf[Option[OrderNumber]], + accountnumber = arr(9).asInstanceOf[Option[AccountNumber]], + customerid = arr(10).asInstanceOf[CustomerId], + salespersonid = arr(11).asInstanceOf[Option[BusinessentityId]], + territoryid = arr(12).asInstanceOf[Option[SalesterritoryId]], + billtoaddressid = arr(13).asInstanceOf[AddressId], + shiptoaddressid = arr(14).asInstanceOf[AddressId], + shipmethodid = arr(15).asInstanceOf[ShipmethodId], + creditcardid = arr(16).asInstanceOf[Option[/* user-picked */ CustomCreditcardId]], + creditcardapprovalcode = arr(17).asInstanceOf[Option[/* max 15 chars */ String]], + currencyrateid = arr(18).asInstanceOf[Option[CurrencyrateId]], + subtotal = arr(19).asInstanceOf[BigDecimal], + taxamt = arr(20).asInstanceOf[BigDecimal], + freight = arr(21).asInstanceOf[BigDecimal], + totaldue = arr(22).asInstanceOf[Option[BigDecimal]], + comment = arr(23).asInstanceOf[Option[/* max 128 chars */ String]], + rowguid = arr(24).asInstanceOf[TypoUUID], + modifieddate = arr(25).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sohsr/SohsrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sohsr/SohsrViewRow.scala index 4ecb568a69..dbd09aee19 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sohsr/SohsrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sohsr/SohsrViewRow.scala @@ -10,11 +10,9 @@ package sohsr import adventureworks.customtypes.TypoLocalDateTime import adventureworks.sales.salesorderheader.SalesorderheaderId import adventureworks.sales.salesreason.SalesreasonId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sohsr */ case class SohsrViewRow( @@ -29,16 +27,15 @@ case class SohsrViewRow( object SohsrViewRow { implicit lazy val decoder: Decoder[SohsrViewRow] = Decoder.forProduct3[SohsrViewRow, SalesorderheaderId, SalesreasonId, TypoLocalDateTime]("salesorderid", "salesreasonid", "modifieddate")(SohsrViewRow.apply)(SalesorderheaderId.decoder, SalesreasonId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SohsrViewRow] = Encoder.forProduct3[SohsrViewRow, SalesorderheaderId, SalesreasonId, TypoLocalDateTime]("salesorderid", "salesreasonid", "modifieddate")(x => (x.salesorderid, x.salesreasonid, x.modifieddate))(SalesorderheaderId.encoder, SalesreasonId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SohsrViewRow] = new Read[SohsrViewRow]( - gets = List( - (SalesorderheaderId.get, Nullability.NoNulls), - (SalesreasonId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SohsrViewRow( - salesorderid = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - salesreasonid = SalesreasonId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[SohsrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SohsrViewRow( + salesorderid = arr(0).asInstanceOf[SalesorderheaderId], + salesreasonid = arr(1).asInstanceOf[SalesreasonId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sop/SopViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sop/SopViewRow.scala index 4211391ff4..867b4b336a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sop/SopViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sop/SopViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.product.ProductId import adventureworks.sales.specialoffer.SpecialofferId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sop */ case class SopViewRow( @@ -34,20 +32,19 @@ case class SopViewRow( object SopViewRow { implicit lazy val decoder: Decoder[SopViewRow] = Decoder.forProduct5[SopViewRow, SpecialofferId, SpecialofferId, ProductId, TypoUUID, TypoLocalDateTime]("id", "specialofferid", "productid", "rowguid", "modifieddate")(SopViewRow.apply)(SpecialofferId.decoder, SpecialofferId.decoder, ProductId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SopViewRow] = Encoder.forProduct5[SopViewRow, SpecialofferId, SpecialofferId, ProductId, TypoUUID, TypoLocalDateTime]("id", "specialofferid", "productid", "rowguid", "modifieddate")(x => (x.id, x.specialofferid, x.productid, x.rowguid, x.modifieddate))(SpecialofferId.encoder, SpecialofferId.encoder, ProductId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SopViewRow] = new Read[SopViewRow]( - gets = List( - (SpecialofferId.get, Nullability.NoNulls), - (SpecialofferId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SopViewRow( - id = SpecialofferId.get.unsafeGetNonNullable(rs, i + 0), - specialofferid = SpecialofferId.get.unsafeGetNonNullable(rs, i + 1), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[SopViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SopViewRow( + id = arr(0).asInstanceOf[SpecialofferId], + specialofferid = arr(1).asInstanceOf[SpecialofferId], + productid = arr(2).asInstanceOf[ProductId], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sp/SpViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sp/SpViewRow.scala index 3a34b66e7a..2c44bab938 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sp/SpViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sp/SpViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sp */ case class SpViewRow( @@ -45,30 +43,29 @@ case class SpViewRow( object SpViewRow { implicit lazy val decoder: Decoder[SpViewRow] = Decoder.forProduct10[SpViewRow, BusinessentityId, BusinessentityId, Option[SalesterritoryId], Option[BigDecimal], BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate")(SpViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, Decoder.decodeOption(SalesterritoryId.decoder), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SpViewRow] = Encoder.forProduct10[SpViewRow, BusinessentityId, BusinessentityId, Option[SalesterritoryId], Option[BigDecimal], BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.territoryid, x.salesquota, x.bonus, x.commissionpct, x.salesytd, x.saleslastyear, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, Encoder.encodeOption(SalesterritoryId.encoder), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SpViewRow] = new Read[SpViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SpViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - territoryid = SalesterritoryId.get.unsafeGetNullable(rs, i + 2), - salesquota = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 3), - bonus = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - commissionpct = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - salesytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - saleslastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[SpViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SpViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + territoryid = arr(2).asInstanceOf[Option[SalesterritoryId]], + salesquota = arr(3).asInstanceOf[Option[BigDecimal]], + bonus = arr(4).asInstanceOf[BigDecimal], + commissionpct = arr(5).asInstanceOf[BigDecimal], + salesytd = arr(6).asInstanceOf[BigDecimal], + saleslastyear = arr(7).asInstanceOf[BigDecimal], + rowguid = arr(8).asInstanceOf[TypoUUID], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/spqh/SpqhViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/spqh/SpqhViewRow.scala index 6415b1993b..f63e75eb26 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/spqh/SpqhViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/spqh/SpqhViewRow.scala @@ -10,12 +10,10 @@ package spqh import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.spqh */ case class SpqhViewRow( @@ -36,22 +34,21 @@ case class SpqhViewRow( object SpqhViewRow { implicit lazy val decoder: Decoder[SpqhViewRow] = Decoder.forProduct6[SpqhViewRow, BusinessentityId, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "quotadate", "salesquota", "rowguid", "modifieddate")(SpqhViewRow.apply)(BusinessentityId.decoder, BusinessentityId.decoder, TypoLocalDateTime.decoder, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SpqhViewRow] = Encoder.forProduct6[SpqhViewRow, BusinessentityId, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "businessentityid", "quotadate", "salesquota", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.quotadate, x.salesquota, x.rowguid, x.modifieddate))(BusinessentityId.encoder, BusinessentityId.encoder, TypoLocalDateTime.encoder, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SpqhViewRow] = new Read[SpqhViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SpqhViewRow( - id = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - quotadate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - salesquota = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[SpqhViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SpqhViewRow( + id = arr(0).asInstanceOf[BusinessentityId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + quotadate = arr(2).asInstanceOf[TypoLocalDateTime], + salesquota = arr(3).asInstanceOf[BigDecimal], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sr/SrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sr/SrViewRow.scala index 171fb8ba50..4826f3082c 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sr/SrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sr/SrViewRow.scala @@ -10,11 +10,9 @@ package sr import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name import adventureworks.sales.salesreason.SalesreasonId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sr */ case class SrViewRow( @@ -33,20 +31,19 @@ case class SrViewRow( object SrViewRow { implicit lazy val decoder: Decoder[SrViewRow] = Decoder.forProduct5[SrViewRow, SalesreasonId, SalesreasonId, Name, Name, TypoLocalDateTime]("id", "salesreasonid", "name", "reasontype", "modifieddate")(SrViewRow.apply)(SalesreasonId.decoder, SalesreasonId.decoder, Name.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SrViewRow] = Encoder.forProduct5[SrViewRow, SalesreasonId, SalesreasonId, Name, Name, TypoLocalDateTime]("id", "salesreasonid", "name", "reasontype", "modifieddate")(x => (x.id, x.salesreasonid, x.name, x.reasontype, x.modifieddate))(SalesreasonId.encoder, SalesreasonId.encoder, Name.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SrViewRow] = new Read[SrViewRow]( - gets = List( - (SalesreasonId.get, Nullability.NoNulls), - (SalesreasonId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SrViewRow( - id = SalesreasonId.get.unsafeGetNonNullable(rs, i + 0), - salesreasonid = SalesreasonId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - reasontype = Name.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[SrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SrViewRow( + id = arr(0).asInstanceOf[SalesreasonId], + salesreasonid = arr(1).asInstanceOf[SalesreasonId], + name = arr(2).asInstanceOf[Name], + reasontype = arr(3).asInstanceOf[Name], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/st/StViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/st/StViewRow.scala index 59ebd77718..48b6cb643f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/st/StViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/st/StViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.customtypes.TypoUUID import adventureworks.person.countryregion.CountryregionId import adventureworks.public.Name import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.st */ case class StViewRow( @@ -48,32 +46,31 @@ case class StViewRow( object StViewRow { implicit lazy val decoder: Decoder[StViewRow] = Decoder.forProduct11[StViewRow, SalesterritoryId, SalesterritoryId, Name, CountryregionId, /* max 50 chars */ String, BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate")(StViewRow.apply)(SalesterritoryId.decoder, SalesterritoryId.decoder, Name.decoder, CountryregionId.decoder, Decoder.decodeString, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[StViewRow] = Encoder.forProduct11[StViewRow, SalesterritoryId, SalesterritoryId, Name, CountryregionId, /* max 50 chars */ String, BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("id", "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate")(x => (x.id, x.territoryid, x.name, x.countryregioncode, x.group, x.salesytd, x.saleslastyear, x.costytd, x.costlastyear, x.rowguid, x.modifieddate))(SalesterritoryId.encoder, SalesterritoryId.encoder, Name.encoder, CountryregionId.encoder, Encoder.encodeString, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[StViewRow] = new Read[StViewRow]( - gets = List( - (SalesterritoryId.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (CountryregionId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => StViewRow( - id = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 0), - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 1), - name = Name.get.unsafeGetNonNullable(rs, i + 2), - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 3), - group = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - salesytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - saleslastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - costytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - costlastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 8), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 9), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 10) + implicit lazy val read: Read[StViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + StViewRow( + id = arr(0).asInstanceOf[SalesterritoryId], + territoryid = arr(1).asInstanceOf[SalesterritoryId], + name = arr(2).asInstanceOf[Name], + countryregioncode = arr(3).asInstanceOf[CountryregionId], + group = arr(4).asInstanceOf[/* max 50 chars */ String], + salesytd = arr(5).asInstanceOf[BigDecimal], + saleslastyear = arr(6).asInstanceOf[BigDecimal], + costytd = arr(7).asInstanceOf[BigDecimal], + costlastyear = arr(8).asInstanceOf[BigDecimal], + rowguid = arr(9).asInstanceOf[TypoUUID], + modifieddate = arr(10).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sth/SthViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sth/SthViewRow.scala index 5e519b445b..aa613e1d27 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sth/SthViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/sth/SthViewRow.scala @@ -11,11 +11,9 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.sth */ case class SthViewRow( @@ -38,24 +36,23 @@ case class SthViewRow( object SthViewRow { implicit lazy val decoder: Decoder[SthViewRow] = Decoder.forProduct7[SthViewRow, SalesterritoryId, BusinessentityId, SalesterritoryId, TypoLocalDateTime, Option[TypoLocalDateTime], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "territoryid", "startdate", "enddate", "rowguid", "modifieddate")(SthViewRow.apply)(SalesterritoryId.decoder, BusinessentityId.decoder, SalesterritoryId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SthViewRow] = Encoder.forProduct7[SthViewRow, SalesterritoryId, BusinessentityId, SalesterritoryId, TypoLocalDateTime, Option[TypoLocalDateTime], TypoUUID, TypoLocalDateTime]("id", "businessentityid", "territoryid", "startdate", "enddate", "rowguid", "modifieddate")(x => (x.id, x.businessentityid, x.territoryid, x.startdate, x.enddate, x.rowguid, x.modifieddate))(SalesterritoryId.encoder, BusinessentityId.encoder, SalesterritoryId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SthViewRow] = new Read[SthViewRow]( - gets = List( - (SalesterritoryId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SthViewRow( - id = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 0), - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 1), - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 2), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[SthViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SthViewRow( + id = arr(0).asInstanceOf[SalesterritoryId], + businessentityid = arr(1).asInstanceOf[BusinessentityId], + territoryid = arr(2).asInstanceOf[SalesterritoryId], + startdate = arr(3).asInstanceOf[TypoLocalDateTime], + enddate = arr(4).asInstanceOf[Option[TypoLocalDateTime]], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/tr/TrViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/tr/TrViewRow.scala index 575b926976..7554ee61d4 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/tr/TrViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sa/tr/TrViewRow.scala @@ -13,12 +13,10 @@ import adventureworks.customtypes.TypoUUID import adventureworks.person.stateprovince.StateprovinceId import adventureworks.public.Name import adventureworks.sales.salestaxrate.SalestaxrateId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sa.tr */ case class TrViewRow( @@ -43,26 +41,25 @@ case class TrViewRow( object TrViewRow { implicit lazy val decoder: Decoder[TrViewRow] = Decoder.forProduct8[TrViewRow, SalestaxrateId, SalestaxrateId, StateprovinceId, TypoShort, BigDecimal, Name, TypoUUID, TypoLocalDateTime]("id", "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate")(TrViewRow.apply)(SalestaxrateId.decoder, SalestaxrateId.decoder, StateprovinceId.decoder, TypoShort.decoder, Decoder.decodeBigDecimal, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[TrViewRow] = Encoder.forProduct8[TrViewRow, SalestaxrateId, SalestaxrateId, StateprovinceId, TypoShort, BigDecimal, Name, TypoUUID, TypoLocalDateTime]("id", "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate")(x => (x.id, x.salestaxrateid, x.stateprovinceid, x.taxtype, x.taxrate, x.name, x.rowguid, x.modifieddate))(SalestaxrateId.encoder, SalestaxrateId.encoder, StateprovinceId.encoder, TypoShort.encoder, Encoder.encodeBigDecimal, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[TrViewRow] = new Read[TrViewRow]( - gets = List( - (SalestaxrateId.get, Nullability.NoNulls), - (SalestaxrateId.get, Nullability.NoNulls), - (StateprovinceId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => TrViewRow( - id = SalestaxrateId.get.unsafeGetNonNullable(rs, i + 0), - salestaxrateid = SalestaxrateId.get.unsafeGetNonNullable(rs, i + 1), - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 2), - taxtype = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - taxrate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - name = Name.get.unsafeGetNonNullable(rs, i + 5), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 6), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 7) + implicit lazy val read: Read[TrViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalestaxrateId.get).asInstanceOf[Read[Any]], + new Read.Single(SalestaxrateId.get).asInstanceOf[Read[Any]], + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + TrViewRow( + id = arr(0).asInstanceOf[SalestaxrateId], + salestaxrateid = arr(1).asInstanceOf[SalestaxrateId], + stateprovinceid = arr(2).asInstanceOf[StateprovinceId], + taxtype = arr(3).asInstanceOf[TypoShort], + taxrate = arr(4).asInstanceOf[BigDecimal], + name = arr(5).asInstanceOf[Name], + rowguid = arr(6).asInstanceOf[TypoUUID], + modifieddate = arr(7).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRepoImpl.scala index dedc082ce8..065e6a69d8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRepoImpl.scala @@ -30,7 +30,7 @@ class CountryregioncurrencyRepoImpl extends CountryregioncurrencyRepo { DeleteBuilder(""""sales"."countryregioncurrency"""", CountryregioncurrencyFields.structure) } override def deleteById(compositeId: CountryregioncurrencyId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."countryregioncurrency" where "countryregioncode" = ${fromWrite(compositeId.countryregioncode)(Write.fromPut(CountryregionId.put))} AND "currencycode" = ${fromWrite(compositeId.currencycode)(Write.fromPut(CurrencyId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."countryregioncurrency" where "countryregioncode" = ${fromWrite(compositeId.countryregioncode)(new Write.Single(CountryregionId.put))} AND "currencycode" = ${fromWrite(compositeId.currencycode)(new Write.Single(CurrencyId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[CountryregioncurrencyId]): ConnectionIO[Int] = { val countryregioncode = compositeIds.map(_.countryregioncode) @@ -44,17 +44,17 @@ class CountryregioncurrencyRepoImpl extends CountryregioncurrencyRepo { } override def insert(unsaved: CountryregioncurrencyRow): ConnectionIO[CountryregioncurrencyRow] = { sql"""insert into "sales"."countryregioncurrency"("countryregioncode", "currencycode", "modifieddate") - values (${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, ${fromWrite(unsaved.currencycode)(Write.fromPut(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, ${fromWrite(unsaved.currencycode)(new Write.Single(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "countryregioncode", "currencycode", "modifieddate"::text """.query(using CountryregioncurrencyRow.read).unique } override def insert(unsaved: CountryregioncurrencyRowUnsaved): ConnectionIO[CountryregioncurrencyRow] = { val fs = List( - Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}")), - Some((Fragment.const0(s""""currencycode""""), fr"${fromWrite(unsaved.currencycode)(Write.fromPut(CurrencyId.put))}::bpchar")), + Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}")), + Some((Fragment.const0(s""""currencycode""""), fr"${fromWrite(unsaved.currencycode)(new Write.Single(CurrencyId.put))}::bpchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class CountryregioncurrencyRepoImpl extends CountryregioncurrencyRepo { sql"""select "countryregioncode", "currencycode", "modifieddate"::text from "sales"."countryregioncurrency"""".query(using CountryregioncurrencyRow.read).stream } override def selectById(compositeId: CountryregioncurrencyId): ConnectionIO[Option[CountryregioncurrencyRow]] = { - sql"""select "countryregioncode", "currencycode", "modifieddate"::text from "sales"."countryregioncurrency" where "countryregioncode" = ${fromWrite(compositeId.countryregioncode)(Write.fromPut(CountryregionId.put))} AND "currencycode" = ${fromWrite(compositeId.currencycode)(Write.fromPut(CurrencyId.put))}""".query(using CountryregioncurrencyRow.read).option + sql"""select "countryregioncode", "currencycode", "modifieddate"::text from "sales"."countryregioncurrency" where "countryregioncode" = ${fromWrite(compositeId.countryregioncode)(new Write.Single(CountryregionId.put))} AND "currencycode" = ${fromWrite(compositeId.currencycode)(new Write.Single(CurrencyId.put))}""".query(using CountryregioncurrencyRow.read).option } override def selectByIds(compositeIds: Array[CountryregioncurrencyId]): Stream[ConnectionIO, CountryregioncurrencyRow] = { val countryregioncode = compositeIds.map(_.countryregioncode) @@ -110,8 +110,8 @@ class CountryregioncurrencyRepoImpl extends CountryregioncurrencyRepo { override def update(row: CountryregioncurrencyRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."countryregioncurrency" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "countryregioncode" = ${fromWrite(compositeId.countryregioncode)(Write.fromPut(CountryregionId.put))} AND "currencycode" = ${fromWrite(compositeId.currencycode)(Write.fromPut(CurrencyId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "countryregioncode" = ${fromWrite(compositeId.countryregioncode)(new Write.Single(CountryregionId.put))} AND "currencycode" = ${fromWrite(compositeId.currencycode)(new Write.Single(CurrencyId.put))}""" .update .run .map(_ > 0) @@ -119,9 +119,9 @@ class CountryregioncurrencyRepoImpl extends CountryregioncurrencyRepo { override def upsert(unsaved: CountryregioncurrencyRow): ConnectionIO[CountryregioncurrencyRow] = { sql"""insert into "sales"."countryregioncurrency"("countryregioncode", "currencycode", "modifieddate") values ( - ${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, - ${fromWrite(unsaved.currencycode)(Write.fromPut(CurrencyId.put))}::bpchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, + ${fromWrite(unsaved.currencycode)(new Write.Single(CurrencyId.put))}::bpchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("countryregioncode", "currencycode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRow.scala index 665289f121..a396f6a2d0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/countryregioncurrency/CountryregioncurrencyRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.countryregion.CountryregionId import adventureworks.sales.currency.CurrencyId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.countryregioncurrency Cross-reference table mapping ISO currency codes to a country or region. @@ -43,18 +41,17 @@ object CountryregioncurrencyRow { new CountryregioncurrencyRow(compositeId.countryregioncode, compositeId.currencycode, modifieddate) implicit lazy val decoder: Decoder[CountryregioncurrencyRow] = Decoder.forProduct3[CountryregioncurrencyRow, CountryregionId, CurrencyId, TypoLocalDateTime]("countryregioncode", "currencycode", "modifieddate")(CountryregioncurrencyRow.apply)(CountryregionId.decoder, CurrencyId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CountryregioncurrencyRow] = Encoder.forProduct3[CountryregioncurrencyRow, CountryregionId, CurrencyId, TypoLocalDateTime]("countryregioncode", "currencycode", "modifieddate")(x => (x.countryregioncode, x.currencycode, x.modifieddate))(CountryregionId.encoder, CurrencyId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CountryregioncurrencyRow] = new Read[CountryregioncurrencyRow]( - gets = List( - (CountryregionId.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CountryregioncurrencyRow( - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 0), - currencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[CountryregioncurrencyRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CountryregioncurrencyRow( + countryregioncode = arr(0).asInstanceOf[CountryregionId], + currencycode = arr(1).asInstanceOf[CurrencyId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CountryregioncurrencyRow] = Text.instance[CountryregioncurrencyRow]{ (row, sb) => CountryregionId.text.unsafeEncode(row.countryregioncode, sb) sb.append(Text.DELIMETER) @@ -62,20 +59,10 @@ object CountryregioncurrencyRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CountryregioncurrencyRow] = new Write[CountryregioncurrencyRow]( - puts = List((CountryregionId.put, Nullability.NoNulls), - (CurrencyId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.countryregioncode, x.currencycode, x.modifieddate), - unsafeSet = (rs, i, a) => { - CountryregionId.put.unsafeSetNonNullable(rs, i + 0, a.countryregioncode) - CurrencyId.put.unsafeSetNonNullable(rs, i + 1, a.currencycode) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - CountryregionId.put.unsafeUpdateNonNullable(ps, i + 0, a.countryregioncode) - CurrencyId.put.unsafeUpdateNonNullable(ps, i + 1, a.currencycode) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[CountryregioncurrencyRow] = new Write.Composite[CountryregioncurrencyRow]( + List(new Write.Single(CountryregionId.put), + new Write.Single(CurrencyId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.countryregioncode, a.currencycode, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRepoImpl.scala index 037f393495..d1d8996155 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRepoImpl.scala @@ -32,30 +32,30 @@ class CreditcardRepoImpl extends CreditcardRepo { DeleteBuilder(""""sales"."creditcard"""", CreditcardFields.structure) } override def deleteById(creditcardid: /* user-picked */ CustomCreditcardId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."creditcard" where "creditcardid" = ${fromWrite(creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."creditcard" where "creditcardid" = ${fromWrite(creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}""".update.run.map(_ > 0) } override def deleteByIds(creditcardids: Array[/* user-picked */ CustomCreditcardId])(implicit put0: Put[Array[/* user-picked */ CustomCreditcardId]]): ConnectionIO[Int] = { sql"""delete from "sales"."creditcard" where "creditcardid" = ANY(${creditcardids})""".update.run } override def insert(unsaved: CreditcardRow): ConnectionIO[CreditcardRow] = { sql"""insert into "sales"."creditcard"("creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate") - values (${fromWrite(unsaved.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}::int4, ${fromWrite(unsaved.cardtype)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.cardnumber)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.expmonth)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.expyear)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}::int4, ${fromWrite(unsaved.cardtype)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.cardnumber)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.expmonth)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.expyear)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate"::text """.query(using CreditcardRow.read).unique } override def insert(unsaved: CreditcardRowUnsaved): ConnectionIO[CreditcardRow] = { val fs = List( - Some((Fragment.const0(s""""cardtype""""), fr"${fromWrite(unsaved.cardtype)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""cardnumber""""), fr"${fromWrite(unsaved.cardnumber)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""expmonth""""), fr"${fromWrite(unsaved.expmonth)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""expyear""""), fr"${fromWrite(unsaved.expyear)(Write.fromPut(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""cardtype""""), fr"${fromWrite(unsaved.cardtype)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""cardnumber""""), fr"${fromWrite(unsaved.cardnumber)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""expmonth""""), fr"${fromWrite(unsaved.expmonth)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""expyear""""), fr"${fromWrite(unsaved.expyear)(new Write.Single(TypoShort.put))}::int2")), unsaved.creditcardid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""creditcardid""""), fr"${fromWrite(value: /* user-picked */ CustomCreditcardId)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""creditcardid""""), fr"${fromWrite(value: /* user-picked */ CustomCreditcardId)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -87,7 +87,7 @@ class CreditcardRepoImpl extends CreditcardRepo { sql"""select "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate"::text from "sales"."creditcard"""".query(using CreditcardRow.read).stream } override def selectById(creditcardid: /* user-picked */ CustomCreditcardId): ConnectionIO[Option[CreditcardRow]] = { - sql"""select "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate"::text from "sales"."creditcard" where "creditcardid" = ${fromWrite(creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}""".query(using CreditcardRow.read).option + sql"""select "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate"::text from "sales"."creditcard" where "creditcardid" = ${fromWrite(creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}""".query(using CreditcardRow.read).option } override def selectByIds(creditcardids: Array[/* user-picked */ CustomCreditcardId])(implicit puts0: Put[Array[/* user-picked */ CustomCreditcardId]]): Stream[ConnectionIO, CreditcardRow] = { sql"""select "creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate"::text from "sales"."creditcard" where "creditcardid" = ANY(${creditcardids})""".query(using CreditcardRow.read).stream @@ -104,12 +104,12 @@ class CreditcardRepoImpl extends CreditcardRepo { override def update(row: CreditcardRow): ConnectionIO[Boolean] = { val creditcardid = row.creditcardid sql"""update "sales"."creditcard" - set "cardtype" = ${fromWrite(row.cardtype)(Write.fromPut(Meta.StringMeta.put))}, - "cardnumber" = ${fromWrite(row.cardnumber)(Write.fromPut(Meta.StringMeta.put))}, - "expmonth" = ${fromWrite(row.expmonth)(Write.fromPut(TypoShort.put))}::int2, - "expyear" = ${fromWrite(row.expyear)(Write.fromPut(TypoShort.put))}::int2, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "creditcardid" = ${fromWrite(creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}""" + set "cardtype" = ${fromWrite(row.cardtype)(new Write.Single(Meta.StringMeta.put))}, + "cardnumber" = ${fromWrite(row.cardnumber)(new Write.Single(Meta.StringMeta.put))}, + "expmonth" = ${fromWrite(row.expmonth)(new Write.Single(TypoShort.put))}::int2, + "expyear" = ${fromWrite(row.expyear)(new Write.Single(TypoShort.put))}::int2, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "creditcardid" = ${fromWrite(creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}""" .update .run .map(_ > 0) @@ -117,12 +117,12 @@ class CreditcardRepoImpl extends CreditcardRepo { override def upsert(unsaved: CreditcardRow): ConnectionIO[CreditcardRow] = { sql"""insert into "sales"."creditcard"("creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate") values ( - ${fromWrite(unsaved.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}::int4, - ${fromWrite(unsaved.cardtype)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.cardnumber)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.expmonth)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.expyear)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}::int4, + ${fromWrite(unsaved.cardtype)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.cardnumber)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.expmonth)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.expyear)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("creditcardid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRow.scala index fdd5c5943c..68532a9519 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/creditcard/CreditcardRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoShort import adventureworks.userdefined.CustomCreditcardId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.creditcard Customer credit card information. @@ -46,24 +44,23 @@ case class CreditcardRow( object CreditcardRow { implicit lazy val decoder: Decoder[CreditcardRow] = Decoder.forProduct6[CreditcardRow, /* user-picked */ CustomCreditcardId, /* max 50 chars */ String, /* max 25 chars */ String, TypoShort, TypoShort, TypoLocalDateTime]("creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate")(CreditcardRow.apply)(CustomCreditcardId.decoder, Decoder.decodeString, Decoder.decodeString, TypoShort.decoder, TypoShort.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CreditcardRow] = Encoder.forProduct6[CreditcardRow, /* user-picked */ CustomCreditcardId, /* max 50 chars */ String, /* max 25 chars */ String, TypoShort, TypoShort, TypoLocalDateTime]("creditcardid", "cardtype", "cardnumber", "expmonth", "expyear", "modifieddate")(x => (x.creditcardid, x.cardtype, x.cardnumber, x.expmonth, x.expyear, x.modifieddate))(CustomCreditcardId.encoder, Encoder.encodeString, Encoder.encodeString, TypoShort.encoder, TypoShort.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CreditcardRow] = new Read[CreditcardRow]( - gets = List( - (/* user-picked */ CustomCreditcardId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CreditcardRow( - creditcardid = /* user-picked */ CustomCreditcardId.get.unsafeGetNonNullable(rs, i + 0), - cardtype = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - cardnumber = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - expmonth = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - expyear = TypoShort.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[CreditcardRow] = new Read.CompositeOfInstances(Array( + new Read.Single(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CreditcardRow( + creditcardid = arr(0).asInstanceOf[/* user-picked */ CustomCreditcardId], + cardtype = arr(1).asInstanceOf[/* max 50 chars */ String], + cardnumber = arr(2).asInstanceOf[/* max 25 chars */ String], + expmonth = arr(3).asInstanceOf[TypoShort], + expyear = arr(4).asInstanceOf[TypoShort], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CreditcardRow] = Text.instance[CreditcardRow]{ (row, sb) => /* user-picked */ CustomCreditcardId.text.unsafeEncode(row.creditcardid, sb) sb.append(Text.DELIMETER) @@ -77,29 +74,13 @@ object CreditcardRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CreditcardRow] = new Write[CreditcardRow]( - puts = List((/* user-picked */ CustomCreditcardId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.creditcardid, x.cardtype, x.cardnumber, x.expmonth, x.expyear, x.modifieddate), - unsafeSet = (rs, i, a) => { - /* user-picked */ CustomCreditcardId.put.unsafeSetNonNullable(rs, i + 0, a.creditcardid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.cardtype) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 2, a.cardnumber) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.expmonth) - TypoShort.put.unsafeSetNonNullable(rs, i + 4, a.expyear) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - /* user-picked */ CustomCreditcardId.put.unsafeUpdateNonNullable(ps, i + 0, a.creditcardid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.cardtype) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.cardnumber) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.expmonth) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 4, a.expyear) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[CreditcardRow] = new Write.Composite[CreditcardRow]( + List(new Write.Single(/* user-picked */ CustomCreditcardId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.creditcardid, a.cardtype, a.cardnumber, a.expmonth, a.expyear, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRepoImpl.scala index 5688a0b7e8..f8e3ebbf87 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRepoImpl.scala @@ -29,24 +29,24 @@ class CurrencyRepoImpl extends CurrencyRepo { DeleteBuilder(""""sales"."currency"""", CurrencyFields.structure) } override def deleteById(currencycode: CurrencyId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."currency" where "currencycode" = ${fromWrite(currencycode)(Write.fromPut(CurrencyId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."currency" where "currencycode" = ${fromWrite(currencycode)(new Write.Single(CurrencyId.put))}""".update.run.map(_ > 0) } override def deleteByIds(currencycodes: Array[CurrencyId]): ConnectionIO[Int] = { sql"""delete from "sales"."currency" where "currencycode" = ANY(${currencycodes})""".update.run } override def insert(unsaved: CurrencyRow): ConnectionIO[CurrencyRow] = { sql"""insert into "sales"."currency"("currencycode", "name", "modifieddate") - values (${fromWrite(unsaved.currencycode)(Write.fromPut(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.currencycode)(new Write.Single(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "currencycode", "name", "modifieddate"::text """.query(using CurrencyRow.read).unique } override def insert(unsaved: CurrencyRowUnsaved): ConnectionIO[CurrencyRow] = { val fs = List( - Some((Fragment.const0(s""""currencycode""""), fr"${fromWrite(unsaved.currencycode)(Write.fromPut(CurrencyId.put))}::bpchar")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""currencycode""""), fr"${fromWrite(unsaved.currencycode)(new Write.Single(CurrencyId.put))}::bpchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -78,7 +78,7 @@ class CurrencyRepoImpl extends CurrencyRepo { sql"""select "currencycode", "name", "modifieddate"::text from "sales"."currency"""".query(using CurrencyRow.read).stream } override def selectById(currencycode: CurrencyId): ConnectionIO[Option[CurrencyRow]] = { - sql"""select "currencycode", "name", "modifieddate"::text from "sales"."currency" where "currencycode" = ${fromWrite(currencycode)(Write.fromPut(CurrencyId.put))}""".query(using CurrencyRow.read).option + sql"""select "currencycode", "name", "modifieddate"::text from "sales"."currency" where "currencycode" = ${fromWrite(currencycode)(new Write.Single(CurrencyId.put))}""".query(using CurrencyRow.read).option } override def selectByIds(currencycodes: Array[CurrencyId]): Stream[ConnectionIO, CurrencyRow] = { sql"""select "currencycode", "name", "modifieddate"::text from "sales"."currency" where "currencycode" = ANY(${currencycodes})""".query(using CurrencyRow.read).stream @@ -95,9 +95,9 @@ class CurrencyRepoImpl extends CurrencyRepo { override def update(row: CurrencyRow): ConnectionIO[Boolean] = { val currencycode = row.currencycode sql"""update "sales"."currency" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "currencycode" = ${fromWrite(currencycode)(Write.fromPut(CurrencyId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "currencycode" = ${fromWrite(currencycode)(new Write.Single(CurrencyId.put))}""" .update .run .map(_ > 0) @@ -105,9 +105,9 @@ class CurrencyRepoImpl extends CurrencyRepo { override def upsert(unsaved: CurrencyRow): ConnectionIO[CurrencyRow] = { sql"""insert into "sales"."currency"("currencycode", "name", "modifieddate") values ( - ${fromWrite(unsaved.currencycode)(Write.fromPut(CurrencyId.put))}::bpchar, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.currencycode)(new Write.Single(CurrencyId.put))}::bpchar, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("currencycode") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRow.scala index 7a90d8eae5..6086bc3ce8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currency/CurrencyRow.scala @@ -10,13 +10,11 @@ package currency import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.currency Lookup table containing standard ISO currencies. @@ -37,18 +35,17 @@ case class CurrencyRow( object CurrencyRow { implicit lazy val decoder: Decoder[CurrencyRow] = Decoder.forProduct3[CurrencyRow, CurrencyId, Name, TypoLocalDateTime]("currencycode", "name", "modifieddate")(CurrencyRow.apply)(CurrencyId.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CurrencyRow] = Encoder.forProduct3[CurrencyRow, CurrencyId, Name, TypoLocalDateTime]("currencycode", "name", "modifieddate")(x => (x.currencycode, x.name, x.modifieddate))(CurrencyId.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CurrencyRow] = new Read[CurrencyRow]( - gets = List( - (CurrencyId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CurrencyRow( - currencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[CurrencyRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CurrencyRow( + currencycode = arr(0).asInstanceOf[CurrencyId], + name = arr(1).asInstanceOf[Name], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CurrencyRow] = Text.instance[CurrencyRow]{ (row, sb) => CurrencyId.text.unsafeEncode(row.currencycode, sb) sb.append(Text.DELIMETER) @@ -56,20 +53,10 @@ object CurrencyRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CurrencyRow] = new Write[CurrencyRow]( - puts = List((CurrencyId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.currencycode, x.name, x.modifieddate), - unsafeSet = (rs, i, a) => { - CurrencyId.put.unsafeSetNonNullable(rs, i + 0, a.currencycode) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - CurrencyId.put.unsafeUpdateNonNullable(ps, i + 0, a.currencycode) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[CurrencyRow] = new Write.Composite[CurrencyRow]( + List(new Write.Single(CurrencyId.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.currencycode, a.name, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRepoImpl.scala index 74c6561558..db9ddc60a8 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRepoImpl.scala @@ -30,31 +30,31 @@ class CurrencyrateRepoImpl extends CurrencyrateRepo { DeleteBuilder(""""sales"."currencyrate"""", CurrencyrateFields.structure) } override def deleteById(currencyrateid: CurrencyrateId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."currencyrate" where "currencyrateid" = ${fromWrite(currencyrateid)(Write.fromPut(CurrencyrateId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."currencyrate" where "currencyrateid" = ${fromWrite(currencyrateid)(new Write.Single(CurrencyrateId.put))}""".update.run.map(_ > 0) } override def deleteByIds(currencyrateids: Array[CurrencyrateId]): ConnectionIO[Int] = { sql"""delete from "sales"."currencyrate" where "currencyrateid" = ANY(${currencyrateids})""".update.run } override def insert(unsaved: CurrencyrateRow): ConnectionIO[CurrencyrateRow] = { sql"""insert into "sales"."currencyrate"("currencyrateid", "currencyratedate", "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate") - values (${fromWrite(unsaved.currencyrateid)(Write.fromPut(CurrencyrateId.put))}::int4, ${fromWrite(unsaved.currencyratedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.fromcurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.tocurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.averagerate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.endofdayrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.currencyrateid)(new Write.Single(CurrencyrateId.put))}::int4, ${fromWrite(unsaved.currencyratedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.fromcurrencycode)(new Write.Single(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.tocurrencycode)(new Write.Single(CurrencyId.put))}::bpchar, ${fromWrite(unsaved.averagerate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.endofdayrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "currencyrateid", "currencyratedate"::text, "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate"::text """.query(using CurrencyrateRow.read).unique } override def insert(unsaved: CurrencyrateRowUnsaved): ConnectionIO[CurrencyrateRow] = { val fs = List( - Some((Fragment.const0(s""""currencyratedate""""), fr"${fromWrite(unsaved.currencyratedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""fromcurrencycode""""), fr"${fromWrite(unsaved.fromcurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar")), - Some((Fragment.const0(s""""tocurrencycode""""), fr"${fromWrite(unsaved.tocurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar")), - Some((Fragment.const0(s""""averagerate""""), fr"${fromWrite(unsaved.averagerate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""endofdayrate""""), fr"${fromWrite(unsaved.endofdayrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""currencyratedate""""), fr"${fromWrite(unsaved.currencyratedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""fromcurrencycode""""), fr"${fromWrite(unsaved.fromcurrencycode)(new Write.Single(CurrencyId.put))}::bpchar")), + Some((Fragment.const0(s""""tocurrencycode""""), fr"${fromWrite(unsaved.tocurrencycode)(new Write.Single(CurrencyId.put))}::bpchar")), + Some((Fragment.const0(s""""averagerate""""), fr"${fromWrite(unsaved.averagerate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""endofdayrate""""), fr"${fromWrite(unsaved.endofdayrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.currencyrateid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""currencyrateid""""), fr"${fromWrite(value: CurrencyrateId)(Write.fromPut(CurrencyrateId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""currencyrateid""""), fr"${fromWrite(value: CurrencyrateId)(new Write.Single(CurrencyrateId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class CurrencyrateRepoImpl extends CurrencyrateRepo { sql"""select "currencyrateid", "currencyratedate"::text, "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate"::text from "sales"."currencyrate"""".query(using CurrencyrateRow.read).stream } override def selectById(currencyrateid: CurrencyrateId): ConnectionIO[Option[CurrencyrateRow]] = { - sql"""select "currencyrateid", "currencyratedate"::text, "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate"::text from "sales"."currencyrate" where "currencyrateid" = ${fromWrite(currencyrateid)(Write.fromPut(CurrencyrateId.put))}""".query(using CurrencyrateRow.read).option + sql"""select "currencyrateid", "currencyratedate"::text, "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate"::text from "sales"."currencyrate" where "currencyrateid" = ${fromWrite(currencyrateid)(new Write.Single(CurrencyrateId.put))}""".query(using CurrencyrateRow.read).option } override def selectByIds(currencyrateids: Array[CurrencyrateId]): Stream[ConnectionIO, CurrencyrateRow] = { sql"""select "currencyrateid", "currencyratedate"::text, "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate"::text from "sales"."currencyrate" where "currencyrateid" = ANY(${currencyrateids})""".query(using CurrencyrateRow.read).stream @@ -103,13 +103,13 @@ class CurrencyrateRepoImpl extends CurrencyrateRepo { override def update(row: CurrencyrateRow): ConnectionIO[Boolean] = { val currencyrateid = row.currencyrateid sql"""update "sales"."currencyrate" - set "currencyratedate" = ${fromWrite(row.currencyratedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "fromcurrencycode" = ${fromWrite(row.fromcurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar, - "tocurrencycode" = ${fromWrite(row.tocurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar, - "averagerate" = ${fromWrite(row.averagerate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "endofdayrate" = ${fromWrite(row.endofdayrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "currencyrateid" = ${fromWrite(currencyrateid)(Write.fromPut(CurrencyrateId.put))}""" + set "currencyratedate" = ${fromWrite(row.currencyratedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "fromcurrencycode" = ${fromWrite(row.fromcurrencycode)(new Write.Single(CurrencyId.put))}::bpchar, + "tocurrencycode" = ${fromWrite(row.tocurrencycode)(new Write.Single(CurrencyId.put))}::bpchar, + "averagerate" = ${fromWrite(row.averagerate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "endofdayrate" = ${fromWrite(row.endofdayrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "currencyrateid" = ${fromWrite(currencyrateid)(new Write.Single(CurrencyrateId.put))}""" .update .run .map(_ > 0) @@ -117,13 +117,13 @@ class CurrencyrateRepoImpl extends CurrencyrateRepo { override def upsert(unsaved: CurrencyrateRow): ConnectionIO[CurrencyrateRow] = { sql"""insert into "sales"."currencyrate"("currencyrateid", "currencyratedate", "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate") values ( - ${fromWrite(unsaved.currencyrateid)(Write.fromPut(CurrencyrateId.put))}::int4, - ${fromWrite(unsaved.currencyratedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.fromcurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar, - ${fromWrite(unsaved.tocurrencycode)(Write.fromPut(CurrencyId.put))}::bpchar, - ${fromWrite(unsaved.averagerate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.endofdayrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.currencyrateid)(new Write.Single(CurrencyrateId.put))}::int4, + ${fromWrite(unsaved.currencyratedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.fromcurrencycode)(new Write.Single(CurrencyId.put))}::bpchar, + ${fromWrite(unsaved.tocurrencycode)(new Write.Single(CurrencyId.put))}::bpchar, + ${fromWrite(unsaved.averagerate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.endofdayrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("currencyrateid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRow.scala index d3534f002e..16e965f5bb 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/currencyrate/CurrencyrateRow.scala @@ -10,14 +10,12 @@ package currencyrate import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.sales.currency.CurrencyId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.currencyrate Currency exchange rates. @@ -49,26 +47,25 @@ case class CurrencyrateRow( object CurrencyrateRow { implicit lazy val decoder: Decoder[CurrencyrateRow] = Decoder.forProduct7[CurrencyrateRow, CurrencyrateId, TypoLocalDateTime, CurrencyId, CurrencyId, BigDecimal, BigDecimal, TypoLocalDateTime]("currencyrateid", "currencyratedate", "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate")(CurrencyrateRow.apply)(CurrencyrateId.decoder, TypoLocalDateTime.decoder, CurrencyId.decoder, CurrencyId.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CurrencyrateRow] = Encoder.forProduct7[CurrencyrateRow, CurrencyrateId, TypoLocalDateTime, CurrencyId, CurrencyId, BigDecimal, BigDecimal, TypoLocalDateTime]("currencyrateid", "currencyratedate", "fromcurrencycode", "tocurrencycode", "averagerate", "endofdayrate", "modifieddate")(x => (x.currencyrateid, x.currencyratedate, x.fromcurrencycode, x.tocurrencycode, x.averagerate, x.endofdayrate, x.modifieddate))(CurrencyrateId.encoder, TypoLocalDateTime.encoder, CurrencyId.encoder, CurrencyId.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CurrencyrateRow] = new Read[CurrencyrateRow]( - gets = List( - (CurrencyrateId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (CurrencyId.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CurrencyrateRow( - currencyrateid = CurrencyrateId.get.unsafeGetNonNullable(rs, i + 0), - currencyratedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - fromcurrencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 2), - tocurrencycode = CurrencyId.get.unsafeGetNonNullable(rs, i + 3), - averagerate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - endofdayrate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[CurrencyrateRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CurrencyrateId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(CurrencyId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CurrencyrateRow( + currencyrateid = arr(0).asInstanceOf[CurrencyrateId], + currencyratedate = arr(1).asInstanceOf[TypoLocalDateTime], + fromcurrencycode = arr(2).asInstanceOf[CurrencyId], + tocurrencycode = arr(3).asInstanceOf[CurrencyId], + averagerate = arr(4).asInstanceOf[BigDecimal], + endofdayrate = arr(5).asInstanceOf[BigDecimal], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CurrencyrateRow] = Text.instance[CurrencyrateRow]{ (row, sb) => CurrencyrateId.text.unsafeEncode(row.currencyrateid, sb) sb.append(Text.DELIMETER) @@ -84,32 +81,14 @@ object CurrencyrateRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CurrencyrateRow] = new Write[CurrencyrateRow]( - puts = List((CurrencyrateId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (CurrencyId.put, Nullability.NoNulls), - (CurrencyId.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.currencyrateid, x.currencyratedate, x.fromcurrencycode, x.tocurrencycode, x.averagerate, x.endofdayrate, x.modifieddate), - unsafeSet = (rs, i, a) => { - CurrencyrateId.put.unsafeSetNonNullable(rs, i + 0, a.currencyrateid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 1, a.currencyratedate) - CurrencyId.put.unsafeSetNonNullable(rs, i + 2, a.fromcurrencycode) - CurrencyId.put.unsafeSetNonNullable(rs, i + 3, a.tocurrencycode) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 4, a.averagerate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 5, a.endofdayrate) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 6, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - CurrencyrateId.put.unsafeUpdateNonNullable(ps, i + 0, a.currencyrateid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 1, a.currencyratedate) - CurrencyId.put.unsafeUpdateNonNullable(ps, i + 2, a.fromcurrencycode) - CurrencyId.put.unsafeUpdateNonNullable(ps, i + 3, a.tocurrencycode) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.averagerate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.endofdayrate) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 6, a.modifieddate) - } + implicit lazy val write: Write[CurrencyrateRow] = new Write.Composite[CurrencyrateRow]( + List(new Write.Single(CurrencyrateId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(CurrencyId.put), + new Write.Single(CurrencyId.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.currencyrateid, a.currencyratedate, a.fromcurrencycode, a.tocurrencycode, a.averagerate, a.endofdayrate, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRepoImpl.scala index 014bff5ccf..8f33eaa220 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRepoImpl.scala @@ -31,33 +31,33 @@ class CustomerRepoImpl extends CustomerRepo { DeleteBuilder(""""sales"."customer"""", CustomerFields.structure) } override def deleteById(customerid: CustomerId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."customer" where "customerid" = ${fromWrite(customerid)(Write.fromPut(CustomerId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."customer" where "customerid" = ${fromWrite(customerid)(new Write.Single(CustomerId.put))}""".update.run.map(_ > 0) } override def deleteByIds(customerids: Array[CustomerId]): ConnectionIO[Int] = { sql"""delete from "sales"."customer" where "customerid" = ANY(${customerids})""".update.run } override def insert(unsaved: CustomerRow): ConnectionIO[CustomerRow] = { sql"""insert into "sales"."customer"("customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate") - values (${fromWrite(unsaved.customerid)(Write.fromPut(CustomerId.put))}::int4, ${fromWrite(unsaved.personid)(Write.fromPutOption(BusinessentityId.put))}::int4, ${fromWrite(unsaved.storeid)(Write.fromPutOption(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.customerid)(new Write.Single(CustomerId.put))}::int4, ${fromWrite(unsaved.personid)(new Write.SingleOpt(BusinessentityId.put))}::int4, ${fromWrite(unsaved.storeid)(new Write.SingleOpt(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate"::text """.query(using CustomerRow.read).unique } override def insert(unsaved: CustomerRowUnsaved): ConnectionIO[CustomerRow] = { val fs = List( - Some((Fragment.const0(s""""personid""""), fr"${fromWrite(unsaved.personid)(Write.fromPutOption(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""storeid""""), fr"${fromWrite(unsaved.storeid)(Write.fromPutOption(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4")), + Some((Fragment.const0(s""""personid""""), fr"${fromWrite(unsaved.personid)(new Write.SingleOpt(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""storeid""""), fr"${fromWrite(unsaved.storeid)(new Write.SingleOpt(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4")), unsaved.customerid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""customerid""""), fr"${fromWrite(value: CustomerId)(Write.fromPut(CustomerId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""customerid""""), fr"${fromWrite(value: CustomerId)(new Write.Single(CustomerId.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -89,7 +89,7 @@ class CustomerRepoImpl extends CustomerRepo { sql"""select "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate"::text from "sales"."customer"""".query(using CustomerRow.read).stream } override def selectById(customerid: CustomerId): ConnectionIO[Option[CustomerRow]] = { - sql"""select "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate"::text from "sales"."customer" where "customerid" = ${fromWrite(customerid)(Write.fromPut(CustomerId.put))}""".query(using CustomerRow.read).option + sql"""select "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate"::text from "sales"."customer" where "customerid" = ${fromWrite(customerid)(new Write.Single(CustomerId.put))}""".query(using CustomerRow.read).option } override def selectByIds(customerids: Array[CustomerId]): Stream[ConnectionIO, CustomerRow] = { sql"""select "customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate"::text from "sales"."customer" where "customerid" = ANY(${customerids})""".query(using CustomerRow.read).stream @@ -106,12 +106,12 @@ class CustomerRepoImpl extends CustomerRepo { override def update(row: CustomerRow): ConnectionIO[Boolean] = { val customerid = row.customerid sql"""update "sales"."customer" - set "personid" = ${fromWrite(row.personid)(Write.fromPutOption(BusinessentityId.put))}::int4, - "storeid" = ${fromWrite(row.storeid)(Write.fromPutOption(BusinessentityId.put))}::int4, - "territoryid" = ${fromWrite(row.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "customerid" = ${fromWrite(customerid)(Write.fromPut(CustomerId.put))}""" + set "personid" = ${fromWrite(row.personid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + "storeid" = ${fromWrite(row.storeid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + "territoryid" = ${fromWrite(row.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "customerid" = ${fromWrite(customerid)(new Write.Single(CustomerId.put))}""" .update .run .map(_ > 0) @@ -119,12 +119,12 @@ class CustomerRepoImpl extends CustomerRepo { override def upsert(unsaved: CustomerRow): ConnectionIO[CustomerRow] = { sql"""insert into "sales"."customer"("customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.customerid)(Write.fromPut(CustomerId.put))}::int4, - ${fromWrite(unsaved.personid)(Write.fromPutOption(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.storeid)(Write.fromPutOption(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.customerid)(new Write.Single(CustomerId.put))}::int4, + ${fromWrite(unsaved.personid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.storeid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("customerid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRow.scala index 4016a757dc..c854f6eed1 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/customer/CustomerRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.customer Current customer information. Also see the Person and Store tables. @@ -49,24 +47,23 @@ case class CustomerRow( object CustomerRow { implicit lazy val decoder: Decoder[CustomerRow] = Decoder.forProduct6[CustomerRow, CustomerId, Option[BusinessentityId], Option[BusinessentityId], Option[SalesterritoryId], TypoUUID, TypoLocalDateTime]("customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate")(CustomerRow.apply)(CustomerId.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(SalesterritoryId.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[CustomerRow] = Encoder.forProduct6[CustomerRow, CustomerId, Option[BusinessentityId], Option[BusinessentityId], Option[SalesterritoryId], TypoUUID, TypoLocalDateTime]("customerid", "personid", "storeid", "territoryid", "rowguid", "modifieddate")(x => (x.customerid, x.personid, x.storeid, x.territoryid, x.rowguid, x.modifieddate))(CustomerId.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(SalesterritoryId.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[CustomerRow] = new Read[CustomerRow]( - gets = List( - (CustomerId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (BusinessentityId.get, Nullability.Nullable), - (SalesterritoryId.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => CustomerRow( - customerid = CustomerId.get.unsafeGetNonNullable(rs, i + 0), - personid = BusinessentityId.get.unsafeGetNullable(rs, i + 1), - storeid = BusinessentityId.get.unsafeGetNullable(rs, i + 2), - territoryid = SalesterritoryId.get.unsafeGetNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[CustomerRow] = new Read.CompositeOfInstances(Array( + new Read.Single(CustomerId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + CustomerRow( + customerid = arr(0).asInstanceOf[CustomerId], + personid = arr(1).asInstanceOf[Option[BusinessentityId]], + storeid = arr(2).asInstanceOf[Option[BusinessentityId]], + territoryid = arr(3).asInstanceOf[Option[SalesterritoryId]], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[CustomerRow] = Text.instance[CustomerRow]{ (row, sb) => CustomerId.text.unsafeEncode(row.customerid, sb) sb.append(Text.DELIMETER) @@ -80,29 +77,13 @@ object CustomerRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[CustomerRow] = new Write[CustomerRow]( - puts = List((CustomerId.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.Nullable), - (BusinessentityId.put, Nullability.Nullable), - (SalesterritoryId.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.customerid, x.personid, x.storeid, x.territoryid, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - CustomerId.put.unsafeSetNonNullable(rs, i + 0, a.customerid) - BusinessentityId.put.unsafeSetNullable(rs, i + 1, a.personid) - BusinessentityId.put.unsafeSetNullable(rs, i + 2, a.storeid) - SalesterritoryId.put.unsafeSetNullable(rs, i + 3, a.territoryid) - TypoUUID.put.unsafeSetNonNullable(rs, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - CustomerId.put.unsafeUpdateNonNullable(ps, i + 0, a.customerid) - BusinessentityId.put.unsafeUpdateNullable(ps, i + 1, a.personid) - BusinessentityId.put.unsafeUpdateNullable(ps, i + 2, a.storeid) - SalesterritoryId.put.unsafeUpdateNullable(ps, i + 3, a.territoryid) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[CustomerRow] = new Write.Composite[CustomerRow]( + List(new Write.Single(CustomerId.put), + new Write.Single(BusinessentityId.put).toOpt, + new Write.Single(BusinessentityId.put).toOpt, + new Write.Single(SalesterritoryId.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.customerid, a.personid, a.storeid, a.territoryid, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRepoImpl.scala index 96459eba26..2d5b439788 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRepoImpl.scala @@ -31,7 +31,7 @@ class PersoncreditcardRepoImpl extends PersoncreditcardRepo { DeleteBuilder(""""sales"."personcreditcard"""", PersoncreditcardFields.structure) } override def deleteById(compositeId: PersoncreditcardId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."personcreditcard" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "creditcardid" = ${fromWrite(compositeId.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."personcreditcard" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "creditcardid" = ${fromWrite(compositeId.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[PersoncreditcardId])(implicit put0: Put[Array[/* user-picked */ CustomCreditcardId]]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -45,17 +45,17 @@ class PersoncreditcardRepoImpl extends PersoncreditcardRepo { } override def insert(unsaved: PersoncreditcardRow): ConnectionIO[PersoncreditcardRow] = { sql"""insert into "sales"."personcreditcard"("businessentityid", "creditcardid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}::int4, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}::int4, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "creditcardid", "modifieddate"::text """.query(using PersoncreditcardRow.read).unique } override def insert(unsaved: PersoncreditcardRowUnsaved): ConnectionIO[PersoncreditcardRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""creditcardid""""), fr"${fromWrite(unsaved.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}::int4")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""creditcardid""""), fr"${fromWrite(unsaved.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}::int4")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -87,7 +87,7 @@ class PersoncreditcardRepoImpl extends PersoncreditcardRepo { sql"""select "businessentityid", "creditcardid", "modifieddate"::text from "sales"."personcreditcard"""".query(using PersoncreditcardRow.read).stream } override def selectById(compositeId: PersoncreditcardId): ConnectionIO[Option[PersoncreditcardRow]] = { - sql"""select "businessentityid", "creditcardid", "modifieddate"::text from "sales"."personcreditcard" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "creditcardid" = ${fromWrite(compositeId.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}""".query(using PersoncreditcardRow.read).option + sql"""select "businessentityid", "creditcardid", "modifieddate"::text from "sales"."personcreditcard" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "creditcardid" = ${fromWrite(compositeId.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}""".query(using PersoncreditcardRow.read).option } override def selectByIds(compositeIds: Array[PersoncreditcardId])(implicit puts0: Put[Array[/* user-picked */ CustomCreditcardId]]): Stream[ConnectionIO, PersoncreditcardRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -111,8 +111,8 @@ class PersoncreditcardRepoImpl extends PersoncreditcardRepo { override def update(row: PersoncreditcardRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."personcreditcard" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "creditcardid" = ${fromWrite(compositeId.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "creditcardid" = ${fromWrite(compositeId.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}""" .update .run .map(_ > 0) @@ -120,9 +120,9 @@ class PersoncreditcardRepoImpl extends PersoncreditcardRepo { override def upsert(unsaved: PersoncreditcardRow): ConnectionIO[PersoncreditcardRow] = { sql"""insert into "sales"."personcreditcard"("businessentityid", "creditcardid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.creditcardid)(Write.fromPut(/* user-picked */ CustomCreditcardId.put))}::int4, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.creditcardid)(new Write.Single(/* user-picked */ CustomCreditcardId.put))}::int4, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "creditcardid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRow.scala index f8cda5a84c..9cc384f876 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/personcreditcard/PersoncreditcardRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.person.businessentity.BusinessentityId import adventureworks.userdefined.CustomCreditcardId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.personcreditcard Cross-reference table mapping people to their credit card information in the CreditCard table. @@ -43,18 +41,17 @@ object PersoncreditcardRow { new PersoncreditcardRow(compositeId.businessentityid, compositeId.creditcardid, modifieddate) implicit lazy val decoder: Decoder[PersoncreditcardRow] = Decoder.forProduct3[PersoncreditcardRow, BusinessentityId, /* user-picked */ CustomCreditcardId, TypoLocalDateTime]("businessentityid", "creditcardid", "modifieddate")(PersoncreditcardRow.apply)(BusinessentityId.decoder, CustomCreditcardId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[PersoncreditcardRow] = Encoder.forProduct3[PersoncreditcardRow, BusinessentityId, /* user-picked */ CustomCreditcardId, TypoLocalDateTime]("businessentityid", "creditcardid", "modifieddate")(x => (x.businessentityid, x.creditcardid, x.modifieddate))(BusinessentityId.encoder, CustomCreditcardId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[PersoncreditcardRow] = new Read[PersoncreditcardRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => PersoncreditcardRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - creditcardid = /* user-picked */ CustomCreditcardId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[PersoncreditcardRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + PersoncreditcardRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + creditcardid = arr(1).asInstanceOf[/* user-picked */ CustomCreditcardId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[PersoncreditcardRow] = Text.instance[PersoncreditcardRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -62,20 +59,10 @@ object PersoncreditcardRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[PersoncreditcardRow] = new Write[PersoncreditcardRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.creditcardid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - /* user-picked */ CustomCreditcardId.put.unsafeSetNonNullable(rs, i + 1, a.creditcardid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - /* user-picked */ CustomCreditcardId.put.unsafeUpdateNonNullable(ps, i + 1, a.creditcardid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[PersoncreditcardRow] = new Write.Composite[PersoncreditcardRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(/* user-picked */ CustomCreditcardId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.creditcardid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRepoImpl.scala index 4c890d0858..8f0ad526f2 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRepoImpl.scala @@ -34,7 +34,7 @@ class SalesorderdetailRepoImpl extends SalesorderdetailRepo { DeleteBuilder(""""sales"."salesorderdetail"""", SalesorderdetailFields.structure) } override def deleteById(compositeId: SalesorderdetailId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesorderdetail" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(Write.fromPut(SalesorderheaderId.put))} AND "salesorderdetailid" = ${fromWrite(compositeId.salesorderdetailid)(Write.fromPut(Meta.IntMeta.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesorderdetail" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(new Write.Single(SalesorderheaderId.put))} AND "salesorderdetailid" = ${fromWrite(compositeId.salesorderdetailid)(new Write.Single(Meta.IntMeta.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[SalesorderdetailId]): ConnectionIO[Int] = { val salesorderid = compositeIds.map(_.salesorderid) @@ -48,33 +48,33 @@ class SalesorderdetailRepoImpl extends SalesorderdetailRepo { } override def insert(unsaved: SalesorderdetailRow): ConnectionIO[SalesorderdetailRow] = { sql"""insert into "sales"."salesorderdetail"("salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate") - values (${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4, ${fromWrite(unsaved.salesorderdetailid)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.carriertrackingnumber)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.orderqty)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, ${fromWrite(unsaved.unitprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.unitpricediscount)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4, ${fromWrite(unsaved.salesorderdetailid)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.carriertrackingnumber)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.orderqty)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, ${fromWrite(unsaved.unitprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.unitpricediscount)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate"::text """.query(using SalesorderdetailRow.read).unique } override def insert(unsaved: SalesorderdetailRowUnsaved): ConnectionIO[SalesorderdetailRow] = { val fs = List( - Some((Fragment.const0(s""""salesorderid""""), fr"${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4")), - Some((Fragment.const0(s""""carriertrackingnumber""""), fr"${fromWrite(unsaved.carriertrackingnumber)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""orderqty""""), fr"${fromWrite(unsaved.orderqty)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), - Some((Fragment.const0(s""""specialofferid""""), fr"${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4")), - Some((Fragment.const0(s""""unitprice""""), fr"${fromWrite(unsaved.unitprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""salesorderid""""), fr"${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4")), + Some((Fragment.const0(s""""carriertrackingnumber""""), fr"${fromWrite(unsaved.carriertrackingnumber)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""orderqty""""), fr"${fromWrite(unsaved.orderqty)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), + Some((Fragment.const0(s""""specialofferid""""), fr"${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4")), + Some((Fragment.const0(s""""unitprice""""), fr"${fromWrite(unsaved.unitprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.salesorderdetailid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesorderdetailid""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesorderdetailid""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.unitpricediscount match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""unitpricediscount""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""unitpricediscount""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -106,7 +106,7 @@ class SalesorderdetailRepoImpl extends SalesorderdetailRepo { sql"""select "salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate"::text from "sales"."salesorderdetail"""".query(using SalesorderdetailRow.read).stream } override def selectById(compositeId: SalesorderdetailId): ConnectionIO[Option[SalesorderdetailRow]] = { - sql"""select "salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate"::text from "sales"."salesorderdetail" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(Write.fromPut(SalesorderheaderId.put))} AND "salesorderdetailid" = ${fromWrite(compositeId.salesorderdetailid)(Write.fromPut(Meta.IntMeta.put))}""".query(using SalesorderdetailRow.read).option + sql"""select "salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate"::text from "sales"."salesorderdetail" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(new Write.Single(SalesorderheaderId.put))} AND "salesorderdetailid" = ${fromWrite(compositeId.salesorderdetailid)(new Write.Single(Meta.IntMeta.put))}""".query(using SalesorderdetailRow.read).option } override def selectByIds(compositeIds: Array[SalesorderdetailId]): Stream[ConnectionIO, SalesorderdetailRow] = { val salesorderid = compositeIds.map(_.salesorderid) @@ -130,15 +130,15 @@ class SalesorderdetailRepoImpl extends SalesorderdetailRepo { override def update(row: SalesorderdetailRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."salesorderdetail" - set "carriertrackingnumber" = ${fromWrite(row.carriertrackingnumber)(Write.fromPutOption(Meta.StringMeta.put))}, - "orderqty" = ${fromWrite(row.orderqty)(Write.fromPut(TypoShort.put))}::int2, - "productid" = ${fromWrite(row.productid)(Write.fromPut(ProductId.put))}::int4, - "specialofferid" = ${fromWrite(row.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, - "unitprice" = ${fromWrite(row.unitprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "unitpricediscount" = ${fromWrite(row.unitpricediscount)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "salesorderid" = ${fromWrite(compositeId.salesorderid)(Write.fromPut(SalesorderheaderId.put))} AND "salesorderdetailid" = ${fromWrite(compositeId.salesorderdetailid)(Write.fromPut(Meta.IntMeta.put))}""" + set "carriertrackingnumber" = ${fromWrite(row.carriertrackingnumber)(new Write.SingleOpt(Meta.StringMeta.put))}, + "orderqty" = ${fromWrite(row.orderqty)(new Write.Single(TypoShort.put))}::int2, + "productid" = ${fromWrite(row.productid)(new Write.Single(ProductId.put))}::int4, + "specialofferid" = ${fromWrite(row.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, + "unitprice" = ${fromWrite(row.unitprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "unitpricediscount" = ${fromWrite(row.unitpricediscount)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "salesorderid" = ${fromWrite(compositeId.salesorderid)(new Write.Single(SalesorderheaderId.put))} AND "salesorderdetailid" = ${fromWrite(compositeId.salesorderdetailid)(new Write.Single(Meta.IntMeta.put))}""" .update .run .map(_ > 0) @@ -146,16 +146,16 @@ class SalesorderdetailRepoImpl extends SalesorderdetailRepo { override def upsert(unsaved: SalesorderdetailRow): ConnectionIO[SalesorderdetailRow] = { sql"""insert into "sales"."salesorderdetail"("salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4, - ${fromWrite(unsaved.salesorderdetailid)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.carriertrackingnumber)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.orderqty)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, - ${fromWrite(unsaved.unitprice)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.unitpricediscount)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4, + ${fromWrite(unsaved.salesorderdetailid)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.carriertrackingnumber)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.orderqty)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, + ${fromWrite(unsaved.unitprice)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.unitpricediscount)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("salesorderid", "salesorderdetailid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRow.scala index 2133b39790..3a306d44f4 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderdetail/SalesorderdetailRow.scala @@ -15,14 +15,12 @@ import adventureworks.production.product.ProductId import adventureworks.sales.salesorderheader.SalesorderheaderId import adventureworks.sales.specialoffer.SpecialofferId import adventureworks.sales.specialofferproduct.SpecialofferproductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salesorderdetail Individual products associated with a specific sales order. See SalesOrderHeader. @@ -72,32 +70,31 @@ object SalesorderdetailRow { new SalesorderdetailRow(compositeId.salesorderid, compositeId.salesorderdetailid, carriertrackingnumber, orderqty, productid, specialofferid, unitprice, unitpricediscount, rowguid, modifieddate) implicit lazy val decoder: Decoder[SalesorderdetailRow] = Decoder.forProduct10[SalesorderdetailRow, SalesorderheaderId, Int, Option[/* max 25 chars */ String], TypoShort, ProductId, SpecialofferId, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate")(SalesorderdetailRow.apply)(SalesorderheaderId.decoder, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeString), TypoShort.decoder, ProductId.decoder, SpecialofferId.decoder, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalesorderdetailRow] = Encoder.forProduct10[SalesorderdetailRow, SalesorderheaderId, Int, Option[/* max 25 chars */ String], TypoShort, ProductId, SpecialofferId, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("salesorderid", "salesorderdetailid", "carriertrackingnumber", "orderqty", "productid", "specialofferid", "unitprice", "unitpricediscount", "rowguid", "modifieddate")(x => (x.salesorderid, x.salesorderdetailid, x.carriertrackingnumber, x.orderqty, x.productid, x.specialofferid, x.unitprice, x.unitpricediscount, x.rowguid, x.modifieddate))(SalesorderheaderId.encoder, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeString), TypoShort.encoder, ProductId.encoder, SpecialofferId.encoder, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalesorderdetailRow] = new Read[SalesorderdetailRow]( - gets = List( - (SalesorderheaderId.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoShort.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (SpecialofferId.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalesorderdetailRow( - salesorderid = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - salesorderdetailid = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 1), - carriertrackingnumber = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - orderqty = TypoShort.get.unsafeGetNonNullable(rs, i + 3), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 4), - specialofferid = SpecialofferId.get.unsafeGetNonNullable(rs, i + 5), - unitprice = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - unitpricediscount = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[SalesorderdetailRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalesorderdetailRow( + salesorderid = arr(0).asInstanceOf[SalesorderheaderId], + salesorderdetailid = arr(1).asInstanceOf[Int], + carriertrackingnumber = arr(2).asInstanceOf[Option[/* max 25 chars */ String]], + orderqty = arr(3).asInstanceOf[TypoShort], + productid = arr(4).asInstanceOf[ProductId], + specialofferid = arr(5).asInstanceOf[SpecialofferId], + unitprice = arr(6).asInstanceOf[BigDecimal], + unitpricediscount = arr(7).asInstanceOf[BigDecimal], + rowguid = arr(8).asInstanceOf[TypoUUID], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalesorderdetailRow] = Text.instance[SalesorderdetailRow]{ (row, sb) => SalesorderheaderId.text.unsafeEncode(row.salesorderid, sb) sb.append(Text.DELIMETER) @@ -119,41 +116,17 @@ object SalesorderdetailRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalesorderdetailRow] = new Write[SalesorderdetailRow]( - puts = List((SalesorderheaderId.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoShort.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (SpecialofferId.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.salesorderid, x.salesorderdetailid, x.carriertrackingnumber, x.orderqty, x.productid, x.specialofferid, x.unitprice, x.unitpricediscount, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SalesorderheaderId.put.unsafeSetNonNullable(rs, i + 0, a.salesorderid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 1, a.salesorderdetailid) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 2, a.carriertrackingnumber) - TypoShort.put.unsafeSetNonNullable(rs, i + 3, a.orderqty) - ProductId.put.unsafeSetNonNullable(rs, i + 4, a.productid) - SpecialofferId.put.unsafeSetNonNullable(rs, i + 5, a.specialofferid) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 6, a.unitprice) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 7, a.unitpricediscount) - TypoUUID.put.unsafeSetNonNullable(rs, i + 8, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 9, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SalesorderheaderId.put.unsafeUpdateNonNullable(ps, i + 0, a.salesorderid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.salesorderdetailid) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 2, a.carriertrackingnumber) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 3, a.orderqty) - ProductId.put.unsafeUpdateNonNullable(ps, i + 4, a.productid) - SpecialofferId.put.unsafeUpdateNonNullable(ps, i + 5, a.specialofferid) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.unitprice) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.unitpricediscount) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 8, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 9, a.modifieddate) - } + implicit lazy val write: Write[SalesorderdetailRow] = new Write.Composite[SalesorderdetailRow]( + List(new Write.Single(SalesorderheaderId.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoShort.put), + new Write.Single(ProductId.put), + new Write.Single(SpecialofferId.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.salesorderid, a.salesorderdetailid, a.carriertrackingnumber, a.orderqty, a.productid, a.specialofferid, a.unitprice, a.unitpricediscount, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRepoImpl.scala index a24bdee193..bda44ebc56 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRepoImpl.scala @@ -41,73 +41,73 @@ class SalesorderheaderRepoImpl extends SalesorderheaderRepo { DeleteBuilder(""""sales"."salesorderheader"""", SalesorderheaderFields.structure) } override def deleteById(salesorderid: SalesorderheaderId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesorderheader" where "salesorderid" = ${fromWrite(salesorderid)(Write.fromPut(SalesorderheaderId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesorderheader" where "salesorderid" = ${fromWrite(salesorderid)(new Write.Single(SalesorderheaderId.put))}""".update.run.map(_ > 0) } override def deleteByIds(salesorderids: Array[SalesorderheaderId]): ConnectionIO[Int] = { sql"""delete from "sales"."salesorderheader" where "salesorderid" = ANY(${salesorderids})""".update.run } override def insert(unsaved: SalesorderheaderRow): ConnectionIO[SalesorderheaderRow] = { sql"""insert into "sales"."salesorderheader"("salesorderid", "revisionnumber", "orderdate", "duedate", "shipdate", "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate") - values (${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4, ${fromWrite(unsaved.revisionnumber)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.orderdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.onlineorderflag)(Write.fromPut(Flag.put))}::bool, ${fromWrite(unsaved.purchaseordernumber)(Write.fromPutOption(OrderNumber.put))}::varchar, ${fromWrite(unsaved.accountnumber)(Write.fromPutOption(AccountNumber.put))}::varchar, ${fromWrite(unsaved.customerid)(Write.fromPut(CustomerId.put))}::int4, ${fromWrite(unsaved.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.billtoaddressid)(Write.fromPut(AddressId.put))}::int4, ${fromWrite(unsaved.shiptoaddressid)(Write.fromPut(AddressId.put))}::int4, ${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, ${fromWrite(unsaved.creditcardid)(Write.fromPutOption(/* user-picked */ CustomCreditcardId.put))}::int4, ${fromWrite(unsaved.creditcardapprovalcode)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.currencyrateid)(Write.fromPutOption(CurrencyrateId.put))}::int4, ${fromWrite(unsaved.subtotal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.taxamt)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.freight)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.totaldue)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.comment)(Write.fromPutOption(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4, ${fromWrite(unsaved.revisionnumber)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.orderdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.onlineorderflag)(new Write.Single(Flag.put))}::bool, ${fromWrite(unsaved.purchaseordernumber)(new Write.SingleOpt(OrderNumber.put))}::varchar, ${fromWrite(unsaved.accountnumber)(new Write.SingleOpt(AccountNumber.put))}::varchar, ${fromWrite(unsaved.customerid)(new Write.Single(CustomerId.put))}::int4, ${fromWrite(unsaved.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.billtoaddressid)(new Write.Single(AddressId.put))}::int4, ${fromWrite(unsaved.shiptoaddressid)(new Write.Single(AddressId.put))}::int4, ${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, ${fromWrite(unsaved.creditcardid)(new Write.SingleOpt(/* user-picked */ CustomCreditcardId.put))}::int4, ${fromWrite(unsaved.creditcardapprovalcode)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.currencyrateid)(new Write.SingleOpt(CurrencyrateId.put))}::int4, ${fromWrite(unsaved.subtotal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.taxamt)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.freight)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.totaldue)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.comment)(new Write.SingleOpt(Meta.StringMeta.put))}, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "salesorderid", "revisionnumber", "orderdate"::text, "duedate"::text, "shipdate"::text, "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"::text """.query(using SalesorderheaderRow.read).unique } override def insert(unsaved: SalesorderheaderRowUnsaved): ConnectionIO[SalesorderheaderRow] = { val fs = List( - Some((Fragment.const0(s""""duedate""""), fr"${fromWrite(unsaved.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""shipdate""""), fr"${fromWrite(unsaved.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""purchaseordernumber""""), fr"${fromWrite(unsaved.purchaseordernumber)(Write.fromPutOption(OrderNumber.put))}::varchar")), - Some((Fragment.const0(s""""accountnumber""""), fr"${fromWrite(unsaved.accountnumber)(Write.fromPutOption(AccountNumber.put))}::varchar")), - Some((Fragment.const0(s""""customerid""""), fr"${fromWrite(unsaved.customerid)(Write.fromPut(CustomerId.put))}::int4")), - Some((Fragment.const0(s""""salespersonid""""), fr"${fromWrite(unsaved.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4")), - Some((Fragment.const0(s""""billtoaddressid""""), fr"${fromWrite(unsaved.billtoaddressid)(Write.fromPut(AddressId.put))}::int4")), - Some((Fragment.const0(s""""shiptoaddressid""""), fr"${fromWrite(unsaved.shiptoaddressid)(Write.fromPut(AddressId.put))}::int4")), - Some((Fragment.const0(s""""shipmethodid""""), fr"${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4")), - Some((Fragment.const0(s""""creditcardid""""), fr"${fromWrite(unsaved.creditcardid)(Write.fromPutOption(/* user-picked */ CustomCreditcardId.put))}::int4")), - Some((Fragment.const0(s""""creditcardapprovalcode""""), fr"${fromWrite(unsaved.creditcardapprovalcode)(Write.fromPutOption(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""currencyrateid""""), fr"${fromWrite(unsaved.currencyrateid)(Write.fromPutOption(CurrencyrateId.put))}::int4")), - Some((Fragment.const0(s""""totaldue""""), fr"${fromWrite(unsaved.totaldue)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric")), - Some((Fragment.const0(s""""comment""""), fr"${fromWrite(unsaved.comment)(Write.fromPutOption(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""duedate""""), fr"${fromWrite(unsaved.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""shipdate""""), fr"${fromWrite(unsaved.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""purchaseordernumber""""), fr"${fromWrite(unsaved.purchaseordernumber)(new Write.SingleOpt(OrderNumber.put))}::varchar")), + Some((Fragment.const0(s""""accountnumber""""), fr"${fromWrite(unsaved.accountnumber)(new Write.SingleOpt(AccountNumber.put))}::varchar")), + Some((Fragment.const0(s""""customerid""""), fr"${fromWrite(unsaved.customerid)(new Write.Single(CustomerId.put))}::int4")), + Some((Fragment.const0(s""""salespersonid""""), fr"${fromWrite(unsaved.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4")), + Some((Fragment.const0(s""""billtoaddressid""""), fr"${fromWrite(unsaved.billtoaddressid)(new Write.Single(AddressId.put))}::int4")), + Some((Fragment.const0(s""""shiptoaddressid""""), fr"${fromWrite(unsaved.shiptoaddressid)(new Write.Single(AddressId.put))}::int4")), + Some((Fragment.const0(s""""shipmethodid""""), fr"${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4")), + Some((Fragment.const0(s""""creditcardid""""), fr"${fromWrite(unsaved.creditcardid)(new Write.SingleOpt(/* user-picked */ CustomCreditcardId.put))}::int4")), + Some((Fragment.const0(s""""creditcardapprovalcode""""), fr"${fromWrite(unsaved.creditcardapprovalcode)(new Write.SingleOpt(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""currencyrateid""""), fr"${fromWrite(unsaved.currencyrateid)(new Write.SingleOpt(CurrencyrateId.put))}::int4")), + Some((Fragment.const0(s""""totaldue""""), fr"${fromWrite(unsaved.totaldue)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""comment""""), fr"${fromWrite(unsaved.comment)(new Write.SingleOpt(Meta.StringMeta.put))}")), unsaved.salesorderid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesorderid""""), fr"${fromWrite(value: SalesorderheaderId)(Write.fromPut(SalesorderheaderId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesorderid""""), fr"${fromWrite(value: SalesorderheaderId)(new Write.Single(SalesorderheaderId.put))}::int4")) }, unsaved.revisionnumber match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""revisionnumber""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""revisionnumber""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.orderdate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""orderdate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""orderdate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.status match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""status""""), fr"${fromWrite(value: TypoShort)(Write.fromPut(TypoShort.put))}::int2")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""status""""), fr"${fromWrite(value: TypoShort)(new Write.Single(TypoShort.put))}::int2")) }, unsaved.onlineorderflag match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""onlineorderflag""""), fr"${fromWrite(value: Flag)(Write.fromPut(Flag.put))}::bool")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""onlineorderflag""""), fr"${fromWrite(value: Flag)(new Write.Single(Flag.put))}::bool")) }, unsaved.subtotal match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""subtotal""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""subtotal""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.taxamt match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""taxamt""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""taxamt""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.freight match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""freight""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""freight""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -139,7 +139,7 @@ class SalesorderheaderRepoImpl extends SalesorderheaderRepo { sql"""select "salesorderid", "revisionnumber", "orderdate"::text, "duedate"::text, "shipdate"::text, "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"::text from "sales"."salesorderheader"""".query(using SalesorderheaderRow.read).stream } override def selectById(salesorderid: SalesorderheaderId): ConnectionIO[Option[SalesorderheaderRow]] = { - sql"""select "salesorderid", "revisionnumber", "orderdate"::text, "duedate"::text, "shipdate"::text, "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"::text from "sales"."salesorderheader" where "salesorderid" = ${fromWrite(salesorderid)(Write.fromPut(SalesorderheaderId.put))}""".query(using SalesorderheaderRow.read).option + sql"""select "salesorderid", "revisionnumber", "orderdate"::text, "duedate"::text, "shipdate"::text, "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"::text from "sales"."salesorderheader" where "salesorderid" = ${fromWrite(salesorderid)(new Write.Single(SalesorderheaderId.put))}""".query(using SalesorderheaderRow.read).option } override def selectByIds(salesorderids: Array[SalesorderheaderId]): Stream[ConnectionIO, SalesorderheaderRow] = { sql"""select "salesorderid", "revisionnumber", "orderdate"::text, "duedate"::text, "shipdate"::text, "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"::text from "sales"."salesorderheader" where "salesorderid" = ANY(${salesorderids})""".query(using SalesorderheaderRow.read).stream @@ -156,31 +156,31 @@ class SalesorderheaderRepoImpl extends SalesorderheaderRepo { override def update(row: SalesorderheaderRow): ConnectionIO[Boolean] = { val salesorderid = row.salesorderid sql"""update "sales"."salesorderheader" - set "revisionnumber" = ${fromWrite(row.revisionnumber)(Write.fromPut(TypoShort.put))}::int2, - "orderdate" = ${fromWrite(row.orderdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "duedate" = ${fromWrite(row.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "shipdate" = ${fromWrite(row.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "status" = ${fromWrite(row.status)(Write.fromPut(TypoShort.put))}::int2, - "onlineorderflag" = ${fromWrite(row.onlineorderflag)(Write.fromPut(Flag.put))}::bool, - "purchaseordernumber" = ${fromWrite(row.purchaseordernumber)(Write.fromPutOption(OrderNumber.put))}::varchar, - "accountnumber" = ${fromWrite(row.accountnumber)(Write.fromPutOption(AccountNumber.put))}::varchar, - "customerid" = ${fromWrite(row.customerid)(Write.fromPut(CustomerId.put))}::int4, - "salespersonid" = ${fromWrite(row.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4, - "territoryid" = ${fromWrite(row.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, - "billtoaddressid" = ${fromWrite(row.billtoaddressid)(Write.fromPut(AddressId.put))}::int4, - "shiptoaddressid" = ${fromWrite(row.shiptoaddressid)(Write.fromPut(AddressId.put))}::int4, - "shipmethodid" = ${fromWrite(row.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, - "creditcardid" = ${fromWrite(row.creditcardid)(Write.fromPutOption(/* user-picked */ CustomCreditcardId.put))}::int4, - "creditcardapprovalcode" = ${fromWrite(row.creditcardapprovalcode)(Write.fromPutOption(Meta.StringMeta.put))}, - "currencyrateid" = ${fromWrite(row.currencyrateid)(Write.fromPutOption(CurrencyrateId.put))}::int4, - "subtotal" = ${fromWrite(row.subtotal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "taxamt" = ${fromWrite(row.taxamt)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "freight" = ${fromWrite(row.freight)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "totaldue" = ${fromWrite(row.totaldue)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - "comment" = ${fromWrite(row.comment)(Write.fromPutOption(Meta.StringMeta.put))}, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "salesorderid" = ${fromWrite(salesorderid)(Write.fromPut(SalesorderheaderId.put))}""" + set "revisionnumber" = ${fromWrite(row.revisionnumber)(new Write.Single(TypoShort.put))}::int2, + "orderdate" = ${fromWrite(row.orderdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "duedate" = ${fromWrite(row.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "shipdate" = ${fromWrite(row.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "status" = ${fromWrite(row.status)(new Write.Single(TypoShort.put))}::int2, + "onlineorderflag" = ${fromWrite(row.onlineorderflag)(new Write.Single(Flag.put))}::bool, + "purchaseordernumber" = ${fromWrite(row.purchaseordernumber)(new Write.SingleOpt(OrderNumber.put))}::varchar, + "accountnumber" = ${fromWrite(row.accountnumber)(new Write.SingleOpt(AccountNumber.put))}::varchar, + "customerid" = ${fromWrite(row.customerid)(new Write.Single(CustomerId.put))}::int4, + "salespersonid" = ${fromWrite(row.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + "territoryid" = ${fromWrite(row.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, + "billtoaddressid" = ${fromWrite(row.billtoaddressid)(new Write.Single(AddressId.put))}::int4, + "shiptoaddressid" = ${fromWrite(row.shiptoaddressid)(new Write.Single(AddressId.put))}::int4, + "shipmethodid" = ${fromWrite(row.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, + "creditcardid" = ${fromWrite(row.creditcardid)(new Write.SingleOpt(/* user-picked */ CustomCreditcardId.put))}::int4, + "creditcardapprovalcode" = ${fromWrite(row.creditcardapprovalcode)(new Write.SingleOpt(Meta.StringMeta.put))}, + "currencyrateid" = ${fromWrite(row.currencyrateid)(new Write.SingleOpt(CurrencyrateId.put))}::int4, + "subtotal" = ${fromWrite(row.subtotal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "taxamt" = ${fromWrite(row.taxamt)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "freight" = ${fromWrite(row.freight)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "totaldue" = ${fromWrite(row.totaldue)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + "comment" = ${fromWrite(row.comment)(new Write.SingleOpt(Meta.StringMeta.put))}, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "salesorderid" = ${fromWrite(salesorderid)(new Write.Single(SalesorderheaderId.put))}""" .update .run .map(_ > 0) @@ -188,31 +188,31 @@ class SalesorderheaderRepoImpl extends SalesorderheaderRepo { override def upsert(unsaved: SalesorderheaderRow): ConnectionIO[SalesorderheaderRow] = { sql"""insert into "sales"."salesorderheader"("salesorderid", "revisionnumber", "orderdate", "duedate", "shipdate", "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4, - ${fromWrite(unsaved.revisionnumber)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.orderdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.duedate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.shipdate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.status)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.onlineorderflag)(Write.fromPut(Flag.put))}::bool, - ${fromWrite(unsaved.purchaseordernumber)(Write.fromPutOption(OrderNumber.put))}::varchar, - ${fromWrite(unsaved.accountnumber)(Write.fromPutOption(AccountNumber.put))}::varchar, - ${fromWrite(unsaved.customerid)(Write.fromPut(CustomerId.put))}::int4, - ${fromWrite(unsaved.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, - ${fromWrite(unsaved.billtoaddressid)(Write.fromPut(AddressId.put))}::int4, - ${fromWrite(unsaved.shiptoaddressid)(Write.fromPut(AddressId.put))}::int4, - ${fromWrite(unsaved.shipmethodid)(Write.fromPut(ShipmethodId.put))}::int4, - ${fromWrite(unsaved.creditcardid)(Write.fromPutOption(/* user-picked */ CustomCreditcardId.put))}::int4, - ${fromWrite(unsaved.creditcardapprovalcode)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.currencyrateid)(Write.fromPutOption(CurrencyrateId.put))}::int4, - ${fromWrite(unsaved.subtotal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.taxamt)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.freight)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.totaldue)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.comment)(Write.fromPutOption(Meta.StringMeta.put))}, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4, + ${fromWrite(unsaved.revisionnumber)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.orderdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.duedate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.shipdate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.status)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.onlineorderflag)(new Write.Single(Flag.put))}::bool, + ${fromWrite(unsaved.purchaseordernumber)(new Write.SingleOpt(OrderNumber.put))}::varchar, + ${fromWrite(unsaved.accountnumber)(new Write.SingleOpt(AccountNumber.put))}::varchar, + ${fromWrite(unsaved.customerid)(new Write.Single(CustomerId.put))}::int4, + ${fromWrite(unsaved.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, + ${fromWrite(unsaved.billtoaddressid)(new Write.Single(AddressId.put))}::int4, + ${fromWrite(unsaved.shiptoaddressid)(new Write.Single(AddressId.put))}::int4, + ${fromWrite(unsaved.shipmethodid)(new Write.Single(ShipmethodId.put))}::int4, + ${fromWrite(unsaved.creditcardid)(new Write.SingleOpt(/* user-picked */ CustomCreditcardId.put))}::int4, + ${fromWrite(unsaved.creditcardapprovalcode)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.currencyrateid)(new Write.SingleOpt(CurrencyrateId.put))}::int4, + ${fromWrite(unsaved.subtotal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.taxamt)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.freight)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.totaldue)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.comment)(new Write.SingleOpt(Meta.StringMeta.put))}, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("salesorderid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRow.scala index aa30a55455..2dce85be82 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheader/SalesorderheaderRow.scala @@ -21,7 +21,6 @@ import adventureworks.sales.currencyrate.CurrencyrateId import adventureworks.sales.customer.CustomerId import adventureworks.sales.salesterritory.SalesterritoryId import adventureworks.userdefined.CustomCreditcardId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write @@ -31,7 +30,6 @@ import io.circe.DecodingFailure import io.circe.Encoder import io.circe.HCursor import io.circe.Json -import java.sql.ResultSet import scala.util.Try /** Table: sales.salesorderheader @@ -183,62 +181,61 @@ object SalesorderheaderRow { "modifieddate" -> TypoLocalDateTime.encoder.apply(row.modifieddate) ) ) - implicit lazy val read: Read[SalesorderheaderRow] = new Read[SalesorderheaderRow]( - gets = List( - (SalesorderheaderId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoShort.get, Nullability.NoNulls), - (Flag.get, Nullability.NoNulls), - (OrderNumber.get, Nullability.Nullable), - (AccountNumber.get, Nullability.Nullable), - (CustomerId.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (SalesterritoryId.get, Nullability.Nullable), - (AddressId.get, Nullability.NoNulls), - (AddressId.get, Nullability.NoNulls), - (ShipmethodId.get, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (CurrencyrateId.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalesorderheaderRow( - salesorderid = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - revisionnumber = TypoShort.get.unsafeGetNonNullable(rs, i + 1), - orderdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - duedate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3), - shipdate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 4), - status = TypoShort.get.unsafeGetNonNullable(rs, i + 5), - onlineorderflag = Flag.get.unsafeGetNonNullable(rs, i + 6), - purchaseordernumber = OrderNumber.get.unsafeGetNullable(rs, i + 7), - accountnumber = AccountNumber.get.unsafeGetNullable(rs, i + 8), - customerid = CustomerId.get.unsafeGetNonNullable(rs, i + 9), - salespersonid = BusinessentityId.get.unsafeGetNullable(rs, i + 10), - territoryid = SalesterritoryId.get.unsafeGetNullable(rs, i + 11), - billtoaddressid = AddressId.get.unsafeGetNonNullable(rs, i + 12), - shiptoaddressid = AddressId.get.unsafeGetNonNullable(rs, i + 13), - shipmethodid = ShipmethodId.get.unsafeGetNonNullable(rs, i + 14), - creditcardid = /* user-picked */ CustomCreditcardId.get.unsafeGetNullable(rs, i + 15), - creditcardapprovalcode = Meta.StringMeta.get.unsafeGetNullable(rs, i + 16), - currencyrateid = CurrencyrateId.get.unsafeGetNullable(rs, i + 17), - subtotal = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 18), - taxamt = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 19), - freight = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 20), - totaldue = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 21), - comment = Meta.StringMeta.get.unsafeGetNullable(rs, i + 22), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 23), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 24) + implicit lazy val read: Read[SalesorderheaderRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Flag.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(OrderNumber.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(AccountNumber.get).asInstanceOf[Read[Any]], + new Read.Single(CustomerId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(AddressId.get).asInstanceOf[Read[Any]], + new Read.Single(ShipmethodId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(/* user-picked */ CustomCreditcardId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(CurrencyrateId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalesorderheaderRow( + salesorderid = arr(0).asInstanceOf[SalesorderheaderId], + revisionnumber = arr(1).asInstanceOf[TypoShort], + orderdate = arr(2).asInstanceOf[TypoLocalDateTime], + duedate = arr(3).asInstanceOf[TypoLocalDateTime], + shipdate = arr(4).asInstanceOf[Option[TypoLocalDateTime]], + status = arr(5).asInstanceOf[TypoShort], + onlineorderflag = arr(6).asInstanceOf[Flag], + purchaseordernumber = arr(7).asInstanceOf[Option[OrderNumber]], + accountnumber = arr(8).asInstanceOf[Option[AccountNumber]], + customerid = arr(9).asInstanceOf[CustomerId], + salespersonid = arr(10).asInstanceOf[Option[BusinessentityId]], + territoryid = arr(11).asInstanceOf[Option[SalesterritoryId]], + billtoaddressid = arr(12).asInstanceOf[AddressId], + shiptoaddressid = arr(13).asInstanceOf[AddressId], + shipmethodid = arr(14).asInstanceOf[ShipmethodId], + creditcardid = arr(15).asInstanceOf[Option[/* user-picked */ CustomCreditcardId]], + creditcardapprovalcode = arr(16).asInstanceOf[Option[/* max 15 chars */ String]], + currencyrateid = arr(17).asInstanceOf[Option[CurrencyrateId]], + subtotal = arr(18).asInstanceOf[BigDecimal], + taxamt = arr(19).asInstanceOf[BigDecimal], + freight = arr(20).asInstanceOf[BigDecimal], + totaldue = arr(21).asInstanceOf[Option[BigDecimal]], + comment = arr(22).asInstanceOf[Option[/* max 128 chars */ String]], + rowguid = arr(23).asInstanceOf[TypoUUID], + modifieddate = arr(24).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalesorderheaderRow] = Text.instance[SalesorderheaderRow]{ (row, sb) => SalesorderheaderId.text.unsafeEncode(row.salesorderid, sb) sb.append(Text.DELIMETER) @@ -290,86 +287,32 @@ object SalesorderheaderRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalesorderheaderRow] = new Write[SalesorderheaderRow]( - puts = List((SalesorderheaderId.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoShort.put, Nullability.NoNulls), - (Flag.put, Nullability.NoNulls), - (OrderNumber.put, Nullability.Nullable), - (AccountNumber.put, Nullability.Nullable), - (CustomerId.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.Nullable), - (SalesterritoryId.put, Nullability.Nullable), - (AddressId.put, Nullability.NoNulls), - (AddressId.put, Nullability.NoNulls), - (ShipmethodId.put, Nullability.NoNulls), - (/* user-picked */ CustomCreditcardId.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (CurrencyrateId.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (Meta.StringMeta.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.salesorderid, x.revisionnumber, x.orderdate, x.duedate, x.shipdate, x.status, x.onlineorderflag, x.purchaseordernumber, x.accountnumber, x.customerid, x.salespersonid, x.territoryid, x.billtoaddressid, x.shiptoaddressid, x.shipmethodid, x.creditcardid, x.creditcardapprovalcode, x.currencyrateid, x.subtotal, x.taxamt, x.freight, x.totaldue, x.comment, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SalesorderheaderId.put.unsafeSetNonNullable(rs, i + 0, a.salesorderid) - TypoShort.put.unsafeSetNonNullable(rs, i + 1, a.revisionnumber) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.orderdate) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.duedate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 4, a.shipdate) - TypoShort.put.unsafeSetNonNullable(rs, i + 5, a.status) - Flag.put.unsafeSetNonNullable(rs, i + 6, a.onlineorderflag) - OrderNumber.put.unsafeSetNullable(rs, i + 7, a.purchaseordernumber) - AccountNumber.put.unsafeSetNullable(rs, i + 8, a.accountnumber) - CustomerId.put.unsafeSetNonNullable(rs, i + 9, a.customerid) - BusinessentityId.put.unsafeSetNullable(rs, i + 10, a.salespersonid) - SalesterritoryId.put.unsafeSetNullable(rs, i + 11, a.territoryid) - AddressId.put.unsafeSetNonNullable(rs, i + 12, a.billtoaddressid) - AddressId.put.unsafeSetNonNullable(rs, i + 13, a.shiptoaddressid) - ShipmethodId.put.unsafeSetNonNullable(rs, i + 14, a.shipmethodid) - /* user-picked */ CustomCreditcardId.put.unsafeSetNullable(rs, i + 15, a.creditcardid) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 16, a.creditcardapprovalcode) - CurrencyrateId.put.unsafeSetNullable(rs, i + 17, a.currencyrateid) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 18, a.subtotal) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 19, a.taxamt) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 20, a.freight) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 21, a.totaldue) - Meta.StringMeta.put.unsafeSetNullable(rs, i + 22, a.comment) - TypoUUID.put.unsafeSetNonNullable(rs, i + 23, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 24, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SalesorderheaderId.put.unsafeUpdateNonNullable(ps, i + 0, a.salesorderid) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 1, a.revisionnumber) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.orderdate) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.duedate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 4, a.shipdate) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 5, a.status) - Flag.put.unsafeUpdateNonNullable(ps, i + 6, a.onlineorderflag) - OrderNumber.put.unsafeUpdateNullable(ps, i + 7, a.purchaseordernumber) - AccountNumber.put.unsafeUpdateNullable(ps, i + 8, a.accountnumber) - CustomerId.put.unsafeUpdateNonNullable(ps, i + 9, a.customerid) - BusinessentityId.put.unsafeUpdateNullable(ps, i + 10, a.salespersonid) - SalesterritoryId.put.unsafeUpdateNullable(ps, i + 11, a.territoryid) - AddressId.put.unsafeUpdateNonNullable(ps, i + 12, a.billtoaddressid) - AddressId.put.unsafeUpdateNonNullable(ps, i + 13, a.shiptoaddressid) - ShipmethodId.put.unsafeUpdateNonNullable(ps, i + 14, a.shipmethodid) - /* user-picked */ CustomCreditcardId.put.unsafeUpdateNullable(ps, i + 15, a.creditcardid) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 16, a.creditcardapprovalcode) - CurrencyrateId.put.unsafeUpdateNullable(ps, i + 17, a.currencyrateid) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 18, a.subtotal) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 19, a.taxamt) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 20, a.freight) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 21, a.totaldue) - Meta.StringMeta.put.unsafeUpdateNullable(ps, i + 22, a.comment) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 23, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 24, a.modifieddate) - } + implicit lazy val write: Write[SalesorderheaderRow] = new Write.Composite[SalesorderheaderRow]( + List(new Write.Single(SalesorderheaderId.put), + new Write.Single(TypoShort.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoShort.put), + new Write.Single(Flag.put), + new Write.Single(OrderNumber.put).toOpt, + new Write.Single(AccountNumber.put).toOpt, + new Write.Single(CustomerId.put), + new Write.Single(BusinessentityId.put).toOpt, + new Write.Single(SalesterritoryId.put).toOpt, + new Write.Single(AddressId.put), + new Write.Single(AddressId.put), + new Write.Single(ShipmethodId.put), + new Write.Single(/* user-picked */ CustomCreditcardId.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(CurrencyrateId.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(Meta.StringMeta.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.salesorderid, a.revisionnumber, a.orderdate, a.duedate, a.shipdate, a.status, a.onlineorderflag, a.purchaseordernumber, a.accountnumber, a.customerid, a.salespersonid, a.territoryid, a.billtoaddressid, a.shiptoaddressid, a.shipmethodid, a.creditcardid, a.creditcardapprovalcode, a.currencyrateid, a.subtotal, a.taxamt, a.freight, a.totaldue, a.comment, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRepoImpl.scala index 65178ce56d..c72bae08b9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRepoImpl.scala @@ -30,7 +30,7 @@ class SalesorderheadersalesreasonRepoImpl extends SalesorderheadersalesreasonRep DeleteBuilder(""""sales"."salesorderheadersalesreason"""", SalesorderheadersalesreasonFields.structure) } override def deleteById(compositeId: SalesorderheadersalesreasonId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesorderheadersalesreason" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(Write.fromPut(SalesorderheaderId.put))} AND "salesreasonid" = ${fromWrite(compositeId.salesreasonid)(Write.fromPut(SalesreasonId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesorderheadersalesreason" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(new Write.Single(SalesorderheaderId.put))} AND "salesreasonid" = ${fromWrite(compositeId.salesreasonid)(new Write.Single(SalesreasonId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[SalesorderheadersalesreasonId]): ConnectionIO[Int] = { val salesorderid = compositeIds.map(_.salesorderid) @@ -44,17 +44,17 @@ class SalesorderheadersalesreasonRepoImpl extends SalesorderheadersalesreasonRep } override def insert(unsaved: SalesorderheadersalesreasonRow): ConnectionIO[SalesorderheadersalesreasonRow] = { sql"""insert into "sales"."salesorderheadersalesreason"("salesorderid", "salesreasonid", "modifieddate") - values (${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4, ${fromWrite(unsaved.salesreasonid)(Write.fromPut(SalesreasonId.put))}::int4, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4, ${fromWrite(unsaved.salesreasonid)(new Write.Single(SalesreasonId.put))}::int4, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "salesorderid", "salesreasonid", "modifieddate"::text """.query(using SalesorderheadersalesreasonRow.read).unique } override def insert(unsaved: SalesorderheadersalesreasonRowUnsaved): ConnectionIO[SalesorderheadersalesreasonRow] = { val fs = List( - Some((Fragment.const0(s""""salesorderid""""), fr"${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4")), - Some((Fragment.const0(s""""salesreasonid""""), fr"${fromWrite(unsaved.salesreasonid)(Write.fromPut(SalesreasonId.put))}::int4")), + Some((Fragment.const0(s""""salesorderid""""), fr"${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4")), + Some((Fragment.const0(s""""salesreasonid""""), fr"${fromWrite(unsaved.salesreasonid)(new Write.Single(SalesreasonId.put))}::int4")), unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -86,7 +86,7 @@ class SalesorderheadersalesreasonRepoImpl extends SalesorderheadersalesreasonRep sql"""select "salesorderid", "salesreasonid", "modifieddate"::text from "sales"."salesorderheadersalesreason"""".query(using SalesorderheadersalesreasonRow.read).stream } override def selectById(compositeId: SalesorderheadersalesreasonId): ConnectionIO[Option[SalesorderheadersalesreasonRow]] = { - sql"""select "salesorderid", "salesreasonid", "modifieddate"::text from "sales"."salesorderheadersalesreason" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(Write.fromPut(SalesorderheaderId.put))} AND "salesreasonid" = ${fromWrite(compositeId.salesreasonid)(Write.fromPut(SalesreasonId.put))}""".query(using SalesorderheadersalesreasonRow.read).option + sql"""select "salesorderid", "salesreasonid", "modifieddate"::text from "sales"."salesorderheadersalesreason" where "salesorderid" = ${fromWrite(compositeId.salesorderid)(new Write.Single(SalesorderheaderId.put))} AND "salesreasonid" = ${fromWrite(compositeId.salesreasonid)(new Write.Single(SalesreasonId.put))}""".query(using SalesorderheadersalesreasonRow.read).option } override def selectByIds(compositeIds: Array[SalesorderheadersalesreasonId]): Stream[ConnectionIO, SalesorderheadersalesreasonRow] = { val salesorderid = compositeIds.map(_.salesorderid) @@ -110,8 +110,8 @@ class SalesorderheadersalesreasonRepoImpl extends SalesorderheadersalesreasonRep override def update(row: SalesorderheadersalesreasonRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."salesorderheadersalesreason" - set "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "salesorderid" = ${fromWrite(compositeId.salesorderid)(Write.fromPut(SalesorderheaderId.put))} AND "salesreasonid" = ${fromWrite(compositeId.salesreasonid)(Write.fromPut(SalesreasonId.put))}""" + set "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "salesorderid" = ${fromWrite(compositeId.salesorderid)(new Write.Single(SalesorderheaderId.put))} AND "salesreasonid" = ${fromWrite(compositeId.salesreasonid)(new Write.Single(SalesreasonId.put))}""" .update .run .map(_ > 0) @@ -119,9 +119,9 @@ class SalesorderheadersalesreasonRepoImpl extends SalesorderheadersalesreasonRep override def upsert(unsaved: SalesorderheadersalesreasonRow): ConnectionIO[SalesorderheadersalesreasonRow] = { sql"""insert into "sales"."salesorderheadersalesreason"("salesorderid", "salesreasonid", "modifieddate") values ( - ${fromWrite(unsaved.salesorderid)(Write.fromPut(SalesorderheaderId.put))}::int4, - ${fromWrite(unsaved.salesreasonid)(Write.fromPut(SalesreasonId.put))}::int4, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.salesorderid)(new Write.Single(SalesorderheaderId.put))}::int4, + ${fromWrite(unsaved.salesreasonid)(new Write.Single(SalesreasonId.put))}::int4, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("salesorderid", "salesreasonid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRow.scala index 5f57902b28..7c3bcc1bd5 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesorderheadersalesreason/SalesorderheadersalesreasonRow.scala @@ -11,13 +11,11 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.sales.salesorderheader.SalesorderheaderId import adventureworks.sales.salesreason.SalesreasonId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salesorderheadersalesreason Cross-reference table mapping sales orders to sales reason codes. @@ -43,18 +41,17 @@ object SalesorderheadersalesreasonRow { new SalesorderheadersalesreasonRow(compositeId.salesorderid, compositeId.salesreasonid, modifieddate) implicit lazy val decoder: Decoder[SalesorderheadersalesreasonRow] = Decoder.forProduct3[SalesorderheadersalesreasonRow, SalesorderheaderId, SalesreasonId, TypoLocalDateTime]("salesorderid", "salesreasonid", "modifieddate")(SalesorderheadersalesreasonRow.apply)(SalesorderheaderId.decoder, SalesreasonId.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalesorderheadersalesreasonRow] = Encoder.forProduct3[SalesorderheadersalesreasonRow, SalesorderheaderId, SalesreasonId, TypoLocalDateTime]("salesorderid", "salesreasonid", "modifieddate")(x => (x.salesorderid, x.salesreasonid, x.modifieddate))(SalesorderheaderId.encoder, SalesreasonId.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalesorderheadersalesreasonRow] = new Read[SalesorderheadersalesreasonRow]( - gets = List( - (SalesorderheaderId.get, Nullability.NoNulls), - (SalesreasonId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalesorderheadersalesreasonRow( - salesorderid = SalesorderheaderId.get.unsafeGetNonNullable(rs, i + 0), - salesreasonid = SalesreasonId.get.unsafeGetNonNullable(rs, i + 1), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2) + implicit lazy val read: Read[SalesorderheadersalesreasonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesorderheaderId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalesorderheadersalesreasonRow( + salesorderid = arr(0).asInstanceOf[SalesorderheaderId], + salesreasonid = arr(1).asInstanceOf[SalesreasonId], + modifieddate = arr(2).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalesorderheadersalesreasonRow] = Text.instance[SalesorderheadersalesreasonRow]{ (row, sb) => SalesorderheaderId.text.unsafeEncode(row.salesorderid, sb) sb.append(Text.DELIMETER) @@ -62,20 +59,10 @@ object SalesorderheadersalesreasonRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalesorderheadersalesreasonRow] = new Write[SalesorderheadersalesreasonRow]( - puts = List((SalesorderheaderId.put, Nullability.NoNulls), - (SalesreasonId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.salesorderid, x.salesreasonid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SalesorderheaderId.put.unsafeSetNonNullable(rs, i + 0, a.salesorderid) - SalesreasonId.put.unsafeSetNonNullable(rs, i + 1, a.salesreasonid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SalesorderheaderId.put.unsafeUpdateNonNullable(ps, i + 0, a.salesorderid) - SalesreasonId.put.unsafeUpdateNonNullable(ps, i + 1, a.salesreasonid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.modifieddate) - } + implicit lazy val write: Write[SalesorderheadersalesreasonRow] = new Write.Composite[SalesorderheadersalesreasonRow]( + List(new Write.Single(SalesorderheaderId.put), + new Write.Single(SalesreasonId.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.salesorderid, a.salesreasonid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRepoImpl.scala index 7f3465e249..56f92cf237 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRepoImpl.scala @@ -32,45 +32,45 @@ class SalespersonRepoImpl extends SalespersonRepo { DeleteBuilder(""""sales"."salesperson"""", SalespersonFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesperson" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesperson" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "sales"."salesperson" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: SalespersonRow): ConnectionIO[SalespersonRow] = { sql"""insert into "sales"."salesperson"("businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.salesquota)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.bonus)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.commissionpct)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.salesytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.saleslastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.salesquota)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.bonus)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.commissionpct)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.salesytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.saleslastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate"::text """.query(using SalespersonRow.read).unique } override def insert(unsaved: SalespersonRowUnsaved): ConnectionIO[SalespersonRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4")), - Some((Fragment.const0(s""""salesquota""""), fr"${fromWrite(unsaved.salesquota)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4")), + Some((Fragment.const0(s""""salesquota""""), fr"${fromWrite(unsaved.salesquota)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.bonus match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""bonus""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""bonus""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.commissionpct match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""commissionpct""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""commissionpct""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.salesytd match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesytd""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesytd""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.saleslastyear match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""saleslastyear""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""saleslastyear""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -102,7 +102,7 @@ class SalespersonRepoImpl extends SalespersonRepo { sql"""select "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate"::text from "sales"."salesperson"""".query(using SalespersonRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[SalespersonRow]] = { - sql"""select "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate"::text from "sales"."salesperson" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using SalespersonRow.read).option + sql"""select "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate"::text from "sales"."salesperson" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using SalespersonRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, SalespersonRow] = { sql"""select "businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate"::text from "sales"."salesperson" where "businessentityid" = ANY(${businessentityids})""".query(using SalespersonRow.read).stream @@ -119,15 +119,15 @@ class SalespersonRepoImpl extends SalespersonRepo { override def update(row: SalespersonRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "sales"."salesperson" - set "territoryid" = ${fromWrite(row.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, - "salesquota" = ${fromWrite(row.salesquota)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - "bonus" = ${fromWrite(row.bonus)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "commissionpct" = ${fromWrite(row.commissionpct)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "salesytd" = ${fromWrite(row.salesytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "saleslastyear" = ${fromWrite(row.saleslastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "territoryid" = ${fromWrite(row.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, + "salesquota" = ${fromWrite(row.salesquota)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + "bonus" = ${fromWrite(row.bonus)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "commissionpct" = ${fromWrite(row.commissionpct)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "salesytd" = ${fromWrite(row.salesytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "saleslastyear" = ${fromWrite(row.saleslastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -135,15 +135,15 @@ class SalespersonRepoImpl extends SalespersonRepo { override def upsert(unsaved: SalespersonRow): ConnectionIO[SalespersonRow] = { sql"""insert into "sales"."salesperson"("businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.territoryid)(Write.fromPutOption(SalesterritoryId.put))}::int4, - ${fromWrite(unsaved.salesquota)(Write.fromPutOption(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.bonus)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.commissionpct)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.salesytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.saleslastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.territoryid)(new Write.SingleOpt(SalesterritoryId.put))}::int4, + ${fromWrite(unsaved.salesquota)(new Write.SingleOpt(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.bonus)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.commissionpct)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.salesytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.saleslastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRow.scala index b1c375bf28..84c8e2192b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesperson/SalespersonRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salesperson Sales representative current information. @@ -63,30 +61,29 @@ case class SalespersonRow( object SalespersonRow { implicit lazy val decoder: Decoder[SalespersonRow] = Decoder.forProduct9[SalespersonRow, BusinessentityId, Option[SalesterritoryId], Option[BigDecimal], BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate")(SalespersonRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(SalesterritoryId.decoder), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalespersonRow] = Encoder.forProduct9[SalespersonRow, BusinessentityId, Option[SalesterritoryId], Option[BigDecimal], BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("businessentityid", "territoryid", "salesquota", "bonus", "commissionpct", "salesytd", "saleslastyear", "rowguid", "modifieddate")(x => (x.businessentityid, x.territoryid, x.salesquota, x.bonus, x.commissionpct, x.salesytd, x.saleslastyear, x.rowguid, x.modifieddate))(BusinessentityId.encoder, Encoder.encodeOption(SalesterritoryId.encoder), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalespersonRow] = new Read[SalespersonRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalespersonRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - territoryid = SalesterritoryId.get.unsafeGetNullable(rs, i + 1), - salesquota = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 2), - bonus = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - commissionpct = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - salesytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - saleslastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 7), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[SalespersonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalespersonRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + territoryid = arr(1).asInstanceOf[Option[SalesterritoryId]], + salesquota = arr(2).asInstanceOf[Option[BigDecimal]], + bonus = arr(3).asInstanceOf[BigDecimal], + commissionpct = arr(4).asInstanceOf[BigDecimal], + salesytd = arr(5).asInstanceOf[BigDecimal], + saleslastyear = arr(6).asInstanceOf[BigDecimal], + rowguid = arr(7).asInstanceOf[TypoUUID], + modifieddate = arr(8).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalespersonRow] = Text.instance[SalespersonRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -106,38 +103,16 @@ object SalespersonRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalespersonRow] = new Write[SalespersonRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (SalesterritoryId.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.territoryid, x.salesquota, x.bonus, x.commissionpct, x.salesytd, x.saleslastyear, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - SalesterritoryId.put.unsafeSetNullable(rs, i + 1, a.territoryid) - Meta.ScalaBigDecimalMeta.put.unsafeSetNullable(rs, i + 2, a.salesquota) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.bonus) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 4, a.commissionpct) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 5, a.salesytd) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 6, a.saleslastyear) - TypoUUID.put.unsafeSetNonNullable(rs, i + 7, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 8, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - SalesterritoryId.put.unsafeUpdateNullable(ps, i + 1, a.territoryid) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNullable(ps, i + 2, a.salesquota) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.bonus) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.commissionpct) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.salesytd) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.saleslastyear) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 7, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 8, a.modifieddate) - } + implicit lazy val write: Write[SalespersonRow] = new Write.Composite[SalespersonRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(SalesterritoryId.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put).toOpt, + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.territoryid, a.salesquota, a.bonus, a.commissionpct, a.salesytd, a.saleslastyear, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRepoImpl.scala index a11b974bd1..2cfc2ac110 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRepoImpl.scala @@ -31,7 +31,7 @@ class SalespersonquotahistoryRepoImpl extends SalespersonquotahistoryRepo { DeleteBuilder(""""sales"."salespersonquotahistory"""", SalespersonquotahistoryFields.structure) } override def deleteById(compositeId: SalespersonquotahistoryId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salespersonquotahistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "quotadate" = ${fromWrite(compositeId.quotadate)(Write.fromPut(TypoLocalDateTime.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salespersonquotahistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "quotadate" = ${fromWrite(compositeId.quotadate)(new Write.Single(TypoLocalDateTime.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[SalespersonquotahistoryId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -45,22 +45,22 @@ class SalespersonquotahistoryRepoImpl extends SalespersonquotahistoryRepo { } override def insert(unsaved: SalespersonquotahistoryRow): ConnectionIO[SalespersonquotahistoryRow] = { sql"""insert into "sales"."salespersonquotahistory"("businessentityid", "quotadate", "salesquota", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.quotadate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.salesquota)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.quotadate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.salesquota)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "quotadate"::text, "salesquota", "rowguid", "modifieddate"::text """.query(using SalespersonquotahistoryRow.read).unique } override def insert(unsaved: SalespersonquotahistoryRowUnsaved): ConnectionIO[SalespersonquotahistoryRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""quotadate""""), fr"${fromWrite(unsaved.quotadate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""salesquota""""), fr"${fromWrite(unsaved.salesquota)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""quotadate""""), fr"${fromWrite(unsaved.quotadate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""salesquota""""), fr"${fromWrite(unsaved.salesquota)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -92,7 +92,7 @@ class SalespersonquotahistoryRepoImpl extends SalespersonquotahistoryRepo { sql"""select "businessentityid", "quotadate"::text, "salesquota", "rowguid", "modifieddate"::text from "sales"."salespersonquotahistory"""".query(using SalespersonquotahistoryRow.read).stream } override def selectById(compositeId: SalespersonquotahistoryId): ConnectionIO[Option[SalespersonquotahistoryRow]] = { - sql"""select "businessentityid", "quotadate"::text, "salesquota", "rowguid", "modifieddate"::text from "sales"."salespersonquotahistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "quotadate" = ${fromWrite(compositeId.quotadate)(Write.fromPut(TypoLocalDateTime.put))}""".query(using SalespersonquotahistoryRow.read).option + sql"""select "businessentityid", "quotadate"::text, "salesquota", "rowguid", "modifieddate"::text from "sales"."salespersonquotahistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "quotadate" = ${fromWrite(compositeId.quotadate)(new Write.Single(TypoLocalDateTime.put))}""".query(using SalespersonquotahistoryRow.read).option } override def selectByIds(compositeIds: Array[SalespersonquotahistoryId]): Stream[ConnectionIO, SalespersonquotahistoryRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -116,10 +116,10 @@ class SalespersonquotahistoryRepoImpl extends SalespersonquotahistoryRepo { override def update(row: SalespersonquotahistoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."salespersonquotahistory" - set "salesquota" = ${fromWrite(row.salesquota)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "quotadate" = ${fromWrite(compositeId.quotadate)(Write.fromPut(TypoLocalDateTime.put))}""" + set "salesquota" = ${fromWrite(row.salesquota)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "quotadate" = ${fromWrite(compositeId.quotadate)(new Write.Single(TypoLocalDateTime.put))}""" .update .run .map(_ > 0) @@ -127,11 +127,11 @@ class SalespersonquotahistoryRepoImpl extends SalespersonquotahistoryRepo { override def upsert(unsaved: SalespersonquotahistoryRow): ConnectionIO[SalespersonquotahistoryRow] = { sql"""insert into "sales"."salespersonquotahistory"("businessentityid", "quotadate", "salesquota", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.quotadate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.salesquota)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.quotadate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.salesquota)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "quotadate") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRow.scala index 8b93767d3e..3882fda00a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salespersonquotahistory/SalespersonquotahistoryRow.scala @@ -11,14 +11,12 @@ import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salespersonquotahistory Sales performance tracking. @@ -48,22 +46,21 @@ object SalespersonquotahistoryRow { new SalespersonquotahistoryRow(compositeId.businessentityid, compositeId.quotadate, salesquota, rowguid, modifieddate) implicit lazy val decoder: Decoder[SalespersonquotahistoryRow] = Decoder.forProduct5[SalespersonquotahistoryRow, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoUUID, TypoLocalDateTime]("businessentityid", "quotadate", "salesquota", "rowguid", "modifieddate")(SalespersonquotahistoryRow.apply)(BusinessentityId.decoder, TypoLocalDateTime.decoder, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalespersonquotahistoryRow] = Encoder.forProduct5[SalespersonquotahistoryRow, BusinessentityId, TypoLocalDateTime, BigDecimal, TypoUUID, TypoLocalDateTime]("businessentityid", "quotadate", "salesquota", "rowguid", "modifieddate")(x => (x.businessentityid, x.quotadate, x.salesquota, x.rowguid, x.modifieddate))(BusinessentityId.encoder, TypoLocalDateTime.encoder, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalespersonquotahistoryRow] = new Read[SalespersonquotahistoryRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalespersonquotahistoryRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - quotadate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1), - salesquota = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 2), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 3), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4) + implicit lazy val read: Read[SalespersonquotahistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalespersonquotahistoryRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + quotadate = arr(1).asInstanceOf[TypoLocalDateTime], + salesquota = arr(2).asInstanceOf[BigDecimal], + rowguid = arr(3).asInstanceOf[TypoUUID], + modifieddate = arr(4).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalespersonquotahistoryRow] = Text.instance[SalespersonquotahistoryRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -75,26 +72,12 @@ object SalespersonquotahistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalespersonquotahistoryRow] = new Write[SalespersonquotahistoryRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.quotadate, x.salesquota, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 1, a.quotadate) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 2, a.salesquota) - TypoUUID.put.unsafeSetNonNullable(rs, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 1, a.quotadate) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.salesquota) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 3, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.modifieddate) - } + implicit lazy val write: Write[SalespersonquotahistoryRow] = new Write.Composite[SalespersonquotahistoryRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.quotadate, a.salesquota, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRepoImpl.scala index bdd4388ee6..127b2e19ca 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRepoImpl.scala @@ -29,28 +29,28 @@ class SalesreasonRepoImpl extends SalesreasonRepo { DeleteBuilder(""""sales"."salesreason"""", SalesreasonFields.structure) } override def deleteById(salesreasonid: SalesreasonId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesreason" where "salesreasonid" = ${fromWrite(salesreasonid)(Write.fromPut(SalesreasonId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesreason" where "salesreasonid" = ${fromWrite(salesreasonid)(new Write.Single(SalesreasonId.put))}""".update.run.map(_ > 0) } override def deleteByIds(salesreasonids: Array[SalesreasonId]): ConnectionIO[Int] = { sql"""delete from "sales"."salesreason" where "salesreasonid" = ANY(${salesreasonids})""".update.run } override def insert(unsaved: SalesreasonRow): ConnectionIO[SalesreasonRow] = { sql"""insert into "sales"."salesreason"("salesreasonid", "name", "reasontype", "modifieddate") - values (${fromWrite(unsaved.salesreasonid)(Write.fromPut(SalesreasonId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.reasontype)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.salesreasonid)(new Write.Single(SalesreasonId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.reasontype)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "salesreasonid", "name", "reasontype", "modifieddate"::text """.query(using SalesreasonRow.read).unique } override def insert(unsaved: SalesreasonRowUnsaved): ConnectionIO[SalesreasonRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""reasontype""""), fr"${fromWrite(unsaved.reasontype)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""reasontype""""), fr"${fromWrite(unsaved.reasontype)(new Write.Single(Name.put))}::varchar")), unsaved.salesreasonid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesreasonid""""), fr"${fromWrite(value: SalesreasonId)(Write.fromPut(SalesreasonId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesreasonid""""), fr"${fromWrite(value: SalesreasonId)(new Write.Single(SalesreasonId.put))}::int4")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -82,7 +82,7 @@ class SalesreasonRepoImpl extends SalesreasonRepo { sql"""select "salesreasonid", "name", "reasontype", "modifieddate"::text from "sales"."salesreason"""".query(using SalesreasonRow.read).stream } override def selectById(salesreasonid: SalesreasonId): ConnectionIO[Option[SalesreasonRow]] = { - sql"""select "salesreasonid", "name", "reasontype", "modifieddate"::text from "sales"."salesreason" where "salesreasonid" = ${fromWrite(salesreasonid)(Write.fromPut(SalesreasonId.put))}""".query(using SalesreasonRow.read).option + sql"""select "salesreasonid", "name", "reasontype", "modifieddate"::text from "sales"."salesreason" where "salesreasonid" = ${fromWrite(salesreasonid)(new Write.Single(SalesreasonId.put))}""".query(using SalesreasonRow.read).option } override def selectByIds(salesreasonids: Array[SalesreasonId]): Stream[ConnectionIO, SalesreasonRow] = { sql"""select "salesreasonid", "name", "reasontype", "modifieddate"::text from "sales"."salesreason" where "salesreasonid" = ANY(${salesreasonids})""".query(using SalesreasonRow.read).stream @@ -99,10 +99,10 @@ class SalesreasonRepoImpl extends SalesreasonRepo { override def update(row: SalesreasonRow): ConnectionIO[Boolean] = { val salesreasonid = row.salesreasonid sql"""update "sales"."salesreason" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "reasontype" = ${fromWrite(row.reasontype)(Write.fromPut(Name.put))}::varchar, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "salesreasonid" = ${fromWrite(salesreasonid)(Write.fromPut(SalesreasonId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "reasontype" = ${fromWrite(row.reasontype)(new Write.Single(Name.put))}::varchar, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "salesreasonid" = ${fromWrite(salesreasonid)(new Write.Single(SalesreasonId.put))}""" .update .run .map(_ > 0) @@ -110,10 +110,10 @@ class SalesreasonRepoImpl extends SalesreasonRepo { override def upsert(unsaved: SalesreasonRow): ConnectionIO[SalesreasonRow] = { sql"""insert into "sales"."salesreason"("salesreasonid", "name", "reasontype", "modifieddate") values ( - ${fromWrite(unsaved.salesreasonid)(Write.fromPut(SalesreasonId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.reasontype)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.salesreasonid)(new Write.Single(SalesreasonId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.reasontype)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("salesreasonid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRow.scala index 17ffe51cfb..46f1fb2052 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesreason/SalesreasonRow.scala @@ -10,13 +10,11 @@ package salesreason import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salesreason Lookup table of customer purchase reasons. @@ -40,20 +38,19 @@ case class SalesreasonRow( object SalesreasonRow { implicit lazy val decoder: Decoder[SalesreasonRow] = Decoder.forProduct4[SalesreasonRow, SalesreasonId, Name, Name, TypoLocalDateTime]("salesreasonid", "name", "reasontype", "modifieddate")(SalesreasonRow.apply)(SalesreasonId.decoder, Name.decoder, Name.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalesreasonRow] = Encoder.forProduct4[SalesreasonRow, SalesreasonId, Name, Name, TypoLocalDateTime]("salesreasonid", "name", "reasontype", "modifieddate")(x => (x.salesreasonid, x.name, x.reasontype, x.modifieddate))(SalesreasonId.encoder, Name.encoder, Name.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalesreasonRow] = new Read[SalesreasonRow]( - gets = List( - (SalesreasonId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalesreasonRow( - salesreasonid = SalesreasonId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - reasontype = Name.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[SalesreasonRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesreasonId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalesreasonRow( + salesreasonid = arr(0).asInstanceOf[SalesreasonId], + name = arr(1).asInstanceOf[Name], + reasontype = arr(2).asInstanceOf[Name], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalesreasonRow] = Text.instance[SalesreasonRow]{ (row, sb) => SalesreasonId.text.unsafeEncode(row.salesreasonid, sb) sb.append(Text.DELIMETER) @@ -63,23 +60,11 @@ object SalesreasonRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalesreasonRow] = new Write[SalesreasonRow]( - puts = List((SalesreasonId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.salesreasonid, x.name, x.reasontype, x.modifieddate), - unsafeSet = (rs, i, a) => { - SalesreasonId.put.unsafeSetNonNullable(rs, i + 0, a.salesreasonid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - Name.put.unsafeSetNonNullable(rs, i + 2, a.reasontype) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SalesreasonId.put.unsafeUpdateNonNullable(ps, i + 0, a.salesreasonid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - Name.put.unsafeUpdateNonNullable(ps, i + 2, a.reasontype) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[SalesreasonRow] = new Write.Composite[SalesreasonRow]( + List(new Write.Single(SalesreasonId.put), + new Write.Single(Name.put), + new Write.Single(Name.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.salesreasonid, a.name, a.reasontype, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRepoImpl.scala index 3ed5382c20..0fa19ad4bb 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRepoImpl.scala @@ -33,37 +33,37 @@ class SalestaxrateRepoImpl extends SalestaxrateRepo { DeleteBuilder(""""sales"."salestaxrate"""", SalestaxrateFields.structure) } override def deleteById(salestaxrateid: SalestaxrateId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salestaxrate" where "salestaxrateid" = ${fromWrite(salestaxrateid)(Write.fromPut(SalestaxrateId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salestaxrate" where "salestaxrateid" = ${fromWrite(salestaxrateid)(new Write.Single(SalestaxrateId.put))}""".update.run.map(_ > 0) } override def deleteByIds(salestaxrateids: Array[SalestaxrateId]): ConnectionIO[Int] = { sql"""delete from "sales"."salestaxrate" where "salestaxrateid" = ANY(${salestaxrateids})""".update.run } override def insert(unsaved: SalestaxrateRow): ConnectionIO[SalestaxrateRow] = { sql"""insert into "sales"."salestaxrate"("salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate") - values (${fromWrite(unsaved.salestaxrateid)(Write.fromPut(SalestaxrateId.put))}::int4, ${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, ${fromWrite(unsaved.taxtype)(Write.fromPut(TypoShort.put))}::int2, ${fromWrite(unsaved.taxrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.salestaxrateid)(new Write.Single(SalestaxrateId.put))}::int4, ${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, ${fromWrite(unsaved.taxtype)(new Write.Single(TypoShort.put))}::int2, ${fromWrite(unsaved.taxrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate"::text """.query(using SalestaxrateRow.read).unique } override def insert(unsaved: SalestaxrateRowUnsaved): ConnectionIO[SalestaxrateRow] = { val fs = List( - Some((Fragment.const0(s""""stateprovinceid""""), fr"${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4")), - Some((Fragment.const0(s""""taxtype""""), fr"${fromWrite(unsaved.taxtype)(Write.fromPut(TypoShort.put))}::int2")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), + Some((Fragment.const0(s""""stateprovinceid""""), fr"${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4")), + Some((Fragment.const0(s""""taxtype""""), fr"${fromWrite(unsaved.taxtype)(new Write.Single(TypoShort.put))}::int2")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), unsaved.salestaxrateid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salestaxrateid""""), fr"${fromWrite(value: SalestaxrateId)(Write.fromPut(SalestaxrateId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salestaxrateid""""), fr"${fromWrite(value: SalestaxrateId)(new Write.Single(SalestaxrateId.put))}::int4")) }, unsaved.taxrate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""taxrate""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""taxrate""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -95,7 +95,7 @@ class SalestaxrateRepoImpl extends SalestaxrateRepo { sql"""select "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate"::text from "sales"."salestaxrate"""".query(using SalestaxrateRow.read).stream } override def selectById(salestaxrateid: SalestaxrateId): ConnectionIO[Option[SalestaxrateRow]] = { - sql"""select "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate"::text from "sales"."salestaxrate" where "salestaxrateid" = ${fromWrite(salestaxrateid)(Write.fromPut(SalestaxrateId.put))}""".query(using SalestaxrateRow.read).option + sql"""select "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate"::text from "sales"."salestaxrate" where "salestaxrateid" = ${fromWrite(salestaxrateid)(new Write.Single(SalestaxrateId.put))}""".query(using SalestaxrateRow.read).option } override def selectByIds(salestaxrateids: Array[SalestaxrateId]): Stream[ConnectionIO, SalestaxrateRow] = { sql"""select "salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate"::text from "sales"."salestaxrate" where "salestaxrateid" = ANY(${salestaxrateids})""".query(using SalestaxrateRow.read).stream @@ -112,13 +112,13 @@ class SalestaxrateRepoImpl extends SalestaxrateRepo { override def update(row: SalestaxrateRow): ConnectionIO[Boolean] = { val salestaxrateid = row.salestaxrateid sql"""update "sales"."salestaxrate" - set "stateprovinceid" = ${fromWrite(row.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, - "taxtype" = ${fromWrite(row.taxtype)(Write.fromPut(TypoShort.put))}::int2, - "taxrate" = ${fromWrite(row.taxrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "salestaxrateid" = ${fromWrite(salestaxrateid)(Write.fromPut(SalestaxrateId.put))}""" + set "stateprovinceid" = ${fromWrite(row.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, + "taxtype" = ${fromWrite(row.taxtype)(new Write.Single(TypoShort.put))}::int2, + "taxrate" = ${fromWrite(row.taxrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "salestaxrateid" = ${fromWrite(salestaxrateid)(new Write.Single(SalestaxrateId.put))}""" .update .run .map(_ > 0) @@ -126,13 +126,13 @@ class SalestaxrateRepoImpl extends SalestaxrateRepo { override def upsert(unsaved: SalestaxrateRow): ConnectionIO[SalestaxrateRow] = { sql"""insert into "sales"."salestaxrate"("salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.salestaxrateid)(Write.fromPut(SalestaxrateId.put))}::int4, - ${fromWrite(unsaved.stateprovinceid)(Write.fromPut(StateprovinceId.put))}::int4, - ${fromWrite(unsaved.taxtype)(Write.fromPut(TypoShort.put))}::int2, - ${fromWrite(unsaved.taxrate)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.salestaxrateid)(new Write.Single(SalestaxrateId.put))}::int4, + ${fromWrite(unsaved.stateprovinceid)(new Write.Single(StateprovinceId.put))}::int4, + ${fromWrite(unsaved.taxtype)(new Write.Single(TypoShort.put))}::int2, + ${fromWrite(unsaved.taxrate)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("salestaxrateid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRow.scala index d771751a4a..2ee523aa29 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salestaxrate/SalestaxrateRow.scala @@ -13,14 +13,12 @@ import adventureworks.customtypes.TypoShort import adventureworks.customtypes.TypoUUID import adventureworks.person.stateprovince.StateprovinceId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salestaxrate Tax rate lookup table. @@ -53,26 +51,25 @@ case class SalestaxrateRow( object SalestaxrateRow { implicit lazy val decoder: Decoder[SalestaxrateRow] = Decoder.forProduct7[SalestaxrateRow, SalestaxrateId, StateprovinceId, TypoShort, BigDecimal, Name, TypoUUID, TypoLocalDateTime]("salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate")(SalestaxrateRow.apply)(SalestaxrateId.decoder, StateprovinceId.decoder, TypoShort.decoder, Decoder.decodeBigDecimal, Name.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalestaxrateRow] = Encoder.forProduct7[SalestaxrateRow, SalestaxrateId, StateprovinceId, TypoShort, BigDecimal, Name, TypoUUID, TypoLocalDateTime]("salestaxrateid", "stateprovinceid", "taxtype", "taxrate", "name", "rowguid", "modifieddate")(x => (x.salestaxrateid, x.stateprovinceid, x.taxtype, x.taxrate, x.name, x.rowguid, x.modifieddate))(SalestaxrateId.encoder, StateprovinceId.encoder, TypoShort.encoder, Encoder.encodeBigDecimal, Name.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalestaxrateRow] = new Read[SalestaxrateRow]( - gets = List( - (SalestaxrateId.get, Nullability.NoNulls), - (StateprovinceId.get, Nullability.NoNulls), - (TypoShort.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalestaxrateRow( - salestaxrateid = SalestaxrateId.get.unsafeGetNonNullable(rs, i + 0), - stateprovinceid = StateprovinceId.get.unsafeGetNonNullable(rs, i + 1), - taxtype = TypoShort.get.unsafeGetNonNullable(rs, i + 2), - taxrate = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 3), - name = Name.get.unsafeGetNonNullable(rs, i + 4), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 5), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6) + implicit lazy val read: Read[SalestaxrateRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalestaxrateId.get).asInstanceOf[Read[Any]], + new Read.Single(StateprovinceId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoShort.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalestaxrateRow( + salestaxrateid = arr(0).asInstanceOf[SalestaxrateId], + stateprovinceid = arr(1).asInstanceOf[StateprovinceId], + taxtype = arr(2).asInstanceOf[TypoShort], + taxrate = arr(3).asInstanceOf[BigDecimal], + name = arr(4).asInstanceOf[Name], + rowguid = arr(5).asInstanceOf[TypoUUID], + modifieddate = arr(6).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalestaxrateRow] = Text.instance[SalestaxrateRow]{ (row, sb) => SalestaxrateId.text.unsafeEncode(row.salestaxrateid, sb) sb.append(Text.DELIMETER) @@ -88,32 +85,14 @@ object SalestaxrateRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalestaxrateRow] = new Write[SalestaxrateRow]( - puts = List((SalestaxrateId.put, Nullability.NoNulls), - (StateprovinceId.put, Nullability.NoNulls), - (TypoShort.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.salestaxrateid, x.stateprovinceid, x.taxtype, x.taxrate, x.name, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SalestaxrateId.put.unsafeSetNonNullable(rs, i + 0, a.salestaxrateid) - StateprovinceId.put.unsafeSetNonNullable(rs, i + 1, a.stateprovinceid) - TypoShort.put.unsafeSetNonNullable(rs, i + 2, a.taxtype) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 3, a.taxrate) - Name.put.unsafeSetNonNullable(rs, i + 4, a.name) - TypoUUID.put.unsafeSetNonNullable(rs, i + 5, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 6, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SalestaxrateId.put.unsafeUpdateNonNullable(ps, i + 0, a.salestaxrateid) - StateprovinceId.put.unsafeUpdateNonNullable(ps, i + 1, a.stateprovinceid) - TypoShort.put.unsafeUpdateNonNullable(ps, i + 2, a.taxtype) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.taxrate) - Name.put.unsafeUpdateNonNullable(ps, i + 4, a.name) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 5, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 6, a.modifieddate) - } + implicit lazy val write: Write[SalestaxrateRow] = new Write.Composite[SalestaxrateRow]( + List(new Write.Single(SalestaxrateId.put), + new Write.Single(StateprovinceId.put), + new Write.Single(TypoShort.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Name.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.salestaxrateid, a.stateprovinceid, a.taxtype, a.taxrate, a.name, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRepoImpl.scala index 8b132867dd..9389d43738 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRepoImpl.scala @@ -32,49 +32,49 @@ class SalesterritoryRepoImpl extends SalesterritoryRepo { DeleteBuilder(""""sales"."salesterritory"""", SalesterritoryFields.structure) } override def deleteById(territoryid: SalesterritoryId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesterritory" where "territoryid" = ${fromWrite(territoryid)(Write.fromPut(SalesterritoryId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesterritory" where "territoryid" = ${fromWrite(territoryid)(new Write.Single(SalesterritoryId.put))}""".update.run.map(_ > 0) } override def deleteByIds(territoryids: Array[SalesterritoryId]): ConnectionIO[Int] = { sql"""delete from "sales"."salesterritory" where "territoryid" = ANY(${territoryids})""".update.run } override def insert(unsaved: SalesterritoryRow): ConnectionIO[SalesterritoryRow] = { sql"""insert into "sales"."salesterritory"("territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate") - values (${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, ${fromWrite(unsaved.group)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.salesytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.saleslastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.costytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.costlastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, ${fromWrite(unsaved.group)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.salesytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.saleslastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.costytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.costlastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate"::text """.query(using SalesterritoryRow.read).unique } override def insert(unsaved: SalesterritoryRowUnsaved): ConnectionIO[SalesterritoryRow] = { val fs = List( - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}")), - Some((Fragment.const0(s""""group""""), fr"${fromWrite(unsaved.group)(Write.fromPut(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""countryregioncode""""), fr"${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}")), + Some((Fragment.const0(s""""group""""), fr"${fromWrite(unsaved.group)(new Write.Single(Meta.StringMeta.put))}")), unsaved.territoryid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(value: SalesterritoryId)(Write.fromPut(SalesterritoryId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(value: SalesterritoryId)(new Write.Single(SalesterritoryId.put))}::int4")) }, unsaved.salesytd match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesytd""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""salesytd""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.saleslastyear match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""saleslastyear""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""saleslastyear""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.costytd match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""costytd""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""costytd""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.costlastyear match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""costlastyear""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""costlastyear""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -106,7 +106,7 @@ class SalesterritoryRepoImpl extends SalesterritoryRepo { sql"""select "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate"::text from "sales"."salesterritory"""".query(using SalesterritoryRow.read).stream } override def selectById(territoryid: SalesterritoryId): ConnectionIO[Option[SalesterritoryRow]] = { - sql"""select "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate"::text from "sales"."salesterritory" where "territoryid" = ${fromWrite(territoryid)(Write.fromPut(SalesterritoryId.put))}""".query(using SalesterritoryRow.read).option + sql"""select "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate"::text from "sales"."salesterritory" where "territoryid" = ${fromWrite(territoryid)(new Write.Single(SalesterritoryId.put))}""".query(using SalesterritoryRow.read).option } override def selectByIds(territoryids: Array[SalesterritoryId]): Stream[ConnectionIO, SalesterritoryRow] = { sql"""select "territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate"::text from "sales"."salesterritory" where "territoryid" = ANY(${territoryids})""".query(using SalesterritoryRow.read).stream @@ -123,16 +123,16 @@ class SalesterritoryRepoImpl extends SalesterritoryRepo { override def update(row: SalesterritoryRow): ConnectionIO[Boolean] = { val territoryid = row.territoryid sql"""update "sales"."salesterritory" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "countryregioncode" = ${fromWrite(row.countryregioncode)(Write.fromPut(CountryregionId.put))}, - "group" = ${fromWrite(row.group)(Write.fromPut(Meta.StringMeta.put))}, - "salesytd" = ${fromWrite(row.salesytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "saleslastyear" = ${fromWrite(row.saleslastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "costytd" = ${fromWrite(row.costytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "costlastyear" = ${fromWrite(row.costlastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "territoryid" = ${fromWrite(territoryid)(Write.fromPut(SalesterritoryId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "countryregioncode" = ${fromWrite(row.countryregioncode)(new Write.Single(CountryregionId.put))}, + "group" = ${fromWrite(row.group)(new Write.Single(Meta.StringMeta.put))}, + "salesytd" = ${fromWrite(row.salesytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "saleslastyear" = ${fromWrite(row.saleslastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "costytd" = ${fromWrite(row.costytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "costlastyear" = ${fromWrite(row.costlastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "territoryid" = ${fromWrite(territoryid)(new Write.Single(SalesterritoryId.put))}""" .update .run .map(_ > 0) @@ -140,16 +140,16 @@ class SalesterritoryRepoImpl extends SalesterritoryRepo { override def upsert(unsaved: SalesterritoryRow): ConnectionIO[SalesterritoryRow] = { sql"""insert into "sales"."salesterritory"("territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.countryregioncode)(Write.fromPut(CountryregionId.put))}, - ${fromWrite(unsaved.group)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.salesytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.saleslastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.costytd)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.costlastyear)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.countryregioncode)(new Write.Single(CountryregionId.put))}, + ${fromWrite(unsaved.group)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.salesytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.saleslastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.costytd)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.costlastyear)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("territoryid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRow.scala index 7190b9672d..61ef4e63d3 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritory/SalesterritoryRow.scala @@ -12,14 +12,12 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.countryregion.CountryregionId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salesterritory Sales territory lookup table. @@ -64,32 +62,31 @@ case class SalesterritoryRow( object SalesterritoryRow { implicit lazy val decoder: Decoder[SalesterritoryRow] = Decoder.forProduct10[SalesterritoryRow, SalesterritoryId, Name, CountryregionId, /* max 50 chars */ String, BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate")(SalesterritoryRow.apply)(SalesterritoryId.decoder, Name.decoder, CountryregionId.decoder, Decoder.decodeString, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, Decoder.decodeBigDecimal, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalesterritoryRow] = Encoder.forProduct10[SalesterritoryRow, SalesterritoryId, Name, CountryregionId, /* max 50 chars */ String, BigDecimal, BigDecimal, BigDecimal, BigDecimal, TypoUUID, TypoLocalDateTime]("territoryid", "name", "countryregioncode", "group", "salesytd", "saleslastyear", "costytd", "costlastyear", "rowguid", "modifieddate")(x => (x.territoryid, x.name, x.countryregioncode, x.group, x.salesytd, x.saleslastyear, x.costytd, x.costlastyear, x.rowguid, x.modifieddate))(SalesterritoryId.encoder, Name.encoder, CountryregionId.encoder, Encoder.encodeString, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, Encoder.encodeBigDecimal, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalesterritoryRow] = new Read[SalesterritoryRow]( - gets = List( - (SalesterritoryId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (CountryregionId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalesterritoryRow( - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - countryregioncode = CountryregionId.get.unsafeGetNonNullable(rs, i + 2), - group = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - salesytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 4), - saleslastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 5), - costytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 6), - costlastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 7), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 8), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 9) + implicit lazy val read: Read[SalesterritoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(CountryregionId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalesterritoryRow( + territoryid = arr(0).asInstanceOf[SalesterritoryId], + name = arr(1).asInstanceOf[Name], + countryregioncode = arr(2).asInstanceOf[CountryregionId], + group = arr(3).asInstanceOf[/* max 50 chars */ String], + salesytd = arr(4).asInstanceOf[BigDecimal], + saleslastyear = arr(5).asInstanceOf[BigDecimal], + costytd = arr(6).asInstanceOf[BigDecimal], + costlastyear = arr(7).asInstanceOf[BigDecimal], + rowguid = arr(8).asInstanceOf[TypoUUID], + modifieddate = arr(9).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalesterritoryRow] = Text.instance[SalesterritoryRow]{ (row, sb) => SalesterritoryId.text.unsafeEncode(row.territoryid, sb) sb.append(Text.DELIMETER) @@ -111,41 +108,17 @@ object SalesterritoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalesterritoryRow] = new Write[SalesterritoryRow]( - puts = List((SalesterritoryId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (CountryregionId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.territoryid, x.name, x.countryregioncode, x.group, x.salesytd, x.saleslastyear, x.costytd, x.costlastyear, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SalesterritoryId.put.unsafeSetNonNullable(rs, i + 0, a.territoryid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - CountryregionId.put.unsafeSetNonNullable(rs, i + 2, a.countryregioncode) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 3, a.group) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 4, a.salesytd) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 5, a.saleslastyear) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 6, a.costytd) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 7, a.costlastyear) - TypoUUID.put.unsafeSetNonNullable(rs, i + 8, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 9, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SalesterritoryId.put.unsafeUpdateNonNullable(ps, i + 0, a.territoryid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - CountryregionId.put.unsafeUpdateNonNullable(ps, i + 2, a.countryregioncode) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.group) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.salesytd) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 5, a.saleslastyear) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 6, a.costytd) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.costlastyear) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 8, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 9, a.modifieddate) - } + implicit lazy val write: Write[SalesterritoryRow] = new Write.Composite[SalesterritoryRow]( + List(new Write.Single(SalesterritoryId.put), + new Write.Single(Name.put), + new Write.Single(CountryregionId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.territoryid, a.name, a.countryregioncode, a.group, a.salesytd, a.saleslastyear, a.costytd, a.costlastyear, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRepoImpl.scala index b402c74ea9..fc26a62e08 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRepoImpl.scala @@ -31,7 +31,7 @@ class SalesterritoryhistoryRepoImpl extends SalesterritoryhistoryRepo { DeleteBuilder(""""sales"."salesterritoryhistory"""", SalesterritoryhistoryFields.structure) } override def deleteById(compositeId: SalesterritoryhistoryId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."salesterritoryhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))} AND "territoryid" = ${fromWrite(compositeId.territoryid)(Write.fromPut(SalesterritoryId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."salesterritoryhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))} AND "territoryid" = ${fromWrite(compositeId.territoryid)(new Write.Single(SalesterritoryId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[SalesterritoryhistoryId]): ConnectionIO[Int] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -46,23 +46,23 @@ class SalesterritoryhistoryRepoImpl extends SalesterritoryhistoryRepo { } override def insert(unsaved: SalesterritoryhistoryRow): ConnectionIO[SalesterritoryhistoryRow] = { sql"""insert into "sales"."salesterritoryhistory"("businessentityid", "territoryid", "startdate", "enddate", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "territoryid", "startdate"::text, "enddate"::text, "rowguid", "modifieddate"::text """.query(using SalesterritoryhistoryRow.read).unique } override def insert(unsaved: SalesterritoryhistoryRowUnsaved): ConnectionIO[SalesterritoryhistoryRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4")), - Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""territoryid""""), fr"${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4")), + Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -94,7 +94,7 @@ class SalesterritoryhistoryRepoImpl extends SalesterritoryhistoryRepo { sql"""select "businessentityid", "territoryid", "startdate"::text, "enddate"::text, "rowguid", "modifieddate"::text from "sales"."salesterritoryhistory"""".query(using SalesterritoryhistoryRow.read).stream } override def selectById(compositeId: SalesterritoryhistoryId): ConnectionIO[Option[SalesterritoryhistoryRow]] = { - sql"""select "businessentityid", "territoryid", "startdate"::text, "enddate"::text, "rowguid", "modifieddate"::text from "sales"."salesterritoryhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))} AND "territoryid" = ${fromWrite(compositeId.territoryid)(Write.fromPut(SalesterritoryId.put))}""".query(using SalesterritoryhistoryRow.read).option + sql"""select "businessentityid", "territoryid", "startdate"::text, "enddate"::text, "rowguid", "modifieddate"::text from "sales"."salesterritoryhistory" where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))} AND "territoryid" = ${fromWrite(compositeId.territoryid)(new Write.Single(SalesterritoryId.put))}""".query(using SalesterritoryhistoryRow.read).option } override def selectByIds(compositeIds: Array[SalesterritoryhistoryId]): Stream[ConnectionIO, SalesterritoryhistoryRow] = { val businessentityid = compositeIds.map(_.businessentityid) @@ -119,10 +119,10 @@ class SalesterritoryhistoryRepoImpl extends SalesterritoryhistoryRepo { override def update(row: SalesterritoryhistoryRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."salesterritoryhistory" - set "enddate" = ${fromWrite(row.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(compositeId.businessentityid)(Write.fromPut(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(Write.fromPut(TypoLocalDateTime.put))} AND "territoryid" = ${fromWrite(compositeId.territoryid)(Write.fromPut(SalesterritoryId.put))}""" + set "enddate" = ${fromWrite(row.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(compositeId.businessentityid)(new Write.Single(BusinessentityId.put))} AND "startdate" = ${fromWrite(compositeId.startdate)(new Write.Single(TypoLocalDateTime.put))} AND "territoryid" = ${fromWrite(compositeId.territoryid)(new Write.Single(SalesterritoryId.put))}""" .update .run .map(_ > 0) @@ -130,12 +130,12 @@ class SalesterritoryhistoryRepoImpl extends SalesterritoryhistoryRepo { override def upsert(unsaved: SalesterritoryhistoryRow): ConnectionIO[SalesterritoryhistoryRow] = { sql"""insert into "sales"."salesterritoryhistory"("businessentityid", "territoryid", "startdate", "enddate", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.territoryid)(Write.fromPut(SalesterritoryId.put))}::int4, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.enddate)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.territoryid)(new Write.Single(SalesterritoryId.put))}::int4, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.enddate)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid", "startdate", "territoryid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRow.scala index 8c55fcb971..cf800c42bc 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/salesterritoryhistory/SalesterritoryhistoryRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.person.businessentity.BusinessentityId import adventureworks.sales.salesterritory.SalesterritoryId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.salesterritoryhistory Sales representative transfers to other sales territories. @@ -52,24 +50,23 @@ object SalesterritoryhistoryRow { new SalesterritoryhistoryRow(compositeId.businessentityid, compositeId.territoryid, compositeId.startdate, enddate, rowguid, modifieddate) implicit lazy val decoder: Decoder[SalesterritoryhistoryRow] = Decoder.forProduct6[SalesterritoryhistoryRow, BusinessentityId, SalesterritoryId, TypoLocalDateTime, Option[TypoLocalDateTime], TypoUUID, TypoLocalDateTime]("businessentityid", "territoryid", "startdate", "enddate", "rowguid", "modifieddate")(SalesterritoryhistoryRow.apply)(BusinessentityId.decoder, SalesterritoryId.decoder, TypoLocalDateTime.decoder, Decoder.decodeOption(TypoLocalDateTime.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SalesterritoryhistoryRow] = Encoder.forProduct6[SalesterritoryhistoryRow, BusinessentityId, SalesterritoryId, TypoLocalDateTime, Option[TypoLocalDateTime], TypoUUID, TypoLocalDateTime]("businessentityid", "territoryid", "startdate", "enddate", "rowguid", "modifieddate")(x => (x.businessentityid, x.territoryid, x.startdate, x.enddate, x.rowguid, x.modifieddate))(BusinessentityId.encoder, SalesterritoryId.encoder, TypoLocalDateTime.encoder, Encoder.encodeOption(TypoLocalDateTime.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SalesterritoryhistoryRow] = new Read[SalesterritoryhistoryRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (SalesterritoryId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SalesterritoryhistoryRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - territoryid = SalesterritoryId.get.unsafeGetNonNullable(rs, i + 1), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 2), - enddate = TypoLocalDateTime.get.unsafeGetNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[SalesterritoryhistoryRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(SalesterritoryId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SalesterritoryhistoryRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + territoryid = arr(1).asInstanceOf[SalesterritoryId], + startdate = arr(2).asInstanceOf[TypoLocalDateTime], + enddate = arr(3).asInstanceOf[Option[TypoLocalDateTime]], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SalesterritoryhistoryRow] = Text.instance[SalesterritoryhistoryRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -83,29 +80,13 @@ object SalesterritoryhistoryRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SalesterritoryhistoryRow] = new Write[SalesterritoryhistoryRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (SalesterritoryId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.territoryid, x.startdate, x.enddate, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - SalesterritoryId.put.unsafeSetNonNullable(rs, i + 1, a.territoryid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 2, a.startdate) - TypoLocalDateTime.put.unsafeSetNullable(rs, i + 3, a.enddate) - TypoUUID.put.unsafeSetNonNullable(rs, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - SalesterritoryId.put.unsafeUpdateNonNullable(ps, i + 1, a.territoryid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 2, a.startdate) - TypoLocalDateTime.put.unsafeUpdateNullable(ps, i + 3, a.enddate) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[SalesterritoryhistoryRow] = new Write.Composite[SalesterritoryhistoryRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(SalesterritoryId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.territoryid, a.startdate, a.enddate, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRepoImpl.scala index ba4172fbbc..59e54d819a 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRepoImpl.scala @@ -30,36 +30,36 @@ class ShoppingcartitemRepoImpl extends ShoppingcartitemRepo { DeleteBuilder(""""sales"."shoppingcartitem"""", ShoppingcartitemFields.structure) } override def deleteById(shoppingcartitemid: ShoppingcartitemId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."shoppingcartitem" where "shoppingcartitemid" = ${fromWrite(shoppingcartitemid)(Write.fromPut(ShoppingcartitemId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."shoppingcartitem" where "shoppingcartitemid" = ${fromWrite(shoppingcartitemid)(new Write.Single(ShoppingcartitemId.put))}""".update.run.map(_ > 0) } override def deleteByIds(shoppingcartitemids: Array[ShoppingcartitemId]): ConnectionIO[Int] = { sql"""delete from "sales"."shoppingcartitem" where "shoppingcartitemid" = ANY(${shoppingcartitemids})""".update.run } override def insert(unsaved: ShoppingcartitemRow): ConnectionIO[ShoppingcartitemRow] = { sql"""insert into "sales"."shoppingcartitem"("shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated", "modifieddate") - values (${fromWrite(unsaved.shoppingcartitemid)(Write.fromPut(ShoppingcartitemId.put))}::int4, ${fromWrite(unsaved.shoppingcartid)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.datecreated)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.shoppingcartitemid)(new Write.Single(ShoppingcartitemId.put))}::int4, ${fromWrite(unsaved.shoppingcartid)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.datecreated)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated"::text, "modifieddate"::text """.query(using ShoppingcartitemRow.read).unique } override def insert(unsaved: ShoppingcartitemRowUnsaved): ConnectionIO[ShoppingcartitemRow] = { val fs = List( - Some((Fragment.const0(s""""shoppingcartid""""), fr"${fromWrite(unsaved.shoppingcartid)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), + Some((Fragment.const0(s""""shoppingcartid""""), fr"${fromWrite(unsaved.shoppingcartid)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), unsaved.shoppingcartitemid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""shoppingcartitemid""""), fr"${fromWrite(value: ShoppingcartitemId)(Write.fromPut(ShoppingcartitemId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""shoppingcartitemid""""), fr"${fromWrite(value: ShoppingcartitemId)(new Write.Single(ShoppingcartitemId.put))}::int4")) }, unsaved.quantity match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""quantity""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.datecreated match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""datecreated""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""datecreated""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -91,7 +91,7 @@ class ShoppingcartitemRepoImpl extends ShoppingcartitemRepo { sql"""select "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated"::text, "modifieddate"::text from "sales"."shoppingcartitem"""".query(using ShoppingcartitemRow.read).stream } override def selectById(shoppingcartitemid: ShoppingcartitemId): ConnectionIO[Option[ShoppingcartitemRow]] = { - sql"""select "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated"::text, "modifieddate"::text from "sales"."shoppingcartitem" where "shoppingcartitemid" = ${fromWrite(shoppingcartitemid)(Write.fromPut(ShoppingcartitemId.put))}""".query(using ShoppingcartitemRow.read).option + sql"""select "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated"::text, "modifieddate"::text from "sales"."shoppingcartitem" where "shoppingcartitemid" = ${fromWrite(shoppingcartitemid)(new Write.Single(ShoppingcartitemId.put))}""".query(using ShoppingcartitemRow.read).option } override def selectByIds(shoppingcartitemids: Array[ShoppingcartitemId]): Stream[ConnectionIO, ShoppingcartitemRow] = { sql"""select "shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated"::text, "modifieddate"::text from "sales"."shoppingcartitem" where "shoppingcartitemid" = ANY(${shoppingcartitemids})""".query(using ShoppingcartitemRow.read).stream @@ -108,12 +108,12 @@ class ShoppingcartitemRepoImpl extends ShoppingcartitemRepo { override def update(row: ShoppingcartitemRow): ConnectionIO[Boolean] = { val shoppingcartitemid = row.shoppingcartitemid sql"""update "sales"."shoppingcartitem" - set "shoppingcartid" = ${fromWrite(row.shoppingcartid)(Write.fromPut(Meta.StringMeta.put))}, - "quantity" = ${fromWrite(row.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, - "productid" = ${fromWrite(row.productid)(Write.fromPut(ProductId.put))}::int4, - "datecreated" = ${fromWrite(row.datecreated)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "shoppingcartitemid" = ${fromWrite(shoppingcartitemid)(Write.fromPut(ShoppingcartitemId.put))}""" + set "shoppingcartid" = ${fromWrite(row.shoppingcartid)(new Write.Single(Meta.StringMeta.put))}, + "quantity" = ${fromWrite(row.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, + "productid" = ${fromWrite(row.productid)(new Write.Single(ProductId.put))}::int4, + "datecreated" = ${fromWrite(row.datecreated)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "shoppingcartitemid" = ${fromWrite(shoppingcartitemid)(new Write.Single(ShoppingcartitemId.put))}""" .update .run .map(_ > 0) @@ -121,12 +121,12 @@ class ShoppingcartitemRepoImpl extends ShoppingcartitemRepo { override def upsert(unsaved: ShoppingcartitemRow): ConnectionIO[ShoppingcartitemRow] = { sql"""insert into "sales"."shoppingcartitem"("shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated", "modifieddate") values ( - ${fromWrite(unsaved.shoppingcartitemid)(Write.fromPut(ShoppingcartitemId.put))}::int4, - ${fromWrite(unsaved.shoppingcartid)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.quantity)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.datecreated)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.shoppingcartitemid)(new Write.Single(ShoppingcartitemId.put))}::int4, + ${fromWrite(unsaved.shoppingcartid)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.quantity)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.datecreated)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("shoppingcartitemid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRow.scala index e069c025a3..ebc2656639 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/shoppingcartitem/ShoppingcartitemRow.scala @@ -10,14 +10,12 @@ package shoppingcartitem import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.production.product.ProductId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.shoppingcartitem Contains online customer orders until the order is submitted or cancelled. @@ -49,24 +47,23 @@ case class ShoppingcartitemRow( object ShoppingcartitemRow { implicit lazy val decoder: Decoder[ShoppingcartitemRow] = Decoder.forProduct6[ShoppingcartitemRow, ShoppingcartitemId, /* max 50 chars */ String, Int, ProductId, TypoLocalDateTime, TypoLocalDateTime]("shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated", "modifieddate")(ShoppingcartitemRow.apply)(ShoppingcartitemId.decoder, Decoder.decodeString, Decoder.decodeInt, ProductId.decoder, TypoLocalDateTime.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[ShoppingcartitemRow] = Encoder.forProduct6[ShoppingcartitemRow, ShoppingcartitemId, /* max 50 chars */ String, Int, ProductId, TypoLocalDateTime, TypoLocalDateTime]("shoppingcartitemid", "shoppingcartid", "quantity", "productid", "datecreated", "modifieddate")(x => (x.shoppingcartitemid, x.shoppingcartid, x.quantity, x.productid, x.datecreated, x.modifieddate))(ShoppingcartitemId.encoder, Encoder.encodeString, Encoder.encodeInt, ProductId.encoder, TypoLocalDateTime.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[ShoppingcartitemRow] = new Read[ShoppingcartitemRow]( - gets = List( - (ShoppingcartitemId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => ShoppingcartitemRow( - shoppingcartitemid = ShoppingcartitemId.get.unsafeGetNonNullable(rs, i + 0), - shoppingcartid = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - quantity = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 2), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 3), - datecreated = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[ShoppingcartitemRow] = new Read.CompositeOfInstances(Array( + new Read.Single(ShoppingcartitemId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + ShoppingcartitemRow( + shoppingcartitemid = arr(0).asInstanceOf[ShoppingcartitemId], + shoppingcartid = arr(1).asInstanceOf[/* max 50 chars */ String], + quantity = arr(2).asInstanceOf[Int], + productid = arr(3).asInstanceOf[ProductId], + datecreated = arr(4).asInstanceOf[TypoLocalDateTime], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[ShoppingcartitemRow] = Text.instance[ShoppingcartitemRow]{ (row, sb) => ShoppingcartitemId.text.unsafeEncode(row.shoppingcartitemid, sb) sb.append(Text.DELIMETER) @@ -80,29 +77,13 @@ object ShoppingcartitemRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[ShoppingcartitemRow] = new Write[ShoppingcartitemRow]( - puts = List((ShoppingcartitemId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.shoppingcartitemid, x.shoppingcartid, x.quantity, x.productid, x.datecreated, x.modifieddate), - unsafeSet = (rs, i, a) => { - ShoppingcartitemId.put.unsafeSetNonNullable(rs, i + 0, a.shoppingcartitemid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.shoppingcartid) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 2, a.quantity) - ProductId.put.unsafeSetNonNullable(rs, i + 3, a.productid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 4, a.datecreated) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - ShoppingcartitemId.put.unsafeUpdateNonNullable(ps, i + 0, a.shoppingcartitemid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.shoppingcartid) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.quantity) - ProductId.put.unsafeUpdateNonNullable(ps, i + 3, a.productid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 4, a.datecreated) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[ShoppingcartitemRow] = new Write.Composite[ShoppingcartitemRow]( + List(new Write.Single(ShoppingcartitemId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(ProductId.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.shoppingcartitemid, a.shoppingcartid, a.quantity, a.productid, a.datecreated, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRepoImpl.scala index 5dfc534fef..f04b640080 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRepoImpl.scala @@ -30,44 +30,44 @@ class SpecialofferRepoImpl extends SpecialofferRepo { DeleteBuilder(""""sales"."specialoffer"""", SpecialofferFields.structure) } override def deleteById(specialofferid: SpecialofferId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."specialoffer" where "specialofferid" = ${fromWrite(specialofferid)(Write.fromPut(SpecialofferId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."specialoffer" where "specialofferid" = ${fromWrite(specialofferid)(new Write.Single(SpecialofferId.put))}""".update.run.map(_ > 0) } override def deleteByIds(specialofferids: Array[SpecialofferId]): ConnectionIO[Int] = { sql"""delete from "sales"."specialoffer" where "specialofferid" = ANY(${specialofferids})""".update.run } override def insert(unsaved: SpecialofferRow): ConnectionIO[SpecialofferRow] = { sql"""insert into "sales"."specialoffer"("specialofferid", "description", "discountpct", "type", "category", "startdate", "enddate", "minqty", "maxqty", "rowguid", "modifieddate") - values (${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, ${fromWrite(unsaved.description)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.discountpct)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.`type`)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.category)(Write.fromPut(Meta.StringMeta.put))}, ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.minqty)(Write.fromPut(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.maxqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, ${fromWrite(unsaved.description)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.discountpct)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, ${fromWrite(unsaved.`type`)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.category)(new Write.Single(Meta.StringMeta.put))}, ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.enddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, ${fromWrite(unsaved.minqty)(new Write.Single(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.maxqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "specialofferid", "description", "discountpct", "type", "category", "startdate"::text, "enddate"::text, "minqty", "maxqty", "rowguid", "modifieddate"::text """.query(using SpecialofferRow.read).unique } override def insert(unsaved: SpecialofferRowUnsaved): ConnectionIO[SpecialofferRow] = { val fs = List( - Some((Fragment.const0(s""""description""""), fr"${fromWrite(unsaved.description)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""type""""), fr"${fromWrite(unsaved.`type`)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""category""""), fr"${fromWrite(unsaved.category)(Write.fromPut(Meta.StringMeta.put))}")), - Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")), - Some((Fragment.const0(s""""maxqty""""), fr"${fromWrite(unsaved.maxqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4")), + Some((Fragment.const0(s""""description""""), fr"${fromWrite(unsaved.description)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""type""""), fr"${fromWrite(unsaved.`type`)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""category""""), fr"${fromWrite(unsaved.category)(new Write.Single(Meta.StringMeta.put))}")), + Some((Fragment.const0(s""""startdate""""), fr"${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""enddate""""), fr"${fromWrite(unsaved.enddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp")), + Some((Fragment.const0(s""""maxqty""""), fr"${fromWrite(unsaved.maxqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4")), unsaved.specialofferid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""specialofferid""""), fr"${fromWrite(value: SpecialofferId)(Write.fromPut(SpecialofferId.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""specialofferid""""), fr"${fromWrite(value: SpecialofferId)(new Write.Single(SpecialofferId.put))}::int4")) }, unsaved.discountpct match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""discountpct""""), fr"${fromWrite(value: BigDecimal)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""discountpct""""), fr"${fromWrite(value: BigDecimal)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric")) }, unsaved.minqty match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""minqty""""), fr"${fromWrite(value: Int)(Write.fromPut(Meta.IntMeta.put))}::int4")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""minqty""""), fr"${fromWrite(value: Int)(new Write.Single(Meta.IntMeta.put))}::int4")) }, unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -99,7 +99,7 @@ class SpecialofferRepoImpl extends SpecialofferRepo { sql"""select "specialofferid", "description", "discountpct", "type", "category", "startdate"::text, "enddate"::text, "minqty", "maxqty", "rowguid", "modifieddate"::text from "sales"."specialoffer"""".query(using SpecialofferRow.read).stream } override def selectById(specialofferid: SpecialofferId): ConnectionIO[Option[SpecialofferRow]] = { - sql"""select "specialofferid", "description", "discountpct", "type", "category", "startdate"::text, "enddate"::text, "minqty", "maxqty", "rowguid", "modifieddate"::text from "sales"."specialoffer" where "specialofferid" = ${fromWrite(specialofferid)(Write.fromPut(SpecialofferId.put))}""".query(using SpecialofferRow.read).option + sql"""select "specialofferid", "description", "discountpct", "type", "category", "startdate"::text, "enddate"::text, "minqty", "maxqty", "rowguid", "modifieddate"::text from "sales"."specialoffer" where "specialofferid" = ${fromWrite(specialofferid)(new Write.Single(SpecialofferId.put))}""".query(using SpecialofferRow.read).option } override def selectByIds(specialofferids: Array[SpecialofferId]): Stream[ConnectionIO, SpecialofferRow] = { sql"""select "specialofferid", "description", "discountpct", "type", "category", "startdate"::text, "enddate"::text, "minqty", "maxqty", "rowguid", "modifieddate"::text from "sales"."specialoffer" where "specialofferid" = ANY(${specialofferids})""".query(using SpecialofferRow.read).stream @@ -116,17 +116,17 @@ class SpecialofferRepoImpl extends SpecialofferRepo { override def update(row: SpecialofferRow): ConnectionIO[Boolean] = { val specialofferid = row.specialofferid sql"""update "sales"."specialoffer" - set "description" = ${fromWrite(row.description)(Write.fromPut(Meta.StringMeta.put))}, - "discountpct" = ${fromWrite(row.discountpct)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - "type" = ${fromWrite(row.`type`)(Write.fromPut(Meta.StringMeta.put))}, - "category" = ${fromWrite(row.category)(Write.fromPut(Meta.StringMeta.put))}, - "startdate" = ${fromWrite(row.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "enddate" = ${fromWrite(row.enddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - "minqty" = ${fromWrite(row.minqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - "maxqty" = ${fromWrite(row.maxqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "specialofferid" = ${fromWrite(specialofferid)(Write.fromPut(SpecialofferId.put))}""" + set "description" = ${fromWrite(row.description)(new Write.Single(Meta.StringMeta.put))}, + "discountpct" = ${fromWrite(row.discountpct)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + "type" = ${fromWrite(row.`type`)(new Write.Single(Meta.StringMeta.put))}, + "category" = ${fromWrite(row.category)(new Write.Single(Meta.StringMeta.put))}, + "startdate" = ${fromWrite(row.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "enddate" = ${fromWrite(row.enddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + "minqty" = ${fromWrite(row.minqty)(new Write.Single(Meta.IntMeta.put))}::int4, + "maxqty" = ${fromWrite(row.maxqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "specialofferid" = ${fromWrite(specialofferid)(new Write.Single(SpecialofferId.put))}""" .update .run .map(_ > 0) @@ -134,17 +134,17 @@ class SpecialofferRepoImpl extends SpecialofferRepo { override def upsert(unsaved: SpecialofferRow): ConnectionIO[SpecialofferRow] = { sql"""insert into "sales"."specialoffer"("specialofferid", "description", "discountpct", "type", "category", "startdate", "enddate", "minqty", "maxqty", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, - ${fromWrite(unsaved.description)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.discountpct)(Write.fromPut(Meta.ScalaBigDecimalMeta.put))}::numeric, - ${fromWrite(unsaved.`type`)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.category)(Write.fromPut(Meta.StringMeta.put))}, - ${fromWrite(unsaved.startdate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.enddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp, - ${fromWrite(unsaved.minqty)(Write.fromPut(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.maxqty)(Write.fromPutOption(Meta.IntMeta.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, + ${fromWrite(unsaved.description)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.discountpct)(new Write.Single(Meta.ScalaBigDecimalMeta.put))}::numeric, + ${fromWrite(unsaved.`type`)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.category)(new Write.Single(Meta.StringMeta.put))}, + ${fromWrite(unsaved.startdate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.enddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp, + ${fromWrite(unsaved.minqty)(new Write.Single(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.maxqty)(new Write.SingleOpt(Meta.IntMeta.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("specialofferid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRow.scala index 11ce559d41..7aea25c0af 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialoffer/SpecialofferRow.scala @@ -10,14 +10,12 @@ package specialoffer import adventureworks.customtypes.Defaulted import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.specialoffer Sale discounts lookup table. @@ -62,34 +60,33 @@ case class SpecialofferRow( object SpecialofferRow { implicit lazy val decoder: Decoder[SpecialofferRow] = Decoder.forProduct11[SpecialofferRow, SpecialofferId, /* max 255 chars */ String, BigDecimal, /* max 50 chars */ String, /* max 50 chars */ String, TypoLocalDateTime, TypoLocalDateTime, Int, Option[Int], TypoUUID, TypoLocalDateTime]("specialofferid", "description", "discountpct", "type", "category", "startdate", "enddate", "minqty", "maxqty", "rowguid", "modifieddate")(SpecialofferRow.apply)(SpecialofferId.decoder, Decoder.decodeString, Decoder.decodeBigDecimal, Decoder.decodeString, Decoder.decodeString, TypoLocalDateTime.decoder, TypoLocalDateTime.decoder, Decoder.decodeInt, Decoder.decodeOption(Decoder.decodeInt), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SpecialofferRow] = Encoder.forProduct11[SpecialofferRow, SpecialofferId, /* max 255 chars */ String, BigDecimal, /* max 50 chars */ String, /* max 50 chars */ String, TypoLocalDateTime, TypoLocalDateTime, Int, Option[Int], TypoUUID, TypoLocalDateTime]("specialofferid", "description", "discountpct", "type", "category", "startdate", "enddate", "minqty", "maxqty", "rowguid", "modifieddate")(x => (x.specialofferid, x.description, x.discountpct, x.`type`, x.category, x.startdate, x.enddate, x.minqty, x.maxqty, x.rowguid, x.modifieddate))(SpecialofferId.encoder, Encoder.encodeString, Encoder.encodeBigDecimal, Encoder.encodeString, Encoder.encodeString, TypoLocalDateTime.encoder, TypoLocalDateTime.encoder, Encoder.encodeInt, Encoder.encodeOption(Encoder.encodeInt), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SpecialofferRow] = new Read[SpecialofferRow]( - gets = List( - (SpecialofferId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.IntMeta.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SpecialofferRow( - specialofferid = SpecialofferId.get.unsafeGetNonNullable(rs, i + 0), - description = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 1), - discountpct = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 2), - `type` = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - category = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 4), - startdate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5), - enddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 6), - minqty = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 7), - maxqty = Meta.IntMeta.get.unsafeGetNullable(rs, i + 8), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 9), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 10) + implicit lazy val read: Read[SpecialofferRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SpecialofferRow( + specialofferid = arr(0).asInstanceOf[SpecialofferId], + description = arr(1).asInstanceOf[/* max 255 chars */ String], + discountpct = arr(2).asInstanceOf[BigDecimal], + `type` = arr(3).asInstanceOf[/* max 50 chars */ String], + category = arr(4).asInstanceOf[/* max 50 chars */ String], + startdate = arr(5).asInstanceOf[TypoLocalDateTime], + enddate = arr(6).asInstanceOf[TypoLocalDateTime], + minqty = arr(7).asInstanceOf[Int], + maxqty = arr(8).asInstanceOf[Option[Int]], + rowguid = arr(9).asInstanceOf[TypoUUID], + modifieddate = arr(10).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SpecialofferRow] = Text.instance[SpecialofferRow]{ (row, sb) => SpecialofferId.text.unsafeEncode(row.specialofferid, sb) sb.append(Text.DELIMETER) @@ -113,44 +110,18 @@ object SpecialofferRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SpecialofferRow] = new Write[SpecialofferRow]( - puts = List((SpecialofferId.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (Meta.StringMeta.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.NoNulls), - (Meta.IntMeta.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.specialofferid, x.description, x.discountpct, x.`type`, x.category, x.startdate, x.enddate, x.minqty, x.maxqty, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SpecialofferId.put.unsafeSetNonNullable(rs, i + 0, a.specialofferid) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 1, a.description) - Meta.ScalaBigDecimalMeta.put.unsafeSetNonNullable(rs, i + 2, a.discountpct) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 3, a.`type`) - Meta.StringMeta.put.unsafeSetNonNullable(rs, i + 4, a.category) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.startdate) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 6, a.enddate) - Meta.IntMeta.put.unsafeSetNonNullable(rs, i + 7, a.minqty) - Meta.IntMeta.put.unsafeSetNullable(rs, i + 8, a.maxqty) - TypoUUID.put.unsafeSetNonNullable(rs, i + 9, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 10, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SpecialofferId.put.unsafeUpdateNonNullable(ps, i + 0, a.specialofferid) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 1, a.description) - Meta.ScalaBigDecimalMeta.put.unsafeUpdateNonNullable(ps, i + 2, a.discountpct) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 3, a.`type`) - Meta.StringMeta.put.unsafeUpdateNonNullable(ps, i + 4, a.category) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.startdate) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 6, a.enddate) - Meta.IntMeta.put.unsafeUpdateNonNullable(ps, i + 7, a.minqty) - Meta.IntMeta.put.unsafeUpdateNullable(ps, i + 8, a.maxqty) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 9, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 10, a.modifieddate) - } + implicit lazy val write: Write[SpecialofferRow] = new Write.Composite[SpecialofferRow]( + List(new Write.Single(SpecialofferId.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.ScalaBigDecimalMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(Meta.StringMeta.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(TypoLocalDateTime.put), + new Write.Single(Meta.IntMeta.put), + new Write.Single(Meta.IntMeta.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.specialofferid, a.description, a.discountpct, a.`type`, a.category, a.startdate, a.enddate, a.minqty, a.maxqty, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRepoImpl.scala index a13025391f..031ac3c28b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRepoImpl.scala @@ -31,7 +31,7 @@ class SpecialofferproductRepoImpl extends SpecialofferproductRepo { DeleteBuilder(""""sales"."specialofferproduct"""", SpecialofferproductFields.structure) } override def deleteById(compositeId: SpecialofferproductId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."specialofferproduct" where "specialofferid" = ${fromWrite(compositeId.specialofferid)(Write.fromPut(SpecialofferId.put))} AND "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."specialofferproduct" where "specialofferid" = ${fromWrite(compositeId.specialofferid)(new Write.Single(SpecialofferId.put))} AND "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))}""".update.run.map(_ > 0) } override def deleteByIds(compositeIds: Array[SpecialofferproductId]): ConnectionIO[Int] = { val specialofferid = compositeIds.map(_.specialofferid) @@ -45,21 +45,21 @@ class SpecialofferproductRepoImpl extends SpecialofferproductRepo { } override def insert(unsaved: SpecialofferproductRow): ConnectionIO[SpecialofferproductRow] = { sql"""insert into "sales"."specialofferproduct"("specialofferid", "productid", "rowguid", "modifieddate") - values (${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "specialofferid", "productid", "rowguid", "modifieddate"::text """.query(using SpecialofferproductRow.read).unique } override def insert(unsaved: SpecialofferproductRowUnsaved): ConnectionIO[SpecialofferproductRow] = { val fs = List( - Some((Fragment.const0(s""""specialofferid""""), fr"${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4")), - Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4")), + Some((Fragment.const0(s""""specialofferid""""), fr"${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4")), + Some((Fragment.const0(s""""productid""""), fr"${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -91,7 +91,7 @@ class SpecialofferproductRepoImpl extends SpecialofferproductRepo { sql"""select "specialofferid", "productid", "rowguid", "modifieddate"::text from "sales"."specialofferproduct"""".query(using SpecialofferproductRow.read).stream } override def selectById(compositeId: SpecialofferproductId): ConnectionIO[Option[SpecialofferproductRow]] = { - sql"""select "specialofferid", "productid", "rowguid", "modifieddate"::text from "sales"."specialofferproduct" where "specialofferid" = ${fromWrite(compositeId.specialofferid)(Write.fromPut(SpecialofferId.put))} AND "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))}""".query(using SpecialofferproductRow.read).option + sql"""select "specialofferid", "productid", "rowguid", "modifieddate"::text from "sales"."specialofferproduct" where "specialofferid" = ${fromWrite(compositeId.specialofferid)(new Write.Single(SpecialofferId.put))} AND "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))}""".query(using SpecialofferproductRow.read).option } override def selectByIds(compositeIds: Array[SpecialofferproductId]): Stream[ConnectionIO, SpecialofferproductRow] = { val specialofferid = compositeIds.map(_.specialofferid) @@ -115,9 +115,9 @@ class SpecialofferproductRepoImpl extends SpecialofferproductRepo { override def update(row: SpecialofferproductRow): ConnectionIO[Boolean] = { val compositeId = row.compositeId sql"""update "sales"."specialofferproduct" - set "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "specialofferid" = ${fromWrite(compositeId.specialofferid)(Write.fromPut(SpecialofferId.put))} AND "productid" = ${fromWrite(compositeId.productid)(Write.fromPut(ProductId.put))}""" + set "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "specialofferid" = ${fromWrite(compositeId.specialofferid)(new Write.Single(SpecialofferId.put))} AND "productid" = ${fromWrite(compositeId.productid)(new Write.Single(ProductId.put))}""" .update .run .map(_ > 0) @@ -125,10 +125,10 @@ class SpecialofferproductRepoImpl extends SpecialofferproductRepo { override def upsert(unsaved: SpecialofferproductRow): ConnectionIO[SpecialofferproductRow] = { sql"""insert into "sales"."specialofferproduct"("specialofferid", "productid", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.specialofferid)(Write.fromPut(SpecialofferId.put))}::int4, - ${fromWrite(unsaved.productid)(Write.fromPut(ProductId.put))}::int4, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.specialofferid)(new Write.Single(SpecialofferId.put))}::int4, + ${fromWrite(unsaved.productid)(new Write.Single(ProductId.put))}::int4, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("specialofferid", "productid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRow.scala index 8e85aacfc6..5526c84ca0 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/specialofferproduct/SpecialofferproductRow.scala @@ -12,13 +12,11 @@ import adventureworks.customtypes.TypoLocalDateTime import adventureworks.customtypes.TypoUUID import adventureworks.production.product.ProductId import adventureworks.sales.specialoffer.SpecialofferId -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.specialofferproduct Cross-reference table mapping products to special offer discounts. @@ -46,20 +44,19 @@ object SpecialofferproductRow { new SpecialofferproductRow(compositeId.specialofferid, compositeId.productid, rowguid, modifieddate) implicit lazy val decoder: Decoder[SpecialofferproductRow] = Decoder.forProduct4[SpecialofferproductRow, SpecialofferId, ProductId, TypoUUID, TypoLocalDateTime]("specialofferid", "productid", "rowguid", "modifieddate")(SpecialofferproductRow.apply)(SpecialofferId.decoder, ProductId.decoder, TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[SpecialofferproductRow] = Encoder.forProduct4[SpecialofferproductRow, SpecialofferId, ProductId, TypoUUID, TypoLocalDateTime]("specialofferid", "productid", "rowguid", "modifieddate")(x => (x.specialofferid, x.productid, x.rowguid, x.modifieddate))(SpecialofferId.encoder, ProductId.encoder, TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[SpecialofferproductRow] = new Read[SpecialofferproductRow]( - gets = List( - (SpecialofferId.get, Nullability.NoNulls), - (ProductId.get, Nullability.NoNulls), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => SpecialofferproductRow( - specialofferid = SpecialofferId.get.unsafeGetNonNullable(rs, i + 0), - productid = ProductId.get.unsafeGetNonNullable(rs, i + 1), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 2), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 3) + implicit lazy val read: Read[SpecialofferproductRow] = new Read.CompositeOfInstances(Array( + new Read.Single(SpecialofferId.get).asInstanceOf[Read[Any]], + new Read.Single(ProductId.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + SpecialofferproductRow( + specialofferid = arr(0).asInstanceOf[SpecialofferId], + productid = arr(1).asInstanceOf[ProductId], + rowguid = arr(2).asInstanceOf[TypoUUID], + modifieddate = arr(3).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[SpecialofferproductRow] = Text.instance[SpecialofferproductRow]{ (row, sb) => SpecialofferId.text.unsafeEncode(row.specialofferid, sb) sb.append(Text.DELIMETER) @@ -69,23 +66,11 @@ object SpecialofferproductRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[SpecialofferproductRow] = new Write[SpecialofferproductRow]( - puts = List((SpecialofferId.put, Nullability.NoNulls), - (ProductId.put, Nullability.NoNulls), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.specialofferid, x.productid, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - SpecialofferId.put.unsafeSetNonNullable(rs, i + 0, a.specialofferid) - ProductId.put.unsafeSetNonNullable(rs, i + 1, a.productid) - TypoUUID.put.unsafeSetNonNullable(rs, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 3, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - SpecialofferId.put.unsafeUpdateNonNullable(ps, i + 0, a.specialofferid) - ProductId.put.unsafeUpdateNonNullable(ps, i + 1, a.productid) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 2, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 3, a.modifieddate) - } + implicit lazy val write: Write[SpecialofferproductRow] = new Write.Composite[SpecialofferproductRow]( + List(new Write.Single(SpecialofferId.put), + new Write.Single(ProductId.put), + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.specialofferid, a.productid, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRepoImpl.scala index 0580c60ae7..d0dd9569b9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRepoImpl.scala @@ -32,30 +32,30 @@ class StoreRepoImpl extends StoreRepo { DeleteBuilder(""""sales"."store"""", StoreFields.structure) } override def deleteById(businessentityid: BusinessentityId): ConnectionIO[Boolean] = { - sql"""delete from "sales"."store" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".update.run.map(_ > 0) + sql"""delete from "sales"."store" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".update.run.map(_ > 0) } override def deleteByIds(businessentityids: Array[BusinessentityId]): ConnectionIO[Int] = { sql"""delete from "sales"."store" where "businessentityid" = ANY(${businessentityids})""".update.run } override def insert(unsaved: StoreRow): ConnectionIO[StoreRow] = { sql"""insert into "sales"."store"("businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate") - values (${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, ${fromWrite(unsaved.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4, ${fromWrite(unsaved.demographics)(Write.fromPutOption(TypoXml.put))}::xml, ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp) + values (${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, ${fromWrite(unsaved.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4, ${fromWrite(unsaved.demographics)(new Write.SingleOpt(TypoXml.put))}::xml, ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp) returning "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate"::text """.query(using StoreRow.read).unique } override def insert(unsaved: StoreRowUnsaved): ConnectionIO[StoreRow] = { val fs = List( - Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar")), - Some((Fragment.const0(s""""salespersonid""""), fr"${fromWrite(unsaved.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4")), - Some((Fragment.const0(s""""demographics""""), fr"${fromWrite(unsaved.demographics)(Write.fromPutOption(TypoXml.put))}::xml")), + Some((Fragment.const0(s""""businessentityid""""), fr"${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""name""""), fr"${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar")), + Some((Fragment.const0(s""""salespersonid""""), fr"${fromWrite(unsaved.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4")), + Some((Fragment.const0(s""""demographics""""), fr"${fromWrite(unsaved.demographics)(new Write.SingleOpt(TypoXml.put))}::xml")), unsaved.rowguid match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(Write.fromPut(TypoUUID.put))}::uuid")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""rowguid""""), fr"${fromWrite(value: TypoUUID)(new Write.Single(TypoUUID.put))}::uuid")) }, unsaved.modifieddate match { case Defaulted.UseDefault => None - case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(Write.fromPut(TypoLocalDateTime.put))}::timestamp")) + case Defaulted.Provided(value) => Some((Fragment.const0(s""""modifieddate""""), fr"${fromWrite(value: TypoLocalDateTime)(new Write.Single(TypoLocalDateTime.put))}::timestamp")) } ).flatten @@ -87,7 +87,7 @@ class StoreRepoImpl extends StoreRepo { sql"""select "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate"::text from "sales"."store"""".query(using StoreRow.read).stream } override def selectById(businessentityid: BusinessentityId): ConnectionIO[Option[StoreRow]] = { - sql"""select "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate"::text from "sales"."store" where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""".query(using StoreRow.read).option + sql"""select "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate"::text from "sales"."store" where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""".query(using StoreRow.read).option } override def selectByIds(businessentityids: Array[BusinessentityId]): Stream[ConnectionIO, StoreRow] = { sql"""select "businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate"::text from "sales"."store" where "businessentityid" = ANY(${businessentityids})""".query(using StoreRow.read).stream @@ -104,12 +104,12 @@ class StoreRepoImpl extends StoreRepo { override def update(row: StoreRow): ConnectionIO[Boolean] = { val businessentityid = row.businessentityid sql"""update "sales"."store" - set "name" = ${fromWrite(row.name)(Write.fromPut(Name.put))}::varchar, - "salespersonid" = ${fromWrite(row.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4, - "demographics" = ${fromWrite(row.demographics)(Write.fromPutOption(TypoXml.put))}::xml, - "rowguid" = ${fromWrite(row.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - "modifieddate" = ${fromWrite(row.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp - where "businessentityid" = ${fromWrite(businessentityid)(Write.fromPut(BusinessentityId.put))}""" + set "name" = ${fromWrite(row.name)(new Write.Single(Name.put))}::varchar, + "salespersonid" = ${fromWrite(row.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + "demographics" = ${fromWrite(row.demographics)(new Write.SingleOpt(TypoXml.put))}::xml, + "rowguid" = ${fromWrite(row.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + "modifieddate" = ${fromWrite(row.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp + where "businessentityid" = ${fromWrite(businessentityid)(new Write.Single(BusinessentityId.put))}""" .update .run .map(_ > 0) @@ -117,12 +117,12 @@ class StoreRepoImpl extends StoreRepo { override def upsert(unsaved: StoreRow): ConnectionIO[StoreRow] = { sql"""insert into "sales"."store"("businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate") values ( - ${fromWrite(unsaved.businessentityid)(Write.fromPut(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.name)(Write.fromPut(Name.put))}::varchar, - ${fromWrite(unsaved.salespersonid)(Write.fromPutOption(BusinessentityId.put))}::int4, - ${fromWrite(unsaved.demographics)(Write.fromPutOption(TypoXml.put))}::xml, - ${fromWrite(unsaved.rowguid)(Write.fromPut(TypoUUID.put))}::uuid, - ${fromWrite(unsaved.modifieddate)(Write.fromPut(TypoLocalDateTime.put))}::timestamp + ${fromWrite(unsaved.businessentityid)(new Write.Single(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.name)(new Write.Single(Name.put))}::varchar, + ${fromWrite(unsaved.salespersonid)(new Write.SingleOpt(BusinessentityId.put))}::int4, + ${fromWrite(unsaved.demographics)(new Write.SingleOpt(TypoXml.put))}::xml, + ${fromWrite(unsaved.rowguid)(new Write.Single(TypoUUID.put))}::uuid, + ${fromWrite(unsaved.modifieddate)(new Write.Single(TypoLocalDateTime.put))}::timestamp ) on conflict ("businessentityid") do update set diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRow.scala index bd34ceac9b..15521f7474 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/store/StoreRow.scala @@ -13,13 +13,11 @@ import adventureworks.customtypes.TypoUUID import adventureworks.customtypes.TypoXml import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.postgres.Text import doobie.util.Read import doobie.util.Write import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** Table: sales.store Customers (resellers) of Adventure Works products. @@ -48,24 +46,23 @@ case class StoreRow( object StoreRow { implicit lazy val decoder: Decoder[StoreRow] = Decoder.forProduct6[StoreRow, BusinessentityId, Name, Option[BusinessentityId], Option[TypoXml], TypoUUID, TypoLocalDateTime]("businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate")(StoreRow.apply)(BusinessentityId.decoder, Name.decoder, Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(TypoXml.decoder), TypoUUID.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[StoreRow] = Encoder.forProduct6[StoreRow, BusinessentityId, Name, Option[BusinessentityId], Option[TypoXml], TypoUUID, TypoLocalDateTime]("businessentityid", "name", "salespersonid", "demographics", "rowguid", "modifieddate")(x => (x.businessentityid, x.name, x.salespersonid, x.demographics, x.rowguid, x.modifieddate))(BusinessentityId.encoder, Name.encoder, Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(TypoXml.encoder), TypoUUID.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[StoreRow] = new Read[StoreRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (BusinessentityId.get, Nullability.Nullable), - (TypoXml.get, Nullability.Nullable), - (TypoUUID.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => StoreRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - salespersonid = BusinessentityId.get.unsafeGetNullable(rs, i + 2), - demographics = TypoXml.get.unsafeGetNullable(rs, i + 3), - rowguid = TypoUUID.get.unsafeGetNonNullable(rs, i + 4), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 5) + implicit lazy val read: Read[StoreRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]], + new Read.Single(TypoUUID.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + StoreRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + name = arr(1).asInstanceOf[Name], + salespersonid = arr(2).asInstanceOf[Option[BusinessentityId]], + demographics = arr(3).asInstanceOf[Option[TypoXml]], + rowguid = arr(4).asInstanceOf[TypoUUID], + modifieddate = arr(5).asInstanceOf[TypoLocalDateTime] ) - ) + } implicit lazy val text: Text[StoreRow] = Text.instance[StoreRow]{ (row, sb) => BusinessentityId.text.unsafeEncode(row.businessentityid, sb) sb.append(Text.DELIMETER) @@ -79,29 +76,13 @@ object StoreRow { sb.append(Text.DELIMETER) TypoLocalDateTime.text.unsafeEncode(row.modifieddate, sb) } - implicit lazy val write: Write[StoreRow] = new Write[StoreRow]( - puts = List((BusinessentityId.put, Nullability.NoNulls), - (Name.put, Nullability.NoNulls), - (BusinessentityId.put, Nullability.Nullable), - (TypoXml.put, Nullability.Nullable), - (TypoUUID.put, Nullability.NoNulls), - (TypoLocalDateTime.put, Nullability.NoNulls)), - toList = x => List(x.businessentityid, x.name, x.salespersonid, x.demographics, x.rowguid, x.modifieddate), - unsafeSet = (rs, i, a) => { - BusinessentityId.put.unsafeSetNonNullable(rs, i + 0, a.businessentityid) - Name.put.unsafeSetNonNullable(rs, i + 1, a.name) - BusinessentityId.put.unsafeSetNullable(rs, i + 2, a.salespersonid) - TypoXml.put.unsafeSetNullable(rs, i + 3, a.demographics) - TypoUUID.put.unsafeSetNonNullable(rs, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeSetNonNullable(rs, i + 5, a.modifieddate) - }, - unsafeUpdate = (ps, i, a) => { - BusinessentityId.put.unsafeUpdateNonNullable(ps, i + 0, a.businessentityid) - Name.put.unsafeUpdateNonNullable(ps, i + 1, a.name) - BusinessentityId.put.unsafeUpdateNullable(ps, i + 2, a.salespersonid) - TypoXml.put.unsafeUpdateNullable(ps, i + 3, a.demographics) - TypoUUID.put.unsafeUpdateNonNullable(ps, i + 4, a.rowguid) - TypoLocalDateTime.put.unsafeUpdateNonNullable(ps, i + 5, a.modifieddate) - } + implicit lazy val write: Write[StoreRow] = new Write.Composite[StoreRow]( + List(new Write.Single(BusinessentityId.put), + new Write.Single(Name.put), + new Write.Single(BusinessentityId.put).toOpt, + new Write.Single(TypoXml.put).toOpt, + new Write.Single(TypoUUID.put), + new Write.Single(TypoLocalDateTime.put)), + a => List(a.businessentityid, a.name, a.salespersonid, a.demographics, a.rowguid, a.modifieddate) ) } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vindividualcustomer/VindividualcustomerViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vindividualcustomer/VindividualcustomerViewRow.scala index 0eb811332a..ff7c6a58f9 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vindividualcustomer/VindividualcustomerViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vindividualcustomer/VindividualcustomerViewRow.scala @@ -12,12 +12,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.Phone import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vindividualcustomer */ case class VindividualcustomerViewRow( @@ -62,46 +60,45 @@ case class VindividualcustomerViewRow( object VindividualcustomerViewRow { implicit lazy val decoder: Decoder[VindividualcustomerViewRow] = Decoder.forProduct18[VindividualcustomerViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int, Name, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name, Option[TypoXml]]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion", "addresstype", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname", "demographics")(VindividualcustomerViewRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Phone.decoder), Decoder.decodeOption(Name.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt, Name.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Decoder.decodeString, Name.decoder, Decoder.decodeOption(TypoXml.decoder)) implicit lazy val encoder: Encoder[VindividualcustomerViewRow] = Encoder.forProduct18[VindividualcustomerViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int, Name, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name, Option[TypoXml]]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion", "addresstype", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname", "demographics")(x => (x.businessentityid, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.phonenumber, x.phonenumbertype, x.emailaddress, x.emailpromotion, x.addresstype, x.addressline1, x.addressline2, x.city, x.stateprovincename, x.postalcode, x.countryregionname, x.demographics))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Phone.encoder), Encoder.encodeOption(Name.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt, Name.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Encoder.encodeString, Name.encoder, Encoder.encodeOption(TypoXml.encoder)) - implicit lazy val read: Read[VindividualcustomerViewRow] = new Read[VindividualcustomerViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Phone.get, Nullability.Nullable), - (Name.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoXml.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VindividualcustomerViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 2), - middlename = Name.get.unsafeGetNullable(rs, i + 3), - lastname = Name.get.unsafeGetNonNullable(rs, i + 4), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - phonenumber = Phone.get.unsafeGetNullable(rs, i + 6), - phonenumbertype = Name.get.unsafeGetNullable(rs, i + 7), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 8), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 9), - addresstype = Name.get.unsafeGetNonNullable(rs, i + 10), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 11), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 12), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 13), - stateprovincename = Name.get.unsafeGetNonNullable(rs, i + 14), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 15), - countryregionname = Name.get.unsafeGetNonNullable(rs, i + 16), - demographics = TypoXml.get.unsafeGetNullable(rs, i + 17) + implicit lazy val read: Read[VindividualcustomerViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Phone.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoXml.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VindividualcustomerViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + title = arr(1).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(2).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(3).asInstanceOf[Option[Name]], + lastname = arr(4).asInstanceOf[Name], + suffix = arr(5).asInstanceOf[Option[/* max 10 chars */ String]], + phonenumber = arr(6).asInstanceOf[Option[Phone]], + phonenumbertype = arr(7).asInstanceOf[Option[Name]], + emailaddress = arr(8).asInstanceOf[Option[/* max 50 chars */ String]], + emailpromotion = arr(9).asInstanceOf[Int], + addresstype = arr(10).asInstanceOf[Name], + addressline1 = arr(11).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(12).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(13).asInstanceOf[/* max 30 chars */ String], + stateprovincename = arr(14).asInstanceOf[Name], + postalcode = arr(15).asInstanceOf[/* max 15 chars */ String], + countryregionname = arr(16).asInstanceOf[Name], + demographics = arr(17).asInstanceOf[Option[TypoXml]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vpersondemographics/VpersondemographicsViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vpersondemographics/VpersondemographicsViewRow.scala index 6da8de5e4a..ae012f9123 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vpersondemographics/VpersondemographicsViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vpersondemographics/VpersondemographicsViewRow.scala @@ -10,12 +10,10 @@ package vpersondemographics import adventureworks.customtypes.TypoLocalDate import adventureworks.customtypes.TypoMoney import adventureworks.person.businessentity.BusinessentityId -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vpersondemographics */ case class VpersondemographicsViewRow( @@ -38,36 +36,35 @@ case class VpersondemographicsViewRow( object VpersondemographicsViewRow { implicit lazy val decoder: Decoder[VpersondemographicsViewRow] = Decoder.forProduct13[VpersondemographicsViewRow, BusinessentityId, /* nullability unknown */ Option[TypoMoney], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[/* max 1 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 1 chars */ String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[Boolean], /* nullability unknown */ Option[Int]]("businessentityid", "totalpurchaseytd", "datefirstpurchase", "birthdate", "maritalstatus", "yearlyincome", "gender", "totalchildren", "numberchildrenathome", "education", "occupation", "homeownerflag", "numbercarsowned")(VpersondemographicsViewRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(TypoMoney.decoder), Decoder.decodeOption(TypoLocalDate.decoder), Decoder.decodeOption(TypoLocalDate.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeBoolean), Decoder.decodeOption(Decoder.decodeInt)) implicit lazy val encoder: Encoder[VpersondemographicsViewRow] = Encoder.forProduct13[VpersondemographicsViewRow, BusinessentityId, /* nullability unknown */ Option[TypoMoney], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[TypoLocalDate], /* nullability unknown */ Option[/* max 1 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 1 chars */ String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[Boolean], /* nullability unknown */ Option[Int]]("businessentityid", "totalpurchaseytd", "datefirstpurchase", "birthdate", "maritalstatus", "yearlyincome", "gender", "totalchildren", "numberchildrenathome", "education", "occupation", "homeownerflag", "numbercarsowned")(x => (x.businessentityid, x.totalpurchaseytd, x.datefirstpurchase, x.birthdate, x.maritalstatus, x.yearlyincome, x.gender, x.totalchildren, x.numberchildrenathome, x.education, x.occupation, x.homeownerflag, x.numbercarsowned))(BusinessentityId.encoder, Encoder.encodeOption(TypoMoney.encoder), Encoder.encodeOption(TypoLocalDate.encoder), Encoder.encodeOption(TypoLocalDate.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeBoolean), Encoder.encodeOption(Encoder.encodeInt)) - implicit lazy val read: Read[VpersondemographicsViewRow] = new Read[VpersondemographicsViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (TypoMoney.get, Nullability.Nullable), - (TypoLocalDate.get, Nullability.Nullable), - (TypoLocalDate.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.BooleanMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VpersondemographicsViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - totalpurchaseytd = TypoMoney.get.unsafeGetNullable(rs, i + 1), - datefirstpurchase = TypoLocalDate.get.unsafeGetNullable(rs, i + 2), - birthdate = TypoLocalDate.get.unsafeGetNullable(rs, i + 3), - maritalstatus = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - yearlyincome = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - gender = Meta.StringMeta.get.unsafeGetNullable(rs, i + 6), - totalchildren = Meta.IntMeta.get.unsafeGetNullable(rs, i + 7), - numberchildrenathome = Meta.IntMeta.get.unsafeGetNullable(rs, i + 8), - education = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - occupation = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - homeownerflag = Meta.BooleanMeta.get.unsafeGetNullable(rs, i + 11), - numbercarsowned = Meta.IntMeta.get.unsafeGetNullable(rs, i + 12) + implicit lazy val read: Read[VpersondemographicsViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoMoney.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoLocalDate.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.BooleanMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VpersondemographicsViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + totalpurchaseytd = arr(1).asInstanceOf[/* nullability unknown */ Option[TypoMoney]], + datefirstpurchase = arr(2).asInstanceOf[/* nullability unknown */ Option[TypoLocalDate]], + birthdate = arr(3).asInstanceOf[/* nullability unknown */ Option[TypoLocalDate]], + maritalstatus = arr(4).asInstanceOf[/* nullability unknown */ Option[/* max 1 chars */ String]], + yearlyincome = arr(5).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + gender = arr(6).asInstanceOf[/* nullability unknown */ Option[/* max 1 chars */ String]], + totalchildren = arr(7).asInstanceOf[/* nullability unknown */ Option[Int]], + numberchildrenathome = arr(8).asInstanceOf[/* nullability unknown */ Option[Int]], + education = arr(9).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + occupation = arr(10).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + homeownerflag = arr(11).asInstanceOf[/* nullability unknown */ Option[Boolean]], + numbercarsowned = arr(12).asInstanceOf[/* nullability unknown */ Option[Int]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalesperson/VsalespersonViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalesperson/VsalespersonViewRow.scala index 9d7c8604f6..d32b5c0b80 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalesperson/VsalespersonViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalesperson/VsalespersonViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.Phone import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vsalesperson */ case class VsalespersonViewRow( @@ -69,54 +67,53 @@ case class VsalespersonViewRow( object VsalespersonViewRow { implicit lazy val decoder: Decoder[VsalespersonViewRow] = Decoder.forProduct22[VsalespersonViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], /* max 50 chars */ String, Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name, Option[Name], Option[/* max 50 chars */ String], Option[BigDecimal], BigDecimal, BigDecimal]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "jobtitle", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname", "territoryname", "territorygroup", "salesquota", "salesytd", "saleslastyear")(VsalespersonViewRow.apply)(BusinessentityId.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Decoder.decodeOption(Phone.decoder), Decoder.decodeOption(Name.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Decoder.decodeString, Name.decoder, Decoder.decodeOption(Name.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeBigDecimal, Decoder.decodeBigDecimal) implicit lazy val encoder: Encoder[VsalespersonViewRow] = Encoder.forProduct22[VsalespersonViewRow, BusinessentityId, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], /* max 50 chars */ String, Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name, Option[Name], Option[/* max 50 chars */ String], Option[BigDecimal], BigDecimal, BigDecimal]("businessentityid", "title", "firstname", "middlename", "lastname", "suffix", "jobtitle", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname", "territoryname", "territorygroup", "salesquota", "salesytd", "saleslastyear")(x => (x.businessentityid, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.jobtitle, x.phonenumber, x.phonenumbertype, x.emailaddress, x.emailpromotion, x.addressline1, x.addressline2, x.city, x.stateprovincename, x.postalcode, x.countryregionname, x.territoryname, x.territorygroup, x.salesquota, x.salesytd, x.saleslastyear))(BusinessentityId.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Encoder.encodeOption(Phone.encoder), Encoder.encodeOption(Name.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Encoder.encodeString, Name.encoder, Encoder.encodeOption(Name.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeBigDecimal, Encoder.encodeBigDecimal) - implicit lazy val read: Read[VsalespersonViewRow] = new Read[VsalespersonViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Phone.get, Nullability.Nullable), - (Name.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VsalespersonViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 2), - middlename = Name.get.unsafeGetNullable(rs, i + 3), - lastname = Name.get.unsafeGetNonNullable(rs, i + 4), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 6), - phonenumber = Phone.get.unsafeGetNullable(rs, i + 7), - phonenumbertype = Name.get.unsafeGetNullable(rs, i + 8), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 10), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 11), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 12), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 13), - stateprovincename = Name.get.unsafeGetNonNullable(rs, i + 14), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 15), - countryregionname = Name.get.unsafeGetNonNullable(rs, i + 16), - territoryname = Name.get.unsafeGetNullable(rs, i + 17), - territorygroup = Meta.StringMeta.get.unsafeGetNullable(rs, i + 18), - salesquota = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 19), - salesytd = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 20), - saleslastyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNonNullable(rs, i + 21) + implicit lazy val read: Read[VsalespersonViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Phone.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VsalespersonViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + title = arr(1).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(2).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(3).asInstanceOf[Option[Name]], + lastname = arr(4).asInstanceOf[Name], + suffix = arr(5).asInstanceOf[Option[/* max 10 chars */ String]], + jobtitle = arr(6).asInstanceOf[/* max 50 chars */ String], + phonenumber = arr(7).asInstanceOf[Option[Phone]], + phonenumbertype = arr(8).asInstanceOf[Option[Name]], + emailaddress = arr(9).asInstanceOf[Option[/* max 50 chars */ String]], + emailpromotion = arr(10).asInstanceOf[Int], + addressline1 = arr(11).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(12).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(13).asInstanceOf[/* max 30 chars */ String], + stateprovincename = arr(14).asInstanceOf[Name], + postalcode = arr(15).asInstanceOf[/* max 15 chars */ String], + countryregionname = arr(16).asInstanceOf[Name], + territoryname = arr(17).asInstanceOf[Option[Name]], + territorygroup = arr(18).asInstanceOf[Option[/* max 50 chars */ String]], + salesquota = arr(19).asInstanceOf[Option[BigDecimal]], + salesytd = arr(20).asInstanceOf[BigDecimal], + saleslastyear = arr(21).asInstanceOf[BigDecimal] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyears/VsalespersonsalesbyfiscalyearsViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyears/VsalespersonsalesbyfiscalyearsViewRow.scala index 7ae7edcdf0..00831fb118 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyears/VsalespersonsalesbyfiscalyearsViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyears/VsalespersonsalesbyfiscalyearsViewRow.scala @@ -7,12 +7,10 @@ package adventureworks package sales package vsalespersonsalesbyfiscalyears -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vsalespersonsalesbyfiscalyears */ case class VsalespersonsalesbyfiscalyearsViewRow( @@ -28,24 +26,23 @@ case class VsalespersonsalesbyfiscalyearsViewRow( object VsalespersonsalesbyfiscalyearsViewRow { implicit lazy val decoder: Decoder[VsalespersonsalesbyfiscalyearsViewRow] = Decoder.forProduct7[VsalespersonsalesbyfiscalyearsViewRow, /* nullability unknown */ Option[Int], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal]]("SalesPersonID", "FullName", "JobTitle", "SalesTerritory", "2012", "2013", "2014")(VsalespersonsalesbyfiscalyearsViewRow.apply)(Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(Decoder.decodeBigDecimal)) implicit lazy val encoder: Encoder[VsalespersonsalesbyfiscalyearsViewRow] = Encoder.forProduct7[VsalespersonsalesbyfiscalyearsViewRow, /* nullability unknown */ Option[Int], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[String], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal]]("SalesPersonID", "FullName", "JobTitle", "SalesTerritory", "2012", "2013", "2014")(x => (x.salesPersonID, x.fullName, x.jobTitle, x.salesTerritory, x.`2012`, x.`2013`, x.`2014`))(Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(Encoder.encodeBigDecimal)) - implicit lazy val read: Read[VsalespersonsalesbyfiscalyearsViewRow] = new Read[VsalespersonsalesbyfiscalyearsViewRow]( - gets = List( - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VsalespersonsalesbyfiscalyearsViewRow( - salesPersonID = Meta.IntMeta.get.unsafeGetNullable(rs, i + 0), - fullName = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - jobTitle = Meta.StringMeta.get.unsafeGetNullable(rs, i + 2), - salesTerritory = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - `2012` = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 4), - `2013` = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 5), - `2014` = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 6) + implicit lazy val read: Read[VsalespersonsalesbyfiscalyearsViewRow] = new Read.CompositeOfInstances(Array( + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VsalespersonsalesbyfiscalyearsViewRow( + salesPersonID = arr(0).asInstanceOf[/* nullability unknown */ Option[Int]], + fullName = arr(1).asInstanceOf[/* nullability unknown */ Option[String]], + jobTitle = arr(2).asInstanceOf[/* nullability unknown */ Option[String]], + salesTerritory = arr(3).asInstanceOf[/* nullability unknown */ Option[String]], + `2012` = arr(4).asInstanceOf[/* nullability unknown */ Option[BigDecimal]], + `2013` = arr(5).asInstanceOf[/* nullability unknown */ Option[BigDecimal]], + `2014` = arr(6).asInstanceOf[/* nullability unknown */ Option[BigDecimal]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyearsdata/VsalespersonsalesbyfiscalyearsdataViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyearsdata/VsalespersonsalesbyfiscalyearsdataViewRow.scala index d1ad7d3687..7d72b078bb 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyearsdata/VsalespersonsalesbyfiscalyearsdataViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vsalespersonsalesbyfiscalyearsdata/VsalespersonsalesbyfiscalyearsdataViewRow.scala @@ -9,12 +9,10 @@ package vsalespersonsalesbyfiscalyearsdata import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vsalespersonsalesbyfiscalyearsdata */ case class VsalespersonsalesbyfiscalyearsdataViewRow( @@ -32,22 +30,21 @@ case class VsalespersonsalesbyfiscalyearsdataViewRow( object VsalespersonsalesbyfiscalyearsdataViewRow { implicit lazy val decoder: Decoder[VsalespersonsalesbyfiscalyearsdataViewRow] = Decoder.forProduct6[VsalespersonsalesbyfiscalyearsdataViewRow, Option[BusinessentityId], /* nullability unknown */ Option[String], /* max 50 chars */ String, Name, /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal]]("salespersonid", "fullname", "jobtitle", "salesterritory", "salestotal", "fiscalyear")(VsalespersonsalesbyfiscalyearsdataViewRow.apply)(Decoder.decodeOption(BusinessentityId.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Decoder.decodeOption(Decoder.decodeBigDecimal), Decoder.decodeOption(Decoder.decodeBigDecimal)) implicit lazy val encoder: Encoder[VsalespersonsalesbyfiscalyearsdataViewRow] = Encoder.forProduct6[VsalespersonsalesbyfiscalyearsdataViewRow, Option[BusinessentityId], /* nullability unknown */ Option[String], /* max 50 chars */ String, Name, /* nullability unknown */ Option[BigDecimal], /* nullability unknown */ Option[BigDecimal]]("salespersonid", "fullname", "jobtitle", "salesterritory", "salestotal", "fiscalyear")(x => (x.salespersonid, x.fullname, x.jobtitle, x.salesterritory, x.salestotal, x.fiscalyear))(Encoder.encodeOption(BusinessentityId.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Encoder.encodeOption(Encoder.encodeBigDecimal), Encoder.encodeOption(Encoder.encodeBigDecimal)) - implicit lazy val read: Read[VsalespersonsalesbyfiscalyearsdataViewRow] = new Read[VsalespersonsalesbyfiscalyearsdataViewRow]( - gets = List( - (BusinessentityId.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable), - (Meta.ScalaBigDecimalMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VsalespersonsalesbyfiscalyearsdataViewRow( - salespersonid = BusinessentityId.get.unsafeGetNullable(rs, i + 0), - fullname = Meta.StringMeta.get.unsafeGetNullable(rs, i + 1), - jobtitle = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 2), - salesterritory = Name.get.unsafeGetNonNullable(rs, i + 3), - salestotal = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 4), - fiscalyear = Meta.ScalaBigDecimalMeta.get.unsafeGetNullable(rs, i + 5) + implicit lazy val read: Read[VsalespersonsalesbyfiscalyearsdataViewRow] = new Read.CompositeOfInstances(Array( + new Read.SingleOpt(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.ScalaBigDecimalMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VsalespersonsalesbyfiscalyearsdataViewRow( + salespersonid = arr(0).asInstanceOf[Option[BusinessentityId]], + fullname = arr(1).asInstanceOf[/* nullability unknown */ Option[String]], + jobtitle = arr(2).asInstanceOf[/* max 50 chars */ String], + salesterritory = arr(3).asInstanceOf[Name], + salestotal = arr(4).asInstanceOf[/* nullability unknown */ Option[BigDecimal]], + fiscalyear = arr(5).asInstanceOf[/* nullability unknown */ Option[BigDecimal]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithaddresses/VstorewithaddressesViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithaddresses/VstorewithaddressesViewRow.scala index 7c198b8bf3..400ebbec2f 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithaddresses/VstorewithaddressesViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithaddresses/VstorewithaddressesViewRow.scala @@ -9,12 +9,10 @@ package vstorewithaddresses import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vstorewithaddresses */ case class VstorewithaddressesViewRow( @@ -41,28 +39,27 @@ case class VstorewithaddressesViewRow( object VstorewithaddressesViewRow { implicit lazy val decoder: Decoder[VstorewithaddressesViewRow] = Decoder.forProduct9[VstorewithaddressesViewRow, BusinessentityId, Name, Name, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name]("businessentityid", "name", "addresstype", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname")(VstorewithaddressesViewRow.apply)(BusinessentityId.decoder, Name.decoder, Name.decoder, Decoder.decodeString, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeString, Name.decoder, Decoder.decodeString, Name.decoder) implicit lazy val encoder: Encoder[VstorewithaddressesViewRow] = Encoder.forProduct9[VstorewithaddressesViewRow, BusinessentityId, Name, Name, /* max 60 chars */ String, Option[/* max 60 chars */ String], /* max 30 chars */ String, Name, /* max 15 chars */ String, Name]("businessentityid", "name", "addresstype", "addressline1", "addressline2", "city", "stateprovincename", "postalcode", "countryregionname")(x => (x.businessentityid, x.name, x.addresstype, x.addressline1, x.addressline2, x.city, x.stateprovincename, x.postalcode, x.countryregionname))(BusinessentityId.encoder, Name.encoder, Name.encoder, Encoder.encodeString, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeString, Name.encoder, Encoder.encodeString, Name.encoder) - implicit lazy val read: Read[VstorewithaddressesViewRow] = new Read[VstorewithaddressesViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VstorewithaddressesViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - addresstype = Name.get.unsafeGetNonNullable(rs, i + 2), - addressline1 = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 3), - addressline2 = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - city = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 5), - stateprovincename = Name.get.unsafeGetNonNullable(rs, i + 6), - postalcode = Meta.StringMeta.get.unsafeGetNonNullable(rs, i + 7), - countryregionname = Name.get.unsafeGetNonNullable(rs, i + 8) + implicit lazy val read: Read[VstorewithaddressesViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VstorewithaddressesViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + name = arr(1).asInstanceOf[Name], + addresstype = arr(2).asInstanceOf[Name], + addressline1 = arr(3).asInstanceOf[/* max 60 chars */ String], + addressline2 = arr(4).asInstanceOf[Option[/* max 60 chars */ String]], + city = arr(5).asInstanceOf[/* max 30 chars */ String], + stateprovincename = arr(6).asInstanceOf[Name], + postalcode = arr(7).asInstanceOf[/* max 15 chars */ String], + countryregionname = arr(8).asInstanceOf[Name] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithcontacts/VstorewithcontactsViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithcontacts/VstorewithcontactsViewRow.scala index 5d8f19b0a2..3adc27e753 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithcontacts/VstorewithcontactsViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithcontacts/VstorewithcontactsViewRow.scala @@ -11,12 +11,10 @@ import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name import adventureworks.public.Phone import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vstorewithcontacts */ case class VstorewithcontactsViewRow( @@ -49,34 +47,33 @@ case class VstorewithcontactsViewRow( object VstorewithcontactsViewRow { implicit lazy val decoder: Decoder[VstorewithcontactsViewRow] = Decoder.forProduct12[VstorewithcontactsViewRow, BusinessentityId, Name, Name, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int]("businessentityid", "name", "contacttype", "title", "firstname", "middlename", "lastname", "suffix", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion")(VstorewithcontactsViewRow.apply)(BusinessentityId.decoder, Name.decoder, Name.decoder, Decoder.decodeOption(Decoder.decodeString), FirstName.decoder, Decoder.decodeOption(Name.decoder), Name.decoder, Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Phone.decoder), Decoder.decodeOption(Name.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeInt) implicit lazy val encoder: Encoder[VstorewithcontactsViewRow] = Encoder.forProduct12[VstorewithcontactsViewRow, BusinessentityId, Name, Name, Option[/* max 8 chars */ String], /* user-picked */ FirstName, Option[Name], Name, Option[/* max 10 chars */ String], Option[Phone], Option[Name], Option[/* max 50 chars */ String], Int]("businessentityid", "name", "contacttype", "title", "firstname", "middlename", "lastname", "suffix", "phonenumber", "phonenumbertype", "emailaddress", "emailpromotion")(x => (x.businessentityid, x.name, x.contacttype, x.title, x.firstname, x.middlename, x.lastname, x.suffix, x.phonenumber, x.phonenumbertype, x.emailaddress, x.emailpromotion))(BusinessentityId.encoder, Name.encoder, Name.encoder, Encoder.encodeOption(Encoder.encodeString), FirstName.encoder, Encoder.encodeOption(Name.encoder), Name.encoder, Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Phone.encoder), Encoder.encodeOption(Name.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeInt) - implicit lazy val read: Read[VstorewithcontactsViewRow] = new Read[VstorewithcontactsViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (Name.get, Nullability.Nullable), - (Name.get, Nullability.NoNulls), - (Meta.StringMeta.get, Nullability.Nullable), - (Phone.get, Nullability.Nullable), - (Name.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => VstorewithcontactsViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - contacttype = Name.get.unsafeGetNonNullable(rs, i + 2), - title = Meta.StringMeta.get.unsafeGetNullable(rs, i + 3), - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 4), - middlename = Name.get.unsafeGetNullable(rs, i + 5), - lastname = Name.get.unsafeGetNonNullable(rs, i + 6), - suffix = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - phonenumber = Phone.get.unsafeGetNullable(rs, i + 8), - phonenumbertype = Name.get.unsafeGetNullable(rs, i + 9), - emailaddress = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - emailpromotion = Meta.IntMeta.get.unsafeGetNonNullable(rs, i + 11) + implicit lazy val read: Read[VstorewithcontactsViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Phone.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.Single(Meta.IntMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VstorewithcontactsViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + name = arr(1).asInstanceOf[Name], + contacttype = arr(2).asInstanceOf[Name], + title = arr(3).asInstanceOf[Option[/* max 8 chars */ String]], + firstname = arr(4).asInstanceOf[/* user-picked */ FirstName], + middlename = arr(5).asInstanceOf[Option[Name]], + lastname = arr(6).asInstanceOf[Name], + suffix = arr(7).asInstanceOf[Option[/* max 10 chars */ String]], + phonenumber = arr(8).asInstanceOf[Option[Phone]], + phonenumbertype = arr(9).asInstanceOf[Option[Name]], + emailaddress = arr(10).asInstanceOf[Option[/* max 50 chars */ String]], + emailpromotion = arr(11).asInstanceOf[Int] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithdemographics/VstorewithdemographicsViewRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithdemographics/VstorewithdemographicsViewRow.scala index 131a229c7b..ef18db8545 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithdemographics/VstorewithdemographicsViewRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/sales/vstorewithdemographics/VstorewithdemographicsViewRow.scala @@ -10,12 +10,10 @@ package vstorewithdemographics import adventureworks.customtypes.TypoMoney import adventureworks.person.businessentity.BusinessentityId import adventureworks.public.Name -import doobie.enumerated.Nullability import doobie.util.Read import doobie.util.meta.Meta import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** View: sales.vstorewithdemographics */ case class VstorewithdemographicsViewRow( @@ -38,34 +36,33 @@ case class VstorewithdemographicsViewRow( object VstorewithdemographicsViewRow { implicit lazy val decoder: Decoder[VstorewithdemographicsViewRow] = Decoder.forProduct12[VstorewithdemographicsViewRow, BusinessentityId, Name, /* nullability unknown */ Option[TypoMoney], /* nullability unknown */ Option[TypoMoney], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 5 chars */ String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[Int]]("businessentityid", "name", "AnnualSales", "AnnualRevenue", "BankName", "BusinessType", "YearOpened", "Specialty", "SquareFeet", "Brands", "Internet", "NumberEmployees")(VstorewithdemographicsViewRow.apply)(BusinessentityId.decoder, Name.decoder, Decoder.decodeOption(TypoMoney.decoder), Decoder.decodeOption(TypoMoney.decoder), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeInt), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeString), Decoder.decodeOption(Decoder.decodeInt)) implicit lazy val encoder: Encoder[VstorewithdemographicsViewRow] = Encoder.forProduct12[VstorewithdemographicsViewRow, BusinessentityId, Name, /* nullability unknown */ Option[TypoMoney], /* nullability unknown */ Option[TypoMoney], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[/* max 5 chars */ String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 50 chars */ String], /* nullability unknown */ Option[Int], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[/* max 30 chars */ String], /* nullability unknown */ Option[Int]]("businessentityid", "name", "AnnualSales", "AnnualRevenue", "BankName", "BusinessType", "YearOpened", "Specialty", "SquareFeet", "Brands", "Internet", "NumberEmployees")(x => (x.businessentityid, x.name, x.annualSales, x.annualRevenue, x.bankName, x.businessType, x.yearOpened, x.specialty, x.squareFeet, x.brands, x.internet, x.numberEmployees))(BusinessentityId.encoder, Name.encoder, Encoder.encodeOption(TypoMoney.encoder), Encoder.encodeOption(TypoMoney.encoder), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeInt), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeString), Encoder.encodeOption(Encoder.encodeInt)) - implicit lazy val read: Read[VstorewithdemographicsViewRow] = new Read[VstorewithdemographicsViewRow]( - gets = List( - (BusinessentityId.get, Nullability.NoNulls), - (Name.get, Nullability.NoNulls), - (TypoMoney.get, Nullability.Nullable), - (TypoMoney.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.StringMeta.get, Nullability.Nullable), - (Meta.IntMeta.get, Nullability.Nullable) - ), - unsafeGet = (rs: ResultSet, i: Int) => VstorewithdemographicsViewRow( - businessentityid = BusinessentityId.get.unsafeGetNonNullable(rs, i + 0), - name = Name.get.unsafeGetNonNullable(rs, i + 1), - annualSales = TypoMoney.get.unsafeGetNullable(rs, i + 2), - annualRevenue = TypoMoney.get.unsafeGetNullable(rs, i + 3), - bankName = Meta.StringMeta.get.unsafeGetNullable(rs, i + 4), - businessType = Meta.StringMeta.get.unsafeGetNullable(rs, i + 5), - yearOpened = Meta.IntMeta.get.unsafeGetNullable(rs, i + 6), - specialty = Meta.StringMeta.get.unsafeGetNullable(rs, i + 7), - squareFeet = Meta.IntMeta.get.unsafeGetNullable(rs, i + 8), - brands = Meta.StringMeta.get.unsafeGetNullable(rs, i + 9), - internet = Meta.StringMeta.get.unsafeGetNullable(rs, i + 10), - numberEmployees = Meta.IntMeta.get.unsafeGetNullable(rs, i + 11) + implicit lazy val read: Read[VstorewithdemographicsViewRow] = new Read.CompositeOfInstances(Array( + new Read.Single(BusinessentityId.get).asInstanceOf[Read[Any]], + new Read.Single(Name.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoMoney.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(TypoMoney.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.StringMeta.get).asInstanceOf[Read[Any]], + new Read.SingleOpt(Meta.IntMeta.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + VstorewithdemographicsViewRow( + businessentityid = arr(0).asInstanceOf[BusinessentityId], + name = arr(1).asInstanceOf[Name], + annualSales = arr(2).asInstanceOf[/* nullability unknown */ Option[TypoMoney]], + annualRevenue = arr(3).asInstanceOf[/* nullability unknown */ Option[TypoMoney]], + bankName = arr(4).asInstanceOf[/* nullability unknown */ Option[/* max 50 chars */ String]], + businessType = arr(5).asInstanceOf[/* nullability unknown */ Option[/* max 5 chars */ String]], + yearOpened = arr(6).asInstanceOf[/* nullability unknown */ Option[Int]], + specialty = arr(7).asInstanceOf[/* nullability unknown */ Option[/* max 50 chars */ String]], + squareFeet = arr(8).asInstanceOf[/* nullability unknown */ Option[Int]], + brands = arr(9).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + internet = arr(10).asInstanceOf[/* nullability unknown */ Option[/* max 30 chars */ String]], + numberEmployees = arr(11).asInstanceOf[/* nullability unknown */ Option[Int]] ) - ) + } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person/UpdatePersonSqlRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person/UpdatePersonSqlRepoImpl.scala index d3a7e38bef..33db54014b 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person/UpdatePersonSqlRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person/UpdatePersonSqlRepoImpl.scala @@ -16,7 +16,7 @@ import doobie.util.meta.Meta class UpdatePersonSqlRepoImpl extends UpdatePersonSqlRepo { override def apply(suffix: String, cutoff: Option[TypoLocalDateTime]): ConnectionIO[Int] = { sql"""update person.person - set firstname = firstname || '-' || ${fromWrite(suffix)(Write.fromPut(Meta.StringMeta.put))} - where modifieddate < ${fromWrite(cutoff)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp""".update.run + set firstname = firstname || '-' || ${fromWrite(suffix)(new Write.Single(Meta.StringMeta.put))} + where modifieddate < ${fromWrite(cutoff)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp""".update.run } } diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRepoImpl.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRepoImpl.scala index e2163fb1fd..9244065b73 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRepoImpl.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRepoImpl.scala @@ -19,8 +19,8 @@ class UpdatePersonReturningSqlRepoImpl extends UpdatePersonReturningSqlRepo { val sql = sql"""with row as ( update person.person - set firstname = firstname || '-' || ${fromWrite(suffix)(Write.fromPutOption(Meta.StringMeta.put))} - where modifieddate < ${fromWrite(cutoff)(Write.fromPutOption(TypoLocalDateTime.put))}::timestamp + set firstname = firstname || '-' || ${fromWrite(suffix)(new Write.SingleOpt(Meta.StringMeta.put))} + where modifieddate < ${fromWrite(cutoff)(new Write.SingleOpt(TypoLocalDateTime.put))}::timestamp returning firstname, modifieddate ) select row."firstname", row."modifieddate"::text diff --git a/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRow.scala b/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRow.scala index 565fd5145e..7b716b3cce 100644 --- a/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRow.scala +++ b/typo-tester-doobie/generated-and-checked-in/adventureworks/update_person_returning/UpdatePersonReturningSqlRow.scala @@ -8,11 +8,9 @@ package update_person_returning import adventureworks.customtypes.TypoLocalDateTime import adventureworks.userdefined.FirstName -import doobie.enumerated.Nullability import doobie.util.Read import io.circe.Decoder import io.circe.Encoder -import java.sql.ResultSet /** SQL file: update_person_returning.sql */ case class UpdatePersonReturningSqlRow( @@ -25,14 +23,13 @@ case class UpdatePersonReturningSqlRow( object UpdatePersonReturningSqlRow { implicit lazy val decoder: Decoder[UpdatePersonReturningSqlRow] = Decoder.forProduct2[UpdatePersonReturningSqlRow, /* user-picked */ FirstName, TypoLocalDateTime]("firstname", "modifieddate")(UpdatePersonReturningSqlRow.apply)(FirstName.decoder, TypoLocalDateTime.decoder) implicit lazy val encoder: Encoder[UpdatePersonReturningSqlRow] = Encoder.forProduct2[UpdatePersonReturningSqlRow, /* user-picked */ FirstName, TypoLocalDateTime]("firstname", "modifieddate")(x => (x.firstname, x.modifieddate))(FirstName.encoder, TypoLocalDateTime.encoder) - implicit lazy val read: Read[UpdatePersonReturningSqlRow] = new Read[UpdatePersonReturningSqlRow]( - gets = List( - (/* user-picked */ FirstName.get, Nullability.NoNulls), - (TypoLocalDateTime.get, Nullability.NoNulls) - ), - unsafeGet = (rs: ResultSet, i: Int) => UpdatePersonReturningSqlRow( - firstname = /* user-picked */ FirstName.get.unsafeGetNonNullable(rs, i + 0), - modifieddate = TypoLocalDateTime.get.unsafeGetNonNullable(rs, i + 1) + implicit lazy val read: Read[UpdatePersonReturningSqlRow] = new Read.CompositeOfInstances(Array( + new Read.Single(/* user-picked */ FirstName.get).asInstanceOf[Read[Any]], + new Read.Single(TypoLocalDateTime.get).asInstanceOf[Read[Any]] + ))(using scala.reflect.ClassTag.Any).map { arr => + UpdatePersonReturningSqlRow( + firstname = arr(0).asInstanceOf[/* user-picked */ FirstName], + modifieddate = arr(1).asInstanceOf[TypoLocalDateTime] ) - ) + } } diff --git a/typo/src/scala/typo/internal/codegen/DbLibDoobie.scala b/typo/src/scala/typo/internal/codegen/DbLibDoobie.scala index 13e8e0a4b3..600f18f1d1 100644 --- a/typo/src/scala/typo/internal/codegen/DbLibDoobie.scala +++ b/typo/src/scala/typo/internal/codegen/DbLibDoobie.scala @@ -49,9 +49,9 @@ class DbLibDoobie(pkg: sc.QIdent, inlineImplicits: Boolean, default: ComputedDef if (inlineImplicits && !forbidInline) tpe match { case TypesScala.Optional(underlying) => - code"$${$fromWrite($name)($Write.fromPutOption(${lookupPutFor(underlying)}))}" + code"$${$fromWrite($name)(new $Write.SingleOpt(${lookupPutFor(underlying)}))}" case other => - code"$${$fromWrite($name)($Write.fromPut(${lookupPutFor(other)}))}" + code"$${$fromWrite($name)(new $Write.Single(${lookupPutFor(other)}))}" } else code"$${$name}" @@ -651,7 +651,7 @@ class DbLibDoobie(pkg: sc.QIdent, inlineImplicits: Boolean, default: ComputedDef name = writeName, implicitParams = Nil, tpe = Write.of(wrapperType), - body = code"$Write.fromPut($putName)" + body = code"new $Write.Single($putName)" ) ), Some( @@ -660,7 +660,7 @@ class DbLibDoobie(pkg: sc.QIdent, inlineImplicits: Boolean, default: ComputedDef name = readName, implicitParams = Nil, tpe = Read.of(wrapperType), - body = code"$Read.fromGet($getName)" + body = code"new $Read.Single($getName)" ) ), textSupport.map(_.anyValInstance(wrapperType, underlying)) @@ -782,84 +782,56 @@ class DbLibDoobie(pkg: sc.QIdent, inlineImplicits: Boolean, default: ComputedDef val text = textSupport.map(_.rowInstance(tpe, cols)) val read = { - val getCols = cols.map { c => - c.tpe match { - case TypesScala.Optional(underlying) => code"(${lookupGetFor(underlying)}, $Nullability.Nullable)" - case other => code"(${lookupGetFor(other)}, $Nullability.NoNulls)" - } - } + val colsList = cols.toList - val namedParams = cols.zipWithIndex.map { case (c, idx) => + val readInstances = colsList.map { c => c.tpe match { case TypesScala.Optional(underlying) => - code"${c.name} = ${lookupGetFor(underlying)}.unsafeGetNullable(rs, i + $idx)" + code"new $Read.SingleOpt(${lookupGetFor(underlying)}).asInstanceOf[${Read.of(TypesScala.Any)}]" case other => - code"${c.name} = ${lookupGetFor(other)}.unsafeGetNonNullable(rs, i + $idx)" + code"new $Read.Single(${lookupGetFor(other)}).asInstanceOf[${Read.of(TypesScala.Any)}]" } } - val body = - code"""|new ${Read.of(tpe)}( - | gets = ${TypesScala.List}( - | ${getCols.mkCode(",\n")} - | ), - | unsafeGet = (rs: ${TypesJava.ResultSet}, i: ${TypesScala.Int}) => $tpe( - | ${namedParams.mkCode(",\n")} - | ) - |) - |""".stripMargin + val constructorArgs = colsList.zipWithIndex + .map { case (col, idx) => + code"${col.name} = arr($idx).asInstanceOf[${col.tpe}]" + } + .mkCode(",\n ") + + val body = code"""|new $Read.CompositeOfInstances(${TypesScala.Array}( + | ${readInstances.mkCode(",\n ")} + |))(using scala.reflect.ClassTag.Any).map { arr => + | $tpe( + | $constructorArgs + | ) + |}""".stripMargin sc.Given(tparams = Nil, name = readName, implicitParams = Nil, tpe = Read.of(tpe), body = body) } val write = { val writeableColumnsWithId = cols.toList.filterNot(_.dbCol.maybeGenerated.exists(_.ALWAYS)) - val puts = { - val all = writeableColumnsWithId.map { c => - c.tpe match { - case TypesScala.Optional(underlying) => code"(${lookupPutFor(underlying)}, $Nullability.Nullable)" - case other => code"(${lookupPutFor(other)}, $Nullability.NoNulls)" - } - } - code"${TypesScala.List}(${all.mkCode(",\n")})" - } - val toList = { - val all = writeableColumnsWithId.map(c => code"x.${c.name}") - code"x => ${TypesScala.List}(${all.mkCode(", ")})" - } - val unsafeSet = { - val all = writeableColumnsWithId.zipWithIndex.map { case (c, i) => - c.tpe match { - case TypesScala.Optional(underlying) => code"${lookupPutFor(underlying)}.unsafeSetNullable(rs, i + $i, a.${c.name})" - case other => code"${lookupPutFor(other)}.unsafeSetNonNullable(rs, i + $i, a.${c.name})" - } + val writeInstances = writeableColumnsWithId.map { c => + c.tpe match { + case TypesScala.Optional(underlying) => + code"new $Write.Single(${lookupPutFor(underlying)}).toOpt" + case other => + code"new $Write.Single(${lookupPutFor(other)})" } - code"""|(rs, i, a) => { - | ${all.mkCode("\n")} - |}""".stripMargin } - val unsafeUpdate = { - val all = writeableColumnsWithId.zipWithIndex.map { case (c, i) => - c.tpe match { - case TypesScala.Optional(underlying) => code"${lookupPutFor(underlying)}.unsafeUpdateNullable(ps, i + $i, a.${c.name})" - case other => code"${lookupPutFor(other)}.unsafeUpdateNonNullable(ps, i + $i, a.${c.name})" - } - } - code"""|(ps, i, a) => { - | ${all.mkCode("\n")} - |}""".stripMargin + val deconstruct = { + val parts = writeableColumnsWithId.map(c => code"a.${c.name}") + code"a => ${TypesScala.List}(${parts.mkCode(", ")})" } val body = - code"""|new ${Write.of(tpe)}( - | puts = $puts, - | toList = $toList, - | unsafeSet = $unsafeSet, - | unsafeUpdate = $unsafeUpdate - |) - |""".stripMargin + code"""|new $Write.Composite[$tpe]( + | ${TypesScala.List}(${writeInstances.mkCode(",\n")}), + | $deconstruct + |)""".stripMargin sc.Given(tparams = Nil, name = writeName, implicitParams = Nil, tpe = Write.of(tpe), body = body) }