TCL with large objects on Win - Mailing list pgsql-interfaces
From | Andreas Kretzer |
---|---|
Subject | TCL with large objects on Win |
Date | |
Msg-id | 3C0B4F92.530A3DA6@kretzer-berlin.de Whole thread Raw |
Responses |
Re: TCL with large objects on Win
|
List | pgsql-interfaces |
<tt>Hi everybody,</tt><tt></tt><p><tt>I'm using postgres 7.1.2 with Tcl/Tk (8.3) interface on</tt><br /><tt>Windows (thedatabase is running on Linux, only the</tt><br /><tt>clients are on Windows).</tt><tt></tt><p><tt>When using the pg_lo_importor pg_lo_export functions,</tt><br /><tt>everything is ok under Linux (where I develop and test</tt><br /><tt>theapplication). When I started to make a test under</tt><br /><tt>MS I recognized, that all this stuff is broken!It won't</tt><br /><tt>import nor export binary data (while a fist test with some</tt><br /><tt>pure text and RTFfiles worked ok). So this all is related</tt><br /><tt>to the binary stuff (CR/LF and EOF chars I think).</tt><tt></tt><p><tt>SoI changed the scripts to use the pg_lo_create, pg_lo_open,</tt><br /><tt>pg_lo_write / pg_lo_readand pg_lo_close together with a</tt><br /><tt>filedescriptor of the Tcl/Tk switched to binary mode:</tt><br /><tt> fconfigure $fd -translation binary</tt><tt></tt><p><tt>This seems to be a solution for importing the objects (at</tt><br/><tt>least they have the correct size when I export them on the</tt><br /><tt>Linux machine), but unfourtunatelyit doesn't work on export!</tt><br /><tt>The first problem is to find the source of this trouble - it</tt><br/><tt>could be a Tcl/Tk problem!</tt><tt></tt><p><tt>When reading from the large object with</tt><br /><tt> pg_lo_read $conn $lofd buf 4096</tt><br /><tt>if returns the amount of read bytes (lets say we are at the</tt><br/><tt>beginning of a large file, so it really reads the 4k bytes).</tt><br /><tt>When I test the length of thestring, it will be a lot</tt><br /><tt>shorter (varies, most time it is about half the size I expected</tt><br /><tt>itto be). Of course this leads to a corrupt file after</tt><br /><tt>complete export.</tt><tt></tt><p><tt>I also havereduced the read size to 1 byte! In this case, the</tt><br /><tt>string length function returns often (or always ???)3!!!!</tt><tt></tt><p><tt>Because the import runs cleanly with the same data (read from</tt><br /><tt>file, written tothe large object) I am in doubt that it really</tt><br /><tt>is a Tcl/Tk concern.</tt><tt></tt><p><tt>N.B.: While tryingto find the reason for my trouble getting this</tt><br /><tt>all to work (blame on me: I frogot to put this all insidea</tt><br /><tt>transaction block) I found an implemention fault in</tt><tt></tt><p><tt> src/interfaces/libpgtcl/pgtclCmds.c</tt><tt></tt><p><tt>Thesecond letter of the mode in Pg_lo_open() ANDs its binary</tt><br/><tt>value to the one in the case-statement for the first letter.</tt><br /><tt>This should obviously be anORing function like</tt><tt></tt><p><tt> mode |= INV_READ;</tt><br /><tt>or</tt><br /><tt> mode |= INV_WRITE;</tt><tt></tt><p><tt>respectively.I already posted a mail about this to</tt><br /><tt>pgsql-bugs@postgresql.orgbut maybe some of the developers</tt><br /><tt>read this here before processing the bug-reports:-)</tt><br /><tt>Unfortunately, this has nothing to do with my problem.</tt><tt></tt><p><tt>Hope that someonecan help me. I can't compile the windows</tt><br /><tt>DLLs (got no Microsoft compiler and don't want to use the</tt><br/><tt>cygnus stuff). Is there a chance to compile the DLLs with</tt><br /><tt>GNU C?</tt><tt></tt><p><tt>Bestregards</tt><br /><tt>Andreas</tt>
pgsql-interfaces by date: