
harness.sql.query.IntQueryResult.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of harness-sql_3 Show documentation
Show all versions of harness-sql_3 Show documentation
Miscellaneous libraries/utilities for Scala.
package harness.sql.query
import harness.serviceTracer.*
import harness.sql.Database
import harness.sql.error.QueryError
import harness.zio.*
import zio.*
final class IntQueryResult private[query] (queryName: String, fragment: Fragment, effect: ZIO[Database, QueryError, Int]) {
def execute: ZIO[Database, QueryError, Int] =
effect @@
Telemetry.telemetrize("Executed SQL query", Logger.LogLevel.Trace, "query-name" -> queryName) @@
ServiceTracer.trace(TraceClosure("Database", "Live", "write"), "query-name" -> queryName)
inline def unit: ZIO[Database, QueryError, Unit] = execute.unit
inline private def withSizeCheck(
inline check: Int => Boolean,
inline expectedStr: => String,
): ZIO[Database, QueryError, Unit] =
execute.flatMap { actual =>
ZIO.fail(QueryError(queryName, fragment.sql, QueryError.Cause.InvalidResultSetSize(expectedStr, actual))).unlessDiscard(check(actual))
}
def expectSize(expected: Int): ZIO[Database, QueryError, Unit] =
withSizeCheck(_ == expected, expected.toString)
def single: ZIO[Database, QueryError, Unit] = expectSize(1)
def option: ZIO[Database, QueryError, Unit] = withSizeCheck(a => a == 0 || a == 1, "0..1")
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy