Fix PL/Tcl's encoding conversion logic.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 2 Mar 2016 18:30:14 +0000 (13:30 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 2 Mar 2016 18:30:14 +0000 (13:30 -0500)
commitc8c7c93de8e116d802eddfd8821f8f77588aee00
tree86b163130a96d53d2ec103ef0c9940d05a81ccef
parente2609323eb58ee273ac03a66343447e6a56154d5
Fix PL/Tcl's encoding conversion logic.

PL/Tcl appears to contain logic to convert strings between the database
encoding and UTF8, which is the only encoding modern Tcl will deal with.
However, that code has been disabled since commit 034895125d648b86, which
made it "#if defined(UNICODE_CONVERSION)" and neglected to provide any way
for that symbol to become defined.  That might have been all right back
in 2001, but these days we take a dim view of allowing strings with
incorrect encoding into the database.

Remove the conditional compilation, fix warnings about signed/unsigned char
conversions, clean up assorted places that didn't bother with conversions.
(Notably, there were lots of assumptions that database table and field
names didn't need conversion...)

Add a regression test based on plpython_unicode.  It's not terribly
thorough, but better than no test at all.
src/pl/tcl/Makefile
src/pl/tcl/expected/pltcl_unicode.out [new file with mode: 0644]
src/pl/tcl/pltcl.c
src/pl/tcl/sql/pltcl_unicode.sql [new file with mode: 0644]