diff options
author | Bruce Momjian <bruce@momjian.us> | 2001-10-01 15:33:31 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2001-10-01 15:33:31 +0000 |
commit | 034895125d648b867ffc7240ffd6f0738d20803c (patch) | |
tree | 55873ea2b37ae03ed61a323004ec34e3a9f2fe8b /src | |
parent | 9f09e8362b701730f5c3ab2c387bf603f8ee7cba (diff) | |
download | postgresql-034895125d648b867ffc7240ffd6f0738d20803c.tar.gz postgresql-034895125d648b867ffc7240ffd6f0738d20803c.zip |
> > > > > - 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
Diffstat (limited to 'src')
-rw-r--r-- | src/include/pg_config.h.in | 5 | ||||
-rw-r--r-- | src/pl/tcl/pltcl.c | 45 |
2 files changed, 38 insertions, 12 deletions
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index c8bee9bc5d2..8c3f4576431 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.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 diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index 8e686eda4f1..5800320615c 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -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 |