From: <Sha...@in...> - 2003-01-27 04:02:51
|
Hi all, This exposes a deep problem with text/image columns: a) They must be treated specially, not like other columns -- they have a special calling sequence, a special set of functions for dealing with them; b) This special treatment cannot be applied to columns in the middle of the query -- all text/image columns must come after all "normal" columns. Now, my knowledge is based on Sybase's client library, ct. FreeTds may be different. However, Dave: If the Sybase module does not pay special attention to text/image columns, it is a bug with the direct Sybase implementation (sorry, no time to check for myself right now). Valerie: Whether or not Sybase module has a bug, you may need to change the query so that the text fields are all in the end. You don't need to redefine the table, only query with a specified list of fields ("select a,b,c from table"), so that the order of fields is as required. Hope this helps, Shai. -----Original Message----- From: Valerie R. Coffman [mailto:vr...@co...]=20 Sent: Thursday, January 23, 2003 22:20 To: Dave Cole Cc: pyt...@ob... Subject: Re: [python-sybase] MemoryError using Sybase, FreeTDS, MS SQL Hi, Dave, thanks for your response. We have a big interest in this module=20 because without it, we have to use a combination of Perl and Python and=20 it's pretty ugly. I've dowloaded the version 0.36pre3 and turned on the debugging. I'm=20 still seeing the same error and it appears that the problem is with=20 retrieving a text type column. Here is part of the output. The full=20 output is attatched in the file "output". ct_describe(cmd1, 9, &fmt) -> CS_SUCCEED, datafmt8=3D[name:"lengthScale" = type:CS_FLOAT_TYPE status:CS_FALSE format:CS_FMT_UNUSED count:1 maxlength:8] ct_bind(cmd1, 9, &datafmt8->fmt=3D[name:"lengthScale" type:CS_FLOAT_TYPE=20 status:CS_FALSE format:CS_FMT_UNUSED count:32 maxlength:8],=20 databuf8->buff, databuf8->copied, databuf8->indicator) -> CS_SUCCEED, databuf8 ct_describe(cmd1, 10, &fmt) -> CS_SUCCEED, datafmt9=3D[name:"material"=20 type:CS_TEXT_TYPE status:CS_CANBENULL format:CS_FMT_UNUSED count:1=20 maxlength:2147483647] Traceback (most recent call last): File "DBTest.py", line 10, in ? db.execute("SELECT * FROM FEMMD_Parameters") File "/usr/local/pub/dm/lib/python2.1/site-packages/Sybase.py", line=20 727, in execute result_list =3D self._fetch_results() File "/usr/local/pub/dm/lib/python2.1/site-packages/Sybase.py", line=20 745, in _fetch_results bufs =3D _row_bind(cmd, self.arraysize) File "/usr/local/pub/dm/lib/python2.1/site-packages/Sybase.py", line=20 159, in _row_bind status, buf =3D cmd.ct_bind(i + 1, fmt) MemoryError ct_cmd_drop(cmd1) -> CS_SUCCEED ct_con_props(conn0, CS_GET, CS_CON_STATUS, &value, CS_UNUSED, NULL) ->=20 CS_SUCCEED, CS_CONSTAT_CONNECTED ct_close(conn0, CS_OPT_STATS_IO) -> CS_SUCCEED ct_con_drop(conn0) -> CS_SUCCEED There should be two more columns after the "material" column, so it=20 seems that it does not finish retrieving one row, but stops at the first text type row. Knowing this, I've tried a similar query on a table that does not have a text column and I get a different error. Here is part of the output,=20 the full output is attached in "output2". ct_describe(cmd1, 8, &fmt) -> CS_SUCCEED, datafmt7=3D[name:"energy"=20 type:CS_FLOAT_TYPE status:CS_FALSE format:CS_FMT_UNUSED count:1=20 maxlength:8 scale:0 precision:0] ct_bind(cmd1, 8, &datafmt7->fmt=3D[name:"energy" type:CS_FLOAT_TYPE=20 status:CS_FALSE format:CS_FMT_UNUSED count:32 maxlength:8 scale:0=20 precision:0], databuf7->buff, databuf7->copied, databuf7->indicator) ->=20 CS_SUCCEED, databuf7 ct_fetch(cmd1, CS_UNUSED, CS_UNUSED, CS_UNUSED, &rows_read) ->=20 CS_ROW_FAIL, 0 Traceback (most recent call last): File "DBTest.py", line 10, in ? db.execute("SELECT * FROM FEMMD_AtomicInfo") File=20 "/afs/.msc.cornell.edu/i386_linux22/usr/local/pub/dm/lib/python2.1/site- packages/Sybase.py",=20 line 732, in execute result_list =3D self._fetch_results() File=20 "/afs/.msc.cornell.edu/i386_linux22/usr/local/pub/dm/lib/python2.1/site- packages/Sybase.py",=20 line 751, in _fetch_results logical_result =3D self._fetch_logical_result(bufs) File=20 "/afs/.msc.cornell.edu/i386_linux22/usr/local/pub/dm/lib/python2.1/site- packages/Sybase.py",=20 line 760, in _fetch_logical_result rows =3D _fetch_rows(cmd, bufs) File=20 "/afs/.msc.cornell.edu/i386_linux22/usr/local/pub/dm/lib/python2.1/site- packages/Sybase.py",=20 line 196, in _fetch_rows raise Error('ct_fetch') Sybase.Error: ct_fetch ct_cmd_drop(cmd1) -> CS_SUCCEED ct_con_props(conn0, CS_GET, CS_CON_STATUS, &value, CS_UNUSED, NULL) ->=20 CS_SUCCEED, CS_CONSTAT_CONNECTED ct_close(conn0, CS_OPT_STATS_IO) -> CS_SUCCEED ct_con_drop(conn0) -> CS_SUCCEED Thanks, Valerie |