Subject: [Pljava-dev] Possible bug, when updating BigDecimal from trigger/function

From: pmichalek at click.cz (Petr Michálek)
Date: Sun, 08 Jun 2008 22:06:56 +0200

Hello,

When PL/Java trigger/function is updating BigDecimal, scale of new 
BigDecimal value is not checked. Because of this, is possible store in 
database numeric value with greater precision than is in column definition.

In result of this behavior sql dump can contains values with greater 
precision and subsequent import fails on affected tables.

Please can anybody confirm this behavior and is possible to fix this.

Best regards.

Petr Michalek

---

From: books at ejurka.com (Kris Jurka)
Date: Mon, 09 Jun 2008 20:47:51 -0700

> Please can anybody confirm this behavior and is possible to fix this.

I haven't tested it myself, but it certainly looks like something that 
would happen when updating TriggerData.  Under the hood we're using 
SPI_modifytuple which is apparently too low level for pg to do the 
precision/scale checks and it expects us to perform them before calling 
this method.  For pljava, the conversion to backend type is going 
through a generic type conversion routine which doesn't have access to 
typmod information.  It seems like we'd have to modify the whole 
coerceObject interface to support passing around typmod.  I'm not sure 
how hard that would be to do.

Kris Jurka