Skip to content
This repository was archived by the owner on Dec 3, 2019. It is now read-only.

Commit 90e4194

Browse files
committed
Fixing issue with NUMERIC columns and mixing integer and floating point numbers - fixes #169
1 parent 5cf8b66 commit 90e4194

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

postgresql-async/src/main/scala/com/github/mauricio/async/db/postgresql/column/PostgreSQLColumnEncoderRegistry.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,23 @@ object PostgreSQLColumnEncoderRegistry {
3131
class PostgreSQLColumnEncoderRegistry extends ColumnEncoderRegistry {
3232

3333
private val classesSequence_ : List[(Class[_], (ColumnEncoder, Int))] = List(
34-
classOf[Int] -> (IntegerEncoderDecoder -> ColumnTypes.Integer),
35-
classOf[java.lang.Integer] -> (IntegerEncoderDecoder -> ColumnTypes.Integer),
34+
classOf[Int] -> (IntegerEncoderDecoder -> ColumnTypes.Numeric),
35+
classOf[java.lang.Integer] -> (IntegerEncoderDecoder -> ColumnTypes.Numeric),
3636

37-
classOf[java.lang.Short] -> (ShortEncoderDecoder -> ColumnTypes.Smallint),
38-
classOf[Short] -> (ShortEncoderDecoder -> ColumnTypes.Smallint),
37+
classOf[java.lang.Short] -> (ShortEncoderDecoder -> ColumnTypes.Numeric),
38+
classOf[Short] -> (ShortEncoderDecoder -> ColumnTypes.Numeric),
3939

40-
classOf[Long] -> (LongEncoderDecoder -> ColumnTypes.Bigserial),
41-
classOf[java.lang.Long] -> (LongEncoderDecoder -> ColumnTypes.Bigserial),
40+
classOf[Long] -> (LongEncoderDecoder -> ColumnTypes.Numeric),
41+
classOf[java.lang.Long] -> (LongEncoderDecoder -> ColumnTypes.Numeric),
4242

4343
classOf[String] -> (StringEncoderDecoder -> ColumnTypes.Varchar),
4444
classOf[java.lang.String] -> (StringEncoderDecoder -> ColumnTypes.Varchar),
4545

46-
classOf[Float] -> (FloatEncoderDecoder -> ColumnTypes.Real),
47-
classOf[java.lang.Float] -> (FloatEncoderDecoder -> ColumnTypes.Real),
46+
classOf[Float] -> (FloatEncoderDecoder -> ColumnTypes.Numeric),
47+
classOf[java.lang.Float] -> (FloatEncoderDecoder -> ColumnTypes.Numeric),
4848

49-
classOf[Double] -> (DoubleEncoderDecoder -> ColumnTypes.Double),
50-
classOf[java.lang.Double] -> (DoubleEncoderDecoder -> ColumnTypes.Double),
49+
classOf[Double] -> (DoubleEncoderDecoder -> ColumnTypes.Numeric),
50+
classOf[java.lang.Double] -> (DoubleEncoderDecoder -> ColumnTypes.Numeric),
5151

5252
classOf[BigDecimal] -> (BigDecimalEncoderDecoder -> ColumnTypes.Numeric),
5353
classOf[java.math.BigDecimal] -> (BigDecimalEncoderDecoder -> ColumnTypes.Numeric),

postgresql-async/src/test/scala/com/github/mauricio/async/db/postgresql/NumericSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class NumericSpec extends Specification with DatabaseTestHelper {
2222

2323
}
2424

25-
"support first update of num column with integer (fails currently)" in {
25+
"support first update of num column with integer" in {
2626

2727
withHandler {
2828
handler =>

postgresql-async/src/test/scala/com/github/mauricio/async/db/postgresql/TimeAndDateSpec.scala

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,14 +188,31 @@ class TimeAndDateSpec extends Specification with DatabaseTestHelper {
188188

189189
withTimeHandler {
190190
conn =>
191-
val date1 = new DateTime(2190319)
191+
val date = new DateTime(2190319)
192192

193-
await(conn.sendPreparedStatement("CREATE TEMP TABLE TEST(T TIMESTAMP)"))
194-
await(conn.sendPreparedStatement("INSERT INTO TEST(T) VALUES(?)", Seq(date1)))
195-
val result = await(conn.sendPreparedStatement("SELECT T FROM TEST"))
193+
executePreparedStatement(conn, "CREATE TEMP TABLE TEST(T TIMESTAMP)")
194+
executePreparedStatement(conn, "INSERT INTO TEST(T) VALUES(?)", Array(date))
195+
val result = executePreparedStatement(conn, "SELECT T FROM TEST")
196196
val date2 = result.rows.get.head(0)
197+
date2 === date.toDateTime(DateTimeZone.UTC).toLocalDateTime
198+
}
199+
200+
}
201+
202+
"supports sending a local date and later a date time object for the same field" in {
203+
204+
withTimeHandler {
205+
conn =>
206+
val date = new LocalDate(2016, 3, 5)
207+
208+
executePreparedStatement(conn, "CREATE TEMP TABLE TEST(T TIMESTAMP)")
209+
executePreparedStatement(conn, "INSERT INTO TEST(T) VALUES(?)", Array(date))
210+
val result = executePreparedStatement(conn, "SELECT T FROM TEST WHERE T = ?", Array(date))
211+
result.rows.get.size === 1
197212

198-
date2 === date1.toDateTime(DateTimeZone.UTC).toLocalDateTime
213+
val dateTime = new LocalDateTime(2016, 3, 5, 0, 0, 0, 0)
214+
val dateTimeResult = executePreparedStatement(conn, "SELECT T FROM TEST WHERE T = ?", Array(dateTime))
215+
dateTimeResult.rows.get.size === 1
199216
}
200217

201218
}

0 commit comments

Comments
 (0)