From 694f33e2979e67277d5f6b3ff2689e4ad6bad11c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Raddum=20Berg?= Date: Fri, 9 Aug 2024 13:15:51 +0200 Subject: [PATCH] tests for doobie/zio, bugfix for zio upsert, don't use streaming unsaved in test as it doesnt work for pg 12 --- .../myschema/person/PersonRepoImpl.scala | 2 +- .../myschema/person/PersonRepoImpl.scala | 2 +- .../scala/adventureworks/IdentityTest.scala | 12 +++------- .../scala/adventureworks/IdentityTest.scala | 24 +++++++++++++++++++ .../identity_test/IdentityTestRepoImpl.scala | 2 +- .../scala/adventureworks/IdentityTest.scala | 24 +++++++++++++++++++ .../typo/internal/codegen/DbLibZioJdbc.scala | 2 +- 7 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 typo-tester-doobie/src/scala/adventureworks/IdentityTest.scala create mode 100644 typo-tester-zio-jdbc/src/scala/adventureworks/IdentityTest.scala diff --git a/.bleep/generated-sources/typo-tester-zio-jdbc@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala b/.bleep/generated-sources/typo-tester-zio-jdbc@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala index a07a7d120..2d140fd91 100644 --- a/.bleep/generated-sources/typo-tester-zio-jdbc@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-zio-jdbc@jvm213/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala @@ -165,7 +165,7 @@ class PersonRepoImpl extends PersonRepo { } } override def upsert(unsaved: PersonRow): ZIO[ZConnection, Throwable, UpdateResult[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", "sector", "favorite_number") + 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 ( ${Segment.paramSegment(unsaved.id)(PersonId.setter)}::int8, ${Segment.paramSegment(unsaved.favouriteFootballClubId)(FootballClubId.setter)}, diff --git a/.bleep/generated-sources/typo-tester-zio-jdbc@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala b/.bleep/generated-sources/typo-tester-zio-jdbc@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala index a07a7d120..2d140fd91 100644 --- a/.bleep/generated-sources/typo-tester-zio-jdbc@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala +++ b/.bleep/generated-sources/typo-tester-zio-jdbc@jvm3/scripts.GenHardcodedFiles/testdb/hardcoded/myschema/person/PersonRepoImpl.scala @@ -165,7 +165,7 @@ class PersonRepoImpl extends PersonRepo { } } override def upsert(unsaved: PersonRow): ZIO[ZConnection, Throwable, UpdateResult[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", "sector", "favorite_number") + 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 ( ${Segment.paramSegment(unsaved.id)(PersonId.setter)}::int8, ${Segment.paramSegment(unsaved.favouriteFootballClubId)(FootballClubId.setter)}, diff --git a/typo-tester-anorm/src/scala/adventureworks/IdentityTest.scala b/typo-tester-anorm/src/scala/adventureworks/IdentityTest.scala index f089e220a..2cd326faf 100644 --- a/typo-tester-anorm/src/scala/adventureworks/IdentityTest.scala +++ b/typo-tester-anorm/src/scala/adventureworks/IdentityTest.scala @@ -1,7 +1,7 @@ package adventureworks import adventureworks.customtypes.* -import adventureworks.public.identity_test.{IdentityTestId, IdentityTestRepoImpl, IdentityTestRow, IdentityTestRowUnsaved} +import adventureworks.public.identity_test.* import org.scalactic.TypeCheckedTripleEquals import org.scalatest.funsuite.AnyFunSuite @@ -10,20 +10,14 @@ import scala.annotation.nowarn class IdentityTest extends AnyFunSuite with TypeCheckedTripleEquals { val repo = new IdentityTestRepoImpl() - def row(str: String) = - IdentityTestRowUnsaved(IdentityTestId(str), Defaulted.UseDefault) - test("works") { withConnection { implicit c => - val unsaved = row("a") + val unsaved = IdentityTestRowUnsaved(IdentityTestId("a"), Defaulted.UseDefault) val inserted = repo.insert(unsaved) val upserted = repo.upsert(inserted) assert(inserted === upserted): @nowarn - assert(repo.insertUnsavedStreaming(Iterator(row("b"), row("c"))) === 2L): @nowarn repo.select.orderBy(_.name.asc).toList === List( - IdentityTestRow(1, 1, IdentityTestId("a")), - IdentityTestRow(2, 2, IdentityTestId("b")), - IdentityTestRow(3, 3, IdentityTestId("c")) + IdentityTestRow(1, 1, IdentityTestId("a")) ) } } diff --git a/typo-tester-doobie/src/scala/adventureworks/IdentityTest.scala b/typo-tester-doobie/src/scala/adventureworks/IdentityTest.scala new file mode 100644 index 000000000..91e4cf45c --- /dev/null +++ b/typo-tester-doobie/src/scala/adventureworks/IdentityTest.scala @@ -0,0 +1,24 @@ +package adventureworks + +import adventureworks.customtypes.* +import adventureworks.public.identity_test.* +import doobie.free.connection.delay +import org.scalactic.TypeCheckedTripleEquals +import org.scalatest.funsuite.AnyFunSuite + +class IdentityTest extends AnyFunSuite with TypeCheckedTripleEquals { + val repo = new IdentityTestRepoImpl() + + test("works") { + withConnection { + val unsaved = IdentityTestRowUnsaved(IdentityTestId("a"), Defaulted.UseDefault) + for { + inserted <- repo.insert(unsaved) + upserted <- repo.upsert(inserted) + _ <- delay(assert(inserted === upserted)) + rows <- repo.select.orderBy(_.name.asc).toList + _ <- delay(rows === List(IdentityTestRow(1, 1, IdentityTestId("a")))) + } yield () + } + } +} diff --git a/typo-tester-zio-jdbc/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala b/typo-tester-zio-jdbc/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala index 37ed5a188..3c481dd21 100644 --- a/typo-tester-zio-jdbc/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala +++ b/typo-tester-zio-jdbc/generated-and-checked-in/adventureworks/public/identity_test/IdentityTestRepoImpl.scala @@ -93,7 +93,7 @@ class IdentityTestRepoImpl extends IdentityTestRepo { where "name" = ${Segment.paramSegment(name)(IdentityTestId.setter)}""".update.map(_ > 0) } override def upsert(unsaved: IdentityTestRow): ZIO[ZConnection, Throwable, UpdateResult[IdentityTestRow]] = { - sql"""insert into "public"."identity-test"("always_generated", "default_generated", "name") + sql"""insert into "public"."identity-test"("default_generated", "name") values ( ${Segment.paramSegment(unsaved.defaultGenerated)(Setter.intSetter)}::int4, ${Segment.paramSegment(unsaved.name)(IdentityTestId.setter)} diff --git a/typo-tester-zio-jdbc/src/scala/adventureworks/IdentityTest.scala b/typo-tester-zio-jdbc/src/scala/adventureworks/IdentityTest.scala new file mode 100644 index 000000000..06f736054 --- /dev/null +++ b/typo-tester-zio-jdbc/src/scala/adventureworks/IdentityTest.scala @@ -0,0 +1,24 @@ +package adventureworks + +import adventureworks.customtypes.* +import adventureworks.public.identity_test.* +import org.scalactic.TypeCheckedTripleEquals +import org.scalatest.funsuite.AnyFunSuite +import zio.{Chunk, ZIO} + +class IdentityTest extends AnyFunSuite with TypeCheckedTripleEquals { + val repo = new IdentityTestRepoImpl() + + test("works") { + withConnection { + val unsaved = IdentityTestRowUnsaved(IdentityTestId("a"), Defaulted.UseDefault) + for { + inserted <- repo.insert(unsaved) + upserted <- repo.upsert(inserted) + _ <- ZIO.succeed(assert(inserted === upserted.updatedKeys.head)) + rows <- repo.select.orderBy(_.name.asc).toChunk + _ <- ZIO.succeed(rows === Chunk(IdentityTestRow(1, 1, IdentityTestId("a")))) + } yield () + } + } +} diff --git a/typo/src/scala/typo/internal/codegen/DbLibZioJdbc.scala b/typo/src/scala/typo/internal/codegen/DbLibZioJdbc.scala index 2aa045dc8..bf5f1758c 100644 --- a/typo/src/scala/typo/internal/codegen/DbLibZioJdbc.scala +++ b/typo/src/scala/typo/internal/codegen/DbLibZioJdbc.scala @@ -413,7 +413,7 @@ class DbLibZioJdbc(pkg: sc.QIdent, inlineImplicits: Boolean, dslEnabled: Boolean } val sql = SQL { - code"""|insert into $relName(${dbNames(cols, isRead = false)}) + code"""|insert into $relName(${dbNames(writeableColumnsWithId, isRead = false)}) |values ( | ${values.mkCode(",\n")} |)