Skip to content

Commit

Permalink
Make null param error more informative (#809)
Browse files Browse the repository at this point in the history
  • Loading branch information
ulfryk committed Nov 20, 2024
1 parent b8ce779 commit 55193d6
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
4 changes: 2 additions & 2 deletions modules/core/src/main/scala/doobie/util/put.scala
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ sealed abstract class Put[A](
) {}

def unsafeSetNonNullable(ps: PreparedStatement, n: Int, a: A): Unit =
if (a == null) sys.error("oops, null")
if (a == null) sys.error("Expected non-nullable param. Use Option to describe nullable values.")
else put.fi.apply(ps, n, (put.k(a)))

def unsafeSetNullable(ps: PreparedStatement, n: Int, oa: Option[A]): Unit =
Expand All @@ -66,7 +66,7 @@ sealed abstract class Put[A](
}

def unsafeUpdateNonNullable(rs: ResultSet, n: Int, a: A): Unit =
if (a == null) sys.error("oops, null")
if (a == null) sys.error("Expected non-nullable param. Use Option to describe nullable values.")
else update.fi.apply(rs, n, (update.k(a)))

def unsafeUpdateNullable(rs: ResultSet, n: Int, oa: Option[A]): Unit =
Expand Down
23 changes: 23 additions & 0 deletions modules/core/src/test/scala/doobie/util/WriteSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,27 @@ class WriteSuite extends munit.FunSuite with WriteSuitePlatform {
.unsafeRunSync()
}

test("Write should yield correct error when Some(null) inserted") {
interceptMessage[RuntimeException]("Expected non-nullable param. Use Option to describe nullable values.") {
testNullPut(("a", Some(null)))
}
}

test("Write should yield correct error when null inserted into non-nullable field") {
interceptMessage[RuntimeException]("Expected non-nullable param. Use Option to describe nullable values.") {
testNullPut((null, Some("b")))
}
}

private def testNullPut(input: (String, Option[String])): Int = {
import doobie.implicits.*

(for {
_ <- sql"create temp table t0 (a text, b text null)".update.run
n <- Update[(String, Option[String])]("insert into t0 (a, b) values (?, ?)").run(input)
} yield n)
.transact(xa)
.unsafeRunSync()
}

}

0 comments on commit 55193d6

Please sign in to comment.