Skip to content

Commit

Permalink
Fixes UUID for postgres in ColReader
Browse files Browse the repository at this point in the history
  • Loading branch information
Gregg Hernandez committed Feb 23, 2017
1 parent 67df324 commit a2ecb80
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
8 changes: 2 additions & 6 deletions relate/src/main/scala/com/lucidchart/relate/ColReader.scala
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,8 @@ object ColReader {
implicit val longReader: ColReader[Long] = optReader((col, rs) => rs.getLong(col))
implicit val shortReader: ColReader[Short] = optReader((col, rs) => rs.getShort(col))
implicit val stringReader: ColReader[String] = optReader((col, rs) => rs.getString(col))
implicit val uuidReader: ColReader[UUID] = byteArrayReader.map { bytes =>
require(bytes.length == 16)
val bb = ByteBuffer.wrap(bytes)
val high = bb.getLong
val low = bb.getLong
new UUID(high, low)
implicit val uuidReader: ColReader[UUID] = ColReader[UUID] { (col, row) =>
row.uuidOption(col)
}

def enumReader[A <: Enumeration](e: A): ColReader[e.Value] = {
Expand Down
20 changes: 19 additions & 1 deletion relate/src/test/scala/ColReaderTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ object RecordA extends Mockito {
rs.getLong("long") returns 100L
rs.getShort("short") returns (5: Short)
rs.getString("str") returns "hello"
rs.getBytes("uuid") returns Array[Byte](1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
rs.getObject("uuid") returns Array[Byte](1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
rs.getInt("thing") returns 1
SqlRow(rs)
}
Expand Down Expand Up @@ -185,4 +185,22 @@ class ColReaderTest extends Specification with Mockito {
)
}
}

"uuidReader" should {
"parse a byte array" in {
val rs = mock[java.sql.ResultSet]
val row = SqlRow(rs)
rs.getObject("col") returns Array[Byte]('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')

ColReader.uuidReader.read("col", row) mustEqual Some(new UUID(3472611983179986487L, 4051376414998685030L))
}

"parse a uuid" in {
val rs = mock[java.sql.ResultSet]
val row = SqlRow(rs)
rs.getObject("col") returns new UUID(3472611983179986487L, 4051376414998685030L)

ColReader.uuidReader.read("col", row) mustEqual Some(new UUID(3472611983179986487L, 4051376414998685030L))
}
}
}

0 comments on commit a2ecb80

Please sign in to comment.