Attached is a patch for the 8.3devel 64-bit money type. Bug reported here: http://archives.postgresql.org/pgsql-bugs/2007-08/msg00137.php.

Run the test program included in the bug report to see the issue. Then apply patch and run the test again.


Andrew Chernow



Index: src/backend/utils/adt/cash.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/cash.c,v
retrieving revision 1.71
diff -c -C6 -r1.71 cash.c
*** src/backend/utils/adt/cash.c        12 Jul 2007 23:51:10 -0000      1.71
--- src/backend/utils/adt/cash.c        20 Aug 2007 14:10:44 -0000
***************
*** 369,394 ****
   */
  Datum
  cash_recv(PG_FUNCTION_ARGS)
  {
        StringInfo      buf = (StringInfo) PG_GETARG_POINTER(0);

!       PG_RETURN_CASH((Cash) pq_getmsgint(buf, sizeof(Cash)));
  }

  /*
* cash_send - converts cash to binary format
   */
  Datum
  cash_send(PG_FUNCTION_ARGS)
  {
        Cash            arg1 = PG_GETARG_CASH(0);
        StringInfoData buf;

        pq_begintypsend(&buf);
!       pq_sendint(&buf, arg1, sizeof(Cash));
        PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
  }

  /*
   * Comparison functions
   */
--- 369,394 ----
   */
  Datum
  cash_recv(PG_FUNCTION_ARGS)
  {
        StringInfo      buf = (StringInfo) PG_GETARG_POINTER(0);

!       PG_RETURN_CASH((Cash) pq_getmsgint64(buf));
  }

  /*
* cash_send - converts cash to binary format
   */
  Datum
  cash_send(PG_FUNCTION_ARGS)
  {
        Cash            arg1 = PG_GETARG_CASH(0);
        StringInfoData buf;

        pq_begintypsend(&buf);
!       pq_sendint64(&buf, arg1);
        PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
  }

  /*
   * Comparison functions
   */

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to