-
Notifications
You must be signed in to change notification settings - Fork 38
Open
Description
Hi, I am testing finagle-postgres with CockroachDb, and noticed all negative decimal values inserted into database are strange. After some test I narrowed it down to the binaryParameter.
Here's how I reproduced it :
root@:26257/it_test_db> show create table test;
+-------+-----------------------------------------------+
| Table | CreateTable |
+-------+-----------------------------------------------+
| test | CREATE TABLE test ( |
| | |
| | a INT NOT NULL, |
| | |
| | b DECIMAL NULL, |
| | |
| | CONSTRAINT "primary" PRIMARY KEY (a ASC), |
| | |
| | FAMILY "primary" (a, b) |
| | |
| | ) |
+-------+-----------------------------------------------+
then create a client withBinaryParams(true) and tried to insert some data:
val c =Postgres
.Client()
.withCredentials("root", None)
.database("it_test_db")
.withBinaryParams(true)
.newRichClient("localhost:26257")
cala> com.twitter.util.Await.result(c.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 1, 1.1))
res0: Int = 1
scala> com.twitter.util.Await.result(c.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 2, -1.1))
res1: Int = 1
scala> com.twitter.util.Await.result(c.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 3, BigDecimal(1.1)))
res2: Int = 1
scala> com.twitter.util.Await.result(c.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 4, BigDecimal(-1.1)))
res3: Int = 1
scala> com.twitter.util.Await.result(c.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 5, BigDecimal(1)))
res4: Int = 1
scala> com.twitter.util.Await.result(c.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 6, BigDecimal(-1)))
res5: Int = 1
but in the database it became :
root@:26257/it_test_db> select * from test;
+---+------------------------+
| a | b |
+---+------------------------+
| 1 | 1.1 |
| 2 | -1.1 |
| 3 | 1.1 |
| 4 | -1844674407370955161.5 |
| 5 | 100000 |
| 6 | -0 |
+---+------------------------+
however if client is created without withBinaryParams(true)
scala> val c2 =Postgres.Client().withCredentials("root", None).database("it_test_db").newRichClient("localhost:26257")
c2: com.twitter.finagle.postgres.PostgresClientImpl = com.twitter.finagle.postgres.PostgresClientImpl@45682e3e
scala> com.twitter.util.Await.result(c2.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 7, BigDecimal(1.1)))
res6: Int = 1
scala> com.twitter.util.Await.result(c2.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 8, BigDecimal(-1.1)))
res7: Int = 1
scala> com.twitter.util.Await.result(c2.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 9, BigDecimal(1)))
res8: Int = 1
scala> com.twitter.util.Await.result(c2.prepareAndExecute("INSERT INTO test VALUES ($1,$2)", 10, BigDecimal(-1)))
res9: Int = 1
in the database it seems ok:
root@:26257/it_test_db> select * from test;
+----+------------------------+
| a | b |
+----+------------------------+
| 1 | 1.1 |
| 2 | -1.1 |
| 3 | 1.1 |
| 4 | -1844674407370955161.5 |
| 5 | 100000 |
| 6 | -0 |
| 7 | 1.1 |
| 8 | -1.1 |
| 9 | 1 |
| 10 | -1 |
+----+------------------------+
(10 rows)
Metadata
Metadata
Assignees
Labels
No labels