diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index 50547f3ce9e3f439a3f6e48e1941ea42b256b371..5f6400cfe89203d0973a39aa6794f2ead707a107 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -925,35 +925,23 @@ class sql_result { int magnitude = cr->read_sint(2); int sign = cr->read_int16(); cr->consume(2); - switch (nwords) { - default: - for (value = cr->read_int16(); - --nwords; - magnitude--) - value = value * NUMERIC_MAGSTEP + cr->read_int16(); - if (sign) - value = -value; - if (magnitude > 0) - do - value *= NUMERIC_MAGSTEP; - while (--magnitude); - else if (magnitude < 0) { - for (sign = NUMERIC_MAGSTEP; - ++magnitude; - sign *= NUMERIC_MAGSTEP); - value = Gmp.mpq(value, sign); - } - break; - case 1: - for (value = cr->read_int16(); - magnitude--; - value *= NUMERIC_MAGSTEP); - if (sign) - value = -value; - break; - case 0:; - value = 0; - } + if (nwords) { + for (value = cr->read_int16(); --nwords; magnitude--) + value = value * NUMERIC_MAGSTEP + cr->read_int16(); + if (sign) + value = -value; + if (magnitude > 0) + do + value *= NUMERIC_MAGSTEP; + while (--magnitude); + else if (magnitude < 0) { + for (sign = NUMERIC_MAGSTEP; + ++magnitude; + sign *= NUMERIC_MAGSTEP); + value = Gmp.mpq(value, sign); + } + } else + value = 0; if (alltext) value = (string)value; }