[Zope] Sybase: patch for handling DECIMAL data type (Invalid buffer element type)

Hung Jung Lu hungjunglu@hotmail.com
Fri, 14 Jan 2000 14:08:16 PST


Hi,

I will recap here the problem with SybaseDAv2 regarding
the handling of DECIMAL data type, this is the source of
the "Invalid buffer element type" error that I found.

Right now the database adapter is crashing for DECIMAL
data types that are integers with precisions higher
than 9 digits. (For DECIMAL data types that are integers
with precisions less or equal than 9 digits, the adapter
converts them into INT data type, and there will be no problem.)

To fix this glitch, I had to modify two files in the
SybaseDAv2 distribution. (The current release is
v2.0.0b1, http://www.zope.org/Products/DA/SybaseDA/)

(1) Follow the instructions till you have done the command

    make -f Makefile.pre.in boot

(2) Edit the file

    SybaseDAv2/src/sy_occbf.c

    near the place where it says "Invalid buffer element type",
    insert another case statement for the CS_DECIMAL_TYPE. The
    result should look like:

    case CS_DATETIME4_TYPE: element_size=sizeof(CS_DATETIME4); break;
    case CS_NUMERIC_TYPE: element_size=sizeof(CS_NUMERIC); break;
    case CS_DECIMAL_TYPE: element_size=sizeof(CS_NUMERIC); break;
    case CS_BIT_TYPE: element_size=sizeof(CS_BIT); break;
    case STRING_CASES: break;
    default:
      return SybaseError("Invalid buffer element type");
    }

(3) Proceed with the instructions and issue the

    make

    command, and move the sy_occ.so library a level up to your
    SybaseDAv2 directory. Follow all other instructions of the
    README.txt file provided with the distribution.

(4) You will also need to edit the

    SybaseDAv2/db.py

    file. Search for the lines that say:

        if string_type(t):
            v=rstrip(buf[:cop[0]])
        elif t is sy_occ.CS_NUMERIC_TYPE:

    and change the elif line to:

        elif t in (sy_occ.CS_NUMERIC_TYPE,
                   sy_occ.CS_DECIMAL_TYPE):

(5) Restart your Zope. And hopefully this solves your problem with
    the DECIMAL database. At least this is how fixed my problem. :)

I guess SybaseDAv2 needs more people's feedback. Right now it
seems to have a some problems.

regards,

Hung Jung

______________________________________________________
Get Your Private, Free Email at http://www.hotmail.com