Skip to content

Commit

Permalink
selectByIds and deleteByIds for composite key types (#94)
Browse files Browse the repository at this point in the history
Finally found an implementation of `selectByIds(Array[CompositeId])` which made it possible to thread things through JDBC. The solution was to split the array into arrays of the components:

```scala
  override def selectByIds(compositeIds: Array[SalesterritoryhistoryId]): ZStream[ZConnection, Throwable, SalesterritoryhistoryRow] = {
    val businessentityid = compositeIds.map(_.businessentityid)
    val startdate = compositeIds.map(_.startdate)
    val territoryid = compositeIds.map(_.territoryid)
    sql"""select "businessentityid", "territoryid", "startdate"::text, "enddate"::text, "rowguid", "modifieddate"::text
          from sales.salesterritoryhistory
          where ("businessentityid", "startdate", "territoryid")
          in (select unnest(${businessentityid}), unnest(${startdate}), unnest(${territoryid}))
       """.query(using SalesterritoryhistoryRow.jdbcDecoder).selectStream()
    
  }
```

given this it was also easy to implement `deleteByIds` in the same manner:
```scala
  override def deleteByIds(compositeIds: Array[ProductdocumentId]): ConnectionIO[Int] = {
    val productid = compositeIds.map(_.productid)
    val documentnode = compositeIds.map(_.documentnode)
    sql"""delete
          from production.productdocument
          where ("productid", "documentnode")
          in (select unnest(${productid}), unnest(${documentnode}))
       """.update.run
    
  }
```
```
  • Loading branch information
oyvindberg authored Apr 25, 2024
1 parent df2a46f commit 20e4a11
Show file tree
Hide file tree
Showing 700 changed files with 3,774 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import typo.dsl.UpdateBuilder

trait FootballClubRepo {
def delete(id: FootballClubId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int
def delete: DeleteBuilder[FootballClubFields, FootballClubRow]
def insert(unsaved: FootballClubRow)(implicit c: Connection): FootballClubRow
def insertStreaming(unsaved: Iterator[FootballClubRow], batchSize: Int)(implicit c: Connection): Long
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ class FootballClubRepoImpl extends FootballClubRepo {
override def delete(id: FootballClubId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.football_club where "id" = ${ParameterValue(id, null, FootballClubId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.football_club
where "id" = ANY(${ids})
""".executeUpdate()

}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilder("myschema.football_club", FootballClubFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class FootballClubRepoMock(map: scala.collection.mutable.Map[FootballClubId, Foo
override def delete(id: FootballClubId)(implicit c: Connection): Boolean = {
map.remove(id).isDefined
}
override def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int = {
ids.map(id => map.remove(id)).count(_.isDefined)
}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilderMock(DeleteParams.empty, FootballClubFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import typo.dsl.UpdateBuilder

trait MaritalStatusRepo {
def delete(id: MaritalStatusId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[MaritalStatusId])(implicit c: Connection): Int
def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow]
def insert(unsaved: MaritalStatusRow)(implicit c: Connection): MaritalStatusRow
def insertStreaming(unsaved: Iterator[MaritalStatusRow], batchSize: Int)(implicit c: Connection): Long
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo {
override def delete(id: MaritalStatusId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.marital_status where "id" = ${ParameterValue(id, null, MaritalStatusId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[MaritalStatusId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.marital_status
where "id" = ANY(${ids})
""".executeUpdate()

}
override def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilder("myschema.marital_status", MaritalStatusFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class MaritalStatusRepoMock(map: scala.collection.mutable.Map[MaritalStatusId, M
override def delete(id: MaritalStatusId)(implicit c: Connection): Boolean = {
map.remove(id).isDefined
}
override def deleteByIds(ids: Array[MaritalStatusId])(implicit c: Connection): Int = {
ids.map(id => map.remove(id)).count(_.isDefined)
}
override def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilderMock(DeleteParams.empty, MaritalStatusFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import typo.dsl.UpdateBuilder

trait PersonRepo {
def delete(id: PersonId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[PersonId])(implicit c: Connection): Int
def delete: DeleteBuilder[PersonFields, PersonRow]
def insert(unsaved: PersonRow)(implicit c: Connection): PersonRow
def insertStreaming(unsaved: Iterator[PersonRow], batchSize: Int)(implicit c: Connection): Long
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ class PersonRepoImpl extends PersonRepo {
override def delete(id: PersonId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.person where "id" = ${ParameterValue(id, null, PersonId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[PersonId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.person
where "id" = ANY(${ids})
""".executeUpdate()

}
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilder("myschema.person", PersonFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ class PersonRepoMock(toRow: Function1[PersonRowUnsaved, PersonRow],
override def delete(id: PersonId)(implicit c: Connection): Boolean = {
map.remove(id).isDefined
}
override def deleteByIds(ids: Array[PersonId])(implicit c: Connection): Int = {
ids.map(id => map.remove(id)).count(_.isDefined)
}
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilderMock(DeleteParams.empty, PersonFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import typo.dsl.UpdateBuilder

trait FootballClubRepo {
def delete(id: FootballClubId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int
def delete: DeleteBuilder[FootballClubFields, FootballClubRow]
def insert(unsaved: FootballClubRow)(implicit c: Connection): FootballClubRow
def insertStreaming(unsaved: Iterator[FootballClubRow], batchSize: Int)(implicit c: Connection): Long
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ class FootballClubRepoImpl extends FootballClubRepo {
override def delete(id: FootballClubId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.football_club where "id" = ${ParameterValue(id, null, FootballClubId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.football_club
where "id" = ANY(${ids})
""".executeUpdate()

}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilder("myschema.football_club", FootballClubFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class FootballClubRepoMock(map: scala.collection.mutable.Map[FootballClubId, Foo
override def delete(id: FootballClubId)(implicit c: Connection): Boolean = {
map.remove(id).isDefined
}
override def deleteByIds(ids: Array[FootballClubId])(implicit c: Connection): Int = {
ids.map(id => map.remove(id)).count(_.isDefined)
}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilderMock(DeleteParams.empty, FootballClubFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import typo.dsl.UpdateBuilder

trait MaritalStatusRepo {
def delete(id: MaritalStatusId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[MaritalStatusId])(implicit c: Connection): Int
def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow]
def insert(unsaved: MaritalStatusRow)(implicit c: Connection): MaritalStatusRow
def insertStreaming(unsaved: Iterator[MaritalStatusRow], batchSize: Int)(implicit c: Connection): Long
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo {
override def delete(id: MaritalStatusId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.marital_status where "id" = ${ParameterValue(id, null, MaritalStatusId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[MaritalStatusId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.marital_status
where "id" = ANY(${ids})
""".executeUpdate()

}
override def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilder("myschema.marital_status", MaritalStatusFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class MaritalStatusRepoMock(map: scala.collection.mutable.Map[MaritalStatusId, M
override def delete(id: MaritalStatusId)(implicit c: Connection): Boolean = {
map.remove(id).isDefined
}
override def deleteByIds(ids: Array[MaritalStatusId])(implicit c: Connection): Int = {
ids.map(id => map.remove(id)).count(_.isDefined)
}
override def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilderMock(DeleteParams.empty, MaritalStatusFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import typo.dsl.UpdateBuilder

trait PersonRepo {
def delete(id: PersonId)(implicit c: Connection): Boolean
def deleteByIds(ids: Array[PersonId])(implicit c: Connection): Int
def delete: DeleteBuilder[PersonFields, PersonRow]
def insert(unsaved: PersonRow)(implicit c: Connection): PersonRow
def insertStreaming(unsaved: Iterator[PersonRow], batchSize: Int)(implicit c: Connection): Long
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ class PersonRepoImpl extends PersonRepo {
override def delete(id: PersonId)(implicit c: Connection): Boolean = {
SQL"""delete from myschema.person where "id" = ${ParameterValue(id, null, PersonId.toStatement)}""".executeUpdate() > 0
}
override def deleteByIds(ids: Array[PersonId])(implicit c: Connection): Int = {
SQL"""delete
from myschema.person
where "id" = ANY(${ids})
""".executeUpdate()

}
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilder("myschema.person", PersonFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ class PersonRepoMock(toRow: Function1[PersonRowUnsaved, PersonRow],
override def delete(id: PersonId)(implicit c: Connection): Boolean = {
map.remove(id).isDefined
}
override def deleteByIds(ids: Array[PersonId])(implicit c: Connection): Int = {
ids.map(id => map.remove(id)).count(_.isDefined)
}
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilderMock(DeleteParams.empty, PersonFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import typo.dsl.UpdateBuilder

trait FootballClubRepo {
def delete(id: FootballClubId): ConnectionIO[Boolean]
def deleteByIds(ids: Array[FootballClubId]): ConnectionIO[Int]
def delete: DeleteBuilder[FootballClubFields, FootballClubRow]
def insert(unsaved: FootballClubRow): ConnectionIO[FootballClubRow]
def insertStreaming(unsaved: Stream[ConnectionIO, FootballClubRow], batchSize: Int): ConnectionIO[Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class FootballClubRepoImpl extends FootballClubRepo {
override def delete(id: FootballClubId): ConnectionIO[Boolean] = {
sql"""delete from myschema.football_club where "id" = ${fromWrite(id)(Write.fromPut(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 delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilder("myschema.football_club", FootballClubFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ class FootballClubRepoMock(map: scala.collection.mutable.Map[FootballClubId, Foo
override def delete(id: FootballClubId): ConnectionIO[Boolean] = {
delay(map.remove(id).isDefined)
}
override def deleteByIds(ids: Array[FootballClubId]): ConnectionIO[Int] = {
delay(ids.map(id => map.remove(id)).count(_.isDefined))
}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilderMock(DeleteParams.empty, FootballClubFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import typo.dsl.UpdateBuilder

trait MaritalStatusRepo {
def delete(id: MaritalStatusId): ConnectionIO[Boolean]
def deleteByIds(ids: Array[MaritalStatusId]): ConnectionIO[Int]
def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow]
def insert(unsaved: MaritalStatusRow): ConnectionIO[MaritalStatusRow]
def insertStreaming(unsaved: Stream[ConnectionIO, MaritalStatusRow], batchSize: Int): ConnectionIO[Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo {
override def delete(id: MaritalStatusId): ConnectionIO[Boolean] = {
sql"""delete from myschema.marital_status where "id" = ${fromWrite(id)(Write.fromPut(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 delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilder("myschema.marital_status", MaritalStatusFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ class MaritalStatusRepoMock(map: scala.collection.mutable.Map[MaritalStatusId, M
override def delete(id: MaritalStatusId): ConnectionIO[Boolean] = {
delay(map.remove(id).isDefined)
}
override def deleteByIds(ids: Array[MaritalStatusId]): ConnectionIO[Int] = {
delay(ids.map(id => map.remove(id)).count(_.isDefined))
}
override def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilderMock(DeleteParams.empty, MaritalStatusFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import typo.dsl.UpdateBuilder

trait PersonRepo {
def delete(id: PersonId): ConnectionIO[Boolean]
def deleteByIds(ids: Array[PersonId]): ConnectionIO[Int]
def delete: DeleteBuilder[PersonFields, PersonRow]
def insert(unsaved: PersonRow): ConnectionIO[PersonRow]
def insertStreaming(unsaved: Stream[ConnectionIO, PersonRow], batchSize: Int): ConnectionIO[Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class PersonRepoImpl extends PersonRepo {
override def delete(id: PersonId): ConnectionIO[Boolean] = {
sql"""delete from myschema.person where "id" = ${fromWrite(id)(Write.fromPut(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 delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilder("myschema.person", PersonFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class PersonRepoMock(toRow: Function1[PersonRowUnsaved, PersonRow],
override def delete(id: PersonId): ConnectionIO[Boolean] = {
delay(map.remove(id).isDefined)
}
override def deleteByIds(ids: Array[PersonId]): ConnectionIO[Int] = {
delay(ids.map(id => map.remove(id)).count(_.isDefined))
}
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilderMock(DeleteParams.empty, PersonFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import typo.dsl.UpdateBuilder

trait FootballClubRepo {
def delete(id: FootballClubId): ConnectionIO[Boolean]
def deleteByIds(ids: Array[FootballClubId]): ConnectionIO[Int]
def delete: DeleteBuilder[FootballClubFields, FootballClubRow]
def insert(unsaved: FootballClubRow): ConnectionIO[FootballClubRow]
def insertStreaming(unsaved: Stream[ConnectionIO, FootballClubRow], batchSize: Int): ConnectionIO[Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class FootballClubRepoImpl extends FootballClubRepo {
override def delete(id: FootballClubId): ConnectionIO[Boolean] = {
sql"""delete from myschema.football_club where "id" = ${fromWrite(id)(Write.fromPut(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 delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilder("myschema.football_club", FootballClubFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ class FootballClubRepoMock(map: scala.collection.mutable.Map[FootballClubId, Foo
override def delete(id: FootballClubId): ConnectionIO[Boolean] = {
delay(map.remove(id).isDefined)
}
override def deleteByIds(ids: Array[FootballClubId]): ConnectionIO[Int] = {
delay(ids.map(id => map.remove(id)).count(_.isDefined))
}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilderMock(DeleteParams.empty, FootballClubFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import typo.dsl.UpdateBuilder

trait MaritalStatusRepo {
def delete(id: MaritalStatusId): ConnectionIO[Boolean]
def deleteByIds(ids: Array[MaritalStatusId]): ConnectionIO[Int]
def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow]
def insert(unsaved: MaritalStatusRow): ConnectionIO[MaritalStatusRow]
def insertStreaming(unsaved: Stream[ConnectionIO, MaritalStatusRow], batchSize: Int): ConnectionIO[Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class MaritalStatusRepoImpl extends MaritalStatusRepo {
override def delete(id: MaritalStatusId): ConnectionIO[Boolean] = {
sql"""delete from myschema.marital_status where "id" = ${fromWrite(id)(Write.fromPut(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 delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilder("myschema.marital_status", MaritalStatusFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ class MaritalStatusRepoMock(map: scala.collection.mutable.Map[MaritalStatusId, M
override def delete(id: MaritalStatusId): ConnectionIO[Boolean] = {
delay(map.remove(id).isDefined)
}
override def deleteByIds(ids: Array[MaritalStatusId]): ConnectionIO[Int] = {
delay(ids.map(id => map.remove(id)).count(_.isDefined))
}
override def delete: DeleteBuilder[MaritalStatusFields, MaritalStatusRow] = {
DeleteBuilderMock(DeleteParams.empty, MaritalStatusFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import typo.dsl.UpdateBuilder

trait PersonRepo {
def delete(id: PersonId): ConnectionIO[Boolean]
def deleteByIds(ids: Array[PersonId]): ConnectionIO[Int]
def delete: DeleteBuilder[PersonFields, PersonRow]
def insert(unsaved: PersonRow): ConnectionIO[PersonRow]
def insertStreaming(unsaved: Stream[ConnectionIO, PersonRow], batchSize: Int): ConnectionIO[Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class PersonRepoImpl extends PersonRepo {
override def delete(id: PersonId): ConnectionIO[Boolean] = {
sql"""delete from myschema.person where "id" = ${fromWrite(id)(Write.fromPut(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 delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilder("myschema.person", PersonFields.structure)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class PersonRepoMock(toRow: Function1[PersonRowUnsaved, PersonRow],
override def delete(id: PersonId): ConnectionIO[Boolean] = {
delay(map.remove(id).isDefined)
}
override def deleteByIds(ids: Array[PersonId]): ConnectionIO[Int] = {
delay(ids.map(id => map.remove(id)).count(_.isDefined))
}
override def delete: DeleteBuilder[PersonFields, PersonRow] = {
DeleteBuilderMock(DeleteParams.empty, PersonFields.structure.fields, map)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import zio.stream.ZStream

trait FootballClubRepo {
def delete(id: FootballClubId): ZIO[ZConnection, Throwable, Boolean]
def deleteByIds(ids: Array[FootballClubId]): ZIO[ZConnection, Throwable, Long]
def delete: DeleteBuilder[FootballClubFields, FootballClubRow]
def insert(unsaved: FootballClubRow): ZIO[ZConnection, Throwable, FootballClubRow]
def insertStreaming(unsaved: ZStream[ZConnection, Throwable, FootballClubRow], batchSize: Int): ZIO[ZConnection, Throwable, Long]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class FootballClubRepoImpl extends FootballClubRepo {
override def delete(id: FootballClubId): ZIO[ZConnection, Throwable, Boolean] = {
sql"""delete from myschema.football_club where "id" = ${Segment.paramSegment(id)(FootballClubId.setter)}""".delete.map(_ > 0)
}
override def deleteByIds(ids: Array[FootballClubId]): ZIO[ZConnection, Throwable, Long] = {
sql"""delete from myschema.football_club where "id" = ANY(${ids})""".delete
}
override def delete: DeleteBuilder[FootballClubFields, FootballClubRow] = {
DeleteBuilder("myschema.football_club", FootballClubFields.structure)
}
Expand Down
Loading

0 comments on commit 20e4a11

Please sign in to comment.