mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
> > > > > - PostgreSQL requires to be compiled with --enable-multibyte
> > > > > and --enable-unicode-convertion if it ought to work correctly > > > > > with Tcl/Tk >= 8.1 (client or server side). > > > > > > > > > > - PL/Tcl needs to be changed to use pg_do_encoding_conversion > > > > > if it runs on a Tcl version >= 8.1 . > > > > > > > I'll do pl/tcl part in the next version of patch. Using this approach we > > > > can eliminate overhead for databases in UNICODE. > > > > > > Any progress on this? I'd prefer to get rid of this --enable-pltcl-utf > > > option before release. > > > > Done > > > > Next version removes --enable-pltcl-utf switch and enables embedded > > utf conversion of pgsql if tcl version >=8.1 and --enable-unicode-conversion
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
* or in pg_config.h afterwards. Of course, if you edit pg_config.h, then your
|
||||
* changes will be overwritten the next time you run configure.
|
||||
*
|
||||
* $Id: pg_config.h.in,v 1.7 2001/09/22 22:54:32 petere Exp $
|
||||
* $Id: pg_config.h.in,v 1.8 2001/10/01 15:33:31 momjian Exp $
|
||||
*/
|
||||
|
||||
#ifndef PG_CONFIG_H
|
||||
@ -89,9 +89,6 @@
|
||||
/* --enable-pltcl-unknown */
|
||||
#undef ENABLE_PLTCL_UNKNOWN
|
||||
|
||||
/* --enable-pltcl-utf */
|
||||
#undef ENABLE_PLTCL_UTF
|
||||
|
||||
/* --enable-nls */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
* ENHANCEMENTS, OR MODIFICATIONS.
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.39 2001/09/06 02:56:32 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.40 2001/10/01 15:33:31 momjian Exp $
|
||||
*
|
||||
**********************************************************************/
|
||||
|
||||
@ -59,18 +59,39 @@
|
||||
#include "catalog/pg_language.h"
|
||||
#include "catalog/pg_type.h"
|
||||
|
||||
#if defined(ENABLE_PLTCL_UTF) && TCL_MAJOR_VERSION == 8 \
|
||||
#if defined(UNICODE_CONVERSION) && TCL_MAJOR_VERSION == 8 \
|
||||
&& TCL_MINOR_VERSION > 0
|
||||
# define UTF_BEGIN do { Tcl_DString _pltcl_ds_tmp
|
||||
# define UTF_END Tcl_DStringFree(&_pltcl_ds_tmp); } while (0)
|
||||
# define UTF_U2E(x) (Tcl_UtfToExternalDString(NULL,(x),-1,&_pltcl_ds_tmp))
|
||||
# define UTF_E2U(x) (Tcl_ExternalToUtfDString(NULL,(x),-1,&_pltcl_ds_tmp))
|
||||
#else /* ENABLE_PLTCL_UTF */
|
||||
|
||||
#include "mb/pg_wchar.h"
|
||||
|
||||
static pg_enconv *tcl_enconv;
|
||||
|
||||
static unsigned char *
|
||||
utf_u2e(unsigned char *src) {
|
||||
return pg_do_encoding_conversion(src,strlen(src),
|
||||
NULL,tcl_enconv->from_unicode);
|
||||
}
|
||||
|
||||
static unsigned char *
|
||||
utf_e2u(unsigned char *src) {
|
||||
return pg_do_encoding_conversion(src,strlen(src),
|
||||
tcl_enconv->to_unicode,NULL);
|
||||
}
|
||||
|
||||
# define PLTCL_UTF
|
||||
# define UTF_BEGIN do { \
|
||||
unsigned char *_pltcl_utf_src; \
|
||||
unsigned char *_pltcl_utf_dst
|
||||
# define UTF_END if (_pltcl_utf_src!=_pltcl_utf_dst) \
|
||||
pfree(_pltcl_utf_dst); } while (0)
|
||||
# define UTF_U2E(x) (_pltcl_utf_dst=utf_u2e(_pltcl_utf_src=(x)))
|
||||
# define UTF_E2U(x) (_pltcl_utf_dst=utf_e2u(_pltcl_utf_src=(x)))
|
||||
#else /* PLTCL_UTF */
|
||||
# define UTF_BEGIN
|
||||
# define UTF_END
|
||||
# define UTF_U2E(x) (x)
|
||||
# define UTF_E2U(x) (x)
|
||||
#endif /* ENABLE_PLTCL_UTF */
|
||||
#endif /* PLTCL_UTF */
|
||||
|
||||
/**********************************************************************
|
||||
* The information we cache about loaded procedures
|
||||
@ -197,6 +218,14 @@ pltcl_init_all(void)
|
||||
if (!pltcl_firstcall)
|
||||
return;
|
||||
|
||||
#ifdef PLTCL_UTF
|
||||
/************************************************************
|
||||
* Do unicode conversion initialization
|
||||
************************************************************/
|
||||
|
||||
tcl_enconv=pg_get_enconv_by_encoding(GetDatabaseEncoding());
|
||||
#endif
|
||||
|
||||
/************************************************************
|
||||
* Create the dummy hold interpreter to prevent close of
|
||||
* stdout and stderr on DeleteInterp
|
||||
|
Reference in New Issue
Block a user