Обсуждение: Re: libpgtcl.dll for Windows
Joost Kraaijeveld wrote: > > > PS. A lot of people are asking me if there is a libpgtcl.dll for M$ > > Windows. The pgtcl package, written in pure Tcl/Tk is working but it's > > very slooooow. Is there any chance that someone could try to port the > > libpgtcl library for Windows ? > I tried but the functions > Tcl_CreateFileHandler(/usr/src/pgsql/src/interfaces/libpgtcl/pgtclId.c:679) > and Tcl_DeleteFileHandler > (/usr/src/pgsql/src/interfaces/libpgtcl/pgtclId.c:701) were removed for > non-Unix platforms as of tcl/tk8.0b1 (or thereabouts). I am no tcl expert so > I will not try to change that but I got the advise to start with > Tcl_MakeFileChannel. If you (Constatin) can make the change I will > incorporate that in the Windows NT port. Unfortunately, (for Windows PgAccess users :-) but very convenient for me and my company) my company has completely switched from Microsoft Windows to Linux so I cannot test or compile libpgtcl for Windows with your above suggestions. I don't know where that functions are used, but if they are used in functions concerning large objects, I think that we could just ignore them and prepare a tiny libpgtcl.dll just for PgAccess use, taking into account that PgAccess is not using large object functions. On the other hand, Hiroshi Inoue Inoue@tpf.co.jp informed me that he succeeded in compiling libgtcl for Windows in PostgreSQL 6.4 beta distribution and he could probably do that for current 6.4 tree. If this would be possible, we may expect that the next 6.4.1 distribution will contain also PgAccess available for Windows users. Anyhow, I will just wait for a sign from you or from any other developer who is able to compile and test libpgtcl.dll against PgAccess and send to me the libpq.dll and libpgtcl.dll in order to includ them in pgaccess distribution kit. All the best, -- Constantin Teodorescu FLEX Consulting Braila, ROMANIA
Constantin Teodorescu <teo@flex.ro> writes: > Joost Kraaijeveld wrote: >>>> PS. A lot of people are asking me if there is a libpgtcl.dll for M$ >>>> Windows. The pgtcl package, written in pure Tcl/Tk is working but it's >>>> very slooooow. Is there any chance that someone could try to port the >>>> libpgtcl library for Windows ? >> I tried but the functions >> Tcl_CreateFileHandler(/usr/src/pgsql/src/interfaces/libpgtcl/pgtclId.c:679) >> and Tcl_DeleteFileHandler >> (/usr/src/pgsql/src/interfaces/libpgtcl/pgtclId.c:701) were removed for >> non-Unix platforms as of tcl/tk8.0b1 (or thereabouts). OK, I'm to blame for that code... > I don't know where that functions are used, but if they are used in > functions concerning large objects, Large objects aren't the issue; support for async NOTIFY is. The comments at the head of pgtclId.c explain: Another headache is that Ousterhout keeps changing the Tcl I/O interfaces. libpgtcl currently claims to work with Tcl 7.5, 7.6, and 8.0, and each of 'em is different. Worse, the Tcl_File type went away in 8.0, which means there is no longer any platform-independent way of waiting for file ready. So we now have to use a Unix-specific interface. Grumble. In the current design, Pg_Notify_FileHandler is a file handler that we establish by calling Tcl_CreateFileHandler(). It gets invoked from the Tcl event loop whenever the underlying PGconn's socket is read-ready. We suck up any available data (to clear the OS-level read-ready condition) and then transfer any available PGnotify events into the Tcl event queue. Eventually these events will be dispatched to Pg_Notify_EventProc. When we do an ordinary PQexec, we must also transfer PGnotify events into Tcl's event queue, since libpq might have read them when we weren't looking. If anyone can explain to me a platform-independent way of waiting for socket-read-ready under Tcl 8.0, I'd gladly incorporate it. I suppose the other alternative is to insert a bunch of "#ifdef WIN32" code to provide a platform-specific implementation of this functionality for Windows. But I'm not sure what that would be, and I'm in no position to write or test it anyway. Volunteers? (If you don't need NOTIFY functionality, it'd probably be possible just to #ifdef out the filehandler and associated setup code... but I don't see that as a reasonable solution for general use.) regards, tom lane
Tom Lane wrote: > > (If you don't need NOTIFY functionality, it'd probably be possible > just to #ifdef out the filehandler and associated setup code... but > I don't see that as a reasonable solution for general use.) I think it's the best way of delivering a quick fix for the problem so that pgaccess could work on Windows. I didn't think that NOTIFY missing would be a disaster. Instead, we will gain a lot of Windows users who will feel the good taste of PostgreSQL :-) , and sometimes, someone will find the answer of that socket-read-ready problem. So, just #ifdef it, and let them join the band :-) -- Constantin Teodorescu FLEX Consulting Braila, ROMANIA